You are on page 1of 151

LAS HERRAMIENTAS PARA SOLUCION DE

PROBLEMAS UTILIZANDO LAS COMPUTADORAS.


2.1. La resolucin de problemas
2.2. Anlisis de problemas
2.3. Diseo del algoritmo
2.4. Resolucin del problema mediante computadora
2.5. Representacin Grfica de los algoritmos
2.6. Diagramas Nassi-Schheiderman (N-S)
2.7. Pseudocdigo
Actividades de programacin
Ejercicios
La resolucin de problemas con computadoras se puede dividir
en tres fases:
Anlisis de problema
Diseo del algoritmo
Resolucin del algoritmo en la computadora
En este captulo se analizan las tres fases anteriores. El anlisis y
el diseo del algoritmo requiere la descripcin del problema de
sub problemas a base de refinamientos sucesivos y una
herramienta de programacin diagrama de flujo, diagrama N-S
o pseudocdigo - ; los conceptos fundamentales del anlisis,
diseo y herramientas de programacin (diagramas de flujo,
diagramas N-S y pseudocdigos) se describen como
conocimientos indispensables para el aprendizaje de la
programacin de computadoras.
2.1. LA RESOLUCION DE PROBLEMAS
La principal razn para que las personas aprendan a programar
en general y los lenguajes de programacin en particular es
utilizar la computadora como una herramienta para resolucin
de problemas. Ayudado por una computadora, la resolucin de
un problema se puede dividir en tres fases importantes:
1. Anlisis del problema
2. Diseo o desarrollo del algoritmo
3. Resolucin del algoritmo en la computadora
El primer paso anlisis del problema requiere que el
problema sea definido y comprendido claramente para que
pueda ser analizado con todo detalle. Una vez analizado el
problema, se debe desarrollar el algoritmo - procedimiento paso
a paso para solucionar el problema dado -, Por ltimo, para
resolver el algoritmo mediante una computadora se necesita
codificar el algoritmo en un lenguaje de programacin BASIC,
Pascal, COBOL, FORTRAN, etc. -, es decir, convertir el algoritmo
en programa, ejecutarlo y comprobar que el programa soluciona
verdaderamente el problema, Las fases del proceso de
resolucin del problema mediante computadora se indican en la
Figura 2.1.



Figura 2.1. La resolucin de un problema
2.2. ANALISIS DEL PROBLEMA
El propsito del anlisis de un problema es ayudar al
programador para llegar a una cierta comprensin de la
naturaleza del problema. El problema debe estar bien definido si
se desea llegar a una solucin satisfactoria.
Para poder definir con precisin el problema se requiere que las
especificaciones de entrada y salida sean descritas con detalle.
Una buena definicin del problema, junto con una descripcin
detallada de las especificaciones de entrada y salida, son los
requisitos ms importantes para llegar a una solucin eficaz.





Resolucin de
un problema
Anlisis del
problema
Diseo del
algoritmo
Resolucin del
problema con
la computadora
Figura 2.2. Anlisis del problema
El anlisis 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 informacin debe proporcionar la resolucin del
problema?
- Qu datos se necesitan para resolver el problema?
La respuesta a la primera pregunta indicar los resultados
deseados o las salidas del problema. La respuesta a la segunda
pregunta indicar qu datos se proporcionan o las entradas del
problema.
EJEMPLO 2.1.
Leer el radio de un crculo y calcular e imprimir su superficie y
circunferencia.
Anlisis
Las entradas de datos en este problema se concentran en el
radio del crculo. Dado que el radio puede tomar cualquier valor
Anlisis del
problema
Definicin del
problema
Especificaciones
de entrada
Especificaciones
de salida
dentro del rango de los nmeros reales, el tipo de datos radio
deber ser real.
Entradas: Radio del crculo (variable RADIO).
Salidas: Superficie del crculo (variable AREA).
Circunferencia del crculo (variable CIRCUNFERENCIA).
Variables: RADIO, AREA, CIRCUNFERENCIA tipo real.
2.3. DISEO DEL ALGORITMO
Una computadora no tiene capacidad para solucionar problemas
ms que cuando se le proporcionan los sucesivos pasos a
realizar. Estos pasos sucesivos que indican las instrucciones a
ejecutar por la mquina constituyen, como ya conocemos, el
algoritmo.
La informacin proporcionada al algoritmo constituye su entrada
y la informacin producida por el algoritmo constituye su salida.
Los problemas complejos se pueden resolver eficazmente con la
computadoras cuando se rompen en sub problemas que sean
ms fciles de solucionar que el original. Este mtodo se suele
denominar divide y vencers (divide and conquer) y consiste en
dividir un problema complejo en otros ms simples, As, el
problema de encontrar la superficie y la longitud de un crculo se
puede dividir en tres problemas ms simples o sub problemas
(Figura 2.3.).
La descomposicin del problema original en sub problemas ms
simples y a continuacin dividir estos sub problemas en otros
ms simples que pueden ser implementados para su solucin en
la computadora se denomina diseo descendente
implementados para su solucin en la computadora se denomina
diseo descendente (top down design). Normalmente los pasos
diseados en el primer esbozo del algoritmo son incompletos e
indicarn slo unos pocos pasos (un mximo de doce
aproximadamente). Tras esta primera descripcin, estos se
amplan en una descripcin, ms detallada con ms pasos
especficos. Este proceso se denomina refinamiento del
algoritmo (stepwise refinement). Para problemas complejos
diferentes niveles de refinamiento se necesitan con frecuencia
antes de que un algoritmo claro, preciso y completo se pueda
obtener.
El problema de clculo de la longitud y superficie de un crculo se
puede descomponer en sub problemas ms simples: 1) Leer
datos de entrada, 2) Calcular superficie y longitud y 3) escribir
resultados (datos de salida).

Sub problema Refinamiento
Leer radio Leer radio
Calcular superficie Superficie =3.141592*radio2
Calcular longitud Longitud = 2*3141592*radio
Escribir resultados Escribir radio, longitud,
superficie



Figura 2.3. Refinamiento de un algoritmo
Las ventajas ms importantes del diseo descendente son:
- El problema se comprende ms fcilmente al dividirse en
partes ms simples denominadas mdulos.
- Las modificaciones en los mdulos son ms fciles
- La comprobacin del problema se puede verificar
fcilmente.
Tras los pasos anteriores (diseo descendente y refinamiento por
pasos) es preciso representar el algoritmo mediante una
determinada herramienta de programacin: diagrama de flujo,
pseudocdigo o diagrama N-S.
As, pues, el diseo del algoritmo se descompone en las fases
recogidas en la Figura 2.4,
Superficie
longitud
crculo
Entra
da de
datos
Entrada
radio
Clculo
de
Superfici
e (s)
Superfici
e =
PI*R2
Longitud
=2*PI*R
Salida
R
Salida S
Clculo
de
longitud
Salida L
Salida de
resultados



Figura 2,4, Fases de Diseo de un algoritmo

2.3.1. ESCRITURA INICUAL DEL ALGORITMO

Como ya se ha comentado anteriormente, el sistema para
describir (escribir) un algoritmo consiste en realizar una
descripcin paso a paso con un lenguaje natural del citado
algoritmo. Recordemos que un algoritmo es un mtodo o
conjunto de reglas para solucionar un problema. En clculos
elementales estas reglas tienen las siguientes propiedades:
a) Deben estar seguidas de alguna secuencia definida de pasos
hasta que se obtengan un resultado diferente.
b) Slo puede ejecutarse una operacin a la vez.

Diseo
de un
algoritmo
Diseo
descendente
(1)
Refinamiento
por pasos (2)
Herramientas de programacin (3)
- Diagrama de flujo
- Pseudocdigo
- Diagrama N-S

El flujo de control usual de un algoritmo es secuencial;
consideremos el algoritmo que responde a la pregunta:
Qu hacer para ver la pelcula Tiburn?
La respuesta es muy sencilla y puede ser descrita en forma de
algoritmo general de modo similar a:
Ir al cine
Comprar una entrada (billete o ticket)
Ver la pelcula
Regresar a casa.
El algoritmo constar de cuatro acciones bsicas, cada una de las
cuales debe ser ejecutada antes de realizar la siguiente. En
trminos de computadora, cada accin se codificar en una o
varias sentencias que ejecutan una tarea particular.
El algoritmo descrito es muy sencillo; sin embargo, como ya se
ha indicado en prrafos anteriores, el algoritmo general se
descompondr en pasos ms simples en un procedimiento
denominado refinamiento sucesivo, ya que cada accin puede
descomponerse a su vez en otras acciones simples. As, por
ejemplo, un primer refinamiento del algoritmo ir al cine se
puede describir de la forma siguiente:
1. Inicio
2. Ver la cartelera de cines en el peridico
Sino proyectan Tiburn
Entonces decidir otra actividad
Si proyectan Tiburn ir al cine
Si hay cola entonces ponerse en ella
Mientras haya personas delante suya hacer
Avanzar en la cola
Si existen asientos disponibles entonces
Comprar una entrada
Encontrar el asiento correspondiente
Mientras proyectan la pelcula hacer ver la pelcula
Sino refunfuar
Abandonar el cine
Volver a casa
Fin
En el algoritmo anterior existen diferentes aspectos a considerar.
En primer lugar, ciertas palabras reservadas se han escrito
deliberadamente en negrita (mientras, sino, etc.). Estas palabras
describen las estructuras de control fundamentales y procesos
de toma de decisin en el algoritmo. Estas incluyen los conceptos
importantes de seleccin (expresadas por si-entonces-sino if-
then-else) y de repeticin (expresadas con mientras-hacer o a
veces repetir-hasta e iterar-fin_iterar, en ingles while-do y
repeat-until) que se encuentran en todos los algoritmos,
especialmente los de proceso de datos. La capacidad de decisin
permite seleccionar alternativas de acciones a seguir o bien la
repeticin una y otra vez de operaciones bsicas.
Si proyectan la pelcula seleccionada ir al cine
Sino ver la televisin, ir al ftbol o leer el peridico
Mientras haya personas en la cola, ir avanzando repetidamente
hasta llegar a la taquilla.
Otro aspecto a considerar es el mtodo elegido para describir los
algoritmos: empleo de indentacin (sangrado o justificacin), en
escritura de algoritmo. En la actualidad, es tan importante la
escritura de programas como su posterior lectura. Ello se facilita
con la indentacin de las acciones interiores a las estructuras
fundamentales citadas: selectivas y repetitivas. A lo largo de todo
el libro la indentacin o sangrado de los algoritmos ser norma
constante.
Para terminar estas consideraciones iniciales sobre algoritmos,
describiremos las acciones necesarias para refinar el algoritmo
objeto de nuestro estudio; para ello analicemos la accin.
Encontrar el asiento
correspondiente
Si los nmeros de los asientos estn impresos en la entrada, esta
accin compuesta se resuelve con el siguiente algoritmo.
1. Inicio (algoritmo para encontrar el asiento del espectador)
2. Caminar hasta llegar a la primera fila de asientos
3. Repetir
Comparar nmero de fila con nmero impreso en billete
Si no son iguales, entonces pasar a la siguiente fila
Hasta_ que se localice la fila correcta.
4. Mientras nmero de asiento no coincida con nmero de
billete
Hacer avanzar a travs de la fila al siguiente asiento
5. Sentarse en el asiento
6. Fin
En este algoritmo la repeticin se ha mostrado de dos modos,
utilizando ambas notaciones repetir hasta_que y mientras
fin_mientras. Se ha considerado tambin, como ocurre
normalmente, que el nmero del asiento y fila coincide con el
nmero y fila rotulado en el billete.
2.4. RESOLUCION DEL PROBLEMA MEDIANTE COMPUTADORA.
Una vez que el algoritmo est diseado y representado
grficamente mediante una herramienta de programacin
(diagrama de flujo, pseudocdigo o diagrama N-S) se debe pasar
a la fase de resolucin prctica del problema con la
computadora.
Esta fase se descompone a su vez en las siguientes subfases:
1. Codificacin del algoritmo en un programa.
2. Ejecucin del programa
3. Comprobacin del programa


Figura 2.5. Resolucin del problema mediante computadora

En el diseo del algoritmo, ste se describe en una herramienta
de programacin tal como un diagrama de flujo, diagrama N-S o
pseudocdigo. Sin embargo, el programa que implementa el
algoritmo debe ser escrito en un lenguaje de programacin y
siguiendo las reglas gramaticales o sintaxis del mismo. La fase de
conversin del algoritmo es un lenguaje de programacin se
denomina codificacin, ya que el del algoritmo es un lenguaje
especfico de programacin se denomina cdigo.
Tras la codificacin del programa, deber ejecutarse en una
computadora y a continuacin de comprobar los resultados
pasar a la fase final de documentacin.



Resolucin del
problema con
computadora
Codificacin
del programa
Ejecucin del
programa
Comprobacin del
programa

2.5. REPRESENTACION GRAFICA DE LOS ALGORITMOS
Para representar un algoritmo se debe utilizar algn mtodo que
permita independizar dicho algoritmo del lenguaje de
programacin elegido. Ello permitir que un cualquier lenguaje.
Para conseguir este objetivo se precisa que el algoritmo sea
representado grfica o numricamente, de modo que las
sucesivas acciones no dependan de la sintaxis de ningn lenguaje
de programacin, sino que la descripcin pueda servir fcilmente
para su transformacin en un programa, es decir, su codificacin.
Los mtodos usuales para representar un algoritmo son:
1. Diagrama de flujo
2. Diagrama N-S (Nassi-Schneiderman).
3. Diagrama de especificacin de algoritmos pseudocdigo
4. Lenguaje espaol.
5. Frmulas
Los mtodos 4 y 5 no suelen ser fciles de transformar en
programas. Una descripcin en espaol narrativo no es
satisfactoria, ya que es demasiado prolija y generalmente
ambigua. Una frmula, sin embargo, es buen sistema de
representacin.
Por ejemplo, la frmula para la solucin de una ecuacin
cuadrtica es un medio sucinto de expresar el procedimiento
algortmico que se debe ejecutar para obtener las races.


4
2


2

42


Significa
1. Eleve el cuadrado b.
2. Tome a: multiplicar por c; multiplicar por 4,
3. Restar el resultado de 2 del resultado 1, etc.
Sin embargo, no es frecuente que un algoritmo pueda ser
expresado por medio de una simple frmula.
2.5.1. DIAGRAMA DE FLUJO
Un diagrama de flujo (flowchart) es una de las tcnicas de
representacin de algoritmos ms antigua y a la vez ms
utilizada, aunque su empleo ha disminuido considerablemente,
sobre todo desde la aparicin de lenguajes de programacin
estructurados. Un diagrama de flujo es un diagrama que utiliza
los smbolos (cajas) estndar mostrados en la Figura 2.6 y que
tiene los pasos del algoritmos escritos en esas cajas unidas por
flechas, denominadas lneas de flujo, que indican la secuencia en
que se deben ejecutar.
Smbolos principales





Funcin
Terminal (representa el comienzo inicio
y el final fin, de un programa. Puede
representar tambin una parada o
interrupcin programada que sea
necesario realizar en un programa).














NO



SI




Salidas Mltiples





Entrada/Salida (cualquier tipo de
introduccin de datos en la memoria desde
los perifricos entrada, o registro de la
informacin procesada en un perifrico
salida).



Proceso (cualquier tipo de operacin que
pueda originar cambio de valor, formato o
posicin de la informacin almacenada en
memoria, operaciones aritmticas de
transferencia, etc.


Decisin (indica operaciones lgica o de
comparacin entre datos - normalmente
dos y en funcin del resultado de la
misma determinada cul de los distintos
caminos alternativos del programa se debe
seguir normalmente tiene dos salida
respuestas Si o No -, pero puede tener tres
o ms segn los casos.




Decisin mltiple (en funcin del resultado
de la comparacin se seguir uno de los
diferentes caminos de acuerdo con dicho
resultado.






















Smbolos secundarios








Conector (sirve para enlazar dos partes
cualesquiera de un ordinograma a travs
de un conector en salida y otro conector en
la entrada. Se refiere a la conexin en la
misma pgina del diagrama).

Indicador de direccin o lneas de flujo
(indica el smbolo de ejecucin de las
operaciones)

Lnea conectora (sirve de unin entre dos
smbolos)


Conector (conexin entre dos puntos del
organigrama situado en pginas diferentes)


Llamada o subrutina o a un proceso
predeterminado (una sub rutina en un
mdulo independiente del programa
principal, que recibe una entrada
procedente de dicho programa, realiza una
tarea determinada y regresa al terminar, al
programa principal.


Pantalla (se utiliza en ocasiones en lugar
del smbolo E/S).


Impresora (se utiliza en ocasiones en lugar
del smbolo de E/S).






---





Teclado (Se utiliza en ocasiones en lugar
del smbolo de E/S).



Comentarios (se utiliza para aadir
comentarios clasificadores a otros smbolos
del diagrama de flujo. Se pueden dibujar a
cualquier lado del smbolo).




La figura 2.7 es un diagrama de flujo bsico:


I
















Figura 2.7. Diagrama de flujo
El diagrama citado (Figura 2.7) representa la resolucin de un
programa que deduce el salario neto de un trabajador a partir de la
Inicio
Leer nombre,
horas, precio

Calcular jornal bruto
= horas *precio
Neto = bruto
0.10 * bruto
Escribir nombre,
horas, bruto, neto
Fin
lectura del nombre, horas trabajadas, precio de la hora y sabiendo
que los impuestos aplicados son el 10 por 100 sobre el salario
bruto.
Los smbolos estndar normalizados por ANSI (abreviatura de
American National Standars Instituto) son muy variados. En la
Figura 2.8 se representa una plantilla de dibujo tpica donde se
contempla la mayora de los smbolos utilizados en el diagrama; sin
embargo, los smbolos ms utilizados representan:
- Proceso
- Decisin
- Conectores
- Fin
- Entrada/salida
- Direccin del flujo
y se resumen en la Figura 2.9


Figura 2.8 Plantilla para dibujo de diagrama de flujo






Terminal

Subprograma
Entrada/Salida

Decisin
No NO



SI




Conectores

Smbolos ms utilizados en los diagramas de flujo
En un diagrama de flujo:
a) Existe una caja etiquetada inicio, que es de tipo elptico.
b) Existe otra caja etiquetada fin de igual forma que en a:
c) Si existen en otras cajas, normalmente son rectangulares, tipo
rombo o paralelogramo (el resto de las figuras se utilizan slo en
diagramas de flujo generales o se detalle y no siempre son
imprescindibles).
Se puede escribir ms de un paso del algoritmo en una sola
rectangular. El uso de flechas significa que la caja no necesita ser
escrita debajo de su procesadora. Sin embargo, abusar demasiado
de esta flexibilidad conduce a diagramas de flujo complicados e
ininteligibles,

Proceso
Smbolos de diagramas de flujo
Cada smbolo visto anteriormente indica el tipo de operacin a
ejecutar y el diagrama de flujo ilustra grficamente la secuencia en
la que se ejecutan las operaciones:
Las lneas de flujo ( )
representan el flujo secuencial de la lgica del programa.
Un rectngulo ( )
Significa algn tipo de proceso en la computadora, es decir,
acciones a realizar (sumar 2 nmeros, calcular la raz cuadrada de
un nmero, etc.
El paralelogramo ( )
Es un smbolo de entrada/salida que representa cualquier tipo de
entrada y salida desde el programa o sistema, por ejemplo, entrada
de teclado, salida en impresora o pantalla, etc.
El smbolo rombo ( )
Es una caja de decisin que representa respuestas si/no o bien
diferentes alternativas 1, 2,3, 4., etc.
Cada diagrama de flujo comienza y termina con un smbolo
terminal ( )
Un pequeo crculo ( ) es un conector y se utiliza para conectar
caminos, tras roturas previas del flujo del algoritmo.
Otros smbolos de diagramas de flujo menos utilizados de mayor
detalle que los anteriores son:
Un trapezoide ( )
Indica que un proceso manual se va a ejecutar en contraste con el
rectngulo que indica proceso automtico.

El smbolo general de entrada/salida se puede subdividir en otros
smbolos: teclado ( ), pantalla ( ), impresora (
), disco magntico ( ), disquete o disco flexible ( ), casete (
).

EJEMPLO 2.2.
Calcular la media de una serie de nmeros positivos suponiendo
que los datos se leen desde una terminal. Un valor de cero como
entrada indicar que se ha alcanzado el final de la serie de
nmeros positivos.
El primer paso a dar en el desarrollo del algoritmo es descomponer
el problema en una serie de pasos secuenciales. Para calcular una
media se necesita sumar y contar los valores.
Por consiguiente, nuestro algoritmo en forma descriptiva sera:

1. Inicializar contador de nmero C y variable suma, S.
2. Leer un nmero
3. Si el nmero ledo es cero:
* calcular la media,
8

* imprimir la media,
* Fin del proceso
Si el nmero ledo es cero,
Calcular la suma.
Incrementar en un contador de nmeros,
Ir al paso 2.
4. Fin.
El refinamiento del algoritmo conduce a los pasos sucesivos
necesarios para realizar las operaciones de lectura de datos,
verificacin del ltimo dato, suma y media de los datos.










NO

SI
Inicio
C 0
S 0
C contador de nmeros
S Sumador de nmeros

Leer datos
Dato
<0>















EJEMPLO 2.3.
Suma de los nmeros pares comprendidos entre 2 y 1,000
Solucin




C C + 1
S S + dato
Media N/S
Imprimir media
INICIO
SUMA 2
NUMERO 4
SUMA
SUMA + NUMERO
Fin








SI
NO






EJEMPLO 2.4.
Se desea realizar el algoritmo que resuelva el siguiente problema:
Clculo de los salarios mensuales de los empleados de una
empresa, sabiendo que stos se calculan en base a las horas
semanales trabajadas y de acuerdo a un precio especificado por
cada hora. Si se pasan de 40 semanales, las horas extraordinarias se
pagar n a razn de 1,5 veces la hora ordinaria.
NUMERO =
<1000
Escribir
SUMA
Fin
NUMERO
NUMERO + 2
Los clculos son sencillos.
1. Leer datos del archivo de la empresa, hasta que se encuentre la
ficha final del archivo 8HORAS, PRECIO _HORA, NOMBRE).
2. Si HORAS < = 40, entonces SALARIO es el producto de HORAS
por PRECIO_HORA.
3. Si HORAS > 40, entonces SALARIO es la suma de 40 veces
PRECIO_HORA MAS 1,5 veces PRECIO_HORA por (HORAS_40).
El diagrama de flujo completo del algoritmo se indica a
continuacin:



NO


SI





NO
SI
Inicio
ms datos?
LEER HORAS Y
PRECIO _HORA

HORAS<=4
0













EJEMPLO 2.5.
La escritura de algoritmos para realizar operaciones sencillas de
conteo es una de las primeras cosas que un ordenador debe
aprender.
Supongamos que se proporciona una secuencia de nmeros, tales
como:
5 3 0 2 4 4 0 0 2 3 6 0 2
y desea contar e imprimir el nmeros ceros de la secuencia. El
algoritmo es muy sencillo, ya que slo hasta leer los nmeros de
izquierda a derecha, mientras se cuentan los ceros. El algoritmo,
SALARIO
HORAS X PRECIO _
HORA
SALARIO
40 X PR. _ HORAS
1.5. X PR._ HORA X (HORAS_40)
ESCRIBIR
SALARIO
FIN
por consiguiente, utiliza como variable la palabra NMERO para los
nmeros que se examinan y TOTAL para el nmeros de ceros
encontrados. Los pasos a seguir en el algoritmo escrito es un
lenguaje natural son
1. Establecer TOTAL a cero.
2. Quedan ms nmeros a examinar?
3. Si no quedan nmeros, imprimir el valor de TOTAL y fin.
4. Si existen ms nmeros, ejecutar los pasos 5 y 8
5. Leer el siguiente nmero, ejecutar los pasos 5 y 8
6. Si NUMERO = 0, incrementar TOTAL en uno.
7. Si NUMERO <> 0, no modificar TOTAL
8. Retornar al paso 2.
El diagrama de flujo se muestra en la figura siguiente:






No


INICIO

TOTAL 0
ms
nmeros
?
Si




NO

SI


EJEMPLO 2.6.
Datos tres nmeros, determinar si la suma de cualquier pareja de
ellos es igual al tercer nmero. Si se cumple esta condicin, escribir
iguales, y en caso contrario, escribir Distintas.
Solucin
Por ejemplo, si los nmeros son:
3 9 6
La respuesta es iguales, ya que 3 + 6 = 9. Sin embargo,
2 3 4
El resultado ser Distintas.
Para solucionar este problema, se puede comparar cada suma de
cada pareja con el tercer nmero. Con tres nmeros slo existen
LEER
NUMERO

NUMERO=
0
TOTAL
TOTAL + 1
Escribir
TOTAL
FIN
tres parejas distintas y el algoritmo de resolucin del problema ser
fcil.
1. Leer los tres valores A, B y C
2. Si A + B = escribir iguales y parar
3. Si A + C = B escribir iguales y parar
4. Si B + C = A escribir iguales y parar
5. Escribir Distintas y parar.
El diagrama de flujo correspondiente al algoritmo es la Figura 2.10.
2.6. DIAGRAMAS NASSI SCHHEIDERMAN (N-S)
El diagrama N-S de Nassi-Schneiderman tambin conocido como
diagrama de Chapin es como un diagrama de flujo en el que se
omiten las flechas de unin y las cajas son continuas. Las acciones
sucesivas se escriben en cajas sucesivas, y, como en los diagramas
de flujo, se pueden escribir diferentes acciones en una caja.
Un algoritmo se representa de la forma siguiente:
Nombre del algoritmo
<accin 1>
<accin 2>
<accin 3>

Fin



Inicio





Si


NO
SI
NO

SI


NO







Leer A, B y C

A + B = C

A + C = B

B + C = A
Escribir
distintas
Fin
Escribir
iguales
Figura 2.10 Diagrama de flujo, del ejemplo 2.6







La estructura condicional (el rombo)


Si No









Leer
Nombre, horas, precio
Calcular
Salario horas x precio
Calcular
Impuestos 0.25 *salario
Calcular
Neto salario-impuestos
Escribir
Nombre, salario, impuestos, neto

Condiciona
l?

Accin 1

Accin 2


Se representa por

condicin?
Si no

<acciones> <acciones>


EJEMPLO 2.7. Se desea calcular el salario neto semanal de un
trabajador en funcin del nmero de horas trabajadas y las tasa de
impuestos.
4.- Julio Enrique Rojas ( 63-83)

PSEUDOCODIGO
El Pseudocdigo es un lenguaje de especificacin de algoritmos. El uso de tal lenguaje hace el paso
de codificacin final (esto, es la traduccin de un lenguaje de programacin) relativa mente fcil. El
lenguaje APL se utiliza a ve ces como un lenguaje de especificacin de algoritmos.
El pseudocdigo naci como el lenguaje similar al ingles y era un medio de representar
bsicamente la estructura de control de programacin estructurada que se vern en captulos
posteriores. Se considera un primer borrador, dado que el pseudocdigo tiene que traducirse a un
lenguaje de programacin. El pseudocdigo no puede ser ejecutado por una computadora. La
ventaja de pseudocdigo es que en su uso en la planificacin de un programa, el programador se
puede concentrar en la lgica y en las estructuras de control y no preocuparse de las reglas de un
lenguaje especfico. Es tambin fcil modificar el pseudocdigo si se descubren errores o
anomalas en la lgica del programa, mientras que en muchas ocasiones suele ser difcil el cambio
en la lgica una vez que esta modificado en un lenguaje de programacin. Otra ventaja de
pseudocdigo es que puede ser traducido fcilmente a lenguajes como pascal, COBOL, C,
FORTRAN 77 o BASIC estructurado (ANSI, True, Quick, Turbo, etc.,)
El pseudocdigo utiliza para representar las acciones sucesivas palabras reservadas en ingls-
similares a sus homnimas en los lenguajes de programacin, tales como Star, End, Stop, If-
then-else, while-wend, repeat-until.etc. La escritura del pseudocdigo exige normalmente la
indentacin (sangra en el margen izquierdo) de diferentes lneas.
La representacin en pseudocdigo del diagrama de flujo de la figura 2.7.
Star
Calculo de impuestos y salarios
Read nombre, hora, precio_hora
Salario_bruto horas* precio_hora
tasa 0,25*Salario_bruto
Salario_neto salario_bruto_tasas
Write nombre, salario_bruto, tasas, salario_neto
end
El algoritmo comienza con la palabra Star y finaliza con la palabra end, en ingls (en espaol inicio
y fin). Entre estas palabras solo se escribe una instruccin o accin por lnea.
Las lneas encerradas entre llaves se denominan comentario. Es una informacin al
lector del programa y no realiza ninguna instruccin ejecutable; solo tiene efecto de
documentacin del programa. Algunos actores suelen utilizar corchetes en lugar de llaves
([]).
No es recomendable el uso de apstrofes o simples comillas como se representan en
BASIC de Microsoft los comentarios, ya que este carcter es representativo de apertura o
cierre de cadenas de caracteres en lenguaje como Pascal o FORTRAN, y dara lugar a
confusin.
Otro ejemplo aclaratorio es el uso del pseudocdigo, podra ser un sencillo algoritmo del
arranque matinal de un coche.
Inicio
Arranque matinal de un coche
introducir la llave de contacto
tirar del estrangulador del aire
girar la llave de contacto
pulsar el acelerador or el
ruido del motor pisar de
nuevo el acelerador esperar unos
instantes a que se caliente el motor llevar el
estrangulador de aire a su posicin
fin
Por fortuna, aunque el pseudocdigo naci como un sustituto del lenguaje de
programacin, y, por consiguiente, sus palabras reservadas se conservaron o fueron muy
similares a las de dicho lenguaje, prcticamente el ingls. El uso del pseudocdigo se ha
extendido en la comunidad hispana con trminos en espaol como: Inicio, fin, parada,
leer, escribir, si-entonces-sino, mientras, fin-mientras, repetir, hasta-que, etc. Sin
duda, el uso de terminologa del pseudocdigo en espaol ha facilitado y facilitar
considerablemente el aprendizaje y uso diario de la programacin. En esta obra, al igual
que en otras nuestras, * , utilizaremos el pseudocdigo en espaol y daremos en su
momento las estructuras equivalentes en ingls, al objeto de facilitar la traduccin del
pseudocdigo al lenguaje de programacin seleccionado.
As, pues, en los pseudocdigos citados anteriormente deberan ser sustituidas las
palabras: Star, End, Read, Write, por inicio, fin, leer, escribir.
Inicio star read leer
.
.
.
Fin end write escribir




ACTIVIDADES DE PROGRAMACION

2:1 Se desea obtener el salario neto de un trabajador conociendo el nmero de horas
trabajadas, el salario hora y la tasa de impuesto que se le debe deducir.
Solucin:
El algoritmo general es:
1) Obtener valores de horas trabajadas, salario_hora y tasas.
2) Calcular salario_bruto, total de impuestos y salario_neto
3) Visualizar salario_bruto, total de impuestos y salario_neto
Las entradas de algoritmos son:
Horas trabajadas, salario_hora, tasas.
Las salidas de algoritmos son:
Paga Bruta, total de impuestos y paga neta.
El refinamiento del algoritmo en pasos de nivel inferior es::

1) Obtener valores de horas trabajadas, salario bruto y tasas
2) Calcular salario bruto, total de impuestos y paga neta
2.1) Calcular salario bruto multiplicando las horas trabajadas por el salario horas
2.2) Calcular el total de impuestos multiplicando salario bruto por tasas (tanto porciento de
impuesto)
2.3) Calcular el salario neto restando el total de impuesto de la paga bruta.
3) Visualizar salario bruto, total de impuestos, salario neto.
El diagrama de flujo de este algoritmo es el representado en la pgina siguiente.









inicio

introducir horas
salario_horas
tasas

calcular
salario_bruto=
horas*salario_hora

calcular total
impuestos= salario_bruto*tasas

calcular
salario_neto= salario_
bruto total impuestos

visualizar
salario_bruto total
impuestos salario_neto

fin


2.2 Calcular el valor de la suma 1+2+3+4.+100
Solucin
Variables
CONTADOR (nmeros ledos)
SUMA(totalizador de sumas)


1. inicio 2.
Establecer CONTADOR a 1 3.
Establecer SUMA a 0 4.
Mientras contador <100 hacer lo siguiente:
4.1 sumar CONTADOR a SUMA
4.2 incrementar CONTADOR en 1
5 Visualizar suma
Diagrama de flujo

inicio


CONTADOR 1


SUMA 0


Mientras
CONTADOR<100


Aadir Visualizar suma
CONTADOR a SUMA


Incrementar fin
CONTADOR en 1




2.3) Un corredor de maratn (distancia = 42, 195 Km) ha recorrido la carretera en dos horas
veinticinco minutos. Se desea un algoritmo que calcule el tiempo medido en minutos por
kilmetros.
Solucin:
El anlisis del programa es el siguiente:
Entrada: Cantidad total de tiempo empleado por la carretera; se establece el nmero total de
Kilmetros en 42195 Km. de que es igual para todos.
Salida: Nmero medio de minutos por Kilmetros, transformando previamente el tiempo
total en minutos.
Procesos: Dividir el tiempo total en minutos por el nmero de kilmetros
El pseudocdigo es:
Inicio
Introducir tiempo total
verificar entrada correcta
establecer distancia= 42,195 Km.
Pasar tiempo total a minutos
calcular media tiempo/kilmetros
escribir resultados
Fin
El diagrama de flujo de este algoritmo es le representado en la pgina siguiente












inicio

introducir
tiempo total T

T<=0?

Escribir mensaje
de error



distancia
D 42.195

calcular
T/D

escribir resultados


fin


2.4 Definir el algoritmo necesario para intercambiar los valores de dos variables numricas.
Solucin
Anlisis
Para realizar este anlisis se utiliza una variable denominada auxiliar que de modo temporal
toma uno de los valores dados.

Variables A B AUX
El mtodo consiste en asignar una de las variables a la variable auxiliar.
AUX A
A continuacin se le asigna el valor de la otra variable B a la primera
A B
Por ultimo se asigna el valor de la variable auxiliar a la segunda variable A.
B AUX
Variables inicio
A primer valor
B segundo valor
AUX variable auxiliar leer A,B
Pseudocdigo
Inicio AUX A
leer A,B A B
AUX A B AUX
A B
B AUX
escribir A,B escribir
fin A,B

Fin










2.5 Escribir un algoritmo para calcular el area de un triangulo dada la base y la altura.
Solucin
Anlisis
La formula geomtrica del area o superficie de un triangulo es:
S= (1/2)BH B= base H= altura
Se necesita asignar los valores de la base y la altura a variables- por ejemplo, BASE y ALTURA,
respectivamente_; a continuacin, calcular el rea utilizando la formula y asignar los
resultados del calculo a una variable llamada rea. Supongamos B= 4.5 y H= 7.2.

inicio


BASE 4.5


ALTURA 7.2


AREA
BASEALTURA

escribir AREA


fin




EJERCICIOS
2.1 Deducir los resultados que se obtienen del siguiente algoritmo
Variables x,y,z: enteras
Inicio
X 5
Y 20 Z
X+Y escribir x, y
escribir z
Fin
2.2 Qu resultados producir este algoritmo?
Variables NX, DOBLE; enteras
Inicio
NX 25 DOBLE
NX*3 escribir
NX escribir DOBLE
Fin
2.3 Escribir un algoritmo que calcule y escriba el cuadrado de 243
2.4 Escribir un algoritmo que lea un numero y escriba su cuadrado
2.5 Determinar el rea y volumen de un cilindro cuyas dimensiones radio y altura se leen
desde el teclado
2.6 calcular el permetro y la superficie de un rectngulo dadas la base y la altura 2.7
realizar el algoritmo que sume dos nmeros
2.8 calcular la superficie de un cilindro
2.9 calcular el permetro y la superficie de un rectngulo dadas la base y la altura del mismo
2.10 escribir un algoritmo que lea un nombre de una marca de automviles, seguida del
nombre de su modelo e informe del modelo seguido del nombre.
2.11 determinar la hipotenusa de un triangulo rectngulo conocidas las longitudes de los
catetos.
2.12 disear un algoritmo que realice la siguiente conversin. Una temperatura dada en
grados Celsius a grados Fahrenheit.
NOTA: La formula de conversin es F
o
=9/5
o
C+32
2.13 Disear un algoritmo que calcule el rea de un triangulo en funcin de las longitudes de
sus lados:
reap(p-a) (p-b) (p-c)
Donde p= a+b+c/2 (semiperimetro)
2.14 Se desea un algoritmo para convertir metros a pies y pulgadas (1 metro= 39.37
pulgadas)



2.15 El cambio de divisas en la bolsa de Madrid el da 25 de agosto de 1987 fue el siguiente:
100 chelines australianos = 956,871 pesetas
1dolar EE.UU = 122,499 pesetas
100 dracmas griegas = 88,607 pesetas
100 francos belgas =323,728 pesetas
1 franco francs =20,110 pesetas
1libra esterlina =178,938 pesetas
100 libras italianas =9,289 pesetas
Desarrollar algoritmos que realicen las siguientes conversiones:
a) Leer una cantidad en chelines australianos e imprimir el equivalente en pesetas.
b) leer una cantidad en dracmas griegos e imprimir el equivalente en francos franceses.
c) leer una cantidad en peseta e imprimir el equivalente en dlares y en libras italianas
2.16 Realizar un algoritmo que intercambie los valores de dos variables numricas
















CAPITULO 3
ESTRUCTURAS GENERALES DE UN PROGRAMA


3.1 Concepto de programa
3.2 partes constitutivas de un programa
3.3 instrucciones y tipos de instrucciones
3.4 tipos de instrucciones
3.5 Elementos bsicos de un programa
3.6 Escritura de algoritmos/ programas
Actividades de programacin
Ejercicios


El los captulos anteriores se ha visto la forma de disear algoritmos para resolver problemas
con computadora. En este capitulo se introduce el proceso de la programacin que se
manifiesta esencialmente en los programas.
El concepto de programa como un conjunto de instrucciones y sus tipos constituyen la parte
fundamental del capitulo. La descripcin de los elementos bsicos de programacin que se
encontraran casi en todos los programas: interruptores, contadores, totalizadores, etc. Junto
con las normas elementales para la escritura de algoritmos y programas conforman el resto
del capitulo.


3.1 CONEPTO DE PROGRAMA
Un programa de computadora es un conjunto de instrucciones- ordenes dadas a la maquina-
que producirn la ejecucin de una determinada tarea. En esencia, un programa es un medio
para conseguir un fin. El fin ser normalmente definido como la informacin necesaria para
solucionar un problema.
El proceso de la programacin es, por consiguiente, un proceso de solucin de problemas
como ya se vio en el capitulo 2 y el desarrollo del programa requiere las siguientes faces:


1- definicin y anlisis del problema
2- diseo de algoritmos
- Diagrama de flujo
- Diagrama N-S
- Pseudocdigo
3- Codificacin del programa
4- Depuracin y verificacin del programa
5- Documentacin
6- Mantenimiento

Definicin del problema


Diseo del algoritmo

Codificacin del programa


Depuracin y verificacin

Las faces 1 y 2 ya han sido utilizadas en los captulos anteriores y son el objetivo fundamental
de este libro; sin embargo dedicaremos atencin, a lo largo del libro (Vase captulo 13) y los
apndices, a las fases 3, 4, 5 y 6 aunque estas son copias de libros especficos sobre lenguajes
de programacin.
3.2 PARTES CONSTITUTIVAS DE UN PROGRAMA
Tras la decisin de desarrollar un programa, el programador debe establecer el conjunto de
especificaciones que debe contener el programa: entrada, salida y algoritmos de resolucin
que incluirn las tcnicas para obtener las salidas a partir de las entradas.
Conceptualmente un programa puede ser considerado como una caja negra, como se muestra
en la figura 3.2. La caja negra o el algoritmo de resolucin, en realidad es el conjunto d cdigos
que transforman las entradas del programa (datos) en salida (resultados)



Entrada Programa Salida
(Algoritmo de resolucin)
Bloques de un programa

El programador debe establecer de donde provienen las entradas al programa. Las entradas
en cualquier caso, procedern de un dispositivo de entrada-teclado, disco-. El proceso de
introducir la informacin de entrada datos- en la memoria de la computadora se denomina
entrada de datos, operacin de lectura o accin de leer.
Las salidas de datos se deben presentar en dispositivos perifricos de salida: pantalla,
impresora, disco etc. La operacin de salida de datos se conoce tambin como, escritura o
accin d escribir.

3.3 INSTRUCCIONES Y TIPOS DE INSTRUCCIONES
El proceso de diseo del algoritmo o posteriormente de codificacin del programa consiste en
definir las acciones o instrucciones que resolvern el problema. Las acciones o instrucciones
se deben escribir y posteriormente almacenar en memoria en el mismo orden en que han de
ejecutarse, es decir, en secuencia.
Un programa puede ser lineal o no lineal.
Un programa es lineal si las instrucciones se ejecutan secuencialmente, sin bifurcaciones,
decisin ni comparaciones.
Instruccin 1
Instruccin 2

Instruccin n
En el caso del algoritmo las instrucciones se suelen conocer como acciones y se tendra:

Accin 1
Accin 2

Accin n

Un programa es no lineal cuando se interrumpe la secuencia mediante instrucciones de
bifurcacin
Accin 1
Accin 2

Accin x
Accin n

3.4 TIPOS DE INSTRUCCIONES
Las instrucciones disponibles en el lenguaje en un lenguaje de programacin dependen del
tipo de lenguaje. Por ello en este apartado estudiaremos las instrucciones -acciones- bsicas
que se pueden implementar de modo general en un algoritmo y que esencialmente soportan
todos los lenguajes. Dicho de otro modo, las instrucciones bsicas son independientes del
lenguaje.
La clasificacin mas usual desde el punto de vista anterior es:
a) instrucciones de inicio/fin
b) instrucciones de asignacin
c) instrucciones de lectura
d) instrucciones de escritura
e) instrucciones de bifurcacin
Las instrucciones a), b), c) y d) ya han sido descritas en captulos anteriores y se recogen en la
tabla 3.1

Instrucciones/ acciones bsicas

Tipos de instruccin Pseudocdigo ingles Pseudocdigo Espaol
Comienzo de procesos
Fin de procesos
Entrada (lectura)
Salida (escritura)
Asignacin
Begin
End
Read
Write
A----5
Inicio
Fin
Leer
Escribir
B----7

TABLA 3.1


3.4.1 INSTRUCCIONES DE ASIGNACION
Como ya son conocidas del lector repasaremos su funcin con ejemplos:
a) A 80 la variable A toma el valor de 80
b) Cul ser el valor que tomara la variable c tras al ejecucin de las siguientes
instrucciones?
A 12
B A
C B
A contiene 12, B contiene 12 y C contiene 12
NOTA: Antes de la ejecucin de las tres instrucciones, el valor de A, B y C es indeterminado. Si
se desea darles un valor inicial, habr que hacerlo explcitamente, incluso cuando el valor sea
0, es decir, habr que definir e inicializar las instrucciones.
A 0
B 0
C 0
c) Cul es el valor de la variable AUX al ejecutarse la instruccin 5?
1. AUX 10
2. B 20
3. AUX A
4. A B
5. B AUX
- en la instruccin 1, A toma el valor de 10
- en la instruccin 2, B toma el valor 20
- en la instruccin 3, AUX toma el valor anterior de A, o sea 10
- en la instruccin 4, A toma el valor anterior de B, o sea 20
- en la instruccin 5; B toma el valor anterior de AUX, o sea 10


d) cual es el significado de N N + 5 si N tiene el valor actual de 2?
N N + 5
Se realiza el calculo d la expresin N + 5 y su resultado 2+5=7 se asigna a la variable
situada a la izquierda, es decir N tomara un nuevo valor 7.
Se debe pensar en la variable como en una posicin d memoria, cuyo contenido puede varia
mediante instrucciones de asignacin (un smil suele ser un buzn de correos, donde el
numero de cartas depositadas en el variar segn el movimiento diario del cartero de
instruccin de cartas o del dueo del buzn de extraccin de dichas cartas)



3.4.2 Instrucciones de lectura de datos ( entrada)

Esta instruccin lee datos de un dispositivo de entrada
Cul ser el significado de las instrucciones siguientes?
a) leer NUMERO, HORAS, TASA
Leer del terminal los valores NUMERO, HORAS y TASAS, archivndolos el la memoria; si los
tras nmeros que se teclea en respuesta a la instruccin son: 12325, 32, 1200, significa que se
han asignado a la variable esos valores y equivaldra a la ejecucin de las instrucciones
NUMERO 12325
HORAS 32
TASA 1200

b) Leer A, B, C
Si se leen del terminal 100, 200, 300 se le asignara a las variables los siguientes valores:
A= 100
B= 200
C= 300


3.4.3instrucciones de escritura de resultados (salida)
Estas instrucciones se escriben en un dispositivo de salida.
Explicar el resultado de la ejecucin de las siguientes instrucciones:
A 100
B 200
C 300
Escribir A, B, C
Se visualizaran en la pantalla o imprimirn en la impresora los valores 100, 200 y 300 que
contiene las variables A, B y C


3.4.4 Instrucciones de bifurcacin
El desarrollo lineal de un programa se interrumpe cuando se ejecuta una bifurcacin. Las
bifurcaciones pueden ser segn el punto del programa a donde se bifurca: hacia delante o
hacia atrs.
Bifurcacin adelante Bifurcacin atrs
(positivo) (negativo)
instruccin 1 instruccin 1
instruccion2 instruccin 2
instruccin 3 instruccin 3


instruccin 8 instruccin 12
Ultima instruccin ultima instruccin
Las bifurcaciones en el flujo de un programa se realizan de modo condicional en funcin del
resultado de la evaluacin de la condicin.
Bifurcacin incondicional : la bifurcacin se realiza siempre que el flujo del programa pase
por la instruccin sin necesidad del cumplimiento de ninguna condicin.



Accin 1


Accin 2


Accin n


Bifurcacin condicional: la bifurcacin depende del cumplimiento de una determinada
condicin. Si se cumple la condicin, el flujo sigue ejecutando la accin F2. Si no se cumple, se
ejecuta la accin F1

3.5 ELEMENTOS BASICOS DE UN PROGRAMA
En programacin se debe separar la diferencia entre el diseo del algoritmo y su
implementacin en un lenguaje especfico. Por ello se debe distinguir claramente entre los
conceptos de programacin y el medio en que ellos se implementan en un lenguaje especfico.
Sin embargo una vez que se comprendan los conceptos de programacin y como utilizarlos, la
enseanza de un nuevo lenguaje es relativamente fcil.
Los lenguajes de programacin como los restantes lenguajes- tiene elementos bsicos que se
utilizan como bloque constructivos, as como reglas para las que esos elementos se combinan.
Estas reglas se denominan sintaxis del lenguaje. Solamente las instrucciones sintcticamente
correctas pueden ser interpretadas por la computadora y los programas que contengan
errores de sintaxis son rechazados por la maquina.
Los elementos bsicos constitutivos de un programa o algoritmo son:
- palabras reservadas (inicio, fin, si-entoncesetc.)
- identificadores (nombres de variables, esencialmente)
- caracteres especiales (coma, apstrofos, etc.)
- constantes
- variables
- expresiones
- instrucciones
Adems de estos elementos bsicos existen otros elementos que forman parte de los
programas, cuya comprensin y funcionamiento ser vital para el correcto diseo de un
algoritmo y naturalmente la codificacin del programa
Estos elementos son:
- bucles
- contadores
- acumuladores
- interruptores
- estructuras


secuenciales
selectivas
repetitivas

El amplio conocimiento de todos los elementos de programacin y el modo de su
integracin en los programas constituyen las tcnicas d programacin que todo buen
programador debe conocer.






3.5.1 Bucles

Un bucle o lazo (loop) es un segmento de un algoritmo o programa, cuyas
instrucciones se repiten un nmero determinado de veces mientras se cumple una
determinada condicin (existe o es verdadera la condicin) se debe establecer un

inicio


SUMA 0



Leer N 1)


SUMA 2)
SUMA + N


Escribir 3)
SUMA





5.- Arlen Cruz Paz( 84-104)

6.- Jeynner caceres Perez (105-125)






Si

No













Inicio
Leer N
N =
N > 0
Hacer
P = 1
Hacer
P = P X N
N = N - 1
N =
Escribir
P
FIN
Escribir
1
1
1





3.4 Disear un algoritmo para resolver una ecuacin de segundo grado
Ax
2
+ Bx + C=0

Solucin
Anlisis
La ecuacin de segundo grado es Ax
2
+ Bx + C=0 y las soluciones o races de la ecuacin
son :


Para que la ecuacin de segundo grado tenga solucin es preciso que el discriminante sea
menor que cero.
El discriminante de una ecuacin de segundo grado es :
Por consiguiente, si:


En consecuencia, el algoritmo que resolver el problema es el siguiente:
1. Inicio
2. Introducir los coeficientes A ,B y C.
3. Calculo del discriminante D =B-4AC
4. Comprobar el valor de D.
Si d es menor que cero, visualizar un mensaje de error.
Si d es igual a cero , se obtienen dos races iguales

Si de es mayor que cero, se calculan las dos races X1 y X2
5. Fin del algoritmo















Si
No

Si

No





inicio
Leer
A,B,C
Hacer
D=B
2
- 4.A.C
D = 0
D = 0
X1
=B+D)/2A
X2=

Fin
Mensaje
de error
Escribir
-B/2A


3.5 escribir un logaritmo que acepte tres nmeros enteros e imprima el mayor de ellos

solucin
Anlisis
El diseo del algoritmo requiere de una serie de comparaciones sucesivas. Las operaciones
sucesivas son las siguientes:
1. Inicio
2. Introducir los tres nmeros ABC
3. Compara ABC
-SI A es menor que b
- Comparar b y c
- Si b es mayor que c, el mayor es b
-Si b es menor que c el mayor es c
- Si a es mayor que b
-Comparar a y c
-Si a es menor que c el mayor es c
-Si a es mayor que c el mayor es a
Diagrama de flujo



Si no

No si
No si



Inicio
Leer a b y c
A < B < C
Escribir
B
A <
C
Escribir
C
Escribir
A
fin
1
1
1




EJERCICIOS
3.1 se desea calcular independientemente la suma de los nmeros pares e impares
comprendidos entre 1 y 200
3.2 leer una serie de nmeros distintos de cero (el ultimo numero de la serie es -99) y
obtener el mayor numero. Como resultado se debe visualizar el nmero mayor y un
mensaje de indicacin de nmero negativo, caso de que se haya ledo un numero
negativo.
3.3 calcular y visualizar la suma y el producto de los nmeros pares comprendidos entre
20 y 400 ambos inclusive.
3.4 leer 500 nmeros enteros y obtener cuantos son positivos
3.5 se trata de escribir el algoritmo que permita emitir la factura correspondiente a una
compra de un artculo determinado del que se adquieren una o varias unidades. El IVA a
aplicar es del 12% y si el precio bruto (precio venta mas IVA ) es mayor de 50.000 pesetas
se debe realizar, un descuento del 5%
3.6 calcular la suma de los cuadrados de los primeros 100 primeros nmeros naturales
3.7 sumar los nmeros pares del 2 al 10 e imprimir su valor
3.8 sumar 10 nmeros introducidos por el teclado
3.9 calcular la media de 50 nmeros e impresin de resultados
3.10 calcular los mltiplos de4 comprendidos entre 4 y N , donde N es un valor introducido
por el teclado
3.11 realizar un diagrama que permita realizar un contador e imprimir los 100 primeros
nmeros enteros
3.12 dados 10 nmeros enteros, visualizar la suma de los nmeros pares de la lista
cuantos nmeros pares existen y cual es la medida aritmtica de los nmeros impares
3.13 calcular la nota media de los alumnos de una clase considerando n-nmeros de
alumnos y c-nmeros de notas de mas alumnos y c-nmeros de notas de cada alumno.
3.14 escribir la suma de los 10 primeros nmeros pares
3.15 escribir un algoritmo que lea los datos de entrada de un archivo que solo contiene
nmeros y sume los nmeros positivos
3.16 desarrollar un algoritmo que determine en un conjunto de 100 numeros naturales: a)
Cuntos son menores de quince; b) Cuntos son mayores de 50; c) cuantos estn
comprendidos entre 25 y 45?













CAPITULO 4

Introduccin a la programacin
estructurada



4.1 Tcnicas de programacin
4.2 Programacin modular
4.3 Programacin estructurada
4.4 Estructura secuencial
4.5 Estructuras selectivas
4.6 Estructuras repetitivas
4.7 Estructuras de decisin anidadas
4.8 Estructuras repetitivas anidadas
4.9 La instruccin ir a (go to)
Actividades de programacin
Ejercicios

en la actualidad , dado el tamao considerable de las memorias centrales y las altas
velocidades de los procesadores citemos por ejemplo, los micro procesadores como el 80286,
80386 de Intel o 68020 de Motorola de 16 y 32bits ,el estilo de escritura de los programa se
vuelven una de las caractersticas mas sobresalientes en las tcnicas programacin. La
legibilidad de los algoritmos posteriormente de los programas exige que su diseo sea fcil de
comprender y su flujo lgico fcil de seguir

la programacin modular enseara le descomposicin de un programa en mdulos mas
simples de programar y la programacin estructurada permitir la escritura de programas fciles
de leer y modificar. En un programa estructurado el flujo lgico se gobierna por las estructuras de
descomposicin bsicas




1. Secuenciales
2. Repetitivas
3. Seleccin






En este capitulo se in introducen los tres conceptos anteriores: secuencial ejecucin instruccin a
instruccin , repetitivo capacidad de repetir una serie de operaciones y selectivo posibilidad de
seleccionar una accin entre un conjunto de alternativa especificas
El estudio de las estructuras de control se realiza basado en las herramientas de programacionya
estudiadas: diagrama de flujo diagrama NS y pseudocdigos.

4.1. Tcnicas de programacin

Las herramientas de programacin vistas en el capitulo 2 fundamentalmente los diagramas de
flujo fueron la primera representacin grafica utilizadas para el diseo de algoritmos programas
.este tipo de herramientas constituye el fundamento de la programacin convencional clsica y es
de utilidad para la solucin de problemas de pequea y media complejidad. Sin embargo, para
problemas complejos el diseo de algoritmos implica un aumento considerable de la
representacin grafica una reduccin de la legibilidad del algoritmo y un aumento de la memoria
fsica de la computadora ocupada por el programa. Par evitar estos inconvenientes las nuevas
teoras de la programacin se entran en las tcnicas de programacin modular y diseo de un
programa entraa la descomposicin del problema en mdulos (partes independientes)
programacin modular, la programacin de cada modulo mediante mtodos estructurados
programacin estructurada y su unin posterior mediante procedimientos ascendentes o
descendentes

4.2. Programacin modular

La programacin modular es uno de los mtodos de diseo mas flexibles y potentes para mejorar
la productividad de un programa. En programacin modular el programa se divide en
mdulos(partes independientes), cada una de las cuales ejecuta una nica actividad o tarea se
codifican independientemente de otros mdulos cada uno de estos mdulos se analizan ,
codifican y ponen a punto por separado.
Cada programa contiene un modulo denominado programa principal que controla todo lo que
sucede; se transfiere el control a submodulos (posteriormente, se denominarn subprogramas),
de modo que ellos puedan ejecutar sus funciones: sin embargo, cada su modul devuelve el
control al modulo principal cuando se haya completado su tarea, si la tarea asignada a cada
submodulo es demasiado compleja este deber romperse en otros mdulos mas pequeos. El
proceso sucesivo de subdivisin en mdulos continua hasta que el modulo tenga solamente una
tarea especifica que ejecutar esta tarea puede ser entrada salida manipulacin de datos control
detrs modulos o alguna combinacin de estos. Un modulo puede transferir temporalmente
(bifurcacin ) el control a otro modulo, sin embargo, cada modulo del cual se recibe originalmente
el control















Figura 4.1. Programacin modular
Los mdulos son independientes en el sentido en el que ningn modulo puede tener acceso
directo a cualquier otro modulo excepto el modulo al que llama y sus propios submodulos . Sin
embargo los resultados producidos por un modulo pueden ser utilizados por cualquier otro
modulo cuando se transfiera a ellos el control
Dado que los mdulos son independientes diferentes programadores pueden trabajar
simultneamente en diferentes partes del mismo programa. esto reducir el tiempo del diseo del
algoritmo y posterior codificacin del programa . Adems un modulo se puede modificar
radicalmente sin afectar a otros mdulos incluso sin alterar su funcin principal
La descomposicin de un programa en mdulos independientes mas simples se conoce tambin
como e mtodo de divide y vencers (divid and conquer). Se disea cada modulo con
independencia de los dems y siguiendo un mtodo ascendente o descendente que llegara hasta
la descomposicin final del problema en ndulos de forma jerrquica.
4.2.1. Tamao de los modulos
Una dificultad en la programacin modular reside en la determinacin del tamao de un modulo
.aunque no exista una regla fija que permita definir el tamao estndar del modulo una buena
aproximacin es considerar modulos del tamao fsico de una pagina(/30 o 40lineas de
Raz
Modulo 1 Modulo 4 Modulo 2 Modulo 3
Modulo 11 Modulo 12
Modulo 21
Modulo 31 Modulo 12 Modulo 12
Modulo 22
Modulo 221 Modulo 222
instrucciones). Evidentemente no siempre se conseguir descomponer unproblema en modulos
de este tamao pero el programadordebera de realizar esfuerzos para su diseo


Puede no ser claro lo que debe incluirse dentro de un modulo desgraciadamente no hay reglas,
pero tal como se ha dicho antesun modulo de una o dos lneas probablemente sria demasiado
cortoy ser mejor incorporarlo en otro modulo;los modulos grandes probablemente de 30 lineas o
m
as probablemente ejecutaran tarea mltiples y se deber romper en pequeas unidades
Ejemplo 4.1
Se didea un logaritmo que realice las siguientes tareas :
Impresin de cabeceras de un informe
Lecturas de dastos
Ejecutar clculos
Imprimir lneas detalladas de informacin imprimir totales
Este programa se puede descomponer e modulos, de modo que exista u modulo principal o de
control de diferentes submodulos :
Modulo principal
Llamada a submoduloimpresin de cabeceras.
Llamada a sumodulo procesos de datos
Llamada a submodulos impresin de totales
Fin de proceso

submodulo impresion de cabeceras
Instruccin al modulo de cabeceras
Retorno al modulo principal
submodulo procesos de datos
Lecturas de datos
Ejecucin de clculos
Impresin detallada de lneas
Retorno al modulo principal
submodulo impresin de totales
Retorno al modulo principal
La representacin grafica se muestra en la figura 4.2, de modo que existir un modulo principal y
tres submodulos









Figura 4.2 estructura modular simple
4.2.2.Implementacin de los modulos
La programacin modular se implementa utilizando modulos que toman diferentes nombres
segn el lenguaje de programacin: subrutinas en BASIC, procedimientos en pascal, subrutinasen
FORTRAN secciones en COBOLy funciones como modulos comunes en todos los lenguajes
En el capitulo 5 se analizaran con detenimiento la programacin modular, el diseo de los modulos
y la comunicacin entre ellos y el modulo principal
Programacin estructurada
El termino programacin estructurada se refiere a un conjunto de tcnicas que han ido
evolucionando desde los primeros trabajos de Edsgar Dijkistra estas tcnicas aumentan
considerablemente la productividad del programa reduciendo en elevado grado el tiempo
requerido para escribir, verificar ,depurar y mantener los programas.
La programacin estructurada hace los programas mas fciles de escribir, verificar mantener y
leer.los programas deben de estar dotados de una estructura. La programacin estructurada es
el conjunto de tcnicas que incorporan.
-diseo descendente (top-Down)
-recursos abstractos
-Estructuras bsicas
Recursos abstractos
La programacin estructurada se auxilia de los recursos abstractos en lugar de los recursos
concretos que se dispone (un determinado lenguaje de programacin) descomponer un programa
en trminos de recursos abstractos segn Dijkstra consiste en descomponer una determinada
Modulo principal
Modulo de
impresin de
cabeceras
Modulo de
procesos de datos
Modulo de
impresin de
totales
Modulo de
procesos de datos
Modulo de
impresin de
cabeceras
Modulo de
impresin de
totales
accin compleja en termino se un numero de acciones mas simples capaz de ejecutarlas o
constituyan instrucciones de computadora disponible


4.3.2 Diseo descendente (top-down)
El diseo descendente (tpo down) es el proceso mediante el cual el problema se descompone en
una serie e niveles o pasos sucesivos de refinamiento (stepwise). La metodologa descendente
consiste en efectuar una relacin entre las otras sucesivas etapas de estructuracin, de modo que
se relacionen unas a otras mediante entradas y salidas de informacin es decir se descompone el
problema en etapas o estructuras jerrquicas de modo que se puede considerar cada estructura
desde dos puntos de vista Lo que hace? Y como lo hace?
Si se considera un nivel n de refinamiento, las estructuras se consideran de la siguiente forma







Nivel n: vista desde el exterior nivel n+1: Vista desde el interior
Lo que hace? Cmo lo hace?
El diseo se puede ver en la figura 4.3







Figura 4.3 diseo descendente

4.3.3.Teorema de la programacin estructurada: Estructuras bsicas

En mayo de1966 Bohm y Jacopinidemostraron que un programa puede ser escrito utilizando tres
tipos de estructura de control:
-secuenciales
-selectivas
-Repetitivas
Un programa se define como propio si cmplelas siguientes cacracteristicas .
-posee un solo punt de entrada y uno de salida o fin para el control de programa
-existen caminos desde la entrada hasta la salida que se pueden seguir y que pasan por todas las
partes del programa
-todas las instrucciones son ejecutables y no existen lazos o bucles infinitos (sin fin)
4.4 Estructura secuencial
la estructura secuencial es aquella en la que una accin (instruccin)sigue a otrs en secuencia. Las
tareas se cuceden de tal modo que la salidade una es la entradade la siguiente y asi sucesivamente
hasta elfin del proceso . la figura 4.4 representa una estructura secuencial . la estructura
secuencial tiene una entrada y una salida. Su representacin grafica se muestra en las figuras
4.4,4.5 y 4.6








Figura 4.4 estructura secuencial


Accion2
Accin 3
Accion1









FIGURA 4.5 Diagrama N-S de una estructura secuencial
Inicio
.
.
Acciones
.
.
.
.
Fin
Ejemplo 4.2
Calculo de la suma y producto de dos nmeros.
La suma s de dos nmeros es s=a+b. el pseudocdigo y el diagrama de flujo correaspondiente se
muestran a continuacin
Pseudocdigo
Inicio
Leer un numero a
Leer un numero b
Suma s,s a+b
Producto p,p a+b
Escribir s,p
Fin


Accion1
Accin 2
.
.
Accin n

















EJEMPLO 4.3
Se trata de calcular el salario neto dde un trabajador en function de un numero de horas
trabajadas , precio de la hora de trabajo y considerando unos descuentos fijos al sueldo bruto en
concepto de impuestos(20 por 100)
Pseudocdigo
Inicio
(calculo salario neto)
Leer nombre, horas _ precio hora
Salario brutohoras x precio
impuestos0.20x salario bruto
salario netosalario bruto impuestos
escribir nombre, salario bruto ,salario neto
fin
inicio
Leer A
Escribir
S,P
Leer B
S A+B
P A*B
FIN



Diagrama de flujo
















Diagrama N-S
Leer :nombre, horas precio
Calculo de salario_brutohoras x precio
impuestos0.20 x salario _neto
inicio
Fin
Salario bruto
Horas x precio
impuestos
0.20 x salario neto
Salario neto
Salario bruto
Salario neto
Escribir
nombre
Salario bruto
salario neto
Leer, nombre Horas,
precio








4.5 Estructuras selectivas
La especificacin formal de algoritmos tiene realmente utilidad cuando el algoritmo requiere una
descripcin ms complicada que una sencilla lista e instrucciones. Este es el caso cuado existe el
numero de posibles alternativas resultantes de una evaluacin en una determinada condicin
Las estructuras selectivas se utilizan para tomar decisiones lgicas, de ah que se suele denominar
tambin estructuras de decisin o alternativas.
En las estructuras selectivas se evala una condicin y en funcin del resultado de la misma se
realiza una opcin u otra. las condiciones se especifican usando expresiones lgicas . la
representacin de una estructura selectiva se hace con palabras en pseudocdigo(if,then,else o
bien en espaol si, entonces, si no ), con una figura geomtrica en forma de rombo o bien con un
triangulo en el interior de una caja rectangular
La estructura selectiva o alternativas pueden ser:
-simples
-dobles
-multiples
4.5.1 Alternativa simple (si-entonces/if-then)
La estructura alternativa simple si entonces (en ingles if-then) ejecuta una determinada condicin.
la seleccin si-entonces evala la condicin y
-Si la condicin es verdadera entonces ejecuta la accin SI ( o acciones en caso de ser S1 una
accin compuesta y constar de varias acciones )
-si la condicin es falsa no hacer nada
Las representaciones graficas e la estructura condicional simple se muestran en la figura 4.7

Salario _netosalario_ bruto -impuestos
Escribir:nombre,salario_ bruto salario_ neto
Condici
Accin
Falsa
Verdadera



(a)



Pseudocdigo en espaol
Si<condicin>
Entonces<accin S1>
Fin_si
Pseudocdigo en ingles
If< condicin >
Then<accin S1>
Endif
Pseudocdigo en espaol (para S1 accin compuesta)
Si<condicin>
Entonces
<Accin S11>
<Accin S12>
.
<Accin S1n>
Fin_si
(b)





accion
verdadera falsa
condicion?
(c)

Figura4.7 estructuras alternativas simples : (a) diagramas de flujo; (b) , pseudocdigo; (c), diagrama N-S
Observese que las palabras del pseudocdigo si y fin_si se alinean verticalmente
Indentando(sangrando)la parte entonces(then)



4.5.2. Alternativa doble (si-entonces sino/if-then-else)
Elegir entre dos La estructura anteriores muy limitada y normalmente se elegir entre una
estructura que permita opciones o alternativas posibles en funcin del cumplimiento o no de una
determinada condicin
Si la condicin C es verdadera, se ejecuta la accin S1, y si es falsa se ejecuta la accin S2.


Verdadera





Pseudocdigo en espaol pseudocdigo en espaol (Accin compuesta)
Si<condicin> Si<condicin>
Entonces<accin S1> Entonces
Sino<accionS2> Accin S11
Fin _si Accin S12
Pseudocdigo en ingles .
if<condicin> Accin S1n
then<accin S1> Sino
else<accionS2 > Accin S11
Condici
n?
Accin S2 Accin S1
endif Accin S1n
Fin si











(c)
Figura4.8 estructura alternativa doble: (a) diagrama de flujo (b) pseudocdigo; (c) diagrama N-S
Obsrvese que el pseudocdigo las palabras reservadas entonces y si no estn indentadas en la
relacin con las palabras si y fin_si ; este procedimiento aumenta la legibilidad de la estructura y
es el medio mas idneo para representar algoritmos

Ejemplo 4.4
resolucion de una ecuacin de primer grado

Si la ecuacin es ax + b = 0. A y b son los datos y las posibles soluciones son:
a<>0 x=-b/a
a=0 b<>0 entonces solucin imposible
a= 0 b=0 entonces solucin indeterminada

el algoritmo correspondiente ser:

algoritmo RESOL1
inicio
{solucin de la ecuacion ax + b = 0}
Leer a,b
Si a<>0
Entonces x-b/a
Condicin?
Falsa Verdadera
Accin Accin
Escribir x
Sino si b<>0
entonces escribir solucin imposible
si no escribir solucin indeterminada
fin_si {fin de si para b<>o}
fin si {fin de si para <>0}
fin




Ejemplo 4.5
calcular la media aritmtica de una serie de nmeros positivos:
la media aritmtica de n nmeros es : x1 + x2 + x3 + ..xn/n
en el problema se supondr la entrada de datos por el teclado hasta que se introduzca el ultimo
numero , en nuestro caso -99. Para calcular la media aritmtica se necesita saber cuantos
nmeros se han introducido hasta llega hasta -99; para ello se utilizara un contador C que llevara
la cuenta de los nmeros introducidos.
Variables
S(suma): real
N(contador de nmeros enteros): entera
M(media ):real
Algoritmo media
Inicio

s0{inicializacin de s y n}
n0
datos:
leer x {calculo}
si x<0
entonces ir_ a (media)
sino nn + 1
ss + x
ir_a(datos)
fin _si
media:
ms/n { madia de dos nmeros positivos}
escribir m
fin
en este ejemplo se observara una bifurcacin hacia un punto referenciado por una etiqueta
numrica denominada (media) y otro punto de referencia por (datos)
trate el elumno de simplificar este algoritmo de modo que contenga solo un punto de bifurcacin
ejemplo 4.6
se desea obtener la nomina semanal de los empleados de una empresa cuyo se paga por horas y
del siguiente modo:
-las horas inferiores a 35 horas (normales) se pagan a una tarifa determinada que se debe
introducir por teclado al igual que el numero de horas y el nombre del trabajador.



7.- Fabio Gonzales (126-146)

Las horas iguales o superiores a 35 se pagaran como extras a un precio de 1.5 horas
normales.
Los impuestos a deducir a los trabajadores varian en funcin de su sueldo mensual.

Sueldo < = 20000, libre de impuestos
Las siguientes 15000 pesetas al 20 por 100
El resto al 30 por 100

Anlisis

Las operaciones a realizar sern:

1. Inicio
2. Leer nombre, horas trabajadas, tarifa horaria
3. Verificar si horas trabajadas < 35, en cuyo caso
Salario bruto = horas* tarifa; en caso contrario
Salario bruto = 35 * tarifa + (horas_)*1.5*tarifa.
4. Calculo de impuestos
Si salario bruto < = 20000, entonces impuestos = 0
Si salario_bruto < = 35000 entonces
Impuestos = (salario_bruto-20000)*0.20
Si salario_bruto < 35000 entonces
Impuestos =(salario_bruto 35000) * 0.30
5. Calculo del salario neto
Salario_neto = salario_bruto-impuestos
6. Fin

Representacin del algoritmo en pseudocdigo

Inicio
Leer nombre, horas, tarifa
Si horas < = 35
Entonces sbruto horas*tarifa
Sino sbruto 35*tarifa + (horas 35)*1.5*tarifa
Si sbruto < = 20000
Entonces impuestos 0
Sino si sbruto < = 35000
Entonces impuestos (sbruto 20000)* 0.20
Sino impuestos (15000*0.20) + ( sbruto- 35000) * 0.30
Fin_si
Fin_si
Sneto Sbruto impuestos
Escribir nombre, sbruto, impuestos, sneto
fin



Representacin del algoritmo en diagrama N-S

Inicio

Leer nombre, horas, tarifa

Horas < = 35
SI NO

Sbruto Horas*tarifas Sbruto 35*tarifa+(horas-35)*1.5*tarifa

Sbruto < = 20000
SI NO
Sbruto < = 35000
Si NO
Impuestos 0
Impuestos Impuestos
(Sbruto-20000)*.20 15000*0.20+
(Sbruto-35000)*.30

Sneto Sbruto-impuestos

Escribir nombre, sbruto, impuestos, sneto

Fin


Representacin del algoritmo en diagrama de flujo




SI NO




SI NO



SI NO











Inicio
Leer nombre,
horas, tarifa
Horas < = 35
Sbruto
Horas* tarifa
Sbruto
35*tarifa + (horas-
35)*1.5*tarifa
Sbruto < =
20000
Sbruto < =
35000
Impuestos
(sbruto-20000)*.20
Impuestos
15000*0.20+ (sbruto
-35000)*0.30
Sneto sbruto-impuestos
Escribir nombre, sbruto, impuestos,
sneto
Fin
Impuestos 0

Alternativa mltiple (segn_ sea, caso de/ case)
Con frecuencia en la prctica-, es necesario que existan ms de dos elecciones posibles ( por
ejemplos, en la resolucin de la ecuacin de segundo grado, existen tres posibles alternativas o
caminos a seguir, segn que el discrimnate sea negativo, nulo o positivo). Este problema, como se
ver mas adelante, se podra resolver por estructuras alternativas simples o dobles, anidadas o en
cascada; sin embargo, este mtodo se el numero de alternativas es grande puede plantear serios
problemas de escritura del algoritmo y naturalmente de legibilidad.
La estructura de decisin mltiple evaluara una expresin que podr tomar n valores distintos 1, 2,
3, 4, 5n. segn que elija uno de estos valores en la condicin, se realizara una de las n acciones, o
lo que es igual el flujo del algoritmo seguir un determinado camino entre los n posibles.
La representacin grafica de la estructura de decisin mltiple se representara en la figura 4.9.
Diagrama de flujo





. . .


Diagrama N-S
Modulo 1
Condicin

N=1 2 3 n Otro
S1 S2 S3 Sn Sx



Condici
Accin
S1
Accin
S2
Accin
S3
Accin
S4
Accin
Sn
Modulo 2

1 Condicin
2
3
3n Otros

S1 S2 S3 Sn Sx

Pseudocdigo

En ingles la estructura de decisin mltiple se representa

Case expresin of
[e1]: accin S1
[e2]: accin S2
.
.
Case expresin of
[e1]: accin S1
[e2]: accin S2

O bien

[en]: accin Sn
Otherwise
Accin Sx
End_case
[en]: accin Sn
Else
Accion Sx
End_ case

La estructura de decisin mltiple en pseudocdigo se puede representar de diversas formas,
pudiendo ser las acciones S1, S2, etc., simples como en el caso anterior o compuestas como en los
siguientes modelos de formatos.


Modelo 1

Segn_ Sea expresin (E) hacer
e1: accin s11
accin s12
.
.
accin S1a
e2: accin S21
accin S22
.
.
Accin S1b
.
.
en: accin S31
accin S32
.
.
Accin S3p
Otros: accin Sx
Fin_segun

Modelo 2(simplificado)

Segn E hacer
.
.
.
Fin_segun
Modelo 3 (simplificado)

Opcin E de
.
.
.
Fin_opcion

Modelo 4 (simplificado)

Caso_de E hacer
.
.
.
Fin_caso

Modelo 5 (simplificado)

Si E es n hacer
.
.
.
Fin_si

Notas:
a) Obsrvese que para cada valor de la expresin (E) se pueden ejecutar una o varias
acciones. Algunos lenguajes como pascal a estas instrucciones les denominan compuestas
y las delimitan con las palabras reservadas begin_end (inicio_fin); es decir, en
pseudocdigo.

Segn_sea E hacer
Inicio
e1: accin S1
e2: accin S2
.
.
En: accin Sn
Fin
Otros: accin Sx
Fin_segun

O bien en el caso de instrucciones compuestas

Segn_sea E hacer
e1: Inicio
accin S11
accin S12
.
.
Accin S1a
Fin
En: inicio
Accin S21
.
.
Fin
En:inicio
.
.
fin
Otros: accin Sx
Fin_segun

b) Los valores que toman las expresin (E) no tienen por que ser consecutivos ni nicos; se
pueden considerar rangos de constantes numricas o de caracteres como valores de la
expresin E.
Caso_de E hacer
2, 4, 6, 8, 10: escribir nmeros pares
1, 3, 5, 7, 9: escribir nmeros impares
Fin_caso

Cules de los siguientes modelos se pueden considerar representativos? En realidad como el
pseudocdigo es un lenguaje algortmico universal, cualquiera de los modelos se podra ajustar a
su representacin; sin embargo, nosotros consideraremos como ms estndar los modelos1, 2 y 4.
En esta obra seguiremos normalmente el modelo1, aunque, en ocasiones, y para familiarizar al
lector en su uso, podremos utilizar los modelos citados 2 y 4.

Ejemplo 4.7

Resolucin de la ecuacin de segundo grado teniendo en cuenta los tres posibles valores del
discriminante.

La ecuacin de segundo grado es:
aX
2
+bX+C=0

El discriminante D vale

D=b
2
-4ac

Y las races son:

X1, X2=


O lo que es igual

X1=

2
X2=


Si el discrimnate es menor que cero, las races son imaginarias.
El algoritmo correspondiente seria

Algoritmo RESOL2
Inicio
Leer a, b, c
D < b^2-4*a*c
Segn_sea D hacer
D < 0: escribir races Complejas
D = 0: X -b/2
Escribir X
D > 0: rc raizcua (D)
X1 (-b-rc)/2a
X2 (-b+rc)/2
Escribir x1,x2
Fin_segun
Fin

En este caso no se considera la opcin otros, ya que no tiene sentido.

Ejemplo 4.8

Se desea disear un algoritmo que escriba los nombres de los dias de la semana en funcin del
valor de una variable DIA introducida por teclado.

Los das de la semana son 7; por consiguiente, el rango de valores de DIA ser 17,y caso de que
DIA tome un valor fuera de este rango se deber producir una mensaje de error advirtiendo la
situacin anmala.


Inicio
Leer DIA
Segn_sea DIA hacer
1: escribir LUNES
2: escribir MARTES
3: escribir MIERCOLES
4: escribir: JUEVES
5: escribir: VIERNES
6: escribir: SABADO
7: escribir: DOMINGO
Otros
Escribir ERROR
Fin_segun
Fin

Ejemplo 4.9

Se desea convertir las calificaciones alfabticas A, B, C, D Y E a calificaciones numricas 4, 5, 6, 7, 8
respectivamente.
Los valores de A, B, C y D se presentaran por la variable LETRA, el algoritmo de resolucin del
problema es

Segn_sea LETRA hacer
A: Calificacin 4
B: Calificacin 5
C: Calificacin 6
D: Calificacin 7
E: Calificacin 8
Fin_segun

Como se ve en el pseudocdigo, no se contemplan otras posibles calificaciones- por ejemplo, =,
resto notas numricas-; si asi fuese, habra que modificarlo en el siguiente sentido.

Segn_sea LETRA hacer
A: Calificacin 4
B: Calificacin 5
C: Calificacin 6
D: Calificacin 7
E: Calificacin 8
Otros: calificacin 0
Fin_segun

Ejemplo 4.10

Se desea leer por teclado un numero comprendido entre 1 y 10 (inclusive), y se desea visualizar si
el numero es par o impar.

En primer, se deber detectar si el numero eta comprendi en el rango valido (1 a 10) y a
continuacin si el numero es 1, 3, 5, 7, 9, escribir un mensaje de impar impar; si es 2, 4, 6 ,8, 10
escribir un mensaje de par.


Inicio
Leer nmero
Si numero > = 1 y un numero < = 10
Entonces segn_ sea nmero hacer
1, 3, 5, 7, 9: escribir impar
2, 4, 6, 8, 10: escribir par
Fin_segun
Fin_si
Fin

4.6 Estructuras repetitivas

Las computadoras estn especialmente diseadas para todas aquellas aplicaciones en las cuales
una operacin o conjunto de ellas deben repetirse muchas veces. Un tipo muy importante de
estructura es el algoritmo necesario para repetir una o varias acciones un nmero determinado de
veces. Un programa que lee una lista de nmeros puede repetir la misma secuencia de mensajes
al usuario e instrucciones de lectura hasta que todos los nmeros de un fichero se lean.

Las estructuras que repiten una secuencia de instrucciones un nmero determinado de veces se
denominan bucles y se denomina iteracin al hecho de repetir la ejecucin de una secuencia de
acciones. Un ejemplo aclarara la cuestin.

Supongamos que se desea sumar una lista de nmeros escritos desde teclado por ejemplo,
calificaciones de los alumnos de una clase-. El medio conocido hasta ahora es leer los nmero y
aadir sus valores a una variable SUMA que contenga las sucesivas sumas parciales. La variable
suma se hace igual a cero y a continuacin se incremente en el valor del nmero cada vez que uno
de ellos se lea. El algoritmo que resuelve este problema es:

Algoritmo suma
Inicio
SUMA 0
Leer nmero
SUMA SUMA + numero
Leer nmero
SUMA SUMA + numero
Leer nmero
Fin

Y as sucesivamente para cada nmero de la lista. En otras palabras, el algoritmo repite muchas
veces las acciones

Leer nmero
SUMA SUMA + numero

Tales opciones repetidas se denominad bucles o lazos. La accin (o acciones) que se repite en un
bucle se denominan iteracin. Las dos principales preguntas a realizarse en el diseo de un bucle
son Qu contiene el bucle? Y Cuntas veces se debe repetir?

Cuando se utiliza un bucle para sumar una lista de numero, se necesita saber cuntos numero se
han de sumar. Para ello necesitaremos conocer algn medio para detener el bucle. En el ejemplo,
N. Existen dos procedimiento para contar el numero de iteraciones, usar una variable TOTAL que
se inicializa a la cantidad de numero que se desea y a continuacin se decrementa en uno cada vez
que el bucle se repite (este procedimiento aade una accin ms al cuerpo del bucle:
TOTAL TOTAL-1), o bien inicializar la variable TOTAL en 0 o en 1, e ir incrementado en uno a
cada iteracin hasta llegar al nmero deseado.

Algoritmo suma_numero
{leer nmero total en variable N}
TOTAL N {tambin se podran hacer leer N}
SUMA 0
{Comienzo de bucle}
Hacer lo siguiente mientras que TOTAL sea mayor que creo
Leer Nmero
SUMA SUMA + numero
SUMA TOTAL -1
{fin del bucle}
Escribir la suma de los, N, numero es, SUMA

El bucle podr tambin haberse terminado poniendo cualquiera de estas condiciones

Hasta_que TOTAL sea cero
Desde 1 hasta N

Para detener la ejecucin de los bucles se utiliza una condicin de parada. El pseudocdigo de una
estructura repetitiva tendr siempre este formato:

Inicio
{Inicializacin de variables}
Repetir
Acciones S1, S2
Salir segn condicin
Acciones Sn, Sn+1
Fin_repetir

Aunque la condicin de salida se indica en el formato anterior en el interior del bucle- y existen
lenguajes que as la contiene expresamente*-, lo normal es que la condicin se indique al final o al
principio del bucle, y as se consideran tres tipos de instrucciones o estructuras repetitivas o
iterativas generales y una particular que denominaremos iterar que contiene la salida en el
interior del bucle.


Iterar (loop)
Mientras (While)
Repetir (repeat)
Desde (for)

El algoritmo de suma anterior podra expresarse en pseudocdigo estndar as:

Algoritmo SUMA_numeros
Inicio
Leer N
SUMA 0
Repetir
Salir si TOTAL es < = 0
Leer nmero
SUMA SUMA + 1
TOTAL TOTAL + 1
Fin_de repetir
Escribir la suma es, SUMA
Fin

Los tres casos generales de estructuras repetitivas dependen de la situacin y modo de la
condicin. La condicin se evala tan pronto se encuentra en el algoritmo y su resultado producir
os tres tipos de estructuras citadas.

a) La condicin de salida del bucle se realiza al principio del bucle ( estructura mientras).

Algoritmo SUMA1
Inicio
Lee N
Repetir
Salir si K > = n {mientras K < n}
K K+1
S S+K
Fin_repetir
Escribir S
Fin

Se ejecuta el bucle mientras se verifica una condicin ( K < n).

b) La condicin de salida se origina al final del bucle; el bucle se ejecuta hasta que se verifica
una cierta condicin.

Repetir
K K + 1
S S + K
Salir se K > = n
Fin_ repetir

c) La condicin de salida se realiza con un contador que cuenta el nmero de iteraciones.

Repetir
Desde i =vi hasta i = vf hacer
K K + 1
S S + K
Fin_repetir

I es un contador que cuenta desde el valor inicial (vi) hasta el valor final (vf) con los incrementos
que se consideren.

4.6.1 estructura mientras (while)

La estructura repetitiva mientras (en ingls WHILE o DOWHILE: hacer mientras) es aquella en
que el cuerpo del bucle se repite mientras se cumple una determinada condicin. Las
representaciones graficas son:

NO

(a)
SI







Pseudocdigo en espaol
Mientras condicin hacer
Accin S1
Accion S2
.
.
Accin Sn
Fin_mientras

Pseudocdigo en ingles
WHILE condicin DO
<Acciones>

Mientras condicin

Acciones (c)






DOWHILE condicin
<Acciones>

O bien

ENDWHILE ENDDO
Condicio
n
Acciones

(b)

Figura 4.10.. Estructura mientras(a) , diagrama de flujo; (b), Pseudocdigo; (c), diagrama N-S.
Cuando se ejecuta la instruccin mientras, la primera cosa que sucede es que se evala la
condicin (una expresin booleana). Si se evala falsa, ninguna accin se toma y el programa
prosigue en la siguiente instruccin del bucle. Si la expresin booleana es verdadera, entonces
se ejecuta el cuerpo del bucle, despus de lo cual se evala de nuevo la expresin booleana.
Este proceso se repite una y otra vez mientras la expresin booleana (condicin) sea
verdadera. El ejemplo anterior quedara as:

Algoritmo suma_numeros
Inicio
{leer nmero total N}
TOTAL N
SUMA 0
Mientras N > 0 hacer
Leer numero
SUMA SUMA + numero
TOTAL TOTAL + 1
Fin_mientras
Escribir la suma de los, N, numero es, SUMA
Fin

En el caso anterior, como la variable TOTAL se va decrementando y su valor inicial era N,
cuando Tome el valor 0, significara que se han realizado N iteraciones, o, lo que es igual, se han
sumado N nmeros y el bucle se debe parar o terminar.

Ejemplo 4.11

Contar los numero enteros positivos introducido por teclado. Se consideran dos variables
enteras NUMERO y CONTADOR ( contara el numero de enteros positivos). Se supone que se
leen nmeros positivos y se detiene el bucle cuando se lee un nmero negativo o cero.

Inicio
Contador 0
Leer nmeros
Mientras numero > 0 hacer
Contador contador + 1
Leer nmero
Fin_mientras
Escribir el numero de entero positivos es, contador
Fin





























Inicio

C D

Leer Nmero

Mientras numero > 0

Leer nmero
C C + 1

Escribir nmeros enteros, C

Fin

Inicio
C 0
Leer nmero
Numero >
0
Leer nmero
C C + 1 Escribir nmeros
enteros, C
Fin


La secuencia de las acciones de este algoritmo se pueden reflejar en el siguiente pseudocdigo

Paso Pseudocdigo Significado

1 contador 0 inicializar contador < 0

2 leer numero leer primer numero

3 mientras numero > 0 hacer comprobar si numero > 0
Si es asi, continuar con el paso
4. Si no, continuar con el paso 7

4 sumar 1 a contador incrementar contador

5 leer numero leer siguiente numero

6 regresar al paso 3 evaluar y comprobar la
expresin
Booleana

7 escribir contador visualizar resultados

Obsrvese que los pasos 3 a 6 se ejecutaran mientras los nmeros de entrada sean positivos.
Cuando se lea -15 (despus de 4 pasos), la expresin nmero > 0 produce un resultado falso y
se transfiere el control a la accin escribir y el valor del contador ser 4.

Ejecucin de un bucle cero veces

Obsrvese que en una estructura mientras la primera cosa que sucede es la evaluacin de la
expresin booleana; si se evala falsa en ese punto, entonces el cuerpo del bucle nunca se
ejecuta. Puede parecer intil ejecutar el cuerpo del bucle cero veces, ya que njo tendr efecto
en ningn valor o salida. Sin embargo, a veces es la accin deseada.

Inicio
N 5
S 0
Mientras n < =4 hacer
Leer X
S S + X
Fin_mientras
fin

en el ejemplo anterior se aprecia que nunca se cumplir la condicin (expresin booleana n < =
4), por lo cual se ejecutara la accin fin y no se ejecutara ninguna accin del bucle.

Ejemplo 4.12

El siguiente bucle no se ejecutar si el primer nmero ledo es negativo o cero.

C 0
Leer nmero
Mientras numero > 0 hacer
C C + 1
Leer nmero
Fin_mientras

Bucles Infinitos

Algunos bulces no exigen fin y otros no encuentran el fin por error en su diseo. Por ejemplo,
un sistema de reservas de lneas areas puede repetir simplemente un bucle que permita al
usuario aadir o borrar reservas. El programa y el bucle corren siempre, o al menos hasta que
la computadora se apaga. En otras ocasiones un bucle no se termina nunca porque nunca se
cumple la condicin.

Un bucle que nunca se termina se denomina bucle infinito o sin fin. Los bucles sinfn no
intencionados son perjudiciales para la programacin y se deben evirar siempre. Consideremos
el siguiente bucle que visualiza el inters producido por un capital a las tasas de inters
comprendidos en el rango desde 10 a 20 por 100

Leer capital
Tasa 10
Mientras tasa <> 20 hacer
Inters tasa*0.01*capital {tasa*capital/100=tasa*0.01*capital}
Escribir inters producido, inters
Tasa tasa + 2
Fin_mientras
Escribir continuacin

Los sucesivos valores de la tasa sern 10, 12, 14, 16, 18, 20, de modo que al tomar tasa el
valor 20 se detendr el bucle y se escribir el mensaje continuacin.
Supongamos que se cambie la lnea ultima del bucle por

Tasa tasa +3

El problema es que el valor de la tasa salta ahora de 19 a 22 y nunca era igual a 20 (10, 13, 16,
19, 22). El bucle seria infinito, la expresin booleana para determinar el bucle ser:

Tasa < 20 o bien tasa > 20

Regla prctica: las pruebas o test en las expresiones booleanas es conveniente que sean mayor
o menor que en lugar de pruebas de igualdad o desigualdad. En el caso de la codificacin en un
lenguaje de programacin esta regla debe seguirse rgidamente en el caso de comparacin de
nmeros reales, ya que como esos valores se almacenan en cantidades aproximadas las
comparaciones de igualdad de valores reales normalmente plantean problemas. Siempre que
realice comparaciones de nmeros reales, use la relaciones <, < =, >, > =.

Terminacin de bucles con datos de entrada

Si su algoritmo o programa esta leyendo una lista de valores con un bucle mientras, se debe
incluir algn tipo de mecanismo para terminar el bucle. Existen cuatro mtodos tpicos para
terminar un bucle de entrada:

1. Preguntar antes de la iteracin
2. Encabezar la lista de datos con su tamao
3. Finalizar la lista con su valor de entrada
4. Agotar los datos de entrada

Examinmoslos por orden

El primer mtodo simplemente solicita con un mensaje al usuario si existen ms entradas.

Suma 0
Escribir existen ms nmeros en la lista s/n
Leer reps {variable Resp, tipo carcter}
Mientras Resp = S o Resp = s Hacer
Escribir numero
Leer N
Suma Suma + N
Escribir existen mas nmeros (s/n), Resp
Leer Resp
Fin_mientras

Este mtodo a veces es aceptable y es muy til en ciertas ocasiones, pero suele ser tedioso
para lista grandes; en este caso es preferible incluir una seal de parada.

El mtodo de conocer en la cabecera del bucle el tamao o el numero de iteraciones ya ha sido
visto un ejemplos anteriores.

Tal vez el mtodo mas correcto para terminar un bucle que lee una lista de valores es con un
centinela. Un valor centinela es uno especial usado para indicar el final de una lista de datos.
Por ejemplo, supongamos que se tienen unas calificaciones de unos tests (cada calificacin
comprendida entre 0 y 100); un valor centinela en esta lista puede ser 999, ya que nunca
ser una calificacin valida y cuando aparezca este valor se terminara el bucle. Si la lista de
datos son nmeros positivos, un valor centinela puede ser un nmero negativo que indique el
final de la lista. El siguiente ejemplo realiza la suma de todos los nmeros positivos
introducidos desde el terminal.


Suma 0
Leer NUMERO
Mientras NUMERO > = 0 hacer
Suma suma + numero
Leer numero
Fin_mientras

Observese que el ultimo numero ledo de la lista no se aade a la suma si es negatvio, ya que
se sale fuera del bucle. Si se desea sumar los nmeros 1, 2, 3, 4, y 5 con el bucle anterior, el
usuario debe introducir, por ejemplo:

1 2 3 4 5 -1

El valor final -1 se lee, pero no se aade a la suma. Notese tambin que cuando se usa un valor
centinela se invierte el odren de las instrucciones de lectura y suma con un valor centinela,
este debe leerse al final del bucle y se debe tener la instruccin leer al final del mismo.

El ultimo mtodo de agotamiento de datos de entrada es comprobar simplemente que no
existen mas datos de entrada. Este sistema suele depender del tipo de lenguaje; por ejemplo,
pascal puede detectar el final de una lnea; en los archivos secuenciales se puede detectar el
fin fsico de fichero (eof, End of file)

Ejemplo 4.13

Considere los siguientes algoritmos. que visualizara y cuanta ves se ejecuta el bucle?

a) i 0
mientras i < 6 hacer
escribir i
i i + 1
fin_mientras

La salida es el valor de la variable de control i al principio de cada ejecucin del cuerpo del
bucle: 0, 1, 2, 3, 4 y 5. El bucle se ejecuta seis veces.

b) I 0
Mientras i < 6 hacer
i i + 1
escribir i
fin_mientras

La salida ser entonces 1, 2, 3, 4, 5 y 6. El cuerpo del bucle se ejecuta tambin seis veces.
Obsrvese que cuando i = 5, la expresin booleana es verdadera y el cuerpo del bucle se
ejecuta; con i = 6 la sentencia escribir se ejecuta, pero a continuacin se evala la expresin
booleana y se termina el bucle.

Ejemplo 4.14

Calcular la medida de un conjunto de notas de alumnos. Pondremos un valor centinela de -99
que detecte el fin del bucle.

Inicio
Total 0
Media 0
n = 0 {numero de alumnos}
leer nota
mientras nota <> -99 hacer
total total + nota
C C + 1
Leer nota
Fin_mientras
Escribir la media, total/C
Fin

Obsrvese que total, n y media se inicializan a cero antes de la instruccin mientras. Cuando el
bucle termina, la variable total contiene la suma de todas las notas y por consiguiente total/n,
siendo el nmero de alumnos, ser la media de la clase.

4.6.2 Estructura repetir(repeat)

Existen muchas situaciones en las que se desea que un bucle se ejecute al menos una vez antes
de comprobar la condicin de repeticio. En la estructura mientras se el valor de la expresin
booleana es inicialmente falso, el cuerpo del bucle no se ejecutara; por ello se necesitan otros
tipos de estructuras repetitivas.

La estructura repetir (repeat) se ejecuta hasta que se cumpla una condicin determinada que
se comprueba al final del bucle.

Pseudocdigo

Repetir REPEAT DOUNTIL <condic>
<acciones> <acciones> <acciones>

Hasta_que <condicion> UNTIL <condic> ENDDO

(a) castellano (b) Ingles (c) Ingles


Diagrama de flujo Diagrama N-S



Acciones

Repetir (condicin)
Falsa



Verdadera


Figura 4.11. Estructura repetir: (a), pseudocdigo; (b), Diagrama de flujo; (c), diagrama N-S

El bucle repetor-hasta_que se repite mientras el valor de la expresin booleana de la condicin
se falsa, justo la opuesta de la sentencia mientras.

Inicio
Contador 1
Repetir
Leer numero
Contador contador + 1
Hasta_que contador < 30
Escribir nmeros Leidos 30
Fin

En el ejemploi anterior el bucle se repite hasta que el valor de variable contador exceda a 30,
lo que suceder despus de 30 ejecuciones del cuerpo del bucle.

Ejemplo 4.15

Desarrollar el algoritmo necesario para calcular el factorial de un numero N que responda a la
formula:

N! = 1 N * (N-1)*(N-2),,3*2*1

acciones
Condicion

El algoritmo correspondiente es:

Inicio
Leer N
Factorial 1
I I 1
Repetir
Factorial factorial * 1
I I + 1
Hasta_que I =N 1
Escribir el factorial del numero, N, es, factorial
Fin

Con una estructura repetir, el cuerpo del bucle se ejecuta siempre al menos una vez. Cuando
una instruccin repetir se ejecuta, la primera cosa que sucede es la ejecucin del bucle y a
continuacin se evala la expresin booleana resultante de la condicin. Si se evala como
falsa, el cuerpo del bucle se repite y la expresin booleana se evala una vez. Despus de cada
iteracin del cuerpo del bucle, la expresin booleana se evala; si es verdadera, el bucle
termina y el programa sigue en la siguiente instruccin a hasta_que.

Diferencias de las estructuras mientras y repetir

La estructura mientras termina cuando la condicin es falsa, mientras que repetir-
termina cuando la condicin es verdadera.
En la estructura repetir el cuerpo del bucle se ejecuta siempre al menos una vez; por el
contrario, mientras es mas general y permite la posibilidad de que el bucle pueda no
ser ejecutado. Para usar la estructura repetir debe estar seguro de que el cuerpo del
bucle- bajo cualquier circunstancia se repetir al menos una vez.

Ejemplo 4.16

Encontrar el entero positivo ms pequeo (num) para el cual la suma 1 + 2 + 3,, + num es
menor que limite.

1. Introducir limite
2. Inicalizar num y suma a 0
3. Repetir las acciones siguientes hasta que suma > limite
a) Incrementar num en 1
b) Aadir num a suma
4. Visualizar num y suma








8.-Zugania Zuiga ( 147-167)
Inicio
Leer limite
Num 0
Suma 0
Repetir
Num num + 1
Suma suma + num
Hasta_que suma > limite
Escribir num, suma


EJEMPLO 4.17

Escribir los nmeros 1 a 100

Num 1
Repetir
Escribir num
Num num + 1
hasta_que num = 101


EJEMPLO 4.18

Es muy frecuente realizar validaciones de entrada de datos en la mayora de las aplicaciones.
Este ejemplo detecta cualquier entrada comprendida entre 1 y 12, rechazando las restantes, ya
que se trata de leer los nmeros correspondientes de los meses del ao.

Inicio
Escribir introduzca numero del mes
Repetir
Leer mes
Si (mes<1) o (mes>12)
Entonces introducir un valor entre 1 y 12
Fin_si
Hasta_que (mes > = 1) y (mes < = 12)
Fin

Este sistema es conocido como interactivo por entablar un dialogo imaginario entre la
computadora y el usuario.


4.6.3 Estructura desde/para (for)

En muchas ocasiones se conoce de antemano el nmero de veces que se desean ejecutar las
acciones de un bucle. En estos casos en el que el nmero de interacciones es fija, se deber usar
la estructura desde o para (for, en ingles).
La estructura desde ejecuta las acciones del cuerpo del bucle un nmero especificado de veces y
de modo automtico controla el nmero de iteraciones o pasos a travs del cuerpo del bucle.
Las herramientas de programacin de la estructura desde o para se muestran a continuacin:

Pseudocdigo

Desde variable (V) = vi hasta vf hacer para v desde vi hasta vf hacer
<acciones> <acciones>
. .
. .
. .
Fin__desde fin_desde
V. variable ndice b) modelo 2
Vi, vf: valores iniciales y finales de la variable
a) Modelo 1


Diagrama de flujo estructura desde

Calcular
Valor inicial
Y valor final



Fijar la
Variable ndice
Al valor inicial



Variable verdadero
ndice > valor
Final

falso

Acciones cuerpo del bucle



Incrementar
Variable ndice


Diagrama N-S, estructura desde



Desde v = vi hasta vf


<acciones>






(c)

Figura 4.12. Estructura desde (for): (a), pseudocdigo;
(b), diagrama de flujo; (c), diagrama n-N


OTRAS REPRESENTACIONES DE ESTRUCTURAS
REPETITIVAS DESDE/PARA (FOR)

Un bucle desde (for) se representa con los smbolos de proceso y de decisin mediante un
contador. As, por ejemplo, en el caso de un bucle de lectura de 50 nmeros para tratar de
calcular su suma.


1 iniciacion
Del contador



Proceso o
Acciones del
Bucle




+ 1




no > 50
si

Como aplicacin, calcular la suma de los N primeros enteros.


| 1 si
| > N

| | + 1 S 0
Desde | 1 hasta N
hacer
S S + |
Fin_desde
Imprimir equivale a escribir suma= , S

S
no




S S + 1


Fin



La estructura desde comienza con un valor inicial de la variable ndice y las acciones
especificas se ejecutan a menos que el valor inicial sea mayor que el valor final. La variable
ndice se incrementa en uno y si este nuevo no excede al final, se ejecutan de nuevo las
acciones. Por consiguiente, las acciones especficas en el bucle se ejecutan para cada valor de la
variable ndice desde el valor inicial hasta l valor final con el incremento de uno en uno.
El incremento de la variable ndice siempre es 1 si no se indica expresamente lo contrario.
Dependiendo del tipo de lenguaje, es posible que el incremento sea distinto de uno, positivo o
negativo. As, por ejemplo, BASIC y FORTRAN admiten diferentes valores positivos o
negativos del incremento, y Pascal solo admite incrementos cuyo tamao es la unidad: bien
positivos, bien negativos.
La variable ndice o de control normalmente ser de tipo entero y es normal emplear como
nombres las letras I, J, K.
El formato de la estructura desde varia si se desea un incremento a I, bien positivo, bien
negativo (decremento).

Desde v = vi hasta vf inc hacer {inc, incremento}
Dec {dec, decremento}
<acciones>
.
.
.
Fin_desde
Si el valor inicial de la variable ndice es menor que el valor final, los incrementos deben ser
positivos, ya que en caso contrario la secuencia de acciones no se ejecutara. De igual modo si el
valor inicial es mayor que el valor final, el incremento debe de ser en este caso negativo, es
decir, decremento. Al incremento se le suele denominar tambin paso (step, en ingles.)
Es decir:
Desde i = 20 hasta 10 hacer
<acciones>
Fin_desde

No se ejecutara, ya que el valor inicial es 20 y el valor final 10 como se supone un incremento
positivo, de valor 1, se producira un error.

El pseudocdigo correcto debera ser:
Desde i = 20 hasta 10 decremento 1 hacer
<acciones>
Fin_desde

Realizacin d una estructura desde con estructura mientras.

Es posible, como ya se ha mencionado en aparatos anteriores, sustituir una estructura desde por
una mientras; en lneas siguientes se indican dos formad para ello.

1. Estructura desde con incrementos de la variable ndice positivos.
V vi
Mientras v > = vf hacer
<acciones>
V v + incremento
Fin_mientras

2. Estructura desde con incremento de la variable ndice negativos.
V vi
Mientras v > = vf hacer
<acciones>
V v decremento
Fin_mientras

La estructura desde puede realizarse con algoritmos basados en estructura mientras y repetir,
por lo que pueden ser intercambiable cuando as lo desee. Las estructuras equivalentes a desde
son las siguientes:

a) Inicio b) inicio
i 1 i 1
mientras 1 > 0 hacer mientras i < = n hacer
<acciones> <acciones>
i i 1 i i + 1
fin_mientras fin_mientras
fin fin

b) Inicio d) inicio
i 0 i 1
repetir repetir
<acciones> <acciones>
i 1 + 1 i i + 1
hasta_que i = n hasta_que i > n
fin fin

e) Inicio f) inicio
repetir repetir
<acciones> <acciones>
i i - 1 i i - 1
hasta_que i = 1 hasta_que i < 1
fin fin



4.6.4. Salidas internas de los bucles

Aunque no se incluye dentro de las estructuras bsicas de la programacin estructurada, en
ocasiones es necesario disponer de una estructura repetitiva que permita la salida en un punto
intermedio del bucle cuando se cumpla una condicin. Esta nueva estructura solo se dispone en
algunos lenguajes de programacin especficos; la denominaremos salir_si o iterar para
diferenciarlo de la repetir_hasta ya conocida. Las salidas de bucles suelen ser validas en
estructuras mientras, repetir y desde.

El formato de estructura es

Repetir
<acciones>
Salir_si <condicin> entonces salir bucle
<acciones>
Fin_repetir

En general, la instruccin salir_si no produce un programa legible y comprensible como lo hace
mientras y repetir. La razn para esta ausencia de claridad es que la salida de un bucle es el
principio o el final del mismo. Le recomendamos no recurra a esta opcin aunque la tenga su
lenguaje- mas que cuando no exista otra alternativa o disponga de la estructura iterar (loop).


EJEMPLO 4.19

Una aplicacin de un posible uso de la instruccin salir_si se puede dar cuando se incluyen
mensajes de peticin en el algoritmo para la introduccin sucesiva de informaciones.

Algoritmo 1 Algoritmo 1

Leer informacin Leer informacin
Repetir mientras no fin de lectura
Procesar informacin Procesar informacin
Leer informacin Leer informacin
Hasta_que fin_mientras

En los algoritmos anteriores cada entrada (lectura) de informacin va acompaada de su
correspondiente proceso, pero la primera lectura esta fuera de bucle. Se puede incluir en el
interior del bucle todas las lecturas de informacin si se posee una estructura salir si (EXIST
IF). Un ejemplo de ello es la estructura siguiente:

Repetir
Leer informacin
salir_si no fin de lectura
Procesar informacin
Fin_repetir


4.7 ESTRUCTURAS DE DECISION ANIDADAS

Las lecturas de seleccin si-entonces y si-entonces-sino implican la seleccin de una de dos
alternativas. Es posible tambin utilizar la instruccin si para disear estructuras de seleccin
que contengan ms de dos alternativas. Por ejemplo, una estructura si-entonces puede contener
otra estructura si-entonces, y esta estructurada si-entonces puede contener otra y as
sucesivamente cualquier nmero de veces; a su vez, dentro de cada estructura pueden existir
diferentes acciones.


Si condicin 1 entonces

Si condicin 2 entonces

Escribir hola Mortimer



Las estrucutras si entonces a otras estructuras si se denominan anidas o encajadas:

Si condicin 1
Entonces <acciones>
Sino
Si condicin 2
Entonces <acciones>
Sino
Fin_si
Fin_si

Una estructura de seleccin de n alternativas o de decisin mltiple puede ser construida
utilizando una estructura si con este formato:

Si condicin 1
Entonces
<acciones>
Sino
Si condicin 2
Entonces
<acciones>
Sino
Si condicin 3
Entonces
<acciones>
.
.
Sino
Fin_si
Fin_si
Fin_si

Una estructura selectiva mltiple constara de un serie de estructuras si, unas interiores a otras.
Como las estructuras si pueden volverse bastante complejas para que el algoritmo sea claro, ser
preciso utilizar indentacion (sangra o sangrado), de modo que exista una correspondencia entre
las palabras reservadas si y fin_si, por un lado, y entonces y sino, por otro.
La escritura de las estructuras puede variar de unos lenguajes a otros; por ejemplo, una
estructura si admite tambin los siguientes formatos:

Si expresin booleana 1 entonces
<acciones>
Sino
Si expresin booleana 2 entonces
Sino
Si expresin booleana 3 entonces
<acciones>
Sino
<acciones>

Sino
<acciones>
Fin_si
Fin_si
Fin_si
O bien

Si expresin booleana 1 entonces
<acciones<
Sino si expresin booleana 2 entonces
<acciones>
Fin_si
.
.
.
Fin_si



EJEMPLO 4.20

Disear un algoritmo que lea 3 nmeros A, B, C y visualice en pantalla el valor de mas grande.
Se supone que los tres valores son diferentes.
Los tres nmeros son A, B, y C; para calcular el ms grande se realizaran comparaciones
sucesivas por parejas.

Algoritmo mayor
{entrada de los valores de los nmeros}
Inicio
Leer A, B, C
Si A > B
Entonces
Si A>C
Entonces Mayor A {A > B, A > C}
Sino Mayor C {C > A > B}
Fin_si
Sino
Si B>C
Entonces Mayor B {B > A, B > C}
Sino Mayor C {C > B > A}
Fin_si
Fin_si
{Visualizacin del nmero ms grande}
Escribir Mayor
Fin



EJEMPLO 4.21

El siguiente algoritmo lee tres nmeros diferentes: A, B, y C, e imprime los valores mximo y
mnimo.
El procedimiento consistir en comparaciones sucesivas de parejas de nmeros

Algoritmos MAX_MIN
Inicio
Leer A, B, C
Si A < B
Entonces
Si A < C
Entonces MIN A
Si B > C
Entonces MAX B {A > C > B}
Sino MAX C {A > B > C}
Fin_si
Sino MIN C
MAX B
fin_si
Sino
si A > C
Entonces MAX A
Si B > C
Entonces MIN C {A > B > C}
Sino MIN B {A > C > B}
Fin_si
Sino MAX C
MIN B
Fin_si
Fin_si
{salida de resultados}
Escribir MAX, MIN
Fin




4.8. ESTRUCTURAS REPETITIVAS ANIDADAS

De igual forma que se pueden anidar o encajar estructuras de seleccin, es posible insertar un
bucle dentro de otro. Las reglas para construir estructuras repetitivas anidadas son iguales en
ambos casos: la estructura interna debe estar incluida totalmente dentro de la externa y no puede
existir solapamiento. La representacin grafica se indica en la Figura 4.13.

Las variables ndices o de control de los bucles toman valores de modo tal que por cada valor de
la variable ndice del ciclo externo se debe ejecutar totalmente el bucle interno.
Es posible anidar cualquier tipo de estructura repetitiva con tal que cumpla las condiciones de
la Figura 4.13












(a) (b) (c) (d)

Figura 4.13. Bucles anidados: (a) y (b), correctos; (c) y (d), incorrectos.


EJEMPLO 4.22

Se conoce la poblacin de cada una de las 25 ciudades ms grandes de las ocho provincia de
Andalucia y se desea identificar y visualizar la poblacin de la solucin ms grande de cada
provincia.
El problema consistir, en primer lugar, en la obtencin de la poblacin mayor de cada
provincia y realizar esta operacin ocho veces, una para cada provincia.
Paso 1. Encontrar y visualizar la ciudad mayor de una provincia.
Paso 2. Repetir el paso 1 para cada una de las ocho provincias andaluzas.
El procedimiento para deducir la ciudad ms grande de entre las 25 de una provincia se
consigue creando una variable auxiliar MAYOR --- inicialmente de valor 0---- que se va
comparando sucesivamente con los 25 valores de cada ciudad, de modo tal que segn el
resultado d comparacin se intercambian valores de la ciudad por el de la variable MAYOR.
El algoritmo correspondiente seria:

Variables: i contador de provincias
J contador de ciudades
MAYOR ciudad de mayor poblacin
CIUDAD nombre de la ciudad

Algoritmo CIUDADMAYOR
Inicio
I 1
Mientras i < = 8 hacer
MAYOR 0
J 1
Mientras j < = 25 hacer
Leer CIUDAD
Si CIUDAD > MAYOR
Entonces MAYOR CIUDAD
J j + 1
Fin_si
Fin_mientras
Escribir la ciudad mayor es, MAYOR
i i + j
Fin_mientras
Fin


EJEMPLO 4.23

Calcular el factorial de n nmeros ledos del terminal.

El problema consistir en realizar una estructura repetitiva de n iteraciones del algoritmo del
problema ya conocido del clculo del factorial de un entero.

Algoritmo
Incio
{Lectura de la cantidad de nmeros}
Leer n
Desde i = 1 hasta n hacer
Leer NUMERO
FACTORIAL 1
Desde j = 1 hasta NUMERO hacer
FACTORIAL FACTORIAL * j
Fin_desde
Escribir el factorial del numero, NUMERO, es, FACTORIAL
Fin_desde
Fin



4.9 LA INSTRUCCIN ir _ a (goto)

El flujo de control de un algoritmo es siempre secuencial excepto cuando las estructuras de
control estudiadas anteriormente realizan transferencias de no control secuenciales.
La programacin estructurada permite realizar programas fciles y legibles utilizando las tres
estructuras ya conocidas: secuenciales, selectivas y repetitivas. Sin embargo, en ocasiones, es
necesario realizar bifurcaciones incondicionales; para ello se recurre a la instruccin ir_a (goto).
Esta instruccin siempre ha sido problemtica y prestigiosos informticos como Dijkstra (1) han
tachado a la instruccin goto como nefasta y perjudicial para los programadores y recomiendan
no utilizarla en sus algoritmos y programas. Por ello lenguajes como Pascal huyen de esta
instruccin y prcticamente no la utilizan nunca.

Aunque la instruccin ir_a (goto) la tienen todos los lenguajes de programacin
en su juego de instrucciones, existen algunos que dependen mas de ellas que otros, como
BASIC y FORTRAN. En general, no exciste ninguna necesidad de utilizar instrucciones ir_a.
cualquier algoritmo o programa que se escribe con instrucciones ir_a se puede reescribir para
hacer la misma cosa y no incluir ninguna instruccin ir_a. Un programa que utiliza muchas
instrucciones ir_a es mas difcil de leer que un programa bien escrito que utiliza muy pocas o
ninguna instruccin ir_a. En muy pocas situaciones las instrucciones ir_a son utiles; tal vez, las
nicas razonables son diferentes tipos de situaciones de salida de bucles. Cuando un error u otra
condicin de terminacin se encuentra, una instruccin ir_a puede ser utilizada para saltar
directamente al final de un bucle, subprograma o un procedimiento completo.
Las bifurcaciones o saltos producidos por una instruccin ir_a deben realizarse a instrucciones
que estn numeradas o posean una etiqueta que sirve de punto de referencia para el salto.
Por ejemplo, un programa puede ser diseado para terminar con una deteccin de un error.

Algoritmo error
.
.
.
Si < condicin error>
Entonces ir a (100)
.
.
.
100:fin



ACTIVIDADES DE PROGRAMACION

4.1. Calcular el factorial de un numero N utilizando la estructura desde

Solucin

Recordemos que factorial de N responde a la formula
N! = N . (N - ) . (N 2) . (N 3), , 3 . 2 . 1 .

El algoritmo desde supone conocer el numero de iteraciones

Inicio
Leer N
FACTORIAL 1
Desde 1 1 hasta N hacer
FACTORIAL FACTORIAL * 1
Fin_desde
Escribir el factorial de, es, FACTORIAL
Fin
4.2 Imprimir las 30 primeras potencias de 4, es decir, 4 elevado a 1, 4 elevado a 2, etctera.

Solucin

Inicio
Desde n = hasta 30 hacer
Escribir 4 ^ n
Fin_desde
Fin


4.3 Clacular la suma de los n primeros enteros utilizando la estructura desde.

Solucin

S = 1 + 2 + 3 + , , + n
El pseudocdigo correspondiente es
Inicio
{leer valor de n}
Suma 0
Desde i 1 hasta n hacer
Suma suma + 1
Fin = desde
{escribir el resultado de suma}
Escribir suma
Fin


4.4 Disear el algoritmo para imprimir la suma de los nmeros impares menores o iguales que
n.

Solucin

Los nmeros impares son 1,3,5,7, , n. en pseudocdigo es

Inicio
S 0
Leer n
Desde i 1 hasta n incremento 2 hacer
S S + i
Fin_desde
Escribir S
Fin


4.5 Dado dos nmeros enteros, realizar el algoritmo que calcule el cociente y el resto.

Solucin

Sean los nmeros M y N.
El mtodo para obtener el cociente y el resto es por restas sucesivas; el mtodo seia restar
sucesivamente el divisior del dividendo hasta obtener un resultado menor que el divisor, que
ser el resto de la divisin; el numero de restas efectuadas ser el cociente.

50 13 50 13 = 37 C = 1
11 3 37 13 = 24 C = 2
24 13 = 11 C = 3

Como 11 es menor que el divisor 13, se terminaran las restas sucesivas y entonces 11 sera el
resto y 3 (numero de restas) el cociente.
Por consiguiente, el algoritmo ser el siguiente:

Algoritmo cociente
Inicio
Leer M,N {M, dividendo/N, divisor}
Resto M
Cociente 0
Repetir
Resto resto N
Cociente cociente + 1
Hasta_que resto < N
Escribir dividendo, M, divisor, N, cociente, Q, resto, R
Fin



4.6 Realizar el algoritmo para obtener la suma de los nmeros pares hasta 1000 inclusive.

Solucin

Mtodo 1

S = 2 + 4 + 6 + 8, , + 100
Variables SUMa y NUMERo: reales
Inicio
SUMA 2
NUMERO 4
Mientras NUMERO < = 1000 hacer
SUMA SUMa + NUMERO
NUMERO NUMERO + 2
Fin_mientras
Fin


Mtodo 2

Inicio SUMA 2
NUMERO 4
Repetir
SUMA SUMA + NUMERO
NUMERO NUMERO + 2
Hasta_que NUMERO > 1000
Fin



4.7 Buscar y escribir la primera vocal de una palabra leida del teclado. (Se supone que la
palabra se ha escrito en minsculas y que se leen los caracteres de uno detrs de otro).

Solucin

Variables p: carcter
Algoritmo buscar_vocal
Inicio
Repetir
Leer p
Hasta_que p = a o e o p = o o p = u
Escribir primero
Fin

La operacin de leer caracteres individuales de una palabra se realiza con una tcnica
denominada subcadena que permite leer los caracteres uno detrs de otro.



4.8 Leer dos nmeros y deducir si estn en orden creciente

Solucin

Dos nmeros a y b estn en orden creciente si a < b

Algoritmo comparacin 1
Inicio
Escribir dar dos numeros
Leer a, b
Si a < b
Entonces escribir orden creciente
Sino escribir orden decreciente
Fin_si
Fin

4.9 Se desea leer de una consola a una serie de nmeros hasta obtener un numero inferior a 100.

Solucin

Variable numero: entero
Algoritmo menor-100
Incio
Repetir
Escribir teclear un numero
Leer numero
Hasta_que numero < 100
Escribir el numero es, numero
Fin


4.10 Escribir un algoritmo que permita escribir en una pantalla la frase desea continuar S/N
hasta que la repuesta sea S o N.

Solucin
Variable respuesta. Carcter
Algoritmo SN
Inicio
Repetir
Escribir desea continuar S/N
Leer respuesta
Hasta_que respuesta = S o respuesta 0 N
Fin


4.11 Leer sucesivamente nmeros del teclado, hasta que aparezca un numero comprendido
entre 1 y 5.

Solucin
Algoritmo
Inicio
Repetir
Leer numero
Escribir numero comprendido entre 1 y 5
Hasta_que numero > = 1 y numero < = 5
Escribir numero encontrado
Fin

4.12 Calcular el factorial de un numero n con mtodos diferentes al del ejercicio 4.1.
Solucion

N! = n x (n 1) x (n 2) x , , 3 x 2 x 1
Es decir:

5! = 5 x 4 x 3 x 2 x 1 = 120
4! = 4 x 3 x 2 x 1 = 24
3! = 3 x 2 x 1 = 6
2! = 2 x 1 = 2
1! = 1 = 1

Para codificar estas operaciones, basta pensar que

(n + 1)! = (n + 1) x n x (n 1) x (n 2) x , , x 3 x 2 x 1

(n + 1)! = (n + 1) x n! n!

Por consiguiente, para calcular el factorial F de un numero, necesitamos un contador i que
cuente de uno y aplicar la formula.
FACTORIAL = FACTORIAL *1
Inicializando los valores de FACTORIAL e I a y realizando un bucle en el que I se incremente
en 1 a cada iteracin, es decir:

Algoritmo 1 Factorial de n

FACTORIAL 1
i 1
repetir
FACTORIAL FACTORIAL * i
I I + 1
Hasta_que i = n + 1
Algoritmo 2 de Factorial de n
FACTORIAL 1
i 1
repetir
FACTORIAL FACTORIAL * (i + 1)
i i + 1
hasta_que i = n
Algoritmo 3 de Factorial de n
FACTORIAL 1
i 1
repetir
FACTORIAL FACTORIAL * (i + 1)
i i + 1
hasta_que i > n 1
Algoritmo 4 de Factorial de n
FACTORIAL 1
i 1
desde i = 1 hasta n 1 hacer
FACTORIAL FACTORIAL * (i + 1)
Fin_desde

Un algoritmo completo con lectura del numero n por teclado podra ser el siguiente:

Variables i, f, n: numricas
F 1
i 1
leer n
repetir
f f * 1
i i + 1
hasta_que i = n +1
escribir factorial de, n, es, f

4.13 Calcular el valor mximo de una serie de 100 nmeros.

Solucin

Para resolver este problema, necesitamos un contador que cuente de 1 a 100, para contabilizar
los sucesivos nmeros.
El algoritmo que calcula el valor mximo ser repetido y partiremos considerando que el primer
nmero ledo es el valor mximo, por lo cual se realizara una primera asignacin del nmero 1 a
la variable mximo.

Leer nmero
n = 1
Mximo = numero

Las siguientes acciones del algoritmo ser realizar comparaciones sucesivas:

Leer un nmero
Compararlo con el valor mximo
Si es inferior, implica que el valor mximo es el antiguo;
Si es superior, implica que el valor mximo es el recientemente ledo, por lo que se convertir
en mximo mediante una asignacin;
Repetir las acciones anteriores hasta que n = 100.

Variables n, mximo, numero. Enteras
Leer nmero
n 1
Mximo numero
Repetir
n n + 1
Leer nmero
Si numero > mximo entonces mximo numero
Hasta_que n = 100
Escribir numero mayor o mximo, mximo.
Otras soluciones

1. Variables n, mximo, numero: enteras
Leer nmero
Mximo numero
N 2
Repetir
Leer numero
Si numero > mximo entonces mximo numero
Hasta_que n > 100
Escribir numero mayor o mximo, mximo

2. Variables n, maximo, numero: enteras
Leer nmero
Mximo = numero
Repetir para n = 2 a 100 {pseudocdigo sustituido de desde}
Leer nmero
Si numero > mximo entonces mximo = numero
Escribir mximo, mnimo

NOTA: Los programas anteriores suponen que los nmeros pueden ser positivos o negativos; si
se desea comparar solo nueros positivos, los programas correspondientes seria:

1. Variables n, mximo, numero: enteras
N 0
Mximo 0
Repetir
Leer nmero
N = n + 1
Si numero > mximo entonces mximo numero
Hasta_que n = 100
Escribir mximo nmeros, mximo

2. Variables n, mximo, numero = enteras
n 0
Mximo 0
Repetir para n = 1 a 100
Leer nmero
Si numero < mximo entonces mximo numero
Escribir mximo numero =, mximo


4.14 Bucles anidados

Las estructuras de control tipo bucles anidarse internamente, es decir, se puede situar un bucle
en el interior de otro bucle.
Oscar Manzanarez ( 168-188)
I=2 j=1 i*j= 2x1= 2
j=2 i*j= 2x2= 4
j=3 i*j= 2x3= 6
j=4 i*j= 2x4= 8
.....................................................
j=10 i*j= 2*10= 20

I=3 j=1 i*j= 3*1= 3
j=2 i*j= 3*2= 6
j=3 i*j= 3*3= 9
j=4 i*j= 3*4= 12
....................................................
j=10 i*j=3*10= 30


Es decir, se obtendra la tabla de multiplicar de 1,2 y 3.

Ejemplo 3. La codificacion completa para obtener la popular tabla de multiplicar de los
escolares seria la siguiente:

Variable i,j, producto:enteras
para i desde 1 a 9 hacer
escribir tabla del,i
para desde 1 a 10 hacer
producto i*j
escribir i, por , j, =,producto
fin___para
fin___para

4.15 Se dispone de una lista de N numeros. Se desea calcular el valor del numero mayor.

Solucion

Tabla de variables

I entera
NUM,MAX real
N entera


Pseudocodigo

Algoritmo
Inicio
Leer N
Leer NUM
Max NUM
Desde I= 2 hasta 100 hacer
Leer NUM
Si NUM > MAX
Entonces MAX NUM
Fin____desde
Fin

4.16 Determinar simultneamente los valores maximos y minimo de una lista de 100 numeros.

Solucion

Tabla de variables.

I entera
MAX,MIN,NUMERO reales

Pseudocodigo

Algoritmo max__min
Inicio
Leer NUMERO
MAX NUMERO
MIN NUMERO
Desde I= 2 hasta 100 hacer
Leer NUMERO
Si NUMERO > MAX
Entonces MAX NUMERO
Sino
Si NUMERO < MIN
Entonces MIN NUMERO
Fin__si
Fin__si
Fin__desde
Fin

4.17 Se dispone de un cierto numero de valores de los cuales el ultimo es el 999 y se desea
determinar el valor maximo de las medias correspondientes a parejas de valores sucesivos.

Solucion

Pseudocodigo

Algoritmo media_parejas
Inicio
Leer N1,N2
MAX (N1 + N2) / 2
Mientras_que N2 < > 999 o N1 < > 999
Leer N1,N2
M (N1 + N2) / 2
Si M > MAX
Entonces MAX M
Fin__ si
Fin__mientras
Escribir Media Maxima = , MAX
Fin

4.18 Deteccion de entradas numericas ----enteros----erroneas.

Solucion

Analisis

Esta subrutina es una aplicacin sencilla de interruptor. Se situa el valor inicial del
interruptor (SW=0) antes de recibir la entrada de datos.
La deteccion de numeros no enteros se realizara con una estructura repetitiva mientras
que se realizara si SW=0. La instruccin que detecta si un numero leido desde el dispositivo de
entradas es entero:

Leer N

Realizara la comparacin de N y parte entera de N

Si son iguales, N es entero.
Si son diferentes, N es no entero.

Un metodo para calcular la parte entera es utilizar la funcion estandar ent existente en
muchos lenguajes de programacin.

Pseudocodigo

Algoritmo error
Inicio
SW 0
Mientras SW 0 hacer
Leer dato de entrada, N
Si N < > ent (N)
Entonces
Escribir dato no valido
pruebe de nuevo
Sino SW 1
Fin__ Si
Fin__ mientras
Fin

4.19 Calcular el factorial de un numero dado (otro nuevo metodo).

Solucion

Analisis

El factorial de un numero N (N!) es el conjunto de productos sucesivos siguientes:

N!= N* (N-1) * (N-2) * (N-3)*.3*2*1


Los factoriales de los primeros numeros son:

1! = 1
2! = 2*1 = 2*1!
3! =3*2*1= 3*2!
4! =4*3*2*1= 4*3!


N!= N* (N-1) * (N-2) *..*2*1 = N * (N-1)!

Los calculos anteriores significan que el factorial de un numero se obtiene con el producto del
numero N por el factorial de (N-1)!
Como comienzan los productos en 1, un sistema de calculo puede ser asignar a la variable el
valor 1. Se necesita otra variable I que tome los valores sucesivos de 1 a N para poder ir
efectuando los productos sucesivos.
Dado que en los numeros negativos no se puede definir el factorial,se debera incluir en el
algoritmo una condicion para verificacin de error, caso de que se introduzcan numeros
negativos desde el Terminal de entrada (N<0).
La solucion del problema se realiza por dos metodos:

A) Con la estructura repetir (REPEAT).
B) Con la estructura desde (FOR).

Pseudocodigo

Metodo I (estructura repetir)

Algoritmo FACTORIAL
Inicio
Leer numero N
Factorial 1
I1
Repetir
Factorialfactorial *I
I=I+1
Hasta que I= N+1
Escribir factorial
Fin

Metodo 2 (estructura desde)

Algoritmo FACTORIAL
Inicio
Leer N<0
Entonces
Escribir mensaje de error
Sino
Factorial
Si N>1
Entonces
Desde K=1 hasta N hacer
Factorial Factorial * K
Fin___desde
Fin___si
Fin___si
Escribir N, factorial
Fin


4.20 Determinar el precio del billete de ida y vuelta en ferrocarril conociendo la distancia a
recorrer y sabiendo que si el numero de dias de estancia es superior a 7 y la distancia superior
a 800 km. El billete tiene una reduccion del 30 por 100.
El precio por km. Es de 2,5 pesetas.

Solucion

Analisis

Las operaciones secuenciales a realizar son:

A) Leer distancia , duracion y precio del kilometro.
B) Comprobar si distancia > 800 km y duracion > 7 dias.
C) Calculo del precio total del billete.
Si distancia < 800 km o duracion < 7 dias
Precio total = distancia *2.5
Si distancia > 800 km y duracion > 7 dias
Precio total = (distancia *2.5) -30/100 (precio total).
Variables
D (distancia) real
E (dias de estancia entera
PT (precio total) real

Pseudocodigo

Algoritmo billete
Inicio
Leer D
PT PT* D
Si D > 800 y E > 7
Entonces
PT PT PT*30/100
Fin_si
Escribir precio del billete, PT
Fin

4.21 Se tienen las calificaciones de los alumnos de un curso de informatica correspondiente a
las asignaturas BASIC,Pascal,FORTRAN, Disear un algoritmo que calcule la media de cada
alumno.

Solucion

Analisis

Asignaturas: BASIC
Pascal
FORTRAN

Media (BASIC + Pascal + FORTRAN)
----------------------------------------
3

Se desconoce el numero de alumnos N de la clase; por consiguiente, debera introducirse dicho
numero del teclado. El dato final del fichero ALUMNOS es *** y se los asignaremos a la
variable Nombre.

Variables
BASIC,Pascal,FORTRAN
Nombre (del alumno)
Media
N (Numero de alumnos)

Pseudocodigo

Algoritmo media
Inicio
Leer N ( entrada numero de alumnos)
Desde I= 1 hasta N hacer
Leer nombre
Mientras nombre < > *** hacer
Leer BASIC,Pascal, FORTRAN
Media (BASIC + Pascal + FORTRAN) / 3
Escribir nombre, media
Fin__ mientras
Fin__desde
Fin


4.22 Los empleados de una fabrica trabajan en dos turnos: diurno y nocturno. Se desea
calcular el jornal diario de acuerdo con los siguientes puntos:

1.La tarifa de las horas diurnas es de 500 pesetas.
2. La tarifa de las horas nocturnas es de 800 pesetas.
3.Caso de ser domingo, la tarifa se incrementara en 200 pesetas el turno diurno y 300 pesetas
el turno nocturno.

Solucion

Analisis

El procedimiento a seguir es:

1. Leer nombre del turno, horas trabajadas (HT) y dia de la semana.
2. Si el turno es nocturno, aplicar la formula jornal= 800* HT.
3. Si el turno es diurno, aplicar la formula jornal= 500* HT
4. Si el dia es domingo:
Turno diurno JORNAL = (500+200)* HT
Turno nocturno JORNAL = (800 + 300)* HT

Pseudocodigo

Algoritmo jornal
Inicio
Leer HT,jornal,dia,turno
Si dia < > Domingo
Entonces
Si turno = diurno
Entonces
Jornal 500* HT
Sino
Jornal 800* HT
Fin__si
Sino
Si turno diurno
Entonces
Jornal 700* HT
Sino
Jornal 1100* HT
Fin__si
Fin__si
Escribir jornal
Fin



EJERCICIOS.
4.1 Determinar la media de una lista indefinida de nmeros positivos, terminados con un
numero negativo.
4.2 Dado el nombre de un mes y si el ao es o no bisiesto, deducir el numero de das del mes.
4.3 Sumar los nmeros enteros de 1 a 100 mediante a) estructura repetir; b) estructura
mientras; c) estructura desde.
4.4 Determinar la media de una lista de nmeros positivos terminada con un nmero no
positivo despus del ltimo nmero valido.
4.5 Imprimir todos los nmeros primos entre 2 y 1000 inclusive.
4.6 Se desea leer las calificaciones de una clase de informatica y contar el numero total de
aprobados ( 5 o mayor que 5).
4.7 Leer las notas de una clase de informatica y deducir todas aquellas que son NOTABLES ( > =
7 y < 9 ).
4.8 Leer los 100 numeros. Determinar la media de los numeros positivos y la media de los
numeros negativos.
4.9 Un comercio dispone de dos tipos de articulos en fichas correspondientes a diversas
sucursales con los siguientes campos:
Codigo del articulo A o B,
Precio unitario del articulo,
Numero de articulos.
La ultima ficha del archivo de articulos tiene un codigo de articulo, una letra X.
Se pide:
El numero de articulos existentes de cada categora,
El coste total de los articulos de cada cartegoria.
4.10 Una estacion climatica proporciona un par de temperaturas diarias
(maxima,minima) ( no es posible que alguna o ambas temperaturas sea 0 grados ). La pareja fin
de temperaturas es 0,0. Se pide determinar el numero de dias, cuyas temperaturas se han
proporcionado, las medias maxima y minima, el numero de errores ---temperaturas de 0
grados---- y el porcentaje que representan.
4.13 Se pretende listar todos los empleados de una empresa situados en un archivo
EMPRESA----y a la terminacion de la lectura del archivo se debe visualizar un mensaje existen
trabajadores mayores de 65 aos en un numero de y el numero de trabajadores mayores de
65 aos.
4.14 Un capital C esta situado a un tipo de interes R. Al termino de dos aos se doblara?
4.15 Los empleados de una fabrica trabajan en dos turnos, diurno y nocturno. Se desea
calcular el jornal diario de acuerdo con los siguientes puntos:
La tarifa de las horas diurnas es de 1000 pesetas.
La tarifa de las horas nocturnas es de 1500 pesetas
Caso de ser domingo la tarifa se incrementara en 500 pesetas el turno diurno y 1000
pesetas el turno nocturno.

4.16 Averiguar si dados dos numeros leidos del teclado, uno es divisor del otro.
4.17 Se introduce la hora del dia en horas, minutos y segundos. Se desea escribir la hora
correspondiente al siguiente segundo.
4.18 Se desea conocer una serie de datos de una empresa con 50 empleados: a)Cuntos
empleados ganan mas de 300.000 pesetas al mes (salarios altos); b)entre 100.000 y 300.000
(salarios medios), y c) menos de 100.000 pesetas (salarios bajos y empleados a tiempo parcial).
4.19 Imprimir una tabla de multiplicar como:









1 2 3 4 15
** ** ** ** ** **
1* 1 2 3 4 15
2* 2 4 6 8 30
3* 3 6 9 12 45
4* 4 8 12 16 60
. .
. .
. .
15* 15 30 45 60 225

4.20 Dado en un entero positivo n (>1), comprobar si es primo o compuesto.


REFERENCIAS BIBLIOGRAFICAS













CAPITULO 5

Subprogramas (subalgoritmos),
procedimientos y funciones.

5.1 Introduccin a los subalgoritmos o subprogramas.
5.2 Funciones
5.3 Procedimientos
5.4 mbito: variables locales y globales.
5.5 Comunicacin con subprogramas: paso de parmetros.
5.6 Funciones y procedimientos como parmetros.
5.7 Los efectos laterales.
5.8 Recursin.
Actividades de programacin
Ejercicios

La resolucin de problemas complejos se facilita considerablemente si se dividen en problemas
ms pequeos (subproblemas). La solucin de estos subproblemas se realiza con
subalgoritmos. El uso de subalgoritmos permite al programador desarrollar programas de
problemas complejos utilizando el mtodo descente introducido en los captulos anteriores.
Los subalgoritmos (subprogramas) pueden ser de dos tipos: funciones y procedimientos o
subrutinas. Los subalgoritmos son unidades de programas o mdulos que estn diseados para
ejecutar alguna tarea especfica. Estas funciones y procedimientos se escriben solamente una
vez, pero pueden ser referenciados en diferentes puntos de un programa de modo que se
puede evitar la duplicacin innecesaria del cdigo.
El uso de unidades de programas en el estilo de programacin modular son
independientes; el programador puede escribir cada modulo y verificarlo sin preocuparse de
los detalles de otros mdulos. Esto facilita considerablemente la localizacin de un error
cuando se produce. Los programas desarrollados de este modo son normalmente tambin ms
fciles de comprender, ya que la estructura de cada unidad de programa puede ser estudiada
independientemente de las otras unidades de programa.

En este capitulo se describen las funciones y procedimientos junto con los
conceptos de variables locales y globales, asi como parmetros. Se introduce tambien el
concepto de recursividad como una nueva herramienta.

5.1 INTRODUCCION A LOS SUBALGORITMOS O SUBPROGRAMAS

Un metodo ya citado para solucionar un problema complejo es dividirlo en
subproblemas-problemas mas sencillos- y a continuacin dividir estos subproblemas en otros
mas simples hasta que los problemas mas pequeos sean faciles de resolver. Esta tecnica de
dividir el problema principal en subproblemas se suele denominar divide y venceras (divide
and conquer). Este metodo de disear la solucion de un problema principal obteniendo las
soluciones de sus subproblemas se conoce como diseo descendente (top-dow design). Se
denomina descendente ya que se inicia en la parte superior con un problema general y el
diseo especifico de las soluciones de los subproblemas. Normalmente las partes en que se
divide un programa deben poder desarrollarse independientemente entre si.

Las soluciones de un diseo descendente pueden implementarse fcilmente en lenguajes de
programas de alto nivel como BASIC,Pascal o FORTRAN. Estas partes independientes se
denominan subprogramas o subalgoritmos si se emplean desde el concepto algoritmico.

La correspondencia entre el diseo descendente de un problema y la solucion por
computadora en terminos de programa principal y sus subprogramas se analizara a lo largo de
este capitulo.

Consideremos el problema del calculo de la superficie (area) de un rectangulo.
Este problema se puede dividir en tres subproblemas.

Subproblema 1: entrada de datos de altura y base.
Subproblema 2: calculo de la superficie.
Subproblema 3: salida de resultados.

El algoritmo correspondiente que resuelve los tres subproblemas es:

Leer datos (altura,base) ( entrada de datos)
Area base * altura (calculo de la superficie)
Escribir base,altura,area (salida de resultados)


El metodo descendente se muestra en la fig 5.1

El problema principal se soluciona por el correspondiente programa o algoritmo principal ---
tambien denominado controlador o conductor (driver)--- y la solucion de los subproblemas
mediante subprogramas,conocidos como procedimientos (subrutinas) o funciones. Los
subprogramas cuando se trata en lenguaje algoritmico se denominan tambien subalgoritmos.

Un subprograma puede realizar las mismas acciones que un programa:
1.aceptar datos
2. realizar algunos calculos
3. devolver resultados.

Un subprograma, sin embargo, se utiliza por el programa para un proposito especifico.El


FIGURA 5.1 Diseo descendente

Subprograma recibe datos desde el programa y le devuelve resultados. Haciendo un simil con
una oficina , el problema es como el jefe que da instrucciones a sus subordinados
subprogramas-; cuando la tarea se termina, el subordinado devuelve sus resultados al jefe. Se
dice que el programa principal llama o invoca al subprograma. El subprograma ejecuta una
tarea; a continuacin devuelve el control al programa. Esto puede suceder en diferentes
lugares del programa. Cada vez que el subprograma es llamado el control retorna al lugar de
donde fue hecha la llamada (Figura 5.2).Un subprograma puede llamar a su vez sus propios
subprogramas (Figura 5.3). Existen como ya se ha comentado--- dos tipos importantes de
subprogramas: funciones y procedimientos o subrutinas.





Fig 5.2 Un programa con un subprograma: funcion y procedimiento o subrutina,segn la
terminologa especifica del lenguaje: subrutina en BASIC Y FORTRAN;procedimiento en Pascal.



Fig 5.3 Un programa con diferentes niveles de subprogramas.

You might also like