Selectivas y repetitivas con guias

Anuncio
ESTRUCTURAS SELECTIVAS
En el capítulo 3 se vio que cada instrucción se ejecutaba en el orden en que se
había escrito, pero esto no siempre ocurre así, ya que muchas veces es necesario
usar estructuras de decisión del tipo si...entonces...sino.
Para realizar acciones alternativas o tomar decisiones se usan condiciones que
son verdaderas o falsas y se llaman expresiones lógicas o booleanas. Las
expresiones lógicas se forma utilizando los operadores relacionales siguientes: >, <,
=, >=, <=, <>.
Las expresiones lógicas se pueden combinar dando expresiones más
complejas, usando los operadores lógicos que presentan el siguiente orden de
evaluación: not, and y or, y sus significados se pueden ver en las tablas de verdad.
Las estructuras selectivas se utilizan para tomar decisiones lógicas; de ahí que
se suelan denominar estructuras de decisión o de alternativas. Son dos: la sentencia
if y la sentencia case.
Estructura If
Esta sentencia, es considerada de alternativa doble (si se cumple
condición entonces ... , sino .... / If ...... then ...... else..... ).
Pseudocódigo en castellano
Código de programa
si <condición>
if <condición>
cierta
entonces < acción S1>
then < acción S1>
sino < acción S2 >
else < acción S2>
Su estructugrama tiene la siguiente forma:
<condición>
si
no
< acción S1>
< acción S2>
Es decir si la expresión que se evalúa es verdadera se ejecutará la sentencia
siguiente al then, de otro modo (falso) se ejecutará la sentencia siguiente al else.
Cuando se desea que se ejecute una acción determinada sólo si la condición es
verdadera y no se desea ejecutar ninguna si es falsa se puede omitir el else
quedando:
Pseudocódigo en castellano
si <condición>
entonces < acción S1>
Código de programa
if <condición>
then < acción S1>
Se observa que el punto y coma anterior al end final del if es opcional y se
puede suprimir. En los ejemplos 4.1 y 4.2 se pueden ver las aplicaciones de esta
estructura.
Ejemplo 1: Se leen dos valores enteros A, B. Si A es mayor que B se debe realizar
la suma de ambos, en caso contrario, se debe hacer el producto.
Pseudocódigo del programa
nombre selección1(program);
Declaraciones (uses)
Crt, Dos;
Variables(var);
A (valor que ingresa) : entero;
B (valor que ingresa) : entero;
Diagrama N-S
nombre selección1
Declaraciones
Crt, Dos
Variables
A, B, R :enteros
Comienzo (programa)
R (resultado de la oper.): entero
Limpieza
inicio (begin);
Ingreso
Limpieza de la pantalla
A>B
Ingreso de datos
Si A>B entonces
Entonces R ← A + B
R←A+B
R←A* B
Sino R ← A * B
salida resultados:
Resultado
fin(end.)
fin (programa)
Aquí se pueden observar varios de los pasos ya vistos. Por lo tanto sólo se
desarrollará el pseudocódigo y el diagrama estructurado de la alternativa.
Pseudocódigo de la alternativa
procedimiento alternativa
inicio (begin);
si A > B
entonces R ← A + B
sino R ← A * B
fin(end;)
Diagrama N-S
A>B
R←A+B
R←A* B
El código del procedimiento es:
if A > B
then
R := A + B
else
R := A * B;
Ejemplo 2
Se leen dos valores enteros A, B. Si A es mayor que B se deberá realizar la
suma de ambos e imprimir un cartel diciendo R es la suma de A y B. En el caso
contrario, se pide hacer el producto y se debe imprimir otro cartel que diga R es el
producto de A y B.
Por ser muy similar al anterior sólo se realizará la parte del programa de la
decisión.
Como dentro de la alternativa se colocó la impresión de resultados el algoritmo
estructurado quedará de la siguiente manera.
Algoritmo alternativa
Diagrama N-S
Pseudocódigo de la alternativa
si A > B
entonces R ← A + B
Imprimir cartel suma y resultados
sino R ← A * B
Imprimir cartel producto y resultados
A>B
R←A+B
Imp. Resultado
carteles
R←A*B
y
Imp. Resultado y
carteles
El código de la estructura es:
if A > B then
begin {* comienzo del then *}
R := A + B;
writeln ( 'R es la suma de A y B = ', R);
end {* fin del then *}
else
begin {* comienzo del else *}
R := A * B; {* producto *}
writeln ( 'R es el producto de A y B = ', R);
end; {* fin del else *}
Nota: Cuando alguna de las opciones tiene más de una instrucción, dicha opción
deberá llevar un begin con su correspondiente end. Debe notarse que el end del
then no tiene puntuación y en cambio el del else si lleva punto y coma (;) esto se
debe a que la instrucción previa al este else nunca lleva punto y coma (;).
SALIDAS MÚLTIPLES
Si se tiene más de dos posibles salidas, aquí aparecen dos soluciones
similares al problema.
IF anidado
En esta solución se utiliza un if dentro de otro y siempre se anida por la salida
Else (sino).
Ejemplo 3
Se pide un programa donde se ingrese un número entre 1 y 5, incluidos ambos
y que se imprima en pantalla su expresión de caracteres es decir si ingresa 2 →
imprime Dos.
En este caso se tienen cinco salidas probables (uno, dos, tres, cuatro o cinco),
lo que indica que habrá 4 if anidados.
Si a = 1
Entonces impre = Uno
Sino Si a = 2
Entonces impre = Dos
Sino Si a = 3
Entonces impre = Tres
Sino Si a = 4
Entonces impre = Cuatro
Sino impre = Cinco
fin_si {* fin_si no tiene equivalente en Pascal *}
fin_si
fin_si
fin_si
<condición 1>
<condición 2>
< acción S1>
<condición 3>
< acción S2>
<condición 4>
< acción S3>
< acción S4> < acción S5>
El código de la estructura es:
if A = 1 then
writeln ( 'U n o ')
else if A = 2 then
writeln ( 'D o s ')
{* pregunta por uno *}
{* salida por uno *}
{* pregunta por dos *}
{* salida por dos *}
else if A = 3 then
{* pregunta por tres *}
writeln ( 'T r e s ') {* salida por tres *}
else if A = 4 then
{* pregunta por cuatro *}
writeln ( 'C u a t r o ') {* salida por cuatro *}
else writeln ( 'C i n c o '); {* salida por cinco *}
Case
Esta solución se utiliza en reemplazo del if anidado. Es más práctica y eficiente
y su pseudocódigo genérico es:
según...sea E hacer
E1: sentencia 1
E2: sentencia 2
E3: sentencia 3
.........................
.........................
En: sentencia n
[sino sentencia x ]
fin...según
Variable
Opción 1
Opción 2
Opción 3
Opción ..
Opción n
else
<acción S1> <acción S2> <acción S3> <acción S..> <acción Sn> <acción Sm>
Para el problema anterior (del Ejemplo 4.3) el pseudocódigo será:
según...sea A hacer
1: Imprimir “U n o”
2: Imprimir “D o s”
3: Imprimir “T r e s”
4: Imprimir “C u a t r o”
sino Imprimir “C i n c o”
fin...según
El diagrama N - S es:
A
1
2
3
4
Else
Imprimir
“UNO”
Imprimir
“DOS”
Imprimir
“TRES”
Imprimir
“CUATRO”
Imprimir
“CINCO”
El código de la estructura es:
case A of
{* comienza seleccion *}
1 : writeln ( 'U n o ');
{* salida por uno *}
2 : writeln ( 'D o s ');
{* salida por dos *}
3 : writeln ( 'T r e s ');
{* salida por tres *}
4 : writeln ( 'C u a t r o '); {* salida por cuatro *}
else writeln ( 'C i n c o '); {* salida por cinco *}
end;
{* fin del case *}
PRÁCTICA DE SELECTIVAS
1. Ingrese los valores numéricos enteros A, B, C, D, E y diga si su promedio es
mayor o igual a 7.
2. Dado un conjunto de 3 números A, B, C. Hacer un programa que determine
cuál de los tres es el mayor valor y cuál es el menor
3. Una universidad privada cobra como arancel 150 dólares por materia que se
cursa, pero si la cifra supera los 800 dólares, se cobra esa cifra (así un
estudiante que cursa 3 materias paga 450 dólares y uno que cursa 10 paga
800 dólares). Hacer un programa que solicite el nombre del alumno y la
cantidad de materias a cursar y saque por pantalla los dos datos ingresados y
el valor a pagar (como en el ejemplo).
Alumno
Número de materias
Monto
XXXXXXXXXXXX
YY
U$ RRR
4. Escriba un programa que le pida al usuario que ingrese una letra (minúscula),
y le indique si es una vocal (a, e, i, o, u), ó si es una consonante.
5. Ingrese los valores numéricos reales a, b, c, que son coeficientes de una
ecuación cuadrática y obtenga los valores X1 y X2 reales. Si la solución de la
raíz diera como resultado un valor negativo, imprima un cartel que diga “La
solución son dos números complejos conjugados”.
6. Ingrese los valores numéricos reales a, b, c, que son coeficientes de una
ecuación cuadrática y obtenga los valores X1 y X2 reales. Si la solución de la
raíz diera como resultado un valor negativo, imprima el resultado como “m +
ni; m -ni”.
7. Escriba un programa que le pida a un usuario un número entre 20 y 99 en
forma numérica y luego lo saque por pantalla en palabras.
8. Haga un programa que permita ingresar un número de 1 a 7 y salga el
correspondiente día de la semana (Ej: 1 → Lunes; 2 → Martes; ...). Si ingresa
un valor que no esté comprendido entre 1 y 7 deberá imprimir un cartel que
diga “ERROR ... valor fuera de rango”
9. Escriba un programa que lea un número entero (variable tipo integer), y
escriba cuántos dígitos tiene. Ejemplo 1285 tiene 4 dígitos.
10. Escriba un programa que ingresados tres valores enteros y positivos (A, B y
C), determine si son lados de un triángulo rectángulo. En caso de serlo,
indicar si A, B o C es la hipotenusa.
11. Haga un programa que permita ingresar dos números reales y el símbolo de
la operación, obteniéndose el correspondiente resultado. Si el símbolo no es
correcto, deberá imprimir un mensaje que indique “Error en símbolo”
12. El dueño de la pizzería de la práctica anterior ha decidido optimizar su
servicio, para lo cual ha reducido a 3 los tamaños de las mismas: personal (12
cm de diámetro), chica (22 cm), grande (33 cm). Por este motivo ha solicitado
una modificación al programa de manera tal que al usuario le aparezcan la
tres posibilidades, y el usuario solo pueda elegir entre una de esas
posibilidades.
PRÁCTICA DE ESTRUCTURAS CÍCLICAS
1. Leer una lista de 10 valores enteros, calcular e informar:
− La suma de los valores positivos.
− El producto de los valores negativos.
(ignorar los valores nulos).
2. Ingresar 5 juegos de cuatro valores cada uno: calcular y emitir el promedio de
cada juego.
3. Ingresar N juegos de cuatro valores cada uno; calcular y emitir el promedio de
cada juego. El proceso finaliza al encontrarse un juego cuyo primer valor es 0.
4. Ingresar dos números enteros positivos y calcular el producto de los mismos por
sumas sucesivas.
5. Leer una lista de números positivos que finaliza en cero y emitir el valor mínimo
de la lista.
6. Leer una lista de números enteros que finaliza en cero y emitir el valor máximo
de lista.
7. Idem a 5, emitiendo además la ubicación del máximo dentro de la lista. (suponer
un único máximo).
8. Leer 4 juegos de N valores enteros cada uno, donde N se informa al comienzo de
cada juego, y emitir el valor máximo de cada grupo. (suponer un único máximo).
9. Dada una lista de valores numéricos positivos, finalizada en cero, indicar si está
ordenada en forma ascendente.
10. Una empresa informa para cada uno de sus 20 vendedores:
Código de vendedor
3 dígitos
Importe de ventas del mes Real
Se desea emitir el importe máximo de ventas del mes y cuántos vendedores
alcanzaron dicho importe
11. En una central telefónica se procesan los llamados realizados en la siguiente
forma por cada llamada que ingresa:
Código de la llamada
Tipo de día
Duración de la
llamada
Los importes son:
Días hábiles
Días feriados
3 dígitos (cero al finalizar el proceso)
"1" hábil y "2" feriado
Entero > cero
Primeros 3 minutos
10
15
Minuto adicional
2
3
Se deberá emitir:
− El importe a abonar por cada llamada.
− La cantidad de llamadas que superen los tres minutos
− El porcentaje de llamados que superen los tres minutos. (Sobre el total
de llamadas informadas).
12. Se leen 30 valores reales (comprendidos entre 5 y 40), que representan la
temperatura máxima de cada uno de los día de un mes, se pide hallar:
− La temperatura máxima del mes y el día que se produjo. (se supone
única).
− Cuántos días la temperatura superó los 25 grados centígrados.
− El promedio de las temperaturas del mes:
13. Se ingresan los resultados de la evaluación de un grupo de un curso de
programación, por cada alumno se informa:
Número de matrícula 4 dígitos (1-9999)
Asistencia
1 para presente, 0 para ausente
Calificación
2 dígitos (0-10)
A partir de esta información se debe calcular e informar:
− Cantidad y porcentaje de alumnos presentes.
− Porcentaje de alumnos aprobados (sobre el total de alumnos presentes).
14. En la pizzería de las prácticas anteriores se ha determinado que los costos de los
complementos no son en todo los caso iguales: sus valores son los siguientes en
$/cm2:
Doble muzzarella
Morrones
Jamón
Longaniza
Roquefort
Palmitos
Aceitunas negras
0.003
0.004
0.006
0.005
0.008
0.010
0.002
Por lo tanto, se pide un modificación que le permita al usuario elegir si desea o
no complementos y cuáles desea.
Para pensar....
15. Realice un programa que permita resolver un sistema de dos ecuaciones con
dos incógnitas del tipo Ax + By + C = 0.
16. Realice un programa que permita calcular la intersección de dos rectas de la
forma y= mx + b.
Bibliografía
1.
De Giusti A. Algoritmos, Datos y Programas. Pearson. 2002
2.
Joyanes Aguilar L.: Turbo Pascal 5.5 6.0 y 7.0. Editorial Mc. Graw-Hill. 2001.
3.
Leetsma S. Y Nyhoff L. Programación en Pascal. Prentice Hall 1999
4.
Lopez Leobaldo. Programación estructurada en Turbo Pascal 7. Alfaomega.
5.
Dale N. y Lilly S.: Pascal y Estructura de datos. Editorial Mc. Graw-Hill.
6.
O´Brien y Nameroff. Turbo Pascal 7 Manual de Referencia. Mac Graw Hill
7.
Weiss. Estructuras de Datos y Algoritmos. Addison Wesley
8.
Grogono P.: Programación en Pascal. Editorial Prentice Hall.
9.
Alcalde E. y otros (1988): Informática Básica. Editorial Mc Graw Hill. (Cap 2)
10.
Wirth N.: Algorithms + Data Structures = Programs. Editorial Prentice Hall.
11.
Wirth N.: Introducción a la Programación Sistemática. Editorial El Ateneo.
12.
Braunstein y Gioia: Introducción a la Programación y Estructuras de Datos.
Editorial Eudeba.
13.
Carroll: Turbo Pascal. Editorial Mc. Graw-Hill.
14.
Schildt: Programación y técnicas en Pascal avanzado. Editorial Mc. Graw Hill.
15.
Dijkstra-Hoare: Structured Programming. Academic Press.
16.
Cataldi Z. y Lage F., 2000 - Algoritmos I. Recopilación de los Algoritmos
Fundamentales. ISBN 987-461764-7.
Descargar