You are on page 1of 39

PROGRAMA

DE INGENIERA




ALGORITMOS


Tomada de http://www.conalepqueretaro.edu.mx/images/stories/informatica.jpg

Introduccin

El desarrollo programas computacionales a partir de la identificacin del problema,


exige el cumplimiento formal de una serie de etapas que contribuyen a su solucin.
En esta unidad los participantes desarrollarn la capacidad de clasificar los problemas
y proponer soluciones ptimas dentro del marco metodolgico de la construccin de
algoritmos, para optimizar la solucin a partir de la correcta eleccin y aplicacin de
las estructuras de control.

Finalmente, desarrollar la capacidad para hacer pruebas de escritorio que permiten
comprobar y afinar el algoritmo desarrollado, para ser traducido en un lenguaje de
programacin de alto nivel, a partir del pseudocdigo creado.


PROGRAMA DE INGENIERA


Objetivos

Objetivo general

Utilizar procesos metodolgicos para el anlisis y diseo de algoritmos, para aplicar
diferentes estructuras que optimicen la solucin en un lenguaje de programacin.

Objetivos especficos

Conocer las tcnicas bsicas para el anlisis, diseo y construccin de


algoritmos.

Aplicar estructuras de control para la optimizacin de acciones repetitivas en
la solucin de un problema en un medio computacional.

Clasificacin de problemas

Solucionar un problema es encontrar una o varias respuestas desconocidas a travs


de representaciones, smbolos, figuras demostraciones, decisiones, algoritmos etc., las
que cumplen con ciertas condiciones o relaciones previamente conocidas. La
programacin de computadores es una actividad relativamente nueva, pero la
programacin es una forma especializada del antiguo proceso de resolucin de
problemas1 que exige cuatro pasos:

Comprensin del problema: es la etapa ms importante, consiste en definir
claramente el problema y su proceso de solucin.

Disear el plan para resolver el problema: en esta etapa se deben resolver
interrogantes como: con qu recursos contamos?, qu informacin tenemos?,
qu personal se requiere?, cmo utilizo los recursos? y cules son las
limitaciones o restricciones?

Ejecucin del plan: al definir con claridad el paso anterior, se ponen en
marcha todas las acciones que conducen a la solucin del problema.

Evaluacin del plan: este paso plantea preguntas como: el problema se
solucion correctamente? o el resultado obtenido satisface la solucin al
problema planteado?

1
Wilson Mauricio Pimiento Crdenas. Fundamentos de la lgica para programacin de computadores. Universidad Piloto.
2009. 1 edicin.

PROGRAMA DE INGENIERA


A partir de lo anterior los problemas se clasifican como2:

Indecidibles: Son problemas de los cuales no se sabe si existe una solucin.

Ejemplo: Existe en la expansin decimal de p, una secuencia de tamao n, para
cualquier nmero natural n?

- Entrada: el nmero n.
- Proceso: verdadero si existe en la expansin decimal de p una secuencia de
tamao n del nmero n, parta todo nmero natural n. Falso en el otro caso.
- Salida: un valor de verdad (falso o verdadero).

En este tipo de problemas no se puede decidir si en el primer milln de dgitos de
p se encuentra una secuencia como la buscada, ni nada garantiza que en el
siguiente milln de dgitos se encuentre o no tal secuencia y as sucesivamente,
por lo que no se puede saber si existe o no tal secuencia.

Insolubles: son problemas en los que no existe una solucin.

Ejemplo: una partcula se mueve en el espacio de manera aleatoria. Si en el
instante de tiempo t se encuentra en la posicin x, cul ser la posicin exacta de
dicha partcula en 15 segundos despus?

- Entrada: posicin en el instante de tiempo t.
- Proceso: la partcula se mueve en el espacio de manera aleatoria.
- Salida: una posicin.

Este tipo de problema es insoluble, en razn a que no existe forma de predecir la
posicin de la partcula, pues que su movimiento es aleatorio y arbitrario.

Solubles: son problemas sobre los cuales s existe alguna solucin. Se dividen
en algortmico (cuando existe un algoritmo para darle solucin) y no
algortmico (tiene solucin, pero no se expresa en un algoritmo).

Ejemplo soluble algortmico: sean los puntos P = (a, b) y Q = (c, d) que define
una recta, encontrar un segmento de recta perpendicular a la anterior que pase
pro el punto medio de los puntos datos:

- Entrada: Los puntos P y Q
- Proceso: El segmento de recta debe pasar por el punto medio entre P y Q y
debe ser perpendicular a la recta trazada entre P y Q.


2
Wilson Mauricio Pimiento Crdenas. Fundamentos de la lgica para programacin de computadores. Universidad Piloto.
2009. 1 edicin.

PROGRAMA DE INGENIERA


- Salida: El punto medio.

Este tipo de problema es algortmico soluble, en razn a que existe un
procedimiento que permite encontrar la solucin.

Ejemplo soluble no algortmico: de un conjunto de cuatro manzanas,
determinar cul es la ms bella.

- Entrada: cada una de las cuatro manzanas.
- Proceso: no tiene.
- Salida: una de las manzanas.

Este tipo de problema planteado es categorizado como soluble no algortmico,
debido a que no sigue un procedimiento perfectamente definido para encontrar la
respuesta.

La solucin de un problema a travs de un algoritmo debe describir las tres
partes que lo componen:

- Elementos conocidos (entrada).
- Procedimientos y condiciones (proceso).
- Repuesta (salida).


Entrada PROCESO
Salida



Ejemplo 1. Hacer un plato tpico colombiano, de acuerdo a las anteriores etapas,
tiene la siguiente clasificacin.

- Entrada: ingredientes y utensilios de cocina.
- Proceso: combinar los ingredientes y hacer uso de los utensilios de cocina de
acuerdo a la receta.
- Salida: el plato colombiano.

Ejemplo 2. Sea el nmero A = 5 y el nmero B = 10, encontrar el promedio de los
dos nmeros.

- Entrada: nmero A y nmero B.
- Proceso: sumar el nmero A con el nmero B y dividir el resultado
entre 2.
- Salida: promedio de los dos nmeros.

PROGRAMA DE INGENIERA


Metodologa para el desarrollo de algoritmos

Desarrollar un programa de computador es una tarea que exige tener en cuenta de


manera varios elementos simultneamente, lo que hace indispensable el uso de una
metodologa para la solucin.

La metodologa es un conjunto de mtodos, principios y reglas que permiten enfrentar
sistmicamente el desarrollo de un algortmico, el cual posteriormente se convierte en
un programa de computador que da solucin al problema planteado. Este proceso
exige las siguientes etapas en la solucin de un problema a travs del computador:

Anlisis del problema
Diseo y desarrollo del algoritmo
Conversin del algoritmo a un programa de computador (codificacin).
Prueba y depuracin del programa
Documentacin

Documentacin

Prueba y
Conversin del depuracin del
algoritmo aun programa
programa de Etapa 5
computador
Diseo y (codificacin)
desarrollo del
Etapa 4
algoritmo
Anlisis del
problema Etapa 3
Etapa 2

Etapa 1

Proceso para la elaboracin de un programa de computador.



Las etapas 1 y 2 son las ms complejas y las de mayor detenimiento para solucionar
un problema en computador, porque responden cada uno de los interrogantes
sugeridos en la solucin de problemas para articular el desarrollo. Las etapas 3 y 4
transforman el problema a un algoritmo, el cual se traduce a un lenguaje de
programacin computacional (C++, Vistual Basic, Java etc) que validar los datos para
determinar si satisface la solucin al problema.



PROGRAMA DE INGENIERA


Anlisis del problema

Esta etapa consiste en comprender totalmente el problema a resolver, tras


identificar con claridad y exactitud las partes que componen el algoritmo (datos de
entrada, procesos a desarrollar con los datos de entrada y los resultados o salidas
que se obtienen con la solucin del problema).

En esta etapa se indaga a los expertos en el tema, mediante entrevistas, consultas,
observaciones, etc., para comprender el dominio del problema y proponer una
solucin satisfactoria que responda a la pregunta qu hace el programa?

Cuando un usuario plantea un problema al programador (como llevar el inventario de
una empresa mediante un programa por computador), el usuario es quien conoce el
dominio del problema (adems, es habitual que no tenga conocimientos de
programacin). As mismo, el programador -quien resolver el problema- es un
experto en programacin, no tiene el dominio del problema. El programador necesita
del conocimiento del experto en el dominio del problema, para llegar a una solucin
computacional. Al final de esta etapa, responder los siguientes interrogantes:

El problema est bien definido?
Cules son los datos necesarios para resolver el problema (entrada)?
Cules son los procesos u operaciones a realizar con los datos (proceso)?
Qu datos informacin proporciona la solucin (salida)?

Problema 1: Se requiere hacer la suma de dos nmeros enteros e imprimir su resultado.

Entrada: Nmero_A y Nmero_B.


Proceso: Suma = Nmero_A + Nmero_B.
Salida El resultado que est almacenado en la variable Suma.

Variable: es una posicin de memoria que almacena un valor de un determinado tipo
de dato, que puede variar en la ejecucin del programa. Los tipos de datos pueden ser
nmeros, caracteres, etc.

Problema 2: Se requiere el promedio de dos nmeros enteros e imprimir su resultado.

Entrada: Nmero_A y Nmero_B.

Proceso:
Suma = Nmero_A + Nmero_B.
Promedio = suma/2
Salida El resultado que est almacenado en la variable Promedio.

PROGRAMA DE INGENIERA


Diseo y desarrollo del algoritmo

La etapa de diseo consiste en expresar la solucin del problema - previamente


analizado en una secuencia lgica y algortmica (como un pseudocdigo o diagrama de
flujo)- a la pregunta cmo hace el programa la tarea solicitada?

Para responder la pregunta anterior (junto con la ptima solucin), es recomendable
dividir el problema en subproblemas y stos, a su vez, en otros problemas de ms
bajo nivel, hasta llegar a la implementacin de la solucin. Este mtodo se conoce
tcnicamente como diseo descendente o modular3. As, cualquier programa tendr
un mdulo o programa principal que enlaza a otros subprogramas (o mdulos) que,
tras realizar la tarea asignada, devuelven el control al programa principal o mdulo
que lo invoc. La ventaja del diseo descendente o modular radica en la facilidad para
que cada mdulo pueda ser codificado, validado y depurado de manera
independiente; de este modo, al final ser integrado al mdulo o programa principal.

La particularidad del diseo radica en que algoritmo debe ser representado en algn
mtodo que permita independizarlo del lenguaje de programacin al que
posteriormente ser codificado. Para conseguir este objetivo, el algoritmo debe ser
representado grfica o alfanumricamente, de modo que las secuencias y acciones no
dependan de las sintaxis de algn lenguaje de programacin, sino que la descripcin
sirva fcilmente para la transformacin de ste a un lenguaje determinado. Los
mtodos usados para representar el algoritmo son:

Diagramas de flujo.

Pseudocdigo

Diagrama Nassi-Schneiderman (N-S)

Frmulas

Lenguaje natural


La figura 1 muestra un ejemplo de la representacin en diagrama de flujo. El
diagrama representa la solucin del problema que conduce a la suma de dos nmeros
enteros.





3
Joyanes A. Luis. Programacin en algoritmos, estructuras de datos y objetos. McGraw Hill 2000.

PROGRAMA DE INGENIERA





Fin


Leer nmero_A Entrada
Leer nmero_B


Proceso
Suma = Nmero_A + Nmero_B


Salida
Escribir suma


Figura 1. Solucin del problema suma en diagrama de flujo.
Fin

La representacin del mismo ejemplo en pseudocdigo es el siguziente.

1 Inicio
2 Nmero_A, nmero_B, suma: Reales
3 Leer nmero_A
4 Leer nmero_B
5 Suma = nmero_A + nmero_B
6 Escribir suma
7 Fin


La representacin del ejemplo en Diagrama Nassi-Schneiderman es el siguiente.

Leer
nmero_A, Leer nmero_B.
Calcular
Suma nmero_A + nmero_B
Escribir
suma

Los lenguajes de frmulas y lenguaje natural suelen ser poco utilizados en la
construccin de algoritmos, debido a la ambigedad que representa la definicin de
sus trminos. Para efectos tericos y prcticos del curso, los problemas planteados
sern descritos en diagrama de flujo y pseudocdigo.

PROGRAMA DE INGENIERA


Conversin del algoritmo a un programa de computador
(codificacin)

Codificar el algoritmo es escribirlo mediante un lenguaje de programacin formal


(Visual Basic, C++, Java etc), aplicando todas las reglas de sintaxis que contenga. En
este ejemplo ser escrito en C++.

Primero se muestra la correspondencia de lnea por lnea entre el pseudocdigo y el
lenguaje de programacin de alto nivel (C++).


Pseudocdigo C++
1 Inicio
2 Nmero_A, nmero_B, suma: double numeroA, numeroB,
Reales suma;
3 Leer nmero_A cin>> numeroA
4 Leer nmero_B cin>> numeroB
5 Suma = nmero_A + Suma = numeroA + numeroB
nmero_B
6 Escribir suma cout<<suma
7 Fin


Luego, se mostrar todo el programa codificado en C++ con las lneas reservadas (en
negrilla) del programa, la cual ser profundizada en el tema Traduccin de los
algoritmos al lenguaje de programacin de alto nivel.

#include "iostream"
using namespace std;

int main()
{
double numeroA, numeroB, suma;
cout<<"Ingrese el numero A : ";
cin>>numeroA;
cout<<"Ingrese el numero B : ";
cin>>numeroB;
cout <<"\n\n";
suma = (numeroA + numeroB);
cout<<"el valor de la suma es: " <<suma <<"\n";
cout<<"\n\n";
system("pause");
}


PROGRAMA DE INGENIERA


Prueba y depuracin del programa

La prueba de un programa es un proceso que consiste en ejecutar el programa


desarrollado en el lenguaje de programacin e introducir diferentes tipos de datos de
prueba, que determinan si el programa tiene errores.

La depuracin del programa es el proceso para encontrar errores en el cdigo del
programa y corregirlos. Al ejecutar un programa se pueden producir tres tipos de
errores:4

Errores de compilacin: normalmente se producen por el uso incorrecto de
las reglas del lenguaje de programacin (suelen ser errores de sintaxis).
Cuando este tipo de errores ocurre, el computador no puede comprender la
instruccin y genera un error que impide convertir el programa fuente en
programa objeto.

Errores de ejecucin: este tipo de errores se producen por instrucciones
ingresadas por el usuario, aunque el computador puede compilar y no genera
ningn tipo de error, como la divisin por cero, la raz cuadrada de nmeros
negativos, etc.

Errores lgicos: estos errores son los ms frecuentes y difciles de detectar,
pues el programa puede funcionar sin producir ningn tipo de error,
compilacin o ejecucin. El error slo es detectable en la incoherencia de los
resultados, por lo que debe volver a la etapa de diseo, modificar el algoritmo,
cambiar el programa fuente y volver a compilarlo.

Documentacin

Consiste en la descripcin de cada uno de los pasos que conllevan a la solucin del
problema; su importancia radica en la facilidad que otorga para leer un programa,
depurarlo, hacer ajustes y mantenimiento. Existen dos tipos de documentacin:

Interna: consiste en ir dejando lneas de comentario dentro del programa.

Externa: incluye cada una de las etapas del procedimiento metodolgico
(anlisis, diseo, codificacin y los manuales del usuario para el manejo del
programa y la interpretacin de los datos e informacin final).




4
Joyanes A. Luis. Programacin en algoritmos, estructuras de datos y objetos. McGraw Hill 2000.

PROGRAMA DE INGENIERA


Composicin de algoritmos: diagramas de flujo y pseudocdigo

El algoritmo consiste en describir paso a paso en un lenguaje natural del problema


planteado, de acuerdo a unas reglas bsicas de composicin que, posteriormente,
sern llevadas a un lenguaje algortmico (para efectos del curso se desarrollarn
diagramas de flujo y pseudocdigo).

A partir del planteamiento de un problema ser aplicada la metodologa de desarrollo
de algoritmos, hasta llegar a los dos lenguajes algortmicos ms utilizados en la
representacin de un problema: diagrama de flujo y pseudocdigo.

Estudio de caso

En la Universidad Militar Nueva Granada un estudiante universitario necesita


construir un algoritmo que le permita calcular la nota final de la asignatura de
programacin I, compuesta por tres notas parciales. Las dos primeras notas tienen
un porcentaje del 30% y la tercera un 40%.

Etapa I: Anlisis de problema


Datos de entrada Nota1, Nota2, Nota3
Primer_parcial = Nota1 * 30%

Segundo_parcial = Nota2 * 30%

Procesos Tercer_parcial = Nota3 * 40%

Nota_final = Primer_parcial + segundo_parcial +
tercer_parcial

Datos de salida La nota definitiva de la asignatura es Nota_final

Etapa II: diseo y desarrollo del algoritmo

Desarrollar el diseo primero demanda dividir el problema en subproblemas,


determinar las entradas, los procesos o actividades que se hacen con las entradas y la
salida o resultados del algoritmo.


PROGRAMA DE INGENIERA


Como se ilustr en la etapa 1, requiere que el algoritmo reciba datos de entrada
(Nota1, Nota2, Nota3), se hace un proceso con ellos para obtener la nota definitiva en
la variable que denominada Nota_final. El diagrama de flujo se ver como lo muestra
la figura 4, en la etapa de divisin del algoritmo en diagrama de flujo.
Inicio

Leer notas Entrada

Proceso
Procesar notas

Escribir definitiva
Salida

Fin

Figura 4. Etapa de divisin del algoritmo en diagrama de flujo.

A continuacin se sigue dividiendo; es decir, tomar las entradas y dividirlas para


mostrar en detalle los elementos que contiene el algoritmo con relacin a la entrada
de los datos. La figura 5 muestra esta divisin.


PROGRAMA DE INGENIERA


Inicio

Leer Nota1

Entrada
Leer Nota2

Leer Nota3

Procesar notas Proceso

Escribir definitiva
Salida

Fin

Figura 5. Subdivisin de la primera parte del algoritmo (entrada)

A continuacin se divide la parte del algoritmo que corresponde al proceso, como lo


muestra en la figura 6. Ah se aprecian las frmulas matemticas para procesar la
informacin.



PROGRAMA DE INGENIERA


Inicio

Leer Nota1

Leer Nota2

Entrada
Leer Nota3

Primer_parcial = Nota1 * 30%


Segundo_parcial = Nota2 * 30%
Tercer_parcial = Nota3 * 40%
Proceso

Nota_final = Primer_parcial + segundo_parcial + tercer_parcial

Escribir definitiva
Salida

Fin

Figura 6. Subdivisin de la segunda parte del algoritmo (proceso)


Por ltimo, se dividir el proceso de la salida. Para este caso de estudio no hay que
hacer nada, en razn a que la nota definitiva es un nico valor como resultado y una
nica actividad del subproceso de salida. En la figura 7 evidencia el proceso.








PROGRAMA DE INGENIERA


Inicio

Leer Nota1

Leer Nota2
Entrada

Leer Nota3

Primer_parcial = Nota1 * 30%


Segundo_parcial = Nota2 * 30%
Tercer_parcial = Nota3 * 40%
Proceso

Nota_final = Primer_parcial + segundo_parcial + tercer_parcial

Escribir Nota_final
Salida

Fin

Figura 7. Subdivisin de la tercera parte del algoritmo (salida)


Dentro del paso de diseo la siguiente actividad consiste en tomar el diseo
propuesto y evaluar las operaciones para optimizarlo. A ste etapa final se le
denomina etapa de abstraccin o refinamiento. En la figura 7 se muestra el algoritmo
desarrollado anteriormente en su etapa de abstraccin o refinamiento.







PROGRAMA DE INGENIERA


Inicio

Leer Nota1
Leer Nota2
Leer Nota 3

Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)


Escribir Nota_final

Fin

Figura 7. Diagrama de flujo representado en la etapa de abstraccin o refinamiento.

Pseudocdigo

El pseudocdigo facilita la traduccin del algoritmo a un lenguaje de programacin.


Permite al programador concentrarse en la lgica y las estructuras de control durante
la planificacin del programa, sin preocuparse del lenguaje de programacin en el que
ser codificado el programa. El pseudocdigo muestra la definicin de las variables y
el tipo de datos que a almacenar.

El algoritmo representado en pseudocdigo comienza con la palabra inicio y finaliza
con la palabra fin. Entre estas palabras se escriben las instrucciones que conllevan a
la solucin del problema en cada una de las lneas. Para la documentacin interna del
algoritmo se acostumbra a utilizar una o varias lneas de comentario, precedida por
//, que no representa ninguna instruccin.

Aunque el pseudocdigo naci como una representacin que sustitua el lenguaje de
programacin (por consiguiente, las palabras reservadas, escritas en ingls, se
conservan), hoy es posible extenderlo a la comunidad hispana con sus respectivas
traducciones, como start, end, read y write por inicio, fin, leer y escribir
respectivamente.

PROGRAMA DE INGENIERA


De acuerdo con el caso de estudio, la representacin algortmica en pseudocdigo es
la siguiente:

1 Inicio

2 //programa que calcula las nota definitiva de la asignatura programacin I.

3 Nota1, Nota2, Nota3, Nota_final : Reales

4 Leer Nota1

5 Leer Nota2

6 Leer Nota3

7 Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)

8 Escribir Nota_final

9 Fin



Estructuras secuenciales


Estructura secuencial

En un programa estructurado de manera secuencial, una accin (instruccin) es
seguida inmediatamente de otra para su ejecucin, de manera que la salida de una se
convierte en la entrada de otra y as sucesivamente hasta finalizar el proceso. Las
figuras 8 y 9 representan una estructura secuencial en bloques y pseudocdigo.

Accin 1

Accin 2

Accin 3

Accin n

Figura 8. Estructura secuencial.



PROGRAMA DE INGENIERA


Inicio
1
<Accin 1>
2
<Accin 2>
3
<Accin 3>
4
.
5

6 <Accin n>
Fin
7

Figura 9. Estructura secuencial en pseudocdigo.

Para ilustrar la estructura secuencial, es pertinente el caso estudio que propone crear
un algoritmo para el promedio de las notas de la asignatura programacin I (caso que
ser utilizado para cada una de las estructuras propuestas en el curso). Se puede
evidenciar que, para la ejecucin de cada instruccin debe haber terminado
previamente la anterior, como lo describe la figura 10.

Inicio

Leer Nota1
Leer Nota2
Leer Nota 3

Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)


Escribir Nota_final

Fin

Figura 10. Estructura secuencia en diagrama de flujo.



PROGRAMA DE INGENIERA


Estructura selectiva o de decisin

Las estructuras selectivas -o de decisin- son utilizadas para tomar decisiones lgicas
cuando hay un nmero de alternativas resultantes de una condicin. Estas estructuras
evalan la condicin y se ejecuta una opcin u otra en funcin del resultado.
Las estructuras de decisin pueden ser:

Simples (Si entonces / if - then)
Dobles (Si entonces si_no / if then - else)
Mltiples (Segn sea, caso de / case)

Estructura simple

Este tipo de estructura evala una condicin dada y, de acuerdo con el resultado
(verdadero o falso), determina la accin a seguir. La representacin grfica de la
estructura de decisin simple se observa en la figura 11.

a.

Falso (no)
Condicin

Verdadero
(SI)
Acciones

b. Pseudocdigo en espaol. c. Pseudocdigo en ingls.

Si <condicin> entonces if <condicin> entonces

<Accin 1> <Accin 1>

. .

<Accin n> <Accin n>


Fin_si endif

Figura 11. Estructura de decisin simple.



PROGRAMA DE INGENIERA

La decisin simple (Si entonces o if-then), representada en el grfico anterior,


evala la condicin. Si la condicin es verdadera (si), ejecuta la accin o acciones
dadas. Si al evaluar la condicin, el resultado es falso (no), entonces no se hace nada.

Ejemplo: En la Universidad Militar Nueva Granada un estudiante universitario
necesita construir un algoritmo que le permita calcular la nota final de la asignatura
de programacin I, compuesta por tres notas parciales: las dos primeras notas tienen
un porcentaje del 30%; la tercera tiene un 40%.

Si la nota es igual o superior a 3.0, imprimir un mensaje que diga: Aprob la materia.


Inicio

Leer Nota1
Leer Nota2
Leer Nota 3

Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)


Nota_final No
>= 3.0

Si

Escribir Aprob la Materia

Fin





PROGRAMA DE INGENIERA


Estructura doble

Este tipo de estructura permite ejecutar acciones en las dos alternativas posibles
(verdadero o falso), una vez evaluada la condicin. La figura 12 ejemplifica este tipo
de estructura.

a.

Verdadero (SI) Falso (no)


Condicin

Accin A1 Accin A2

b. Pseudocdigo en espaol. c. Pseudocdigo en ingls.

Si <condicin> entonces if <condicin> entonces

<Accin A1> <Accin A1>

si_no else

<Accin A2> <Accin A2>


Fin_si endif

Figura 12. Estructura de decisin doble.

Ejemplo

En la Universidad Militar Nueva Granada un estudiante universitario necesita


construir un algoritmo que le permita calcular la nota final de la asignatura de
programacin I, compuesta por tres notas parciales: las dos primeras notas tienen un
porcentaje del 30% y la tercera un 40%.

Si la nota es igual o superior a 3.0, imprimir un mensaje que diga: Aprob la materia;
si la nota es inferior a 3.0, imprimir un mensaje que diga: Reprob la materia.

PROGRAMA DE INGENIERA

La condicin doble (Si entonces-si_no if-then-else) representada en el grfico


anterior, evala la condicin: si sta es verdadera (s), ejecuta la accin o acciones A1;
si es falsa (no), ejecuta las acciones A2.


Inicio

Leer Nota1
Leer Nota2
Leer Nota 3

Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)


No Nota_final Si
>= 3.0

Escribir Reprob la Escribir Aprob la


Materia Materia

Fin


Estructura mltiple

Este tipo de estructura permite seleccionar una opcin entre mltiples alternativas, lo
que evita problemas de escritura del algoritmo y, naturalmente, de legibilidad. La
figura 13 evidencia este tipo de estructura.



PROGRAMA DE INGENIERA


a.

1 n
Condicin

2
3 4
Accin A1 Accin A2 Accin A3 Accin A4 Accin An


b. Pseudocdigo

Segn sea expresin (E) hacer

E1: Accin A11


Accin A12
Accin A13

E2: Accin A21


Accin A22
Accin A23

En: Accin An1


Accin An2
Accin An3

Si-no Accin Ax

Fin-segn.

Figura 13. Estructura de decisin mltiple.


El resultado de la expresin (E) es evaluado, el resultado se compara con cada una
de las etiquetas E1, E2,, En y de su incidencia ejecutar las acciones respectivas. En
caso de no corresponder con ninguna de las etiquetas, ejecutar la accin Ax.

Debe tener en cuenta que:

Cada etiqueta (E1, E2,, En) es un nico valor diferente a las dems.
La expresin (E) debe ser un tipo ordinal, como por ejemplo: entero, carcter,
boleano pero no real o cadena.




PROGRAMA DE INGENIERA


Estructuras repetitivas

Las estructuras repetitivas son algoritmos creados para repetir una o varias acciones
en un nmero finito de veces. Las estructuras que repiten una sentencia de
instrucciones un nmero determinado de veces se denominan bucles; repetir la
ejecucin de una sentencia de acciones5 se llama iteraccin. Existen tres tipos de
estructuras repetitivas:

1. Mientras (while)
2. Repetir (repeat)
3. Desde para (for)

Mientras (while)

La estructura repetitiva mientras (while) es aquella en que las acciones se repiten


mientras se cumple la condicin. La figura 14 muestra un ejemplo de esta estructura.

Falsa (no)
Condicin

Verdadera
(Si)
Acciones

b. Pseudocdigo en espaol. c. Pseudocdigo en ingls.

mientras <condicin> hacer while <condicin> do

<Accin 1> <Accin 1>


<Accin 2>
. .

<Accin n> <Accin n>


Fin_mientras endwhile


Figura 14. Estructura repetitiva mientras (while).


5
Joyanes A. Luis. Programacin en algoritmos, estructuras de datos y objetos. McGraw Hill 2000

PROGRAMA DE INGENIERA


Al ejecutar la estructura mientras (while), primero debe evaluar la condicin. Si el
resultado de la condicin es verdadero, ejecuta el cuerpo del bucle (las acciones) y
regresa nuevamente para evaluar la condicin. Este proceso se repite una y otra vez,
mientras el resultado de la condicin sea verdadero; si es falso, no se ejecuta ninguna
accin.

Ejemplo

En la Universidad Militar Nueva Granada un estudiante universitario necesita


construir un algoritmo que le permita calcular la nota final de la asignatura de
programacin I, compuesta por tres notas parciales. Las dos primeras notas tienen un
porcentaje del 30%, la tercera tiene 40%.

Si la nota es igual o superior a 3.0, imprimir un mensaje que diga: Aprob la materia;
si la nota es inferior a 3.0, imprimir un mensaje que diga: Reprob la materia.

Hacer que este algoritmo calcule la nota definitiva para varios estudiantes hasta que el
usuario digite la letra N, que indica que no quiere continuar realizando ms
promedios, o S si quiere seguir haciendo promedios.









PROGRAMA DE INGENIERA


Inicio

No
Continua
(S/N)

Si

Leer Nota1
Leer Nota2
Leer Nota 3

Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)


No Si
Nota_final >=
3.0

Escribir Reprob la Escribir Aprob la


Materia Materia

Fin


Repetir (repeat)

La estructura repetitiva repetir (repeat) es aquella en la que las acciones son


ejecutadas hasta cumplir una accin determinada, la cual se comprueba al final del
bucle; dicho proceso lo muestra la figura 15.





PROGRAMA DE INGENIERA


a

Acciones

Falsa
Condicin
(no)

Verdadera
(Si)

b. Pseudocdigo en espaol. c. Pseudocdigo en ingls.

repetir repeat

<Accin 1> <Accin 1>


<Accin 2> <Accin 2>
. .

<Accin n> <Accin n>


Hasta_que <condicin> until <condicin>

Figura 15. Estructura repetitiva repetir (repeat).


En la estructura repetir las acciones siempre se ejecutan al menos una vez; la
estructura mientras evala la condicin, si sta es verdadera, ejecuta las acciones; de
lo contrario, no.

Ejemplo

En la Universidad Militar Nueva Granada un estudiante universitario necesita


construir un algoritmo que le permita calcular la nota final de la asignatura de
programacin I, la cual est compuesta por tres notas parciales: las dos primeras
tienen un porcentaje del 30% y la tercera, un 40%.

Si la nota es igual o superior a 3.0, imprimir un mensaje que diga: Aprob la materia.
Si la nota es inferior a 3.0, imprimir un mensaje que diga: Reprob la materia.


PROGRAMA DE INGENIERA


Hacer que este algoritmo calcule la nota definitiva para varios estudiantes hasta que el
usuario digite la letra N (que indica que no quiere continuar realizando ms
promedios) o S (si quiere seguir haciendo promedios).

Inicio

Leer Nota1
Leer Nota2
Leer Nota 3

Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)


No Si
Nota_final >=
3.0

Escribir Reprob Escribir Aprob la


la Materia Materia

No Si
Continua
(S/N)

Fin


Observe que en la estructura repeat, a diferencia de while, la decisin se encuentra al
final de la ejecucin del algoritmo.

Desde para (for)

La estructura desde-para (for) es utilizada cuando se conoce el nmero de veces


requeridas para ejecutar las acciones de un bucle, como lo ejemplifica la figura 16.


PROGRAMA DE INGENIERA


a.

Variable_control = valor_inicial
Valor_lmite = valor_final

falso (no) Variable_control <=


valor_lmite

Verdadero
(si)
Acciones

Incrementar_variable_control



Desde variable_control hasta valor_lmite incrementar_varible_control <valor> hacer

<Accin 1>
<Accin 2>
.

<Accin n>
Fin_desde

Figura 16. Estructura repetitiva desde - para (for).


El bucle Desde para (for) est compuesto por cuatro partes:

Parte de inicializacin: est representada por la variable de control del bucle.

Parte de iteracin: contiene una expresin lgica que, de ser verdadera, hace
que se realicen las acciones en cada iteracin.

PROGRAMA DE INGENIERA



Parte de incremento: en esta parte se incrementa o decrementa la variable de
control del bucle.

Parte de acciones (o sentencias): contiene las acciones que se ejecutan en
cada iteracin del bucle.

Ejemplo

En la Universidad Militar Nueva Granada un estudiante universitario necesita


construir un algoritmo que le permita calcular la nota final de la asignatura de
programacin I, compuesta por tres notas parciales: las dos primeras tienen un
porcentaje del 30% y la tercera un porcentaje del 40%.

Si la nota es igual o superior a 3.0, imprimir un mensaje que diga: Aprob la materia;
si la nota es inferior a 3.0, imprimir un mensaje que diga: Reprob la materia.

Hacer que este algoritmo calcule la nota definitiva para tres estudiantes.


PROGRAMA DE INGENIERA



Inicio

Contador = 0

No Contador <3

Si
Leer Nota1
Leer Nota2
Leer Nota 3

Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)


No Nota_final Si
>= 3.0

Escribir Reprob la Escribir Aprob la


Materia Materia

Contador = Contador + 1

Fin

PROGRAMA DE INGENIERA


Anidacin de estructuras

Las estructuras anidadas son aquellas que pueden contener otras estructuras (de
decisin y repetitivas) cualquier nmero de veces, ejecutando diferentes acciones.

Estructuras de decisin anidadas

Las estructuras de seleccin si-entonces y si-entonces-si_no implican la seleccin de


dos alternativas. Es posible utilizar la instruccin si para disear estructuras de
seleccin que contengan ms de dos alternativas. Ejemplo, una estructura si-entonces
puede contener otra estructura si-entonces y esta estructura si-entonces puede
contener otra y as sucesivamente6.

Si condicin1 entonces
Si condicin2 entonces
Si condicin3 entonces
<accin 1>
.
<accin n>


Representacin en pseudocdigo de una estructura de decisin simple anidada (si-
entonces)


Si Condicin1 entonces
Si Condicin2 entonces
Si Condicin3 entonces
<Accin1>

<Accin n>

Fin_si
Fin_si
Fin_si






6
Joyanes A. Luis. Programacin en algoritmos, estructuras de datos y objetos. McGraw Hill 2000.

PROGRAMA DE INGENIERA


El siguiente pseudocdigo muestra una estructura de decisin doble:


Si Condicin1 entonces

<acciones>

Si_no
Si Condicin2 entonces
<acciones>

Si_no

Si Condicin3 entonces
<Acciones>
Si_no

<Acciones>

Fin_si
Fin_si
Fin_si


El pseudocdigo se puede volver complejo en la medida que sean agregadas ms
estructuras de decisin anidadas, por lo que es necesario aplicar indentacin (o
sangra), de tal manera que corresponda la palabra si y fin_si de cada estructura, tal
como lo ilustran las lneas.

Estructuras repetitivas anidadas

Las estructuras repetitivas son anidadas igual que las estructuras de decisin y
conservan las reglas de indentacin. Adicional a esto, la estructura interna debe estar
contenida completamente en la externa, evitando el solapamiento. La figura 17 (a y b)
representa grficamente esta anidacin:













PROGRAMA DE INGENIERA



a.

mientras Condicin1 hacer

<acciones>

mientras Condicin2 hacer
<acciones>
mientras Condicin3 hacer

<Accin1>



<Accin n>
Fin_mientras
Fin_mientras

Fin_mientras

Figura 17. Anidacin de estructuras repetitivas.


b)



mientras Condicin1 hacer
<acciones>
mientras Condicin3 hacer
<Accin1>

<Accin n>

Fin_mientras
mientras Condicin3 hacer
<Accin1>

<Accin n>

Fin_mientras
Fin_mientras

PROGRAMA DE INGENIERA


Prueba de escritorio

Prueba que el programador hace al algoritmo para verificar que cumple con las
especificaciones y los resultados esperados, sin necesidad de ejecutarlo en un lenguaje
de programacin. Proceso que se ejecuta a mano y paso por paso.

Para dar una explicacin ms clara y precisa del proceso de la prueba de escritorio, se
continuar con el estudio de caso:

En la Universidad Militar Nueva Granada un estudiante universitario necesita


construir un algoritmo que le permita calcular la nota final de la asignatura de
programacin I, la cual est compuesta por tres notas parciales. Las dos primeras
notas tienen un porcentaje del 30% y la tercera, el 40%.

Para iniciar con prueba de escritorio, se toma el pseudocdigo resultante de la
segunda etapa del proceso metodolgico de desarrollo de algoritmos. Ver figura
18.- Pseudocdigo.

Inicio
1
//programa que calcula las nota definitiva de la asignatura programacin I.
2
Nota1, Nota2, Nota3, Nota_final : Reales
3
Leer Nota1
4
Leer Nota2
5
Leer Nota3
6
Nota_final = (Nota1 * 30%) + (Nota2 * 30%) + (Nota3 * 40%)
7

8 Escribir Nota_final
Fin
9

Figura 18.- Pseudocdigo.


La prueba de escritorio comienza ejecutando la lnea numerada como 1; es decir,
inicia con la ejecucin del algoritmo. En la lnea 2 se deja un comentario sobre el
objetivo del programa y en la lnea 3 se definen las variables y el tipo de dato que cada
variable almacenar (reales). En la lnea 4 se ejecuta una instruccin de entrada; es
decir, una instruccin que recibe un dato para que el algoritmo lo procese. En
trminos de la prueba de escritorio, se debe registrar un dato que entra al algoritmo y
queda almacenado en una variable en la memoria del computador; este hecho se

PROGRAMA DE INGENIERA


registra en la siguiente tabla que, para efectos de la prueba de escritorio, se ir
registrando cada suceso que ocurra en las lneas del algoritmo.


Nota1 Nota2 Nota3 Nota_final
3.6

Como se observa en la tabla anterior, debajo de la variable Nota1 aparece el dato real
3.6, lo que significa que se suministr un dato al algoritmo y qued almacenado en
Nota1.

En el algoritmo, las instrucciones 5 y 6 hacen exactamente lo mismo que la instruccin
4, con la diferencia que puede suministrar datos diferentes a voluntad del usuario,
haciendo uso del computador.

La prueba de escritorio supone que al suministrar las notas 4.4 y 3.2, quedan
almacenadas en las variables Nota2 y Nota3 respectivamente. La tabla con los
anteriores valores se ver as:


Nota1 Nota2 Nota3 Nota_final
3.6 4.4 3.2

La instruccin 7 toma cada uno de los datos almacenados en las variables Nota1,
Nota2 y Nota3, multiplicando por 30%, 30% y 40% respectivamente cada una. El
resultado de la anteriores operaciones se suman y almacenan en la variable
Nota_final.

La instruccin nmero 8 tiene como fin reportar el contenido de la variable
Nota_final; es decir, el valor 3.6. Esta variable se resalta con un crculo para
identificar que hace parte de los datos de salida esperados del algoritmo.


Nota1 Nota2 Nota3 Nota_final

3.6 4.4 3.2 3.6




PROGRAMA DE INGENIERA


En conclusin, de la prueba de escritorio realizada al algoritmo con los datos 3.6, 4.4 y
3.2, que corresponden a las notas del estudiante, resulta como nota definitiva 3.6 y es
correcto.

Se pueden hacer ms verificaciones al algoritmo, tras realizar nuevamente la prueba
de escritorio con otros datos del cual se debern obtener resultados acordes a los
nuevos datos suministrados.

Traduccin de los algoritmos al lenguaje de programacin de alto


nivel

Traducir un algoritmo a un lenguaje de programacin de alto nivel, significa pasar de


la codificacin del pseudocdigo a la sintaxis propia del lenguaje de programacin
escogido, que para el caso de este curso es C++ (Dev-C++). Para ello, primero es
necesario conocer la estructura y sintaxis propia del lenguaje C++, donde intervienen
libreras, funciones y otras ms que no usa el algoritmo.


El archivo de cabecera indica al
programa las funciones a utilizar. Por
ejemplo: si se reemplaza por
iostream dentro del programa, se
podrn utilizar funciones como
#include < nombre
system(pause) para dar una pausa
Archivo de de fichero >
al programa que se est realizando.
cabecera
Tambin se pueden usar recursos
como cin (palabra reservada para que
el usuario ingrese los datos) y cout
(para mostrar los datos al usuario).

Ej. #include <iostream>


Tras definir la cabecera principal del
programa, hay que definir la
Funcin principal Int main ( ) cabecera de la funcin principal del
programa, que indica el comienzo del
mismo.
Una vez escrita la funcin main (),
que indica el comienzo del programa,
se procede a escribir las lneas de
Cuerpo del
{ } cdigo que indican los procesos a
programa
seguir. Estas lneas estn
delimitadas por el smbolo de llaves: {
}.


PROGRAMA DE INGENIERA


Al final, la estructura de un programa en C++ es as:

#include <iostream.h>
main ( )
{
. . . .
}

A continuacin ser codificado el algoritmo que recibe dos nmeros enteros por el
teclado y entrega la suma de stos nmeros, aplicando la estructura del lenguaje de
programacin de alto nivel C++.
#include "iostream"
using namespace std;

int main()
{
double numeroA, numeroB, suma;
cout<<"Ingrese el numero A : ";
cin>>numeroA;
cout<<"Ingrese el numero B : ";
cin>>numeroB;
cout <<"\n\n";
suma = (numeroA + numeroB);
cout<<"el valor de la suma es: " <<suma <<"\n";
cout<<"\n\n";
system("pause");
}

Nota: Para evitar que los nombres de las funciones programadas por el usuario sean
confundidas con las definidas por las libreras estndar de C++ (las que se #incluyen <
entre smbolos menor-que< y mayor-que >), lo que conllevara a la provocacin de
errores difciles de detectar y corregir, la solucin establecida por C++ son las
namespace (espacio de nombres), que para el caso anterior es std, que incluye las
definiciones para cout, cin etc.

El formato es el siguiente:

Using namespace std






PROGRAMA DE INGENIERA


Resumen

El desarrollo de un programa de computador exige una metodologa que permita


comprender el problema de manera secuencial y complementaria, evaluar
alternativas de solucin y disear la solucin en el lenguaje algortmico, para
trasladarlo a un lenguaje de computador. Finalmente se realizarn pruebas que
determinen su funcionalidad y coherencia entre el problema y la solucin.

La clasificacin de problemas define el concepto y los tipos de problemas, as como
los pasos sugeridos para llegar a la ptima solucin de problema. La metodologa de
desarrollo de algoritmos describe en detalle cada etapa que conlleva a la solucin de
un problema determinado a travs de un lenguaje de programacin. La composicin
de algoritmos (diagramas de flujo y pseudocdigo) describe detalladamente la
representacin del problema en un lenguaje algortmico. Las estructuras
secuenciales, estructura selectiva o decisin, estructuras repetitivas y anidacin
de estructuras describen, ilustran e incorporan procesos ms complejos de
interactividad y decisin, necesarios en el abordaje y la solucin a problemas que
requieren de su aplicacin.

Previamente a la codificacin a un lenguaje de alto nivel, se detalla la fase de pruebas
durante la prueba de escritorio, que permite evaluar la funcionalidad del
pseudocdigo y la coherencia entre el problema y la solucin; para as culminar con la
traduccin de los algoritmos al lenguaje de programacin de alto nivel, que
consiste en la traduccin del algoritmo en lenguaje pseudocdigo al lenguaje de
programacin C++.

You might also like