PSEUDOCÓDIGO - ESTRUCTURAS CONDICIONALES
El pseudocódigo es un lenguaje de especificación (descripción) de algoritmos. El uso de tal lenguaje hace el paso de codificación final (esto es, la traducción a un lenguaje de programación) relativamente fácil. Los lenguajes APL Pascal y Ada se utilizan a veces como lenguajes de especificación de algoritmos.
El pseudocódigo nació como un lenguaje similar al ingles y era un medio de representar básicamente las estructuras de control de programación estructurada que se verán a continuación. Se considera un primer borrador, dado que el pseudocódigo tiene que traducirse posteriormente a un lenguaje de programación. El pseudocódigo no puede ser ejecutado por una computadora. La ventaja del pseudocódigo es que en su uso, en la planificación de un programa, el programador se puede concentrar en la lógica y en las estructuras de control y no preocuparse de las reglas de un lenguaje especifico. Es también fácil modificar el pseudocódigo si se descubren errores o anomalías en la lógica del programa, mientras que en muchas ocasiones suele ser difícil el cambio en la lógica, una vez que esta codificado en un lenguaje de programación. Otra ventaja del pseudocódigo es que puede ser traducido fácilmente a lenguajes estructurados como Pascal, C, Fortran 77/90, Ada 83/95, C++, etc.
El pseudocódigo original utiliza para representar las acciones sucesivas palabras reservadas en ingles –similares a sus homónimas en los lenguajes de programación- tales como start, end, stop, if-then-else, will-end, repeat, until, etc. La escritura de pseudocódigo existe normalmente la indentación (sangría en el margen izquierdo) de diferentes líneas.
La representación en pseudocódigo del problema de la clase anterior es:
Start
//Calculo de ingresos y salarios
read nombre, horas, precio_hora
salario_bruto = horas * precio_hora
tasas = 0.25 * salario_bruto
salario_neto =l salario_bruto – tasas
write nombre, salario_bruto, tasas, salario_neto
End
El algoritmo comienza con la palabra start y finaliza con la palabra end, en inglés ( en español, inicio, fin ).entre estas palabras, sólo se escribe una instrucción o acción por línea. La línea precedida por // se denomina comentario. Es una información al lector del programa y no realiza ninguna instrucción ejecutable, sólo tiene efecto de documentación interna del programa.
Algunos autores suelen utilizar corchetes y llaves. No es recomendable el uso de apóstrofes o simples comillas como representan en Basic de Microsoft los comentarios, ya que este carácter es representativo de apertura o cierre de cadenas de caracteres en lenguajes como Pascal y FORTRAN, y daría lugar a confusión. Otro ejemplo aclaratorio en el uso del pseudocódigo podría ser un sencillo algoritmo del arranque matinal de un coche.
Inicio
//arranque matinal de un coche
introducir la llave de contacto
tirar del estrangulador de aire
girar la llave de contacto
pisar el acelerador
oír 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 posición
fin
Por fortuna, aunque el pseudocódigo nació como un sustituto del lenguaje de programación y, por consiguiente, sus palabras reservadas se conservaron o fueron muy similares a las de dichos lenguajes, prácticamente el inglés, el uso del pseudocódigo se ha extendido en la comunidad hispana con términos en español, como inicio , fin, parada, leer, escribir, sientonces-si_no, mientras, fin_mientras, repetir, hasta_que, etc. Sin duda, el uso de terminología de pseudocódigo en español ha facilitado y facilitará considerablemente el aprendizaje y uso diario de la programación. En esta obra, al igual que en otras nuestras utilizaremos el pseudocódigo en español y daremos en su momento las estructuras equivalentes en inglés, al objeto de facilitar la traducción del pseudocódigo al lenguaje de programación seleccionado. Así pues, en los pseudocódigos citados anteriormente deberían ser sustituidas las palabras start, end, read, write por inicio, fin, leer, escribir, respectivamente.
Equivalencias de palabras en inglés y español
ALGORITMOS EN ESPAÑOL |
|||
start |
read |
write |
end |
Inicio |
leer |
escribir |
Fin |
Para quienes desean probar algoritmos en QuickBasic (qbasic) veamos las equivalencias
Equivalencias de palabras qbasic
QBASIC |
|||
no tiene, aunque se usará CLS para iniciar un programa |
INPUT |
END |
|
Inicio |
leer |
escribir |
Fin |
Ejemplo en QBASIC
CLS (nota: CLS se usa para limpiar la pantalla)
' Calculo de ingresos y salarios (NOTE QUE QBASIC EL COMENTARIO SE INICIA CON APOSTROFE)
INPUT nombre, horas, precio_hora
salario_bruto = horas * precio_hora
tasas = 0.25 * salario_bruto
salario_neto =l salario_bruto – tasas
PRINT nombre, salario_bruto, tasas, salario_neto
End
RESUMEN DE PALABRAS RESERVADAS PARA EL CURSO DE ALGORITMOS
Ingles | Español | QBASIC |
Start | Inicio | CLS |
Read | Leer | INPUT |
Write | Escribir | |
If... then | Si ... entonces | If ... then |
else | sino | else |
end_if | fin_si | end if |
While ..do | Mientras.. Hacer | Do While |
Loop | fin_mientras | Loop |
For...to | Para ... hacer | For... to |
For...to | Desde....hacer | For...to |
Next | Fin_Para o Fin_desde | Next |
Repeat | Repetir | Do until |
until | hasta | Loop |
Do Case | Segun sea | Select Case |
Case | Caso | Case |
EndCase | Fin_segun | End Select |
and | y | and |
or | o | or |
INSTRUCCIONES Y TIPOS DE INSTRUCCIONES
El proceso de diseño del algoritmo o posteriormente de codificación del programa consiste en definir las acciones o instrucciones que resolverán al 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, decisión ni comparaciones.
En el caso del algoritmo las instrucciones se suelen conocer como acciones, y se tendría:
accion1
accion2
accion3
...
accion n
Un programa es no lineal cuando se interrumpe la secuencia mediante instrucciones de bifurcación como se vio con el caso del rombo en los diagramas de flujo
TIPOS DE INSTRUCCIONES
Las instrucciones disponibles en un lenguaje de programación depende del tipo de lenguaje. Por ello, en este apartado estudiaremos las instrucciones –acciones- básicas que se pueden implementar de modo general en un algoritmo y que esencialmente soportan todos los lenguajes. Dicho de otro modo, las instrucciones básicas son independientes del lenguaje.
La clasificación más usual, desde el punto de vista anterior, es:
1. instrucciones de inicio / fin,
2. instrucciones de asignación,
3. instrucciones de lectura,
4. instrucciones de escritura,
5. instrucciones de bifurcación.
Instrucciones de asignación.
Como ya son conocidas del lector, repasaremos su funcionamiento con ejemplos:
a) A = 80 la variable A toma el valor 80.
b) ¿Cuál será el valor que tomará C tras la ejecución de las siguientes instrucciones?
A = 12
B = A
C = B
A contiene 12, B contiene 12 y C contiene 12.
NOTA: Antes de la ejecución de las tres instrucciones, el valor de A, B y C es
Indeterminado.
Si se desea darles un valor inicial, hará que hacerlo explícitamente, incluso cuando este valor sea 0. Es decir, habrá que definir e inicializar las instrucciones.
A = 0
B = 0
C = 0
c) ¿Cuál es el valor de la variable AUX al ejecutarse la instrucción 5?
1. A =10
2. B =20
3. AUX= A
4. A= B
5. B= AUX
. en la instrucción 1, A toma el valor 10
. en la instrucción 2, B toma el valor 20
. en la instrucción 3, AUX toma el valor anterior de A, o sea 10
. en la instrucción 4, A toma el valor anterior de B, o sea 20
. en la instrucción 5, B toma el valor anterior de AUX, o sea 10
. tras la instrucción 5, AUX sigue valiendo 10
d) ¿ Cuál es el significado de N = N + 5 si N tiene el valor actual de 2?
recuerde siempre se calcula primero la parte derecha o sea N+2, esto es 2 + 5
lo que da 7.
A continuación el 7 se asigna a N
Luego N vale 7
ESTRUCTURAS CONDICIONALES
Las estructuras condicionales permiten bifurcar la ejecución de un programa de acuerdo a una condición.
si la CONDICION resulta en valor verdadero se ejecutarán algunas acciones, recuerde se ejecutan si y solo si la CONDICION resultase verdadera, si la CONDICION resultase falsa se ejecutarán en el programa otras acciones o quizá el programa continua en otro lado.
Ya hemos estudiado esto en el caso de los diagramas de flujo cuando se usó el ROMBO, pero en pseudocódigo necesitamos aclarar ciertas formas de bifurcación:
Estructura Condicional de alternativa SIMPLE
Es de la forma
Si CONDICION entonces
acción 1
acción 2
acción 3
...
acción n
Fin_SI
donde CONDICION es un TEST que se desea comprobar y las acciones de la 1 hasta la n solo se ejecutan si la CONDICION resulta verdadera.
Ejemplo 1
Cual será el valor impreso o mostrado en pantalla para la variable N
Inicio
A = 20
N= A -2
Si A > 10 entonces
N = N + 1
fin_si
Escribe N
Fin
Solución
1 paso: A toma el Valor de 20
2 paso: N toma el valor de 18 (o sea 20-2)
3 paso: Nos preguntamos "¿20 es mayor que 10?"
Aquí debe salir una respuesta SI o No (Verdadero o Falso)
obviamente 20 es mayor que 10 la respuesta es SI
entonces todas aquellas acciones o instrucciones que dependan del bloque SI - FIN_SI se ejecutan
la única acción es N = N+1 o sea N+1 es 18+1, entonces el valor de N es 19
4 paso se escribe en pantalla 19
Ejemplo 2
Cual será el valor impreso o mostrado en pantalla para la variable N
Inicio
A = 20
N= A -2
Si A > 30 entonces
N = N + 1
fin_si
Escribe N
Fin
Solución
1 paso: A toma el Valor de 20
2 paso: N toma el valor de 18 (o sea 20-2)
3 paso: Nos preguntamos "¿20 es mayor que 30?"
Aquí debe salir una respuesta SI o No (Verdadero o Falso)
obviamente 20 NO ES MAYOR 30, la respuesta es NO
entonces NO SE EJECUTAN aquellas acciones o instrucciones que dependan del bloque SI - FIN_SI.
Esto ocasiona que el programa continua en la Instrucción que sigue al fin_si
4 paso: se escribe en pantalla 18 puesto que nunca se llevo a cabo el N =N + 1
Ejemplo 3
Hacer un programa que nos diga si una persona es mayor de edad en base a la edad proporcionada al computador.
Inicio
leer Edad
Si Edad >= 18 entonces
Escribe "La persona de ", Edad, " es mayor de Edad"
FIN_SI
Escribe "Gracias por usar este programa"
Fin
1 paso: El digitador Tipea la edad por ejemplo 25 y presiona Enter (La variable Edad adquiere el valor de 25)
2 paso: Responder si o no a la pregunta 25>=18, "¿25 es mayor o igual que 18?", la respuesta es SI
esto ocasiona que todas aquellas instrucciones que dependen del bloque Si Fin_si se ejecutan
3 paso : se escribe
La persona de 25 es mayor de Edad
4:paso se escribe
Gracias por usar este programa
Si en el 1er paso el digitador hubiese ingresado 12 en vez de 25 la salida del programa tan solo sería:
Gracias por usar este programa
Ejemplo 4
Un restaurante hace un descuento de 5 soles a las personas que consumen mas de 100 soles. haga el programa que pida el monto consumido y calcule cuanto hay que pagar.
Inicio
Leer Consumo
descuento = 0
Si Consumo > 100 entonces
descuento = 5
FIN_SI
MontoAPagar = Consumo - descuento
Escribir MontoAPagar
Fin
paso1: EL Digitador tipea 250 y presiona Enter (consumo vale 250)
paso2: La variable descuento toma el valor de 0 (Inicializamos descuento con 0)
paso3: nos preguntamos 250 > 100?
La respuesta es SI
entonces Descuento toma el valor de 5
paso4: MontoAPagar = 250 - 5 esto es MontoAPagar será 245
paso5: Se escribe en pantalla 245
Suponga que
paso1: EL Digitador tipea 50 y presiona Enter (consumo vale 50)
paso2: La variable descuento toma el valor de 0 (Inicializamos descuento con 0)
paso3: nos preguntamos 50 > 100?
La respuesta es NO
paso4: MontoAPagar = 50 - 0 esto es MontoAPagar será 50
paso5: Se escribe en pantalla 50
Ejemplo 5
En los cálculos de planillas y salarios normalmente se considera un descuento del 6% por servicios médicos (seguro social) y 10% por AFP (Fondo de Pensiones y Jubilación) pero para aquellos que ganan mas de 5000 soles los descuentos son de 7% de seguro social y 11% de AFP. Calcular el salario neto a pagar.
Inicio
Leer Sueldo
Desc = 6/100
Afp = 10/100
Si Sueldo > 5000 entonces
Desc= 7/100
Afp = 11/100
FIN_SI
SNeto = Sueldo - Sueldo*Desc - Sueldo*Afp
Escribe SNeto
Fin
paso1: El digitador tipea 2000 y presiona Enter (la variable Sueldo toma el valor de 2000)
paso2: Desc toma el valor de 0.06
paso3: Afp toma el valor de 0.10
paso4: Nos Preguntamos 2000 > 5000?
La respuesta es NO
paso5:
SNeto = 2000 - 2000*0.06 - 2000*0.10
o sea SNeto vale 1680
Suponga que ahora
paso1: El digitador tipea 8000 y presiona Enter (la variable Sueldo toma el valor de 8000)
paso2: Desc toma el valor de 0.06
paso3: Afp toma el valor de 0.10
paso4: Nos Preguntamos 8000 > 5000?
La respuesta es SI
Desc toma el valor de 0.07
Afp toma el valor de 0.11
paso5:
SNeto = 8000 - 8000*0.07 - 8000*0.11
o sea SNeto vale 6560
Estructura Condicional de alternativa DOBLE
Es de la forma
Si CONDICION entonces
acción 1
acción 2
acción 3
...
acción n
SiNo
acción q1
acción q2
acción q3
...
acción qn
Fin_SI
Donde CONDICION es un TEST que se desea comprobar y las acciones de la 1 hasta la n solo se ejecutan si la CONDICION resulta verdadera.
En caso la CONDICION Resultase falsa se ejecutan las acciones de la q1 a la qn que corresponden al bloque SINO
Ejemplo 1
Cual será el valor impreso o mostrado en pantalla para la variable N
Inicio
A = 20
N= A -2
Si A > 10 entonces
N = N + 1
SiNo
N = N - 1
fin_si
Escribe N
Fin
Solución
1 paso: A toma el Valor de 20
2 paso: N toma el valor de 18 (o sea 20-2)
3 paso: Nos preguntamos "¿20 es mayor que 10?"
Aquí debe salir una respuesta SI o No (Verdadero o Falso)
obviamente 20 es mayor que 10 la respuesta es SI
entonces todas aquellas acciones o instrucciones que dependan del bloque SI - FIN_SI se ejecutan
la única acción es N = N+1 o sea N+1 es 18+1, entonces el valor de N es 19
de aqui se salta a la instrucción que esta después del FIN_SI
4 paso se escribe en pantalla 19
Ejemplo 2
Cual será el valor impreso o mostrado en pantalla para la variable N
Inicio
A = 20
N= A -2
Si A < 10 entonces
N = N + 1
SiNo
N = N - 1
fin_si
Escribe N
Fin
Solución
1 paso: A toma el Valor de 20
2 paso: N toma el valor de 18 (o sea 20-2)
3 paso: Nos preguntamos "¿20 es menor que 10?"
Aquí debe salir una respuesta SI o No (Verdadero o Falso)
obviamente 20 es mayor que 10 la respuesta es NO
entonces todas aquellas acciones o instrucciones que dependan del bloque SINO se ejecutan
la única acción es N = N-1 o sea N-1 es 18-1, entonces el valor de N es 17
de aquí se salta a la instrucción que esta después del FIN_SI
4 paso se escribe en pantalla 17
Recuerde
Si Condicion entonces
....
Se ejecutan por ser VERDAD la Condición
....
Sino
....
Se ejecutan por ser FALSA la Condición
....
Fin_SI
Ejercicios resueltos y propuestos
1.- Hacer un programa que incremente en un 10% el monto de un departamento por cada dormitorio adicional, si normalmente los departamentos que que se venden en el plan mi vivienda vienen con 2 dormitorios.
Mostrar el monto a pagar.
Inicio
Leer Valor_dpto
Leer NroDormitorios
Si NroDormitorios > 2 entonces
Valor_dpto= Valor_dpto + (NroDormitorios-2)* valor_dpto * 10/100
Fin_SI
Fin
2.- Ingresar 3 notas de un alumno, promediarlas y decir si aprueba o no aprueba el curso
Sabiendo que la nota aprobatoria es 14 o mas, no existen redondeos a favor del alumno.
Inicio
Leer N1,N2,N3
P = (N1+ N2 +N3)/3
Si P >= 14 entonces
Escribe "Aprueba el Curso"
SiNo
Escribe "Desaprueba el Curso"
FIN_SI
3.- Ingresar 3 notas de cursos de un alumno, el 1er curso tiene 2 créditos, el 2do tiene 3 créditos y el 3er tiene 2 créditos. El alumno puede llevar mas de 18 créditos si su promedio ponderado fue 14 o mas
Inicio
Leer N1,N2,N3
P = (N1*2+ N2*3+ N3*2)/(2+3+2)
Si P >= 14 entonces
Escribe "Puede llevar mas de 18 créditos"
SiNo
Escribe "Solo puede llevar hasta 18 créditos"
FIN_SI
4.-
SAGA FALABELLA se encuentra de aniversario y ha programado una serie de
ofertas con la finalidad de brindar facilidades a sus clientes y al a vez de
incrementar sus ventas. Estas ofertas se basan específicamente en un
porcentaje de descuento sobre el total de compra el cual varia de acuerdo al
monto
* Por un monto mayor o igual a $500 se hará un descuento del 30%
* Por un monto menor de $500 pero mayor o igual a 200 se hará un descuento
del 20%
* Por un monto menor de $200 pero mayor o igual a 100 se hará un descuento
del 10%
INICIO
Leer Consumo
Si consumo >=500 entonces
descuento = Consumo*30/100
Sino
Si consumo >=200 entonces
descuento = Consumo*20/100
Sino
Si consumo >=100 entonces
descuento = Consumo*10/100
Sino
descuento=0
FIN_SI
FIN_SI
FIN_SI
Totalpagar= Consumo-Descuento
Escribir Totalpagar
FIN
5.- Dadas 3 longitudes, decir mediante un mensaje si éstas forman un triangulo: equilátero, isósceles o escaleno, o no forman triangulo (cada lado tiene que ser menos que la suma de los otros dos para que exista triángulo)
INICIO
Leer a,b,c
Si a<(b+c) y b<(a+c) y c<(a+b) entonces
Si a=b y b=c entonces
escribe "El triangulo es equilátero"
Sino
Si a<>b y a<>c y b<>c entonces
escribe "El triangulo es escaleno"
Sino
escribe: "El triangulo es isósceles"
FIN_SI
FIN_SI
Sino
escribe: "No forman un triangulo"
FIN_SI
FIN
6.-Kathy organiza una fiesta en la
cual una computadora controla el ingreso mediante 5 claves. Si se ingresa al
menos una clave incorrecta esta escribirá "TE
EQUIVOCASTE DE FIESTA" y no permitirá el ingreso. Si las 5 claves son
correctas escribirá "BIENVENIDO A LA FIESTA"
Las Claves son:
1: "TIENES"
2: "QUE SER"
3: "INVITADO"
4: "PARA"
5: "INGRESAR"
Propuestos
1.- Hacer un programa que lea 2 números y diga cual fue el mayor de ellos
2.- Hacer un programa que lea 3 números y diga cual fue el menor de ellos
3.- Hacer un programa que calcule el volumen de un cilindro siempre que el radio sea superior a 10
4.- Hacer un programa que calcule la diferencia de áreas de 2 círculos de radios R1 y R2. Asegúrese que el programa
muestre esta diferencia en numero Positivo.
5.- Leer una hora en 3 variables HH, MM, SS mostrar cual será la hora 2 segundos después.
6.- Leer una hora en 3 variables HH, MM, SS mostrar cual será la hora 3 segundos menos.
7.- Leer una hora en 3 variables HH, MM, SS mostrar cual será la hora n segundos después.
8.- Leer las 3 variables ANIO,MES,DIA y decir si es una fecha correcta.
9. Leer la variable ANIO y decir si corresponde a un Año Bisiesto.
10. A la 15.- INVENTE EJERCICIOS Y ENVÍELOS A LBARRUETO@USAT.EDU.PE
SUERTE