Vous êtes sur la page 1sur 70

Algoritmos

Algoritmos


ndice












Ing. Mendoza Corpus, Carlos
Docente del Curso
Algoritmos
Qu es un Algoritmo?

Normalmente los algoritmos se asocian con estructuras de datos. Un algoritmo es una secuencia de
instrucciones que realizan una tarea en un periodo de tiempo finito. El algoritmo recibe cero o ms entradas,
produce al menos una salida, consiste en instrucciones claras y poco ambiguas, termina despus de un
nmero finito de pasos, y es lo suficientemente bsico que una persona puede llevar a cabo el algoritmo
utilizando lpiz y papel.
Por el contrario, un programa no es necesariamente finito: el programa, como un servidor Web, podra no
terminar nunca si no hay intervencin externa. Algunos ejemplos de algoritmos asociados con estructuras de
datos son: bsqueda-lineal, ordenacin-de-burbuja, bsqueda-binaria, concatenacin-de-listas-enlazadas, etc.
Cmo se Representa un Algoritmo?
La representacin ms obvia: cdigo fuente Java. Sin embargo escribir cdigo fuente antes de entender
completamente un algoritmo normalmente acaba con errores difciles de encontrar.
Una tcnica para evitar estos errores es utilizar:
o Pseudocdigo
Una alternativa al flowchart es el pseudocdigo: una representacin en modo texto de un
algoritmo que se aproxima al cdigo fuente final. El pseudocdigo es til para una escritura
rpida de representaciones de algoritmos. Como la sintaxis no es lo ms importante, no hay
reglas definidas para escribir pseudocdigo. Considere el siguiente ejemplo:
Inicio
Declarae a,b,sum=0
Leer a, b
Sum=a+b
Imprimir sum
Fin
o Flowchart (diagrama de flujo).
Un flowchart es una representacin visual del flujo de control de un algoritmo. Esta
representacin ilustra las sentencias que se tienen que ejecutar, las decisiones que hay que
tomar, el flujo lgico (para iteraciones y otros propsitos), y terminaciones que indican los
puntos de entrada y salida.

Inicio/fin
Entrada/Salida
Proceso
Dedicin
Conector (en la misma hoja)
Lnea de Flujo
Impresora
Conector (paginas diferentes)
Pantalla
Ing. Mendoza Corpus, Carlos


Algoritmos

o DN-S
Diagrama Nassi-Schneiderman
El diagrama N-S, tambin conocido como diagrama de Cahpin, es como un diagrama de flujo
en el que se omiten las flechas de unin y las cajas son contiguas. Las acciones sucesivas se
escriben en cajas y como en los diagramas de flujo, se pueden escribir diferentes acciones en
una caja.
Ejemplo:
DN-S (top-down)

DN-S (Estructurado)
Usando Condicionales (Sentencia Si)

Constantes, Variables y Expresiones
o Constantes
Una constante es un dato cuyo valor no puede cambiar durante la ejecucin del programa.
Recibe un valor en el momento de la compilacin y este permanece inalterado durante todo el
programa.
Como ya se ha comentado en el tema sobre las partes de un programa, las constantes se
declaran en una seccin que comienza con la palabra reservada const. Despus de declarar una
constante ya puedes usarla en el cuerpo principal del programa. Tienen varios usos: ser
miembro en una expresin, en una comparacin, asignar su valor a una variable, etc.
En el siguiente ejemplo se contemplan varios casos:
const
Min = 0;
Max = 100;
Sep = 10;
var
i : integer;
Ing. Mendoza Corpus, Carlos


Algoritmos

En este ejemplo se declaran tres constantes (Min, Max y Sep). En la primera lnea del cuerpo
del programa se asigna una constante a una variable. En la siguiente, se usa una constante en
una comparacin. Y en la cuarta, la constante Sep interviene en una expresin que se asigna a
una variable.
Se puede hacer una divisin de las constantes en tres clases:
constantes literales (sin nombre)
constantes declaradas (con nombre)
constantes expresin
Constantes literales
Son valores de cualquier tipo que se utilizan directamente, no se declaran ya que no tienen
nombre. En el siguiente ejemplo tienes un par de constantes literales (el 3, el 4, y el 3.1416):
VolumenEsfera := 4/3 * 3.1416 * Radio * Radio * Radio;

Constantes declaradas
Tambin llamadas constantes con nombre, son las que se declaran en la seccin const
asignndoles un valor directamente. Por ejemplo:
const
Pi = 3.141592; (* valor real *)
Min = 0; (* entero *)
Max = 99; (* entero *)
Saludo = 'Hola'; (* cadena caract. *)
Constantes expresin
Tambin se declaran en la seccin const, pero a estas no se les asigna un valor directamente,
sino que se les asigna una expresin. Esta expresin se evala en tiempo de compilacin y el
resultado se le asigna a la constante.
Ejemplo: const
N = (Max - Min) div Intervalo;
Min = 0;
Max = 100;
Intervalo = 10;
Centro = (Max - Min) div 2;
o Variables
Una variable es un nombre asociado a un elemento de datos que est situado en posiciones
contiguas de la memoria principal, y su valor puede cambiar durante la ejecucin de un
programa.
Clasificacin de las Variables
Ing. Mendoza Corpus, Carlos


Algoritmos
Por su contenido
Variables Numricas: Son aquellas en las cuales se almacenan valores numricos,
positivos o negativos, es decir almacenan nmeros del 0 al 9, signos (+ y -) y el punto
decimal.
Ejemplo:
igv = 0.15 pi = 3.1416 costo = 2500
Variables Lgicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos
representan el resultado de una comparacin entre otros datos.
Variables Alfanumricas: Esta formada por caracteres alfanumricos (letras, nmeros y
caracteres especiales).
Ejemplo:
letra = a apellido = Lpez direccin = Av. Libertad #190
Por su uso
Variables de Trabajo: Variables que reciben el resultado de una operacin matemtica
completa y que se usan normalmente dentro de un programa.
Ejemplo:
Suma = a + b /c
Contadores: Se utilizan para llevar el control del nmero de ocasiones en que se realiza
una operacin o se cumple una condicin. Con los incrementos generalmente de uno en
uno.
Acumuladores: Forma que toma una variable y que sirve para llevar la suma
acumulativa de una serie de valores que se van leyendo o calculando progresivamente.
Toda variable pertenece a un tipo de dato concreto. En la declaracin de una variable se debe
indicar el tipo al que pertenece. As tendremos variables enteras, reales, booleanas, etc. Por otro
lado, distinguimos tres partes fundamentales en la vida de una variable:
Declaracin
Iniciacin
Utilizacin
Declaracin de variables
Esta es la primera fase en la vida de cualquier variable. La declaracin se realiza en la seccin
que comienza con la palabra var. Si quieres ms informacin, puedes ir al apartado que trata
sobre la declaracin de variables en el tema Estructura de un programa.
Iniciacin de variables
Esto no es ms que darle un valor inicial a una variable. As como lo primero que se hace con
una variable es declararla, lo siguiente tiene que ser iniciarla. Esto se hace para evitar posibles
errores en tiempo de ejecucin, pues una variable tiene un valor indeterminado despus de
declararla. Principalmente, existen dos maneras de otorgar valores iniciales a variables:
Mediante una sentencia de asignacin
Mediante uno de los procedimientos de entrada de datos (read o readln)
Ing. Mendoza Corpus, Carlos
Utilizacin de variables
Una vez declarada e iniciada una variable, es el momento de utilizarla. Esta es la parte que
presenta un mayor abanico de posibilidades. A continuacin tienes unas cuantas:


Algoritmos
Incrementar su valor:
i := i + 1
Controlar un bucle:
for i:=1 to 10 do ...
Chequear una condicin:
if i<10 then ...
Participar en una expresin:
n := (Max - Min) div i
Diferencias entre ambas
Despus de haber visto cada una por separado, pasemos a explicar las diferencias que existen
entre constantes y variables. A primera vista pudieran parecer conceptos similares, pero
realmente son cosas muy distintas. Y esta distincin viene dada por la posibilidad que tienen las
variables para cambiar de valor.
Principales diferencias:
Las constantes ya reciben un valor inicial en su declaracin
Las variables primero se declaran, luego se inician, y luego se usan
Las constantes, una vez declaradas mantienen su valor durante toda la ejecucin
del programa
En cambio, las variables pueden cambiar su valor tantas veces como deseen
Adems de cambiar su valor, las variables tambin pueden cambiar de tamao en
tiempo de ejecucin (punteros)
o Expresiones
Las expresiones son combinaciones de constantes, variables, smbolos de operacin, parntesis
y nombres de funciones especiales. Por ejemplo:
a + (b + 3) / c
Cada expresin toma un valor que se determina tomando los valores de las variables y
constantes implicadas y la ejecucin de las operaciones indicadas. Una expresin consta de
operadores y operandos. Segn sea el tipo de datos que manipulan, se clasifican las expresiones
en:
Aritmticas
Relacionales
Lgicas
Ing. Mendoza Corpus, Carlos
Sentencias simples
Asignacin de variables
Se le asigna un valor a una variable, a travs del smbolo de flecha(<--) que dice que el valor a la derecha
tiene que ser asignado a la variable que est a la izquierda.
ej: a 10
Se asigna un valor 10 a la variable a. Al escribir esta sentencia por primera vez en un algoritmo, da por
entendido su declaracin o creacin.
Comnmente al lado derecho de la flecha, se pueden realizar operaciones aritmticas (+,-,/,*), para que
su resultado se le asigne a la variable. Adems en estas operaciones se puede incluir la misma variable u
otras.


Algoritmos
Ejemplo:
INICIO
x 5
y 10
z x + y
z y * x + 7
z x/8 + y/9 + (7 + x/8)
z z + 1
z z * z + y * y
x -x + -y + -3
FIN

Ing. Mendoza Corpus, Carlos


Algoritmos
Diseo de un Algoritmo

Herramientas en el diseo de un algoritmo:
Se ha definido dos tipos de herramientas en el diseo de algoritmos los diagramas de flujo y los
pseudocdigos, adicionalmente existen otra herramienta como los diagramas N-S (DN-S), estos tambin
representan la lgica que se est utilizando en el desarrollo de un problema, entonces esto nos lleva a definir
la llamada PROGRAMACION ESTRUCTURADA.
Los diagramas estructurados, son una tcnica que permite formular algoritmos mediante una representacin
geomtrica y de asignacin de espacios de un bloque especfico.
Programacin Estructurada
Se refiere a un conjunto de tcnicas que ha ido evolucionando desde los primeros trabajos de Edsger
Dijkstra. Estas tcnicas aumentan considerablemente productividad del programa reduciendo el elevado
tiempo requerido para escribir, verificar, depurar y mantener los programas.
La programacin estructurada es el conjunto de tcnicas que incorporan:
o Diseo descendente (top - down)
o Recursos abstractos
o Estructuras bsicas
Recursos abstractos
La programacin estructura se auxilia de los recursos abstractos en lugar de los recursos concretos de
que se dispone (un determinado lenguaje de programacin).
Descomponer un programa en trminos de recursos abstractos segn Dijkstra consiste en
descomponer una determinada accin compleja en funcin de un numero de acciones mas simples,
capaces de ser ejecutando por una computadora y que construirn sus instrucciones.
Nota:
Dijkstra estudi fsica terica en la Universidad de Leiden. Trabaj como investigador para Burroughs Corporation a principios
de los aos 1970. En la Universidad de Texas en Austin, Estados Unidos, ocup el Schlumberger Centennial Chair in Computer
Sciences. Se retir en 2000.
Entre sus contribuciones a la informtica est el algoritmo de caminos mnimos; tambin conocido como Algoritmo de Dijkstra.
Recibi el Premio Turing en 1972.
Era conocido por su baja opinin de la sentencia GOTO en programacin, que culmin en 1968 con el artculo Go To Statement
Considered Harmful, visto como un paso importante hacia el rechazo de la expresin GOTO y de su eficaz reemplazo por
estructuras de control tales como el bucle while. Dijkstra era un aficionado bien conocido de Algol60, y trabaj en el equipo que
desarroll el primer compilador para este lenguaje. En ese mismo ao cre el primer sistema operativo con estructura jerrquica,
de niveles o capas. Fue denominado THE (Technische Hogeschool, Eindhoven) que se utiliz con fines didcticos.
Desde los aos 70, el principal inters de Dijkstra fue la verificacin formal. La opinin que prevaleca entonces era que uno debe
primero escribir un programa y seguidamente proporcionar una prueba matemtica de su correccin. Dijkstra objet que las
pruebas que resultan son largas e incmodas, y que la prueba no da ninguna comprensin de cmo se desarroll el programa. Un
mtodo alternativo es la derivacin de programas, desarrollar prueba y programa conjuntamente. Uno comienza con una
especificacin matemtica del programa que se supone va a hacer y aplica transformaciones matemticas a la especificacin
hasta que se transforma en un programa que pueda ser ejecutado. El programa que resulta entonces es sabido correcto por la
construccin. Mucho de los ltimos trabajos de Dijkstra tratan sobre las maneras de hacer fluida la argumentacin matemtica.
Dijkstra muri el 6 de agosto de 2002 despus de una larga lucha contra el cncer.
Ing. Mendoza Corpus, Carlos


Algoritmos
Diseo descendente (top-down)
Es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de
refinamiento (stepwise), esta metodologa consiste en efectuar una relacin entre las sucesivas etapas de
las estructuras, de esta manera estn unidas mediante entradas y salida de informacin.
Estro hace que se pueda considerar cada estructura cada estructura desde dos puntos: que hace? y
Cmo lo hace?
Estructuras Bsicas
Se considera que un programa puede ser escrito utilizando solamente tres tipos de estructuras de control:
Secuenciales
Es aquella en la que una accin (instruccin) sigue a otra en secuencia. Las tareas se
suceden de tal manera que la salida de uno es la entrada de la siguiente y as
sucesivamente.

Estructura secuencia Diagrama N-S de una
Estructura secuencia
Ejemplo:
Disear un algoritmo para calcular el rea y el permetro de un rectngulo
Definicin del problema
Calcular rea y permetro de un rectngulo
Anlisis del problema
Para desarrollar este problema es necesario conocer las
frmulas para obtener tanto el rea como el permetro de
un rectngulo.
Sea b = base y h = altura, las frmulas a utilizar son:
Area = b * h
Permetro = 2 * (b + h)
Datos de entrada: b y h (base y altura)
Datos de salida: rea y permetro
Procesos: rea = b * h
Permetro = 2 * (b + h)
Diseo de la solucin: DN-S
Accin 1
Accin 2
Accin n
.
.
.
.
Accin 2
Accin 1
h
b
Ing. Mendoza Corpus, Carlos


Algoritmos

Inicio
Entero: b, h, a, p
Leer b, h
a = b * h
p = 2 (b + h)
Escribir rea:, a
Escribir permetro:, p
Fin algoritmo









Ejemplo:
Se trata de calcular el salario neto de un trabajador en funcin del nmero de horas
trabajadas, precio de la hora de trabajo y, considerar unos descuentos fijos, el sueldo bruto
en concepto de impuestos (20 %)

Pseudocdigo
inicio
Leer nombre, horas,
prec_hor
sal_brut horas*prec_hor
imp 0.20 * sal_brut
sal_net sal_brut imp
Escribir sal_brut,
sal_net
Declarar nombre, horas
Declarar prec_hor, sal_brut, imp,
Diagrama de Flujo
Fin

Inicio
// Calcular salario neto
Declarar nombre, horas
Declarar prec_hor, sal_brut, imp, sal_net
Leer (nombre, horas, prec_hor)
sal_brut horas*prec_hor
imp 0.20 * sal_brut
sal_net sal_brut imp
escribir (sal_brut, sal_net)
fin


Diagrama N-S










Declarar nombre, horas
Declarar prec_hor, sal_brut, imp,
Inicio
sal_brut horas*prec_hor
imp 0.20 * sal_brut
Fin
Escribir
sal_brut, sal_net
sal_net sal_brut imp
sal_net sal_brut imp
Leer
nombre, horas, prec_hor

Ing. Mendoza Corpus, Carlos


Algoritmos
Ejercicios.
Escriba el Pseudocdigo, diagrama de flujo y DN-S.
1. Considere el ejemplo de hacer una taza de t
2. Escriba un algoritmo que lea un valor entero, lo doble, se multiplique por 25 y visualice el
resultado.
3. Disear un algoritmo para calcular el rea y el permetro de un rectngulo
4. Un maestro desea saber que porcentaje de hombres y que porcentaje de mujeres hay en un
grupo de estudiantes.
5. Un profesor prepara tres cuestionarios para una evaluacin final: A, B y C. Se sabe que se
tarda 5 minutos en revisar el cuestionario A, 8 en revisar el cuestionario B y 6 en el C. La
cantidad de exmenes de cada tipo se entran por teclado. Cuntas horas y cuntos minutos
se tardar en revisar todas las evaluaciones?
6. Ingrese un nmero y se visualice su cuadrado.
7. Determinar la hipotenusa de un triangulo rectngulo conocidas las longitudes de los
catetos.
8. Calcule el rea de un triangulo en funcin de las longitudes de sus lados
Nota: rea = ) )( )( ( c p b p a p p
Donde p = (a + b +c)/2 (semiperimetro)
9. convertir metros a pies y pulgadas (1 metro = 39.37 pulgadas, 1 pies = 12 pulgadas)
10. Realizar un algoritmo que pida un valor entero que equivale a un nmero de duros y me
calcule a cuantos billetes de 5000, 1000, monedas de 200, 25, 1.
11. Realizar un programa que pida al usuario la velocidad en m/s y el radio de la circunferencia
de la pista, y resultada el programa devuelve el tiempo que tarda el atleta en dar 2 vueltas a
la pista, sabiendo que el atleta descansa 1 minuto cada 1000 metros.
12. Realice la conversin de una temperatura dada en grados Celsius o grados Fahrenheit
Nota: La formula es F = (9 * C) /5+32
Ing. Mendoza Corpus, Carlos


Algoritmos
Estructuras Condicionales

Explicamos las distintas estructuras poniendo ejemplos tanto en diagrama de flujo como en pseudocdigo.
Las estructuras condicionales comparan una variable contra otro(s)valor (es), para que en base al resultado de
esta comparacin, se siga un curso de accin dentro del programa. Cabe mencionar que la comparacin se
puede hacer contra otra variable o contra una constante, segn se necesite. Existen tres tipos bsicos, las
simples, las dobles y las mltiples.

Estructura Condicional Simples:
Las estructuras condicionales simples se le conoce como Tomas de decisin. Estas tomas de decisin
tienen la siguiente forma:
Pseudocdigo: Diagrama de flujo:


Estructura Condicional Dobles
Las estructuras condicionales dobles permiten elegir entre dos opciones o alternativas posibles en funcin del
cumplimiento o no de una determinada condicin. Se representa de la siguiente forma:
Pseudocdigo: Diagrama de flujo:

Donde:
Si : Indica el comando de comparacin.
Condicin : Indica la condicin a evaluar
Entonces : Precede a las acciones a realizar cuando se cumple la condicin
Instruccin(es) : Son las acciones a realizar cuando se cumple o no la condicin
si no : Precede a las acciones a realizar cuando no se cumple la condicin
Dependiendo de si la comparacin es cierta o falsa, se pueden realizar una o ms acciones.
Ing. Mendoza Corpus, Carlos


Algoritmos
Estructura Condicional Mltiples:
Las estructuras de comparacin mltiples, son tomas de decisiones especializadas que permiten comparar una
variable contra distinta posibles resultados, ejecutando para cada caso una serie de instrucciones especficas.
La forma comn es la siguiente:
Pseudocdigo: Diagrama de flujo:


Estructura Condicional Mltiples (En caso de)
Las estructuras de comparacin mltiples, es una toma de decisin especializada que permiten evaluar una
variable con distintos posibles resultados, ejecutando para cada caso una serie de instrucciones especificas.
La forma es la siguiente:
Pseudocdigo: Diagrama de flujo:



Ing. Mendoza Corpus, Carlos


Algoritmos
Ejercicios Resueltos:
1. Realizar un algoritmo en donde se pide la edad del usuario; si es mayor de edad debe aparecer un
mensaje indicndolo. Expresarlo en Pseudocdigo y Diagrama de flujos.

Pseudocdigo: Diagrama de flujo:



2. Se pide leer tres notas del alumno, calcular su definitiva en un rango de 0-5 y enviar un mensaje donde
diga si el alumno aprob o reprob el curso. Exprese el algoritmo usando Pseudocdigo y diagrama de
flujos.

Pseudocdigo: Diagrama de flujo:

Fin-Si
FIN
Si_no
Escriba Aprob el curso
Escriba Reprob el curso
Si Def < 3 entonces
Def (Not1 + Not2 + Not3) /3
LEA Nota1, Nota2, Nota3
INICIO
Declarar Not1, Not2, Not 3 :REAL











Ing. Mendoza Corpus, Carlos


Algoritmos
3. Se desea escribir un algoritmo que pida la altura de una persona, si la altura es menor o igual a 150 cm
enve el mensaje: Persona de altura baja; si la altura est entre 151 y 170 escriba el mensaje: Persona
de altura media y si la altura es mayor al 171 escriba el mensaje: Persona alta. Exprese el algoritmo
usando Pseudocdigo y diagrama de flujos.

Pseudocdigo: Diagrama de flujo:

Ing. Mendoza Corpus, Carlos















4. Dado un numero entre 1 y 7 escriba su correspondiente da de la semana as: 1- Lunes 2- Martes 3-
Mircoles 4- Jueves 5- Viernes 6- Sbado 7- Domingo. Exprese el algoritmo usando Pseudocdigo y
diagrama de flujos.

Pseudocdigo Diagrama de flujo
INICIO
Definir Altura
ESCRIBA Cul es tu altura?
Leer Altura
Si Altura <=150 entonces
ESCRIBA persona de altura baja
Sino
Si Altura <=170 entonces
ESCRIBA persona de altura media
Sino
Si Altura>170 ENTONCES
ESCRIBA persona alta
Fin-Si
Fin-Si
Fin-Si
FIN

INICIO
Definir Dia
ESCRIBA Diga un nmero para escribir su
da
LEA Dia
En-caso-de Dia haga
Caso 1: ESCRIBA Lunes
Caso 2: ESCRIBA Martes
Caso 3: ESCRIBA Mircoles
Caso 4: ESCRIBA Jueves
Caso 5: ESCRIBA Viernesen
Caso 6: ESCRIBA Sbado
Caso 7: ESCRIBA Domingo
SINO: ESCRIBA Escribi un numero fuera
del rango 1-7
Fin-Caso
FIN





Algoritmos
Resolver
Solucionar los siguientes problemas, realizar los diagramas de flujo, pseudocdigo y diagrama N-S e
implementar en DFD
1. Solucionar el problema de ingresar dos nmero e indicar cual es impar y par.
2. Hacer el algoritmo para un programa que calcule:
3. El valor del rea de un tringulo, dada la base y la altura
4. El valor de la base de un tringulo dada la altura y el rea.
5. El valor de la altura de un tringulo dada la base y el rea.
6. Siendo la formula general: area (base*altura)/2
7. De los estudiantes que se matriculan en la UPSP, los ex alumnos pagan 30 soles por curso en el que
se matriculen, mientras que los dems (regulares), pagan 50 soles por curso. Disee el algoritmo
para escribir un programa en el que el usuario introduce los datos del estudiante (ex alumno o
regular) y el nmero de cursos y las salidas sean la categora del estudiante (ex alumno o regular),
nmero de cursos y los costos totales por los cursos a llevar.
8. En la ciudad de Huaraz, una agencia de seguros para automviles asigna costos basados en el sexo y
la edad del conductor. Los varones menores de 25 aos pagan los precios ms altos, 1000 soles. Los
hombres de 25 aos o ms aos pagan 700 soles. Las mujeres de menos de 21 aos pagan 800 soles,
mientras que las mujeres de 21 aos o ms pagan 500 soles. Escribir el algoritmo del programa que
imprima la edad del conductor, sexo, y el pago correspondiente para los clientes de la aseguradora.
9. Escribir el algoritmo para un programa que solicita se le ingrese un nmero. Si el nmero es positivo
debe escribirse el nmero y junto a el positivo (15 POSITIVO). Si el nmero es cero (0 CERO); Si
es negativo debe escribirse el nmero y junto a el negativo (-5 NEGATIVO).
10. Resolver la siguiente ecuacin matemtica para resolver la ecuacin de segundo grado
C

Bx Ax + +
2


Ing. Mendoza Corpus, Carlos


Algoritmos
Manejo y Uso del DFD

Como el mensaje es una cadena de caracteres, no debemos olvidarnos de las comillas simples al inicio y final
de la misma.
Para cargar el DFD solo se copia en una carpeta a una de las unidades y solo se ejecuta el icono cuyo nombre
es DFD Samara, al ejecutar este icono se visualiza la siguiente pantalla:


Luego dar un clic en el botn Aceptar, apara iniciar e trabajo.
DFD es un programa de libre disposicin para ayuda al diseo e implementacin de algoritmos
expresados en diagramas de flujo (DF). Adems incorpora opciones para el depurado de los
algoritmos, lo que facilita enormemente la localizacin de los errores de ejecucin y lgicos ms
habituales.
Su utilizacin es muy sencilla, al tratarse de una herramienta grfica, y adems incluye un men de
ayuda muy completo, por lo que en estas notas nos vamos a centrar en el uso bsico de las
herramientas de diseo y depuracin. El resto de opciones (detalles de sintaxis ms avanzados,
operadores y funciones disponibles), puede consultarse directamente en la ayuda del programa.
Ing. Mendoza Corpus, Carlos


Algoritmos


Aunque puede accederse a todas las opciones que comentaremos a continuacin a
travs del men, y con atajos de teclado, en estas notas las describiremos a travs de los botones
correspondientes.
El bloque de botones de objetos nos permite seleccionar los distintos elementos (objetos)
que vamos a introducir en el DF: sentencias de asignacin, seleccin, iteracin, ...
El bloque de ejecucin permite poner en funcionamiento el algoritmo
El bloque de depuracin se utiliza, en caso de funcionamiento incorrecto, para detectar
errores en la construccin del algoritmo y corregirlos.
Los botones de subprogramas permiten introducir funciones definidas por el programador
Los restantes botones tienen una funcionalidad similar a la de las restantes aplicaciones
Windows: abrir fichero, guardar fichero, cortar, pegar, ... Puede verse su tarea asociada
acercando el cursor del ratn (sin hacer clic) al botn correspondiente.

Un primer ejemplo de diseo con DF
Construiremos un primer ejemplo sencillo de algoritmo para ilustrar las capacidades ms bsicas
de DFD. Dicho algoritmo consistir en pedir un nmero al usuario y presentarlo por pantalla.
La operacin bsica ser la de insercin de objetos. En primer lugar, insertaremos una sentencia de
salida que le pida al usuario el nmero que posteriormente se va a imprimir. Para ello pulsamos el
botn correspondiente al objeto que se desea insertar y llevamos el ratn al punto donde vamos a
insertarlo.


Ing. Mendoza Corpus, Carlos


Algoritmos
La insercin se realiza pulsando el botn izquierdo, con lo que tendremos una situacin como la siguiente:



Los puntos azules indican qu objeto se acaba de insertar. Para introducir en la sentencia de salida
el mensaje que queremos imprimir ser necesario EDITAR dicho objeto, haciendo doble clic sobre
el mismo. De este modo se abre una ventana donde podemos dicho mensaje (por ejemplo 'Buenos
das. Dgame un nmero, por favor').
Como el mensaje es una cadena de caracteres, no debemos olvidarnos de las comillas simples al
inicio y final de la misma.



Como el mensaje es una cadena de caracteres, no debemos olvidarnos de las comillas simples al
inicio y final de la misma.
Seguidamente vamos a insertar una sentencia de ENTRADA, para almacenar en una variable el
valor del nmero que nos proporcione el usuario. Para ello pulsaremos el botn correspondiente




Ing. Mendoza Corpus, Carlos


Algoritmos
y lo insertaremos a continuacin de la sentencia de salida anterior. Si editamos el objeto, haciendo
doble clic sobre el mismo, aparecer una pantalla cuyo cuadro de texto nos permitir darle nombre
a la variable donde vamos a guardar el valor (en este ejemplo la variable se va a llamar num.


Para finalizar, mostraremos al usuario el nmero que ha introducido, para lo cual insertaremos
una nueva sentencia de SALIDA, que editaremos para que muestre el siguiente mensaje:


Con lo que el algoritmo tendr el siguiente aspecto en pantalla:



Ing. Mendoza Corpus, Carlos


Algoritmos
Un primer ejemplo de ejecucin con DF



Tras haber diseado el algoritmo podemos probar a ejecutarlo, al objeto de detectar posibles
errores en l. Para ello utilizaremos los botones de ejecucin, y en particular el botn EJECUTAR o
la tecla F9 que pondr en marcha el algoritmo.
La primera sentencia en ejecutarse ser la de SALIDA, que mostrar en pantalla el mensaje
correspondiente:


Seguidamente la de ENTRADA, que nos muestra un cuadro de texto donde introduciremos el
valor que queramos darle a la variable (por ejemplo, 25):


Ing. Mendoza Corpus, Carlos


Algoritmos
y, finalmente, la ltima sentencia de SALIDA:


Cuando el algoritmo finaliza su ejecucin sin error se muestra el siguiente mensaje:


Dado que el algoritmo es correcto, procederemos a guardarlo (por ejemplo, con el nombre
entradasalida). La opcin de guardar es similar a la de cualquier aplicacin Windows, por lo
que no merece mayor comentario. nicamente recordar que en general, durante el proceso de
elaboracin de un algoritmo (que puede ser largo) debemos guardar frecuentemente en disco el
diseo, al objeto de prevenir posibles fallos o errores que dejen inutilizado el ordenador y
provoquen la prdida del trabajo realizado.
Ing. Mendoza Corpus, Carlos


Algoritmos
Lenguaje de Programacin

Un poco de historia
El lenguaje de programacin Pascal es un lenguaje de alto nivel y propsito general (aplicable a una gran
cantidad de aplicaciones diversas) desarrollado por el profesor suizo Niklaus Wirth (Instituto tecnolgico de
Zurich, Suiza). El propsito de Wirth era crear un lenguaje para la enseanza de tcnicas de programacin a
estudiantes universitarios. Pero a medida que pasaban los aos, Pascal se iba convirtiendo en un estndar en
el mundo de la programacin.
Una versin preliminar del lenguaje apareci en 1968 y el primer compilador totalmente completo apareci a
finales de 1970. Desde entonces, muchos compiladores han sido construidos y estn disponibles para
diferentes mquinas. Durante muchos aos, el libro Pascal User Manual and Report , publicado por Wirth y
Kathleen Jensen en 1974, ha servido de facto como estndar de todas las versiones.
Las diferentes versiones ofrecan interpretaciones ligeramente diferentes que impedan la compatibilidad
entre ellas. Por estas razones, diferentes proyectos se iniciaron para producir una definicin estndar del
lenguaje y culminaron en dos estndar: uno de la Internacional Standard Organization (ISO) en 1982 y otro
por un comit conjunto del American National Standards Institute (ANSI) y del Institute of Electrical and
Electronics Engineers (IEEE). Estas dos versiones o definiciones se conocen como ISO Pascal y ANSI/IEEE
Pascal, y difieren en algunos aspectos no especialmente significativos. Sin embargo, una versin no estndar
se ha popularizado considerablemente: Turbo Pascal (marca registrada por Borland International, Inc.). Esta
versin ha contribuido en gran medida a la popularizacin del lenguaje Pascal.
Lenguajes de programacin
Un lenguaje de programacin permite al usuario crear programas que sern entendidos por el ordenador
(directa o indirectamente) con el objetivo de realizar alguna tarea.
A grandes rasgos podemos clasificar los lenguajes de programacin en tres categoras: mquina, bajo nivel
(ensamblador) y alto nivel.
Lenguaje mquina
Los lenguajes mquina son aquellos cuyas instrucciones son directamente entendibles por el ordenador sin la
necesidad de traduccin alguna. Sus instrucciones no son ms que ristras de ceros y unos (bits). Estas
especifican la operacin a realizar, los registros del procesador y celdas de memoria implicados, etc.
Obviamente, este tipo de lenguajes sern fciles de comprender para un ordenador pero muy difciles para el
hombre. Esta razn nos lleva a buscar otro lenguaje para comunicarnos con el ordenador.
Lenguajes de bajo nivel (ensamblador)
La programacin en lenguaje mquina es difcil, por ello se necesitan lenguajes que permitan simplificar este
proceso. Los lenguajes de bajo nivel han sido diseados para este fin.
Estos lenguajes son generalmente dependientes de la mquina, es decir, dependen de un conjunto de
instrucciones especficas del ordenador. Un ejemplo de este tipo de lenguajes es el ensamblador. En l, las
instrucciones se escriben en cdigos alfabticos conocidos como mnemotcnicos (generalmente, abreviaturas
de palabras inglesas).
Las palabras mnemotcnicas son mucho ms fciles de recordar que las secuencias de ceros y unos. Una
instruccin tpica de ensamblador puede ser:
ADD x,y,z
Ing. Mendoza Corpus, Carlos


Algoritmos
Ing. Mendoza Corpus, Carlos


Esta instruccin significara que se deben sumar los nmeros almacenados en las direcciones de memoria x e
y, y almacenar el resultado en la direccin z. Pero an as, a medida que los programas crezcan en tamao y
complejidad, el ensamblador sigue sin ser una buena solucin. Pasemos entonces a los lenguajes de alto
nivel.
Lenguajes de alto nivel (Pascal)
Los lenguajes de alto nivel son aquellos en los que las instrucciones o sentencias son escritas con palabras
similares a las de los lenguajes humanos (en la mayora de los casos, el Ingls). Esto facilita la escritura y
comprensin del cdigo al programador.
Existen muchos lenguajes de alto nivel, por citar algunos:
ADA
BASIC
COBOL
FORTRAN
C
Modula-2
Pascal
Java
A continuacin se presenta una instruccin de Pascal:
if (x=y) and (z=w) then write('Esto es una prueba');
Si se tienen unos conocimientos mnimos del Ingls, esta lnea tiene una comprensin muy fcil: "Si el
contenido de x es igual al contenido de y, y el contenido de z es igual al contenido de w, entonces escribe
Esto es una prueba".
Los programas escritos en lenguaje de alto nivel no son entendibles directamente por la mquina. Necesitan
ser traducidos a instrucciones en lenguaje mquina que entiendan los ordenadores. Los programas que
realizan esta traduccin se llaman compiladores, y los programas escritos en lenguajes de alto nivel se
denominan programas fuente.
Programas fuente y objeto
Un programa puede ser definido como un conjunto de instrucciones que pueden someterse como unidad a un
ordenador y utilizarse para dirigir el comportamiento de ste.
Aqu no vamos a profundizar en todos los tipos de programas, ni a realizar una clasificacin exhaustiva.
Solamente mencionaremos los dos tipos que nos interesan en programacin: los programas fuente y los
objeto.
Un programa fuente es aquel que nos permite escribir un algoritmo mediante un lenguaje formal. Por eso al
cdigo desarrollado al programar se le llama cdigo fuente.
Un programa objeto es el resultado de traducir un programa fuente para obtener un lenguaje comprensible
por la mquina.
Traductores de programas
Los traductores son un tipo de programas cuya funcin es convertir el cdigo de un lenguaje en otro. Por
ejemplo un compilador, que traduce cdigo fuente en cdigo objeto. Existen distintos tipos de traductores,
entre ellos destacan:
o Ensambladores
o Preprocesadores
o Intrpretes
o Compiladores
Algoritmos
Ensambladores
Es un tipo de traductor que convierte programas escritos en lenguaje ensamblador en programas
escritos en cdigo mquina.
Preprocesadores
Traduce un lenguaje de alto nivel a otro, cuando el primero no puede pasar a lenguaje mquina
directamente.
Intrpretes
Se trata de traductores-ejecutores ya que con cada instruccin realizan un proceso triple de
lectura-traduccin-ejecucin. Son relativamente lentos, pero muy buenos para la depuracin de
programas.
Compiladores
Es el tipo de traductor ms conocido. Se trata de un programa que traduce cdigo fuente escrito
en un lenguaje de alto nivel (Pascal) en cdigo mquina (no siempre). Son ms rpidos que los
intrpretes pero presentan mayor dificultad a la hora de detectar errores.

Ing. Mendoza Corpus, Carlos


Algoritmos

Estructuras Cclicas

Explicamos las tres posibles estructuras cclicas; Para, mientras, repetir. Complementamos con tres
ejemplos para la correcta asimilacin de estas estructuras.
Se llaman problemas repetitivos o cclicos a aquellos en cuya solucin es necesario utilizar un mismo
conjunto de acciones que se puedan ejecutar una cantidad especfica de veces. Esta cantidad puede ser fija
(previamente determinada por el programador) o puede ser variable (estar en funcin de algn dato dentro del
programa). Los ciclos se clasifican en:
Ciclos con un Nmero Determinado de Iteraciones
(Para): Son aquellos en que el nmero de iteraciones se conoce antes de ejecutarse el ciclo. La forma
de esta estructura es la siguiente:

Pseudocdigo Diagrama de Flujos

Ing. Mendoza Corpus, Carlos




DN-S

Para VV
i
hasta V
f
paso n
Acciones
Acciones
Para VV
i
hasta V
f
hacer

Para VV
i
hasta V
f
hacer
acciones





Dado un valor inicial V
i
asignado a la variable V, esta se ir aumentando o disminuyendo de
acuerdo al paso n hasta llegar a la V
f
; si se omite el paso, significa que la variable aumentar de uno
en uno.
Ciclos con un Nmero Indeterminado de Iteraciones
Son aquellos en que el numero de iteraciones no se conoce con exactitud, ya que esta dado en funcin de un
dato dentro del programa.
Mientras Que: Esta es una estructura que repetir un proceso durante N veces, donde N puede
ser fijo o variable. Para esto, la instruccin se vale de una condicin que es la que debe cumplirse
para que se siga ejecutando. Cuando la condicin ya no se cumple, entonces ya no se ejecuta el
proceso. La forma de esta estructura es la siguiente:

Algoritmos

Pseudocdigo Diagrama de Flujos


DN-S
Acciones
Condicin
No
Si

Acciones
Mientras <condicin>




Hacer..Mientras: Esta es una estructura similar en algunas caractersticas, a la anterior. Repite un
proceso una cantidad de veces, pero a diferencia del Mientras Que, el Hacer..Mientras lo hace
mientras que la condicin se cumple. Por otra parte, esta estructura permite realizar el proceso
cuando menos una vez, ya que la condicin se evala al final del proceso, mientras que en el
Mientras Que puede ser que nunca llegue a entrar si la condicin no se cumple desde un principio.
La forma de esta estructura es la siguiente:
Pseudocdigo Diagrama de Flujos


DN-S
Condicin
Acciones
V
F



Repetir <condicin>
acciones
Ing. Mendoza Corpus, Carlos


Algoritmos
Ejemplo 1:

Realizar un algoritmo que muestre los nmeros de uno en uno hasta diez usando una estructura Para. Exprese
el algoritmo usando Pseudocdigo y diagrama de flujos.
Pseudocdigo Diagrama de Flujos


Ejemplo 2:

Usando una estructura Mientras, realizar un algoritmo que escriba los nmeros de uno en uno hasta 20
Ing. Mendoza Corpus, Carlos

Pseudocdigo Diagrama de Flujos




Algoritmos
Ejemplo 3:

Realizar un algoritmo que pregunte al usuario un nmero comprendido en el rango de 1 a 5. El algoritmo
deber validar el numero, de manera que no contine la ejecucin del programa mientras no se escriba un
nmero correcto.
Pseudocdigo Diagrama de Flujos



Inicio
Numero : Entero
Diga un Numero
Numero >=1 y Numero <=5
acciones
Fin

Ing. Mendoza Corpus, Carlos


Algoritmos
Arreglos

Concepto.
Es un conjunto de datos o una estructura de datos homogneos que se encuentran ubicados en forma
consecutiva en la memoria RAM (sirve para almacenar datos en forma temporal).

Nombre X[0] X[1] X[2] X[3] X[4] X[5] X[6] X[7]
Valor 4 6 3 9 12 7 2 8
Direccin 1110 1114 1118 1122 1126 1130 1134 1138

Declaracin.

Para declarar un arreglo se especifica el tipo de dato de sus elementos, seguido por el nombre del arreglo y,
finalmente, por el tamao del arreglo entre corchete.
El tamao del arreglo es la cantidad mxima de elementos que pueden guardar.
Es un arreglo de N elementos organizados en una dimensin donde N recibe el nombre de longitud o
tamao del vector. Para hacer referencia a un elemento del vector se usa el nombre del mismo, seguido del
ndice (entre corchetes), el cual indica una posicin en particular del vector. Por ejemplo:

Vec[x]

Donde:
Vec Nombre del arreglo
x Numero de datos que constituyen el arreglo

Representacin grfica de un vector.
Vec[1] = 7
Vec[2] = 8
Vec[3] = 9
Vec[4] = 10
Llenado de un Vector.

Para I = 1 a 10
Leer vec[I]
Fin-para

Hacer mientras I <= 10
Leer vec[I]
Fin-mientras

Ing. Mendoza Corpus, Carlos


Algoritmos
I=1
Repetir
Leer vec[I]
I = I + 1
Hasta-que I>10

Un arreglo puede definirse como un grupo o una coleccin finita, homognea y ordenada de elementos. Los
arreglos pueden ser de los siguientes tipos:
De una dimensin.
De dos dimensiones.
De tres o ms dimensiones

Arreglos Unidimensionales
Un arreglo unidimensional es un tipo de datos estructurado que est formado de una coleccin finita
y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos
iguales.
Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe
proporcionar la direccin base del arreglo, la cota superior y la inferior.
Ejemplos
Ingresar 10 numero a un array definido de la siguiente manera a[10]
Solucin:
Inicio
Declarar x, a[10]
Para x1 hasta 10
Leer a[x]
Fin_para
Fin

Disear un algoritmo que ingrese 30 notas aprobados y que me muestre la nota mayor y el
promedio de todas (Nota>=10.5 y Nota<=20)
Solucin:
Inicio
nota[30], s, may, p
s0
para i1 hasta 30
repetir
Leer nota [i]
hasta (nota[i]>=10.5) y (nota[i]<=20)
s s + nota[i]
si (i=1) entonces
Ing. Mendoza Corpus, Carlos


Algoritmos
may nota[i]
sino
si (nota[i]>may) entonces
may nota[i]
fin _ si
fin _ si
fin _ para
p s/30
mostrar PROMEDIO TOTAL ES,p
mostrar LA NOTA MAYOR ES,may
Fin

Ingresar 30 valores cualesquiera y determinar cuantos de estos valores son iguales al
promedio de los 30 valores ingresados anteriormente.
Solucin:
Inicio
num[30], i, s 0, c 0, p
para x1 hasta 30
Ingresar num[i]
S s + num[i]
fin_para
p s/x
para x 1 hasta 30
si (p=num[i]) entonces
cc+1
fin_si
fin_para
Mostrar Nmeros Iguales al promedio,c
Fin


Ing. Mendoza Corpus, Carlos


Algoritmos
Ejercicios Resueltos:

1. Controlar el siguiente men :
Ingresar.- En esta opcin usted deber ingresar 20 nmeros positivos que no sean mayores que
100.
Mostrar.- En esta opcin usted deber calcular y mostrar el promedio solo de los nmeros cuyo
primer digito de su izquierda sea el 2 y el 3.
Solucin:
Inicio
num[20], i, opc, ind0, c, s : entero
p : real
Repetir
Mostrar 1 : INGRESAR
Mostrar 2 : MOSTRAR
Mostrar 3 : SALIR
Repetir
Ingresar opc
Hasta (opc>=1) y (opc<=3)
Segn _ sea opc hacer
1 : Inicio
para (i=1; i<=20; I++)
repetir
ingresar num [i]
hasta (num[1]>0) y (num[i]<=100)
fin_para
Fin
2 : Inicio
Si (ind=1) entonces
c0
s0
Para(i=1; i<=20; i++)
Si (num[i]>=20 y num[i]<40) entonces
s< s+num[i]
cc+1
fin_si
fin_para
Si (c=0) entonces
Mostrar NO EXISTE NUMERO CON DIGITOS 2 Y 3
Si_no
ps/c
Ing. Mendoza Corpus, Carlos


Algoritmos
Mostrar promedio,p
fin_si
Si_no
mostrar INGRESE DATOS
fin_si
fin
fin_segn sea
Hasta (opc=3)
fin
2. Disear un algoritmo que ingrese 15 nmeros cualesquiera.
Solucin:
Inicio
num[15]: entero
i: entero
para (i=1; i<=15; i++)
Ingresar num[i]
Fin _ para
Fin
3. Utilizando arreglos, ingresar 15 nmeros y calcular cual es el nmero menor.
Solucin:
Inicio
i, men, Num[15]: entero
para (i=1; i<=15; i++)
Ingresar Num[i]
si (i=1) entonces
men num[i]
sino
si (Num[i]< men) entonces
menor Num[i]
Fin _ si
Fin _ si
Fin _ para
Fin
Ing. Mendoza Corpus, Carlos


Algoritmos
Con Alternativas Mltiples
4. Disear un algoritmo que controle las siguientes opciones del men:
Ingresar: En esta opcin Ud. deber ingresar 30 nmeros positivos cualesquiera.
Mostrar: En esta opcin Ud. deber mostrar el promedio y tambin cuantos nmeros superan
dicho promedio.
Salir.
Solucin:
Inicio
opc: caracter
num[30]: entero
i, s 0, c 0, sw: entero
p : real
sw 0
repetir
Mostrar 1.- Ingresar
Mostrar 2.- Mostrar
Mostrar 3.- Salir
Repetir
pedir opc
Hasta (opc>=1 y opc <=3)
1: Inicio
sw 1
para (i=1; i<=30; i++)
Repetir
pedir num[i]
Hasta (num[i]>0)
Fin _ para
Fin
2: Inicio
Si (sw = 1) entonces
s 0
Para (i=1; i<=30; i++)
s s+ num[i]
Fin _ para
p s/30
c 0
Para (i=1; i<=30; i++)
Si (num[i]>0) entonces
c c + 1
Fin _ si
Ing. Mendoza Corpus, Carlos


Algoritmos
Fin _ para
Si (c = 0) entonces
Mostrar NMEROS IGUALES
Si_no
mostrar p,c
Fin _ si
si_no
Mostrar An no ingresar datos
Fin _ si
Hasta opc = 3
Fin

5. Almacenar en un arreglo los 5 primeros nmeros primos positivos.
Solucin:
Inicio
primo[5]: entero
i, n, d, c: entero
c 0
n 0
repetir
n n+1; d 0
para (i=1; i<=n; i++)
si (n mod i=0) entonces
d d+1
fin _ si
fin _ para
si (d=2) entonces
c c+1
primo[c] N
Fin_si
hasta (c=5)
Fin
6. Ingresar 2 nmeros y mostrar cual es el mayor de ellos.
Solucin:
Inicio
a, b : entero
pedir a
si (a>b) entonces
mostrar a mayor, a
Si_no
Ing. Mendoza Corpus, Carlos


Algoritmos
Si (b>a) entonces
mostrar b mayor
Si_no
Si (a=b) entonces
Mostrar son iguales
Fin _ si
Fin _ si
Fin _ si
Fin
7. Ingresar un nmero positivo y mostrar cual es su mitad.
Solucin:
Inicio
Ingresar N
repetir
pedir N hasta que N>0
N=N/2
Mostrar La mitad es N/2
Fin _ repetir
Fin
8. Ingresar un nmero par y mostrar sus divisores; el nmero par debe ser positivo.
Solucin:
Inicio
n, i, c 0: entero
repetir
Ingresar n
Hasta (n>0) y (n mod 2=0)
Para (i=1; i<=n; i++)
si (n mod i=0) entonces
c c+1
Mostrar i
Fin _ si
Fin _ para
Mostrar Cantidad de divisores
Fin
9. Ingresar 5 nmeros negativos y calcular su media aritmtica.
Solucin:
Inicio
Repetir
Ingresar n
Hasta (n<0 y n mod 2=0)
Ing. Mendoza Corpus, Carlos


Algoritmos
Para (i=0; i<=5; i++)
si (n mod i=0) entonces
c c+1
Mostrar i
Fin _ si
Fin _ para
Escribir MEDIA ARITMTICA ES , C
Fin
10. Ingresar 5 nmeros en un arreglo.
Solucin:
Inicio
num[5]:entero
i: entero
Para (i=1; i<=5; i++)
Ingresar num[5]
Fin _ para
Fin
11. Ingresar 5 nmeros positivos. No utilizar la estructura repetir desde.
Solucin:
Inicio
i, num[5]: entero
i 1
Mientras (i<=5)
Repetir
Ingresar num[i]
hasta (num[i]>0)
i i+1
Fin _ mientras
Fin
12. Ingresar un nmero mayor que 50 y calcular la suma y el promedio de sus 5 primeros divisores.
Almacenar los divisores en un arreglo.
Solucin:
Inicio
x 0, s 0, c 0
Repetir
Ingresar n
Hasta (n>50)
Repetir
x x+1
Si (n mod x=0) entonces
Ing. Mendoza Corpus, Carlos


Algoritmos
c c+1
divisor[c] x
Fin _ si
hasta (c=s)
Para (i=1; i<=5; i++)
s s + divisor[i]
Fin _ para
Mostrar EL PROMEDIO ES, p
Mostrar LA SUMA ES, s
Fin
13. Almacenar en un arreglo todos los nmeros primos que se encuentren entre 1 y 40.
Solucin:
Inicio
Para (i=2; i<=39; i++)
d 0
Para (j=1; j<=i; j++)
Si (i mod j=0) entonces
d d+1
Fin _ si
Fin _ para
Si (d=2) entonces
c c+1
primo[c]+ i
Fin _ si
Fin _ para
Fin
14. Controlar el siguiente men:
Pares: ingresar 35 nmeros pares negativos y mostrar el valor absoluto del promedio.
Impares: Ingresar 10 nmeros impares positivos que sean dgitos para luego determinar el
promedio de los mismos.
Salir: En esta opcin Ud. deber confirmar si desea abandonar la ejecucin del algoritmo.
Solucin:
Inicio
num[35], opc, i : entero
s, p : entero
res : caracter
Repetir
Mostrar 1.Pares
Mostrar 2.Impares
Mostrar 3. Salir
Ing. Mendoza Corpus, Carlos


Algoritmos
Repetir
Ingresar opc
Hasta (opc>=1) y (opc<=3)
Segn _ sea opc hacer
1. Inicio
Para (i=1; i<=35; i++)
Repetir
Ingresar num[i]
Hasta (num[i] mod 2=0) y (num[i]<0)
s s+num[i]
Fin _ para
p (s/35)*-1
Mostrar Valor absoluto, p
Fin
2 Inicio
para(i=1; i<=10; i++)
repetir
Ingresar num[i]
hasta(num[i] mod 2=1) y (num[i]>0) y (num[i]<10)
s s+num[i]
fin _ para
p s/10
Mostrar promedio, p
Fin
3 Inicio
Repetir
Ingresar Desea salir (S/N) Res
Hasta (res=S) o (res=N)
si (res=N) entonces
opc 0
Fin _ si
Fin
Fin _ segn _ sea
Hasta opc=3
Fin
15. Controlar las siguientes opciones del men:
Pares Impares: En esta opcin Ud. Deber ingresar 30 nmeros pares e impares en forma
consecutiva, donde necesariamente el primer nmero deber ser un numero par luego un
impar y as intercaladamente.
Ing. Mendoza Corpus, Carlos


Algoritmos
Impares Pares: Ingresar 30 nmeros impares pares en forma intercalada empezando con
un impar.
Mostrar: En esta opcin Ud. deber mostrar la suma de los nmeros pares ingresados en la
opcin A o B, tambin deber el algoritmo indicar cual de las dos opciones est mostrando
Ud. Ya sea A o B.
Salir.
NOTA: Ud. deber trabajar solamente con un arreglo de 30 nmeros.
Solucin:
Inicio
num[30]: entero
i, ind, s: entero
opc: caracter
Repetir
Mostrar A : Pares Impares
Mostrar B : Impares Pares
Mostrar C : Mostrar
Mostrar D : Salir
Repetir
Ingresar opc
Hasta (opc=A) o (opc=B) o (opc=C) o (opc=D)
segn _ sea opc hacer
A : Inicio
ind 1
Para (i=1; i<=30; i++)
Si (i mod 2=0) entonces
Repetir
Ingresar num[i]
Hasta (num[i] mod 2<>0)
Si_no
Repetir
Ingresar num[i]
Hasta (num[i] mod 2=0) y (num[i]<>0)
Fin _ si
Fin _ para
Fin
B : Inicio
Ind 2
Para (i=1; i<=30; i++)
si (i mod 2=0) entonces
Ing. Mendoza Corpus, Carlos


Algoritmos
Repetir
Ingresar Num[i]
hasta (Num[i] mod 2=0) y (Num[i]<>0)
si_no
Repetir
Ingresar Num[i]
Hasta (Num[i] mod 2<>0)
Fin _ si
Fin _ para
Fin
C : Inicio
Si (ind =0) entonces
Mostrar An no ingresar datos
Si_no
Si (ind =1) entonces
Mostrar Resultado opcin 1
Si_no
Mostrar Resultado opcin 2
Fin _ si
S 0
Para (i=1; i<=30; i++)
Si (Num[i] mod 2=0) entonces
S S+Num[i]
Fin _ si
Fin _ para
Mostrar S
Fin _ si
fin
fin _ segn _ sea
Hasta (opc=D)
fin
16. Ingresar un nmero que tenga 10 dgitos, donde cada dgito debe de ser almacenado en una posicin del
arreglo.
Solucin:
Inicio
N[10] : entero
i : entero
Para (i = 1; i <= 10; i ++)
si (i=1) entonces
Repetir
Ing. Mendoza Corpus, Carlos


Algoritmos
Ingresar N[i]
Hasta (N[i]>0) y (N[i]<10)
Si_no
Repetir
Ingresar N[i]
Hasta (N[i]>=0) y (N[i]<10)
fin_si
fin_para
Fin
17. Almacenar en un arreglo los 5 primeros nmeros primos positivos, para luego mostrar cual es el tercer
nmero primo calculado.
Solucin:
Inicio
p[5] : entero
c 0, cp0, d, i : entero
repetir
c = c + 1
d = 0
para (i = 1; i <= c; i ++)
si (c mod i = 0) entonces
d = d + 1
fin_si
fin_para
si (d=2) entonces
cp=cp+1
p[cp]=c
fin_si
Hasta (cp=5)
Mostrar p[3]
fin

Ing. Mendoza Corpus, Carlos


Algoritmos
ARREGLOS DE TIPO CARACTER
18. Disear un algoritmo que ingrese una cadena de carcter cualesquiera, para luego mostrar cuantos
caracteres tiene dicha cadena.
Solucin:
Inicio
cad[25]: carcter
L: entero
Ingresar cad
L Longitud (cad)
Mostrar Nmero carcter, L
Fin
19. Escribir un algoritmo que determine si una cadena de caracteres es un palndromo ( una palabra que al
revs dice lo mismo ejm: RADAR)
Solucin:
Inicio
cad[30]: carcter
L, i, j, C 0: entero
Ingresar cad
L Longitud (cad)
j L
Para (i=0; i <= L-1; i++)
j j -1
Si (cad[i]= cad[j] ) entonces
C C+1
Fin _ si
Fin _ para
Si (C = L) entonces
Mostrar Palndromo
Si_no
Mostrar No es palndromo
Fin _ si
Fin
20. Ingresar una cadena y mostrar cuantos vocales existen en la cadena.
Solucin:
Inicio
cad[25]: caracter
L, C 0: entero
Ingresar cad
L Longitud cad
Para (i=0; i<=L-1; i++)
Ing. Mendoza Corpus, Carlos


Algoritmos
segn _ sea cad[i] hacer
a : C C+1
e : C C+1
i : C C+1
o : C C+1
u : C C+1
fin _ segn _ sea
fin_para
Mostrar Cantidad vocales, C
Fin
Ing. Mendoza Corpus, Carlos


Algoritmos
Ing. Mendoza Corpus, Carlos


Escribir un algoritmo que permita ingresar una frase y luego la descomponga en sus palabras
imprimindolas en lneas diferentes ejm : Estructura De Datos Estructura De Datos
Solucin:
Inicio
cad[20] : carcter
i, L : entero
Ingresar cad [i]
L longitud (cad)
Para ( i = 0; i <= L-1; i++)
Mostrar cad [i]
Si (cad [i] = ) entonces
saltar lnea
fin_si
fin_para
Fin
Arreglos Bidimensionales (matrices) :
Este tipo de arreglos al igual que los anteriores es un tipo de dato estructurado, finito ordenado y
homogneo. El acceso a ellos tambin es en forma directa por medio de un par de ndices.
Los arreglos bidimensionales se usan para representar datos que pueden verse como una tabla con
filas y columnas. La primera dimensin del arreglo representa las columnas, cada elemento contiene
un valor y cada dimensin representa una relacin
La representacin en memoria se realiza de dos formas: almacenamiento por columnas o por
renglones.

Unidimensional:
Nombre [10]: tipo
Num [10]: entero
Ingresar
Para (i =1; i 10; i ++)
Ingresar Num [i]
Fin_para
Fin


Bidimensional:
Nombre [fila] [columna] : tipo
Num [10] [10] : entero
Ingresar
Para (i = 1; i 10; i ++ )
Para (j = 1; j 10; j ++)
Ingresar Num [i] [j]
Fin_para
Fin_para
Fin


Algoritmos
Ejercicios Resueltos

1. Disear un algoritmo que permita ingresar una matriz de orden n donde todos los elementos de
dicha matriz sean nmeros naturales.
Inicio
Num [8] [8]: entero
i, j, N :entero
Repetir
Ingresar N
Hasta (N > 1 y N 8)
Para (i = 1; i N; i ++)
Para (j = 1; j N; j ++)
Repetir
Ingresar Num [i] [j]
Hasta (Num [i] [j] 0)
Fin_para
Fin_para
Fin
2. Disear un algoritmo que permita ingresar 35 nmeros impares en una matriz de orden n x m.
Inicio
Num [35] [35]: entero
i, j, N, M: entero
Repetir
Ingresar N, M
Hasta (M x N = 35 y M > 0)
Para (i = 1; i M; i ++)
Para (j = 1; j N; j ++)
Repetir
Ingresar Num [i] [j]
Hasta (Num [i ] [j] mod 2 < > 0)
Fin_para
Fin_para
Fin.
3. Ingresar 15 nmeros negativos en una matriz de orden mxn.
Inicio
M[15][15]: entero
i, j, m, n: entero
repetir
Ingresar m, n
hasta (m + n =15) y (m>0)
Ing. Mendoza Corpus, Carlos


Algoritmos
para (i=1; i<=m; i++)
para (j=1; j<=n; j++)
repetir
Ingresar M[i][j]
hasta (M[i][j]>0)
Fin _ para
Fin _ para
Fin
4. Disear un algoritmo que ingrese una matriz cuadrada, para luego calcular su diagonal principal.
Inicio
Num[35][35]: entero
i, j, N, S 0: entero
repetir
Ingresar N
hasta (N>1; y N<=35)
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
Ingresar Num[i][j]
Fin _ para
Fin _ para
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
si i=j entonces
S S+Num[i][j]
Fin _ si
Fin _ para
Fin _ para
Mostrar Diagonal P:, S
Fin
5. Disear un algoritmo que ingrese una matriz cuadrada, para luego calcular su diagonal secundaria.
Inicio
Num[35][35]: entero
i, j, N, S 0: entero
repetir
Ingresar N
hasta (N>1; y N<=35)
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
Ingresar Num[i][j]
Fin _ para
Ing. Mendoza Corpus, Carlos


Algoritmos
Fin _ para
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
si i+j=N+1 entonces
S S+Num[i][j]
Fin _ si
Fin _ para
Fin _ para
Mostrar Diagonal S, S
Fin
6. Disear un algoritmo que permita almacenar en un arreglo los impares que sean dgitos cuando i + j
sea par, para el caso que i + j no sea par usted deber ingresar cualquier nmero negativo.
Inicio
M: entero
i, j, N: entero
para i=1 hasta N
para j=1 hasta N
si (i + j mod 2=0)
repetir
Leer Ingresar nmero, N
hasta que N>0
M[i][j] =N
sino
repetir
Leer Ingresar nmero, N
hasta que N<0
M[i][j] =N
Fin _ si
Fin _ para
Fin _ para
Fin

Ing. Mendoza Corpus, Carlos


Algoritmos
Rellenar una matriz de la siguiente manera:

* 0 * 0 * 0 * 0 * 0 * * 0 * 0 * 0 *
* 0 * 0 * 0 0 * 0 * 0 * 0 * 0 0 * 0
* 0 * 0 * 0 * 0 * 0 * 0 * 0 * 0 *
* 0 * 0 * 0 0 * 0 * 0 * 0 * 0
* 0 * 0 * 0 * 0 * 0 *
* 0 * 0 * 0 N=5
N=6

* 0 * 0 * 0 *
* 0 * 0 0 * 0
* 0 * 0 * 0 *
* 0 * 0
N=4 N=3
Inicio
char Num[20][20];
int n, i, j, C=0;
repetir
Mostrar Ingresar N:;
Mostrar N;
hasta (N<=0 | | N>=20)
para (i=0; i<=N-1; i++)
para (j=0; j<=N-1; j++)
si (C=0) entonces
Num[i][j]=*
C=1;
sino
Num[i][j]=0
C=0;
Fin _ si
Fin _ para
Fin _ para
para (i=0; i<=N-1; i++)
para (j=0; j<=N-1; j++)
Mostrar Num[i][j]
Fin _ para
Fin _ para
Fin
Ing. Mendoza Corpus, Carlos


Algoritmos

Arreglos Multidimensionales
Este tambin es un tipo de dato estructurado, que est compuesto por n dimensiones. Para hacer
referencia a cada componente del arreglo es necesario utilizar n ndice, uno para cada dimensin
Un array puede ser definido de res dimensiones, cuatro dimensiones, hasta de n-dimensiones.
En general, un array de n- dimensiones requiere que los valores de n-ndices puedan ser
especificados a fin de identificar un elemento individual del array. Si cada componente de un array
tiene n-ndices, el array se dice que es solo de n-dimensiones.
Ejemplo: Mediciones diarias de temperatura

Punto
Tiempo 1 2 3
1 65.5 68.7 62.0
2 68.8 68.9 64.5
3 70.4 69.4 66.3
4 68.5 69.1 65.8






.
Operaciones Con Arreglos
Las operaciones en arreglos pueden clasificarse de la siguiente forma:
Lectura
Escritura
Asignacin
Actualizacin
Ordenacin
Bsqueda
Ing. Mendoza Corpus, Carlos

Lectura
Este proceso consiste en leer un dato de un arreglo y asignar un valor a cada uno de sus
componentes.
La lectura se realiza de la siguiente manera:
Para i 1 hasta n
x arreglo[i]
Fin_para

Escritura
Consiste en asignarle un valor a cada elemento del arreglo.
La escritura se realiza de la siguiente manera:
Para i 1 hasta n
arreglo[i] x
Fin_para
Asignacin

Algoritmos
Ing. Mendoza Corpus, Carlos

No es posible asignar directamente un valor a todo el arreglo, por lo que se realiza de la manera
siguiente:
Para i 1 hasta n
arreglo[i] algn_valor
Fin_para
Actualizacin
Dentro de esta operacin se encuentran las operaciones de eliminar, insertar y modificar datos. Para
realizar este tipo de operaciones se debe tomar en cuenta si el arreglo est o no ordenado.
Para arreglos ordenados los algoritmos de insercin, borrado y modificacin son los siguientes:
Insertar.
Si i< mensaje (arreglo contrario caso En arreglo[i] valor i i+1 entonces>
Borrar.
Si n>=1 entonces
i 1
Encontrado falso
Mientras i<=n y encontrado=falso
Si arreglo[i] = valor_a_borrar entonces
encontrado verdadero
n n -1
Para k desde i hasta n
arreglo[k] arreglo[k-1]
fin
Si_no
i i+1
Fin
Fin
Si encontrado=falso entonces
Mensaje (valor no encontrado)


Algoritmos
Ing. Mendoza Corpus, Carlos

Modificar.
Si N>=1 entonces
i1
Encontradofalso
Mientras i<=N y encontrado=false hacer
Si arreglo[i]=valor entonces
arreglo[i] valor_nuevo
encontradoverdadero
Si_no
ii+1
fin
Fin_Minetras
Fin
Ordenaciones en Arreglos
La importancia de mantener nuestros arreglos ordenados radica en que es mucho ms rpido tener
acceso a un dato en un arreglo ordenado que en uno desordenado.
Existen muchos algoritmos para la ordenacin de elementos en arreglos, enseguida veremos algunos
de ellos.
Seleccin Directa
Este mtodo consiste en seleccionar el elemento ms pequeo de nuestra lista para
colocarlo al inicio y as excluirlo de la lista.
Para ahorrar espacio, siempre que vayamos a colocar un elemento en su posicin correcta lo
intercambiaremos por aquel que la est ocupando en ese momento.
El algoritmo de seleccin directa es el siguiente:
Inicio
{Llenar el vector}
Para i0 hasta tam-1
mini
Para ji+1 hasta tam
Si A[j]<A[min] entonces
min j
Fin_si
tempA[i]
A[i] A[min]
A[min] temp
Fin_para
Fin_para
Fin



Algoritmos
Ing. Mendoza Corpus, Carlos


Ordenacin por Burbuja
Es el mtodo de ordenacin ms utilizado por su fcil comprensin y programacin, pero es
importante sealar que es el ms ineficiente de todos los mtodos.
Este mtodo consiste en llevar los elementos menores a la izquierda del arreglo los
mayores a la derecha del mismo. La idea bsica del algoritmo es comparar pares de
elementos adyacentes e intercambiarlos entre s hasta que todos se encuentren ordenados.
Para i1 hasta tam;
Para j0 hasta tam-1
Si A[j] > A[j+1])
temp A[j];
A[j] A[j+1];
A[j+1] temp;
Fin_si
Fin_para
Fin_Para

Bsquedas en Arreglos
Una bsqueda es el proceso mediante el cual podemos localizar un elemento con un valor especfico
dentro de un conjunto de datos. Terminamos con xito la bsqueda cuando el elemento es
encontrado.
A continuacin veremos algunos de los algoritmos de bsqueda que existen.
Bsqueda Secuencial
A este mtodo tambin se le conoce como bsqueda lineal y consiste en empezar al inicio
del conjunto de elementos, e ir a travs de ellos hasta encontrar el elemento indicado
hasta llegar al final de arreglo.
Este es el mtodo de bsqueda ms lento, pero si nuestro arreglo se encuentra
completamente desordenado es el nico que nos podr ayudar a encontrar el dato que
buscamos.
ind 1
encontrado falso
Mientras no encontrado y ind < N hacer
Si A[ind] = valor_buscado entonces
encontrado verdadero
Si_no
ind ind +1
Fin_si
Fin_Mientras
Si encontrado = verdadero entonces
Escribir El elemento se encuentra en la posicin, mitad

Algoritmos
Ing. Mendoza Corpus, Carlos

fin_Si
Si primero > ultimo entonces
Escribir El elemento no se encuentra en el arreglo
fin_Si
Bsqueda Binaria
Las condiciones que debe cumplir el arreglo para poder usar bsqueda binaria son que el
arreglo este ordenado y que se conozca el nmero de elementos.
Este mtodo consiste en lo siguiente: comparar el elemento buscado con el elemento
situado en la mitad del arreglo, si tenemos suerte y los dos valores coinciden, en ese
momento la bsqueda termina. Pero como existe un alto porcentaje de que esto no ocurra,
repetiremos los pasos anteriores en la mitad inferior del arreglo si el elemento que
buscamos resulto menor que el de la mitad del arreglo, o en la mitad superior si el elemento
buscado fue mayor.
La bsqueda termina cuando encontramos el elemento o cuando el tamao del arreglo a
examinar sea cero.
Leer valor_buscado;
encontrado falso
primero 0
ultimo N-1
Mientras primero <= ultimo y no encontrado hacer
mitad (primero + ultimo)/2
Si arreglo[mitad] = valor_buscado entonces
encontrado verdadero
si_no
Si arreglo[mitad] > valor_buscado entonces
ultimo mitad - 1
si_no
primero mitad + 1
fin_Si
fin_Si
fin_Mientras
Si encontrado = verdadero entonces
Escribir El elemento se encuentra en la posicin, mitad+1
fin_Si
Si primero > ultimo entonces
Escribir El elemento no se encuentra en el arreglo
fin_Si


Algoritmos
Ing. Mendoza Corpus, Carlos

Bsqueda por Hash
La idea principal de este mtodo consiste en aplicar una funcin que traduce el valor del
elemento buscado en un rango de direcciones relativas. Una desventaja importante de este
mtodo es que puede ocasionar colisiones.
funcion hash (valor_buscado)
inicio
hash <- valor_buscado mod numero_primo
fin
inicio <- hash (valor)
il <- inicio
encontrado <- falso
repite
si arreglo[il] = valor entonces
encontrado <- verdadero
en caso contrario
il <- (il +1) mod N
hasta encontrado o il = inicio

Algoritmos
Clases y Objetos
Unas definiciones clsicas, antes de nada.
Clase
Una clase define un miembro real o una entidad abstracta. Es el tipo o clasificacin de datos. Una clase
define el comportamiento y atributos de un grupo de objetos de caractersticas similares.

Objeto
Un objeto es una instancia o variable de una clase. Se dice que pertenece a la clase. Un objeto se distingue de
otros miembros de la clase por sus atributos.

Clases Relacionadas
Una clase describe un conjunto de objetos con un comportamiento comn y atributos relacionados.
Probablemente a estas alturas de la lectura la clase coche resulte ya pesada, as que se hace necesario un
cambio de aires y utilizar otra clase de objetos.

Una clase relacionada es Ftbol, que es una especializacin de la clase Pelota.
Otra clase relacionada es Equipo_deportivo, que es una generalizacin de la clase Pelota
Los objetos rara vez caen dentro de grupos completamente distintos. A menudo existe solapamiento entre el
comportamiento de los grupos de objetos. Esto se ve incluso en la clase Pelota.
La clase PelotaDeTenis es como la clase Pelota, pero modifica su comportamiento para ser utilizada en el
tenis. Por contra, la clase Equipamiento_Deportivo es una generalizacin de Pelota, pero las caractersticas
comunes de todos los objetos del campo de juego se encuentran en ella.
La jerarqua mostrada se explota en la orientacin a objetos para propiciar la reusabilidad a travs de un
mecanismo que es la herencia.
Herencia
La herencia es un mecanismo que permite la definicin de una clase a partir de la definicin de otra ya
existente. La herencia permite a un conjunto de clases relacionadas permanecer bajo un nico paraguas, de
forma que puedan ser consideradas y manejadas colectivamente.
La herencia permite el refinamiento o especializacin de una clase existente:
Se pueden definir los miembros
Se pueden ocultar los miembros
Se pueden aadir nuevos miembros
La herencia es la caracterstica clave de los sistemas orientados a objeto para propiciar la reusabilidad:
Es la parte orientada de los sistemas de objetos
Implementa las relaciones es-un (type of) o es-una-clase-de (instance of)
Ing. Mendoza Corpus, Carlos


Algoritmos

La clase Pelota es la clase padre (o base, o superclase) en la jerarqua de abajo. Sus mtodos y atributos son
heredados por las clases derivadas (hijas o subclases). Para los objetos de las clases derivadas no es evidente
si los mtodos son nativos a Rugby o Ftbol, o si han sido derivados de una clase de nivel superior.
Ftbol es una clase de Pelota. Ftbol tiene todos los atributos y operaciones de Pelota. No obstante, la clase
Ftbol ha ocultado (hecho privada) la operacin desinflar (sacndola del interfaz pblico) y sobrecargando el
mtodo lanzar con una implementacin apropiada para el ftbol.

La herencia es una forma de especializacin en la que las clases hijas son refinadas para tener el
comportamiento y atributos adecuados para la aplicacin de que se trate. Al poder las clases derivadas aadir,
redefinir y ocultar miembros, la herencia se convierte en reusabilidad programable.
Otra razn para redefinir un mtodo es que la clase base proporcione una implementacin no ptima. A la luz
del contexto en que se usen, las subclases pueden proporcionar una implementacin ptima. Por ejemplo,
mejores algoritmos y tcnicas de almacenamiento pueden ser posibles en determinadas clases derivadas.
Modelado con Objetos
Los problemas se pueden modelar en los trminos especficos del dominio. Una de las ventajas de la
aproximacin orientada a objetos es que permite que el problema sea representado en trminos especficos
del dominio. Esto permite a los diseadores construir modelos que se proyectan directamente en el problema
de la aplicacin.
Sistema escuela
Clase Libro
Clase Pizarra
Clase Tiza
Clase Diploma
Clase Borrador
Ing. Mendoza Corpus, Carlos


Algoritmos
Sistema interfaz grfico de usuario
Clase Pantalla
Clase Ventana_De_Texto
Clase Botn
Clase Barra_De_Desplazamiento
Clase Ventana_De_Dialogo
La ventaja de crear modelos cercanos al dominio es que son fciles de comprender, hay menor probabilidad
de cometer errores y descuidos, y los modelos pueden ser verificados por los usuarios que definen los
requisitos.
Clases Abstractas
Una clase abstracta es una descripcin incompleta de algo. Un conjunto de operaciones y atributos que por s
solos no describen nada.
Las clases abstractas no pueden ser instanciadas
No es posible crear objetos o variables
Describen partes de objetos
Creadas por generalizacin, caractersticas comunes, pero no completas
Utilizadas en polimorfismo para definir operaciones comunes
Las clases abstractas se utilizan junto con la herencia
Hay mucho inters en torno al polimorfismo. Los mtodos pueden ser polimrficos si se aplican objetos de
distintas clases para conseguir el mismo significado semntico. Por ejemplo, lanzar puede ser implementado
tanto para un objeto PelotaDeTenis como para el objeto Bisbol.
He aqu un ejemplo de clase abstracta. En un sistema de clase GUI (interfaz grfica de usuario), los mtodos
para la GUI pueden ser abstrados para conseguir la definicin de mltiples interfaces. Por ejemplo, si se
supone que la clase ventana de dilogo es una clase abstracta; esto permite que la implementacin de la clase
sea manejada por el programador.
Los siguientes seran ejemplo de la clase VentanaDeDialogo:

La anterior una ventana habitual y la siguiente una ventana especial y particular de nuestra visin del interfaz.

Ing. Mendoza Corpus, Carlos


Algoritmos
MODULARIDAD

Mdulo
Un mdulo que se supone que representa una funcin lgica es una secuencia lxicamente contina de
instrucciones que se encuentra limitado por elementos de fronteras y adems se caracteriza por disponer de
un nombre o identificador

Es aqul que est constituido por una o varias instrucciones fsicamente contiguas y lgicamente
encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes
puntos de un programa.

Un mdulo puede ser
Un programa
Una funcin
Una subrutina (o procedimiento)
La modularidad se basa en la descomposicin de un problema en una serie de sub problemas; dividindolo en
mdulos que resultan de segmentar el problema en funciones lgicas que son perfectamente diferenciadas.
Esta divisin exige la presencia de un mdulo denominado mdulo de base o principal a objeto de que
controle y se relacione con los dems.
Es una tcnica de programacin que todava se utiliza tanto para la construccin de algoritmos
computacionales bsicos as como apoyo al desarrollo de sistemas de gestin (en el diseo de diagramas
modulares).
La salida del mdulo debe ser funcin de la entrada, pero no de ningn estado interno. En la creacin de los
mdulos deben cumplirse tres aspectos bsicos: descripcin, rendimiento y diseo.
En la descripcin se definen las funciones y objetivos del programa. Para obtener el mximo rendimiento se
ha de comprobar que el programa realice el proceso aprovechando al mximo todos los recursos de los que
dispone. En cuanto al diseo, se debe comprobar la estructura que sigue el mdulo, as como la estructura de
los datos y la forma de comunicaciones entre los diversos y diferentes mdulos.
Conforme se extiende el tamao de los algoritmos, se hace ms difcil su revisin, actualizacin y/o
correccin.
Una poltica comn para solventar este problema consiste en la modularizacin. Esto significa que el
algoritmo se fragmenta en partes llamadas mdulos. En realidad, es un mtodo de diseo que tiende a dividir
el problema, de forma lgica, en partes perfectamente diferenciadas que pueden ser analizadas, programadas
y puestas a punto independiente.
1. Objetivos:
Descomponer el sistema en mdulos:
o Los grupos deben maximizar el enlace y minimizar el acoplamiento.
Determinar las relaciones entre mdulos:
o Identificar y especificar las dependencias entre mdulos.
Ing. Mendoza Corpus, Carlos


Algoritmos
o Determinar la forma de comunicacin entre mdulos (variables llamadas a
funciones, memoria compartida, paso de mensajes)
Especificar las interfaces de los mdulos:
o Facilita la prueba independiente entre los mdulos.
o Mejora la comunicacin e integracin del grupo
2. Caractersticas:
Permite reducir la complejidad global del sistema descentralizado; ejm. Divide y vencers.
Mejora la escalabilidad y la productividad (los mdulos pueden desarrollarse
independientemente por varias personas)
3. Principios para asegurar diseos modulares:
Soporte de lenguaje para unidades modulares.
Los mdulos deben corresponder a unidades sintcticas del lenguaje utilizado.
Pocas interfaces:
Cada mdulo debe comunicarse con tan pocos como sea posible.
Interfaces pequeas (Acoplamiento dbil):
Si dos mdulos se comunican, deben intercambiar la menor informacin posible..
Interfaces explcitas:
Cuando dos mdulos se comunican, debe estar claro en el texto de uno o de ambos.
Ocultacin de la informacin:
Toda la informacin sobre un mdulo debe ser privada al mdulo, a menos que se haya
declarado especficamente como pblica.
Algunas ventajas de utilizar mdulos son:
Un programa modular es fcil de mantener y modificar.
Un programa modular es ms fcil de escribir y depurar (ejecutar, probar y poner a punto).
Un programa modular es ms fcil de controlar. El desglose de un problema en mdulos
permite encomendar los mdulos ms complejos a los programadores ms experimentados y los
ms sencillos a los programadores nveles.
Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas.
Desventajas del uso de mdulos:
No se dispone de algoritmos formales de modularidad, por lo que a veces los programadores no
tienen claras las ideas de los mdulos.
La programacin modular requiere ms memoria y tiempo de ejecucin.

Segmento
El segmento a diferencia del mdulo se caracteriza porque no dispone de un nombre o identificador

Procedimientos
Un procedimiento o sub rutina, es un sub programa que ejecuta un proceso especfico. Ningn valor esta
asociado con el nombre del procedimiento, por consiguiente no puede ocurrir en una expresin. Un
Ing. Mendoza Corpus, Carlos


Algoritmos
procedimiento se llama escribiendo su nombre Ejm. SORT para indicar que un procedimiento denominado
SORT se va a usar.
Cuando se invoca el procedimiento los pasos que los define se ejecuta y a continuacin se devuelve el control
al programa que le llam.
Ing. Mendoza Corpus, Carlos


Algoritmos
Procedimiento Vs Funcin
Los procedimientos y funciones son sub programas, cuyo diseo y misin son similares, sin embargo existen
unas diferencias esenciales entre ellos:
1. Un procedimiento es llamado desde el algoritmo o programa principal, mediante su nombre y
una lista de parmetros actuales o bien con la instruccin llamar_a (call). Al llamar al
procedimiento se detiene momentneamente el programa que se est realizando y el control
pasa al procedimiento llamado, despus de que las acciones del procedimiento se ejecutan, se
regresa a la accin inmediata siguiente a la que se llam.
2. Las funciones devuelven un valor, los procedimientos pueden devolver 0, 1 n valores y en
forma de lista de parmetros.
3. El procedimiento se declara igual que la funcin, pero su nombre no est asociado a ninguno de
los resultados que obtiene.

Funciones
Las funciones son bloques de instrucciones que tienen por objeto el alcanzar un resultado que sustituir a la
funcin en el punto de invocacin (las funciones devuelven un resultado).
Cada funcin se evoca utilizando su nombre en una expresin con los argumentos actuales o reales
encerrados entre parntesis.
Para hacer una referencia a una funcin se invoca mediante un nombre y en caso de existir, una lista de
parmetros actuales necesarios (argumentos). Los argumentos deben coincidir en cantidad, tipo y orden con
los de la funcin que fue definida. La funcin devuelve un valor nico.
Las funciones a que se hace referencia, se conocen como funciones de usuario puesto que son definidas por
l mismo y permiten su uso en forma idntica a las funciones estndares.
Para coordinar e iniciar el procesamiento, se utiliza un mdulo principal que es colocado al final del
algoritmo.
Una llamada a la funcin implica los siguientes pasos:
1. A cada parmetro formal se le asigna el valor real de su correspondiente parmetro actual.
2. Se ejecuta el cuerpo de acciones de la funcin.
3. Se devuelve el valor de la funcin al nombre de la funcin y se retorna al punto de llamada.

Declaracin de funciones
funcin nombre_funcin (par1, par2,par3,...) : tipo_del_resultado
Inicio
accin1
accin2
:nombre_funcin Resultado_Obtenido
Fin

Donde:
par1,par2 .... Lista de parmetros formales o argumentos.
Ing. Mendoza Corpus, Carlos


Algoritmos
nombre_funcin Nombre asociado de la funcin, que ser un nombre de identificador vlido.
accin1, accin2,.. Instrucciones que constituyen la definicin de las funcin, y que debe
contener una accin sola de asignacin que asigne un valor al nombre de
la funcin.
Ing. Mendoza Corpus, Carlos


Algoritmos
Ejemplo:
Obtener el sexto carcter de un nombre y si dicho carcter no existe, se asumir un asterisco como tal.
Funcin SEXTO(n:string):carcter
Inicio
Si longitud(n) >= 6 entonces
SEXTO Subcadena(n,6,1)
Si_noen caso contrario
SEXTO *
Fin

Invocacin a las funciones
Una funcin puede ser llamada slo mediante referencia de la forma siguiente:
nombre_funcin (lista de parmetros actuales)

Donde:

nombre_funcin Funcin que llama.
Lista de param. actuales Constantes, variables, expresiones, valores de funciones, nombres de
funciones o procedimientos.
Una llamada a la funcin implica los siguientes pasos:
A cada parmetro formal se le asigna el valor real de su correspondiente parmetro actual (esta
correspondencia se ver ms tarde y se denomina llamada por valor).
Se ejecuta el cuerpo de acciones de la funcin.
Se devuelve el valor de la funcin y se retorna al punto de llamada.
Ejercicio:
* Calcular la potencia de un nmero.
Funcin POTENCIA(x,n :entero): entero
Inicio
Y=1
Desde i = 1 hasta abs(n) hacer
y = y*x
fin Desde
si n < 0 entonces
y =1/y
Fin si
POTENCIA = y
Fin

Uso de los Parmetros: Formales Normales o Argumentos

Ing. Mendoza Corpus, Carlos


Algoritmos
Paso De Parmetros
Existen diferentes mtodos para el paso de parmetros a subprogramas, un mismo programa puede producir
diferentes resultados bajo diferentes sistemas de paso de parmetros.
Los parmetros se clasifican de la siguiente manera:
1. Entradas: Las entradas proporcionan valores desde el programa que llama y que se utilizan
dentro de un procedimiento. En los subprogramas funcin las entradas son los argumentos en el
sentido tradicional.
2. Salidas: Las salidas producen los resultados del subprograma; de nuevo si se utiliza el caso
una funcin, mientras que con procedimientos pueden calcularse cero, una o varias salidas.
3. Entradas/Salidas: Un solo parmetro se utiliza para mandar argumentos a un programa y para
devolver resultados.
Los mtodos ms empleados para realizar el paso de parmetros son:
Paso por valor (parmetro valor).
Se utiliza en muchos lenguajes de programacin (pascal, basic, modula-2, algol, etc), debido a su
analoga con los argumentos de una funcin, donde los valores se proporcionan en el orden de
clculo de resultados. Los parmetros se tratan como variables locales y los valores iniciales se
proporcionan copiando los valores de los correspondientes argumentos.
Los parmetros formales (locales a la funcin), reciben como valores iniciales los valores de los
parmetros actuales y con ello se ejecutan las acciones descritas en el subprograma.
La llamada por valor no devuelve informacin al programa que llama.
Paso por referencia o direccin (parmetro variable).
Se utiliza cuando se requiere que ciertos parmetros sirvan como parmetros de salida, es decir,
devuelvan los resultados a la unidad o programas que llama. La unidad que llama pasa a la unidad
llamada la direccin del parmetro actual (que est en el mbito de la unidad llamante). Una
referencia al correspondiente parmetro formal se trata como una referencia a la posicin de
memoria, cuya direccin se ha pasado. Entonces una variable pasada como parmetro real es
compartida, es decir, se puede modificar directamente por el subprograma. Si el parmetro actual es
una expresin, el subprograma recibe la direccin de la posicin temporal que contiene el valor de la
expresin.

Arquitectura modular:
La arquitectura es el elemento estable ante los cambios en el ciclo de vida de los mdulos; la clave
est en separar interfaces de implementaciones.
La separacin entre interfaces e implementacin:
- Asla de los cambios.
- Sirve de mecanismo (compilable) de unin entre arquitectura e implementacin.

Ing. Mendoza Corpus, Carlos






Interfaces Implementacin
Arquitectura
Algoritmos




- El papel de la arquitectura es proporcionar informacin de diseo a los desarrolladores,
para que stos puedan hacer cambios y correcciones a los mdulos, sin romper la
arquitectura.
- En cada escala de un sistema modular, se puede definir una arquitectura y una
implementacin:
- La implementacin es la realizacin de los componentes modulares.
- La arquitectura es la abstraccin que define las interfaces entre componentes.

Plantear y Solucionar Ejercicios Aplicando Modularidad

1. Disear el algoritmo que calcule el factorial de un numero entero:

Entero funcion factorial (E entero: n)
Var entero f, i
Inicio
Si n=0 entonces
Devolver (1)
Si_no
Desde i 1 hasta n hacer
f f * i
fin_desde
Devolver (f)
Fin_si
Fin_funcion


Ing. Mendoza Corpus, Carlos


Algoritmos

RECURSIVIDAD

Puede definirse un programa en trminos recursivos, como una serie de pasos bsicos, o paso base (tambin
conocido como condicin de parada), y un paso recursivo, donde vuelve a llamarse al programa. En un
computador, esta serie de pasos recursivos debe ser finita, terminando con un paso base. Es decir, a cada paso
recursivo se reduce el nmero de pasos que hay que dar para terminar, llegando un momento en el que no se
verifica la condicin de paso a la recursividad. Ni el paso base ni el paso recursivo son necesariamente
nicos.

Por otra parte, la recursividad tambin puede ser indirecta, si tenemos un procedimiento P que llama a otro Q
y ste a su vez llama a P. Tambin en estos casos debe haber una condicin de parada.

Existen ciertas estructuras cuya definicin es recursiva, tales como los rboles, y los algoritmos que utilizan
rboles suelen ser en general recursivos.

La funcin FACTORIAL de N expresada en trminos recursivos sera:
entero funcion factorial(E entero: n)
inicio
si (n = 0)
retornar 1
sino
retornar (n * factorial(n-1) )
fin_si
fin_funcion
_______________________________

Recursividad
El concepto de recursividad es muy importante en la programacin funcional, y se puede definir Como el
proceso de resolver un problema reducindolo a uno ms subproblemas que son idnticos en su estructura
al problema original y ms simple de resolver.
Una vez que sea subdividido el problema original, se utilizar la misma tcnica de descomposicin para
subdividir cada uno de estos subproblemas en otros que son menos complejos, hasta que los subproblemas
llegan a ser tan simples que se pueden resolver sin realizar ms subdivisiones, y la solucin general del
problema se obtiene juntando todos los componentes resueltos.
Una funcin o procedimiento que se puede llamar a s misma se llama recursivo. La recursividad es una
herramienta muy potente en algunas aplicaciones, sobre todo de clculo. La recursin puede ser utilizada
como una alternativa a la repeticin o estructura repetitiva.
La razn de que existan lenguajes que admitan la recursividad se debe a la existencia de estructuras
especficas tipo pilas (stack) para este tipo de procesos y memorias dinmicas.
Ing. Mendoza Corpus, Carlos


Algoritmos
La recursividad es una manera elegante, intuitiva y concisa de plantear una solucin, y es uno de los pilares
de la programacin funcional. Pero no quiere decir que sea un sistema eficiente, es decir, que el nmero de
operaciones que hay que hacer sea inferior que si se utiliza otra forma de resolverlo, como seria mediante una
estructura repetitiva. Al contrario la recursividad es cara y exige un mayor procesamiento.
Ing. Mendoza Corpus, Carlos


Algoritmos
Ing. Mendoza Corpus, Carlos


Ejemplo:
//Funcin Fibonacci recursiva
FIB (X):
Inicio_Fibonacci
Si (X = 0 X = 1) entonces
FIB = X
Si no
FIB = FIB (X-1) + FIB (X-2)
Fin_si
Fin_Fibonacci

//Funcin Fibonacci no recursiva
FIB (X):
Inicio_Fibonacci
Si (X = 0 X = 1) entonces
FIB = N
Si no
A = 0
B = 1
Para (i = 2; i <= X; i++)
C = A + B
A = B
B = C
Fin_para
FIB = C
Fin_si
Fin_Fibonacci

Vous aimerez peut-être aussi