MÓDULO II: METODOLOGÍA DE DISEÑO DE ALGORITMO
2.1Confección de un programa
2.1.1. Fase de resolución de problema
2.1.1.1. Análisis del problema
Definición del problema
Requiere que el problema sea definido y comprendido claramente para que pueda ser analizado con todo
detalle.
Análisis del problema
El propósito del análisis de un problema es ayudar al programador para llegar a una cierta comprensión de la
naturaleza del problema. El problema debe estar bien definido si se desea llegar a una solución satisfactoria.
Para poder definir con precisión el problema se requiere que las especificaciones de entrada, proceso y salida
sean descritas con detalles.
a) Entrada
Entrada, son todos los datos que hay que ingresar para la resolución del problema.
b) Proceso
Proceso, son los diferentes procedimientos en los cuales usare los datos proporcionados por el usuario en el
paso anterior para resolver el problema.
c) Salida
Salida, la resolución del problema.
Una buena definición del problema, junto con una descripción detallada de las especificaciones de entrada y
salida, son los requisitos mas importantes para llegar a una solución eficaz.
El análisis del problema exige una lectura previa del problema a fin de obtener una idea general de lo que se
solicita. La segunda lectura deberá servir para responder a las preguntas:
¿Qué información debe proporcionar la resolución del problema?
¿Qué datos se necesitan para resolver el problema?
La respuesta a la primera pregunta indicara los resultados deseados o las salidas del problema. La respuesta a
la segunda pregunta indicara que datos proporcionan o las entradas del problema.
En esta fase debemos aprender a analizar la documentación de la empresa, investigar, observar todo lo que
rodea el problema.
Todo algoritmo debe obedecer a la estructura básica de un sistema, es decir: entrada, proceso y salida.
SALIDA Resultados arrojados por el proceso como solución.
PROCESO Pasos necesarios para obtener la solución del problema o la situación planteada.
ENTRADA Corresponde al insumo, a los datos necesarios que requiere el proceso para ofrecer los resultados
esperados.
Partes de un Algoritmo
Tomando como ejemplo el algoritmo de la sumatoria de los dos números
Inicio
Leer A
Leer B
Suma= A + B
Escribir Suma Fin
Tenemos que:
ENTRADA
Valores de las variables A y B.
PROCESO
Asignar a la variable Suma, el valor de A mas el valor de B.
SALIDA
Impresión del valor de la variable Suma, que contiene la sumatoria de los valores de A y B.
2.1.1.2. Diseño lógica
a) Pseudocódigo
El pseudocódigo es una herramienta utilizada para el diseño de programas que permite al programador expresar sus
pensamientos de una forma clara utilizando su lenguaje natural y mostrando el orden de ejecución de las sentencias
del programa sin ninguna ambigüedad. El principal objetivo del pseudocódigo es el de representar la solución a un
algoritmo de la forma más detallada posible, y a su vez lo más parecida posible al lenguaje que posteriormente se
utilizara para la codificación del mismo.
b) Diagrama de flujo
Un diagrama de flujo (flowchart, del inglés) es una técnica de representación gráfica de la lógica o pasos de un
algoritmo. El diagrama de flujo consiste de un conjunto de símbolos (tales como rectángulos, paralelogramos, rombos,
etc.) y flechas que conectan estos símbolos. Los símbolos representan las diferentes acciones que se pueden ejecutar
en un algoritmo (lectura, asignación, decisión, escritura, etc.), mientras que las flechas muestran la progresión paso a
paso a través del algoritmo.
2.1.2. Fase de implementación del programa
a) Codificación
Es el algoritmo traspasado a la computadora a través de un lenguaje de programación, debe ser escrito de acuerdo a
las reglas gramaticales o sintaxis del mismo.
Generamos un algoritmo el cual se denomina código, y al pasarlo a un lenguaje de programación se le llama código
fuente.
b) Compilación y Ejecución
Compilación, el lenguaje de programación seleccionado revisa que ya no halla errores en el código fuente.
Ejecución, ejecutar el programa después del ser compilado.
c) Depuración y diseño de datos de prueba
Revisar que el programa de los resultados que el usuario quiere, hay que revisar si hay algún error el cual puede ser
de tipo lógico, de semántica o ejecución.
Corregir los errores encontrados en la etapa anterior, si hubiese algún error se tiene que regresar hasta la etapa que
sea necesaria para que la solución sea la que el usuario requiere.
d) Documentación
Son todos los comentarios, referencias desde que se dio el problema hasta que se encontró la solución.
a) documentación interna, es el encabezado, descripción, declaración del problema, son todos los comentarios que
puedan llegar a servir dentro del código fuente.
b) documentación externa, son los manuales que se hacen para una mejor ejecución del programa, ahí se explicara
como usar el programa.
2.2. Expresiones aritméticas
2.2.1. Operadores aritméticos
Son utilizadas para construir formulas matemáticas. Las variables y constantes utilizadas son de naturaleza numérica,
es decir números enteros o reales, y las operaciones a efectuar son de orden aritmético.
Algebraicos
+ suma
- resta
* multiplicaciòn
/ division
^ potenciaciòn
% ó MOD Módulo (resto de la división entera)
2.2.2. Expresiones aritméticas
se entiende por expresión aritmética a aquella donde los operadores que intervienen en ella son numéricos, el
resultado es un número y los operadores son aritméticos.
Ejemplo
+ ejemplo Suma total <- cant1 + cant2
- ejemplo Resta stock <- disp - venta
* ejemplo Multiplicación area <- base * altura
/ ejemplo División porc <- 100 * parte / total
^ ejemplo Potenciación sup <- 3.41 * radio ^ 2
% ó MOD ejemplo Módulo (resto de la división entera) resto <- num MOD div
2.3. Expresiones lógicas
2.3.1. Variable lógica
La lógica binaria trabaja con variables binarias y operaciones lógicas del Álgebra de Boole. Así, las variables sólo
toman dos valores discretos: V (verdadero) y F (falso); aunque también se pueden denotar como sí y no, ó 1 y 0
respectivamente.
2.3.2. Operadores relacionales
Los operadores relacionales, también denominados operadores binarios lógicos y de comparación, se utilizan para
comprobar la veracidad o falsedad de determinadas propuestas de relación (en realidad se trata respuestas a
preguntas). Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de
argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto/falso, es decir, producen un
resultado
Ejemplo
Operador Significado Ejemplo
Relacionales
> Mayor que 3>2
< Menor que 'ABC' <'abc'
= Igual que 4=3
<= Menor o igual que 'a'<='b'
>= Mayor o igual que 4>=5
<> Distinto que 'a'<>'b'
2.3.3. Operadores lógicos
Los operadores lógicos son tres; dos de ellos son binarios, el último (negación) es unario. Tienen una doble posibilidad
de representación en el Estándar C++ actual: la representación tradicional que se indica a continuación.
Lógicos
&óY Conjunción ( y ). (7>4) & (2=1) //falso
| óO Disyunción ( o). (1=1 | 2=1) //verdadero
~ ó NO Negación (no). ~(2<5) //falso
2.3.4. Expresión lógica con operadores lógicos y relacionales.
Otras Funciones
Las funciones en el pseudocódigo se utilizan de forma similar a otros lenguajes. Se coloca su nombre seguido de
los argumentos para la misma encerrados entre paréntesis (por ejemplo trunc(x)). Se pueden utilizar dentro de
cualquier expresión, y cuando se evalúe la misma, se remplazará por el resultado correspondiente. Actualmente,
todas la funciones disponibles son matemáticas (es decir que devolverán un resultado de tipo numérico) y reciben
un sólo parámetro de tipo numérico. A continuación se listan las funciones integradas disponibles:
Función Significado
RC(X) o RAIZ(X) Raíz Cuadrada de X
ABS(X) Valor Absoluto de X
LN(X) Logaritmo Natural de X
EXP(X) Función Exponencial de X
SEN(X) Seno de X
COS(X) Coseno de X
TAN(X) Tangente de X
ASEN(X) Arcoseno de X
ACOS(X) Arcocoseno de X
ATAN(X) Arcotangente de X
TRUNC(X) Parte entera de X
REDON(X) Entero más cercano a X
AZAR(X) Entero aleatorio entre 0 y x-1
2.4. Prueba de escritorio
¿Que es una prueba de escritorio? Es a la comprobación que se hace de un algoritmo para saber si está bien
hecho. Esta prueba consiste en tomar datos específicos como entrada y seguir la secuencia indicada en el
algoritmo hasta obtener un resultado, el análisis de estos resultados indicará si el algoritmo está correcto o si
por el contrario hay necesidad de corregirlo o hacerle ajustes
Es Importan de realizar una prueba de escritorio para eliminar variables no necesarias, crear variables faltantes,
ocupar los ciclos adecuados y principalmente legar al objetivo del problema.
Antes de ocupar esta herramienta hay que seguir los siguientes pasos previos:
2.4.1. Diseño de los datos de prueba
Prueba: es la ejecución de un programa para encontrar errores en su funcionamiento.
Validación y verificación: la verificación halla errores del programa en una simulación y la validación los halla en un
ambiente real.
Certificación: es una garantía del buen funcionamiento y aplicabilidad del software, una empresa asigna especialistas
que examinan el software para que haga lo que se dice que haga. Se realiza un caso de prueba con creación de datos
para determinar el procesamiento. Hay dos formas, prueba de código y prueba de especificación.
1- Prueba de código: se prueba la parte lógica del programa, se desarrollan casos de prueba para conocer las rutas
(combinación de condiciones). Es imposible analizar todas las rutas ya que el programa puede contener
innumerables rutas.
2. Pruebas de especificación: analiza la funcionabilidad del programa en diferentes condiciones.
Preparar Valores
1 A= 4 B= 10 Salida = 14
2 A= 0 B= -2 Salida = -2
Prueba escritorio
Paso Entrada Variable OPERACIÓN Valor Salida
INICIO
2 INGRESE PRIMER NUMERO
3 4 A 4
4 INGRESE SEGUNDO NUMERO
5 10 B 10
6 C A+B 14
7 LA SUMA ES 14
8 FIN
EJEMPLOS RESUELTOS
1- Taller # 1
Escribir un programa que lea dos (2) variables y que las muestre Diagrama de Flujo :
por pantalla.
Proceso operar
Escribir 'Introduzca la variable1';
Leer V1;
Escribir 'Introduzca la variable2';
Leer V2;
Escribir ' Las variables son ', V1, ' Y ', V2 ;
FinProceso
2- Al problema anterior agréguele el titulo en pantalla ‘ Lectura’ .
En esta operación se analiza el problema hasta ser entendido, en esta ocasión el problema esta pidiendo que se lean dos (2)
variables, para luego ser imprimadas en pantalla y agregar un titulo que se imprima en pantalla.
En este problema se utilizan las siguientes instrucciones:
Proceso Agregartitulo //Inicia el proceso poniendo un titulo Diagrama de Flujo:
Escribir 'Lectura';
Escribir 'Introduzca valor';
Leer V1;
Escribir 'Introduzca otro valor';
Leer V2;
Escribir 'Los valores son: ' , V1 , ' y ' , V2;
FinProceso //El proceso ha finalizado.
3- Modifique el problema anterior para que obtenga la suma de las dos variables, cambie él titulo por ‘Suma’ y antes del resultado
debe aparecer un mensaje ‘El valor de la suma es xxx’, xxx.
Esta vez el programador, después de analizar muy bien el problema, este le indica que una vez introducido los dos valores debe
se deben sumar, cambiar su titula e imprimir su resultado así:
Proceso Calcularycambiartitulo // Se inicia el proceso con un titulo que indique el proceso a desarrollar.
Escribir 'Suma '; DIAGRAMA DE FLUJO
Escribir 'Introduzca valor';
Leer Num1;
Escribir 'Introduzca otro valor';
Leer Num2;
Adi <-Num1 + Num2;
Escribir 'El valor de la suma es ' , Adi;
FinProceso // Aquí se le da fin al proceso.
MÓDULO III: DISEÑO DE ALGORITMO
3. Técnicas de Diseño de Algoritmo
3.1.1 Diagrama de Flujo
Con la aparición de los lenguajes de programación estructurada el uso de los diagramas de flujo ha disminuido
considerablemente, dando paso a otras técnicas de representación (como por ejemplo, diagramas N-S, tablas
procesos-entidades, diagramas estructurales, diagramas de burbujas, etc. ) que capturan en un modo más adecuado
la esencia y principios de la programación estructurada.
Ejemplo del caso anterior utilizando diagrama de flujo
3.1.2 Pseudocódigo
El pseudocódigo es un lenguaje de especificación de algoritmos, comúnmente con una sintaxis para las estructuras de
control similar a la expresada en el lenguaje de programación al que será traducido el algoritmo. Cuando un algoritmo
es expresado en pseudocódigo, entonces la traducción de éste al lenguaje de programación seleccionado resultará
relativamente fácil.
Las acciones y las estructuras de control se representan en el pseudocódigo con palabras reservadas del inglés,
similares a las utilizadas en los lenguajes de programación estructurada. Entre estas palabras reservadas, las más
usadas son:
inicio
leer
escribir
si – entonces - sino
mientras que
repetir hasta
fin
El pseudocódigo se compone de:
- Cabecera
- Declaraciones
- Cuerpo
La cabecera es la parte del algoritmo que posee el nombre de éste.
Las declaraciones son las variables y constantes que utilizará el algoritmo para resolver el problema.
El cuerpo son el conjunto de instrucciones o acciones que están entre el Inicio y el Fin.
La estructura del pseudocódigo es la siguiente:
La sección “Proceso SinTitulo” es la cabecera del algoritmo
La sección “acción 1, acción 1,…” es el cuerpo del algoritmo
En este caso como utilizaremos el Pseint la sección de declaraciones del algoritmo no se toma en cuenta, ya que el
software se encarga de asignarle el tipo de dato a cada variable dependiendo del uso que se le dé.
EJEMPLO
Realizar la sumatoria de dos números y mostrar el resultado
3.2Instrucciones fundamentales
3.2.1 Salida
Nos permite mostrar en pantalla algún tipo de dato, o varios
La instrucción Escribir permite mostrar valores al ambiente.
Escribir <exprl> , <expr2> , ... , <exprN> ;
Esta instrucción informa al ambiente (en este caso escribiendo en pantalla) los valores obtenidos de evaluar N
expresiones. Dado que puede incluir una o más expresiones, mostrará uno o más valores. Si hay más de una expresión,
se escriben una a continuación de la otra sin separación, por lo que el algoritmo debe explicitar los espacios necesarios
para diferenciar dos resultados si así lo requiere.
Si en algún punto de la línea se encuentran las palabras clave "SIN SALTAR" o "SIN BAJAR" los valores se muestran
en la pantalla, pero no se avanza a la línea siguiente, de modo que la próxima acción de lectura o escritura continuará
en la misma línea. En caso contrario, se añade un salto de línea luego de las expresiones mostradas.
Escribir Sin Saltar <exprl> , ... , <exprN>;
Escribir <exprl> , ... , <exprN> Sin Saltar;
Puede utilizarse indistintamente las palabras Imprimir y Mostrar en lugar de Escribir si su perfil de lenguaje permite
sintaxis flexible.
Ejemplo
• Escribir ‘hola mundo’;
• Escribir ‘hola mundo’, ‘hola’, 2, c;
3.2.2 Entrada
Nos permite recibir valores por teclado y guardarlos en variables.
La instrucción Leer permite ingresar información desde el ambiente.
Leer <variablel> , <variable2> , ... , <variableN> ;
Esta instrucción toma N valores desde el ambiente (en este caso el teclado) y los asigna a las N variables
mencionadas. Pueden incluirse una o más variables, por lo tanto el comando leerá uno o más valores.
Si una variable donde se debe guardar el valor leído no existe, se crea durante la lectura. Si la variable existe se pierde
su valor anterior ya que tomará el valor nuevo, razón por la cual se dice que la lectura es "destructiva" (destruye el
valor que tenía previamente la variable).
Si se utiliza sintaxis flexible se permite opcionalmente separar las variables a leer simplemente con espacios en lugar
de comas. Esto se configura en el cuadro de Opciones del PSeudocódigo.
El ejemplo Suma muestra un programa muy simple que lee dos números y calcula y muestra la suma de los mismos.
Ejemplo
• Leer a; recibe el valor y lo almacena en a.
• Leer a, b, c; recibe 3 valores y los guarda en la variable que corresponda.
3.2.3 Asignación
La instrucción de asignación permite almacenar un valor en una variable.
<variable > <- <expresión> ;
Al ejecutarse la asignación, primero se evalúa la expresión de la derecha y luego se asigna el resultado a
la variable de la izquierda. El tipo de la variable y el de la expresión deben coincidir.
Si la variable de la izquierda no existía previamente a la asignación, se crea. Si la variable existía se pierde su valor
anterior y toma el valor nuevo, razón por la cual se dice que la asignación es "destructiva" (destruye el valor que tenía
la variable de la izquierda). Los contenidos de las variables que intervienen en la expresión de la derecha no se
modifican.
Ejemplo:
c <- 2; por lo tanto c=2
3.2.4 Transferencia condicional simple y anidada
Controlar el orden en el que se ejecutan las sentencias de un programa.
Estructuras de selección simples
1. Si – Entonces: es una estructura de control que depende del valor de una condición lógica.
Es decir se debe evaluar una condición y si la cumple, deberá ejecutar todas las acciones después del “Entonces” y si
no las cumple debe ejecutar todas las accione después del “Sino”
Al ejecutarse esta instrucción, se evalúa la condición y se ejecutan las instrucciones que correspondan: las
instrucciones que le siguen al Entonces si la condición es verdadera, o las instrucciones que le siguen al Sino si la
condición es falsa. La condición debe ser una expresión lógica, que al ser evaluada retorna Verdadero o Falso.
La cláusula Entonces debe aparecer siempre, pero la cláusula Sino puede no estar. En ese caso, si la condición es falsa
no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente.
Ejemplo: El siguiente algoritmo en pseudocódigo pseint, permite determinar si un número es divisible por otro
número.
Proceso Modulo_MOD
x<-0;
z<-0;
Escribir "Ingrese valores para X y Z";
Leer x,z;
Si (x Mod z) = 0 Entonces
Escribir x, " ES exactamente divisible para ", z;
Sino
Escribir x, " NO es exactamente divisible para ", z;
FinSi
FinProceso
2. Selección múltiple: Permiten la decisión entre acciones alternativas, además el de llevar acabo una acción si
una condición (lógica) tiene un valor (verdadero, true, V, 1) o (falsa, false, F, 0). operadores lógicos <, >, <>, =,
>=, <=,
Son estructuras en las que si la evaluación de la expresión lógica resulta ser verdadera se ejecuta la sentencia 1.
Mientras que si el resultado de su evaluación es falsa se evalúa otra expresión lógica, si el resultado de esta ultima es
verdadera, se ejecuta la sentencia 2, si es falso se evalúa otra expresión y así sucesivamente.
Si {expresion_logica} entonces
<acción(es) SI 1>
Si no
Si {expresion_logica} entonces
<acción(es) SI 2>
Si no
Si {expresion_logica} entonces
<acción(es) SI n+1>
Si no
….
Finsi
Fin Si
Finsi
Ejemplo: Programa que permite determinar el tipo de triangulo atendiendo a sus lados: Todos iguales equiláteros,
dos iguales isósceles y todos desiguales escaleno.
Proceso figura_es
Escribir 'ingrese los tres lados';
Leer a,b,c;
Si (a=b) & (a=c) Entonces
Escribir 'es un equilatero';
Sino
Si (a=b) | (b=c) | (a=c) Entonces
Escribir 'es un isoceles';
Sino
Escribir 'es un escaleno';
FinSi
FinSi
FinProceso
Ejemplo: El siguiente algoritmo en pseudocódigo pseint, permite determinar el mayor de tres números leídos.
Proceso Mayor_TresNum
a<-0;
b<-0;
c<-0;
mayor<-0;
Escribir "Ingrese tres numero";
Leer a,b,c;
Si a > b Entonces
Si a > c Entonces
mayor<-a;
Sino
Si c > b Entonces
mayor<-c;
sino
mayor<-b;
FinSi
FinSi
FinSi
Escribir "El mayor es A = “mayor;
FinProceso