lunes, 3 de junio de 2013

UNIDAD 3 - 4TO. AÑO

UNIDAD 3
ESTRUCTURAS SELECTIVAS

La programación estructurada se denomina así porque se basa en la consigna de que todo algoritmo de solución a un problema informático puede escribirse en base a tres estructuras básicas. La primera de ellas se denomina estructura secuencial, y se trata de la forma más simple de programar: una sentencia detrás de otra. Los problemas que hemos resuelto hasta ahora en Pascal responden todos a esta estructura. En ellos hemos escrito instrucciones del tipo: leer una variable, escribir un dato, hacer un cálculo, etc., siempre una instrucción a continuación de la otra, formando una secuencia, de ahí su nombre.
Existen otras dos estructuras de programación que requieren un poco más de cuidado. Comenzaremos por las estructuras de selección.
Existen tres tipos básicos de estas estructuras: simples, dobles y múltiples.
Las estructuras de selección simples son instrucciones que realiza la computadora siempre y cuando se cumplan determinadas condiciones; es decir, selecciona las acciones a cumplir en base a cierta información que evalúa. La información a evaluar se denomina condición, y las instrucciones a cumplir se denominan acciones.

                        Si <condición> entonces
                        comenzar
                                   <acción 1>
                                   <acción 2>
                                   …       
                                   …
                                   <acción n>
                        Terminar

Si la condición se cumple, se realizan todas las acciones; si no, no se realiza ninguna.
Las acciones pueden ser instrucciones de las ya conocidas, como leer, escribir, calcular, etc. Las condiciones son evaluaciones de expresiones lógicas.
Una expresión lógica es una proposición que tiene un valor de verdad: puede ser verdadera o falsa, pero no hay términos medios. Por ejemplo: decir que 8+5=13 es una expresión lógica cuyo valor de verdad es verdadero; en cambio, 7-3=25 es también una expresión lógica válida, pero su valor de verdad es falso.
También podemos armar expresiones lógicas utilizando variables. Así, si A=2 y B=6, la expresión lógica A>B es falsa y la expresión lógica A<B es verdadera. Si los valores de A y B cambiaran, podrían llegar a cambiar los valores de verdad de las expresiones lógicas correspondientes.
Las expresiones lógicas pueden ser simples (como los ejemplos anteriores) o compuestas por varias expresiones lógicas, unidas por conectores lógicos. Los conectores lógicos pueden ser: and (y); or (o); not (no). Para que dos expresiones lógicas unidas por and sea verdadera, ambas deben ser verdaderas; en cualquier otro caso será falsa. Para que dos expresiones lógicas unidas por or sea falsa, ambas deben ser falsas; en cualquier otro caso será verdadera. Una expresión lógica que es verdadera se transformará en falsa con el conector not; y a la inversa, una expresión lógica que es falsa se transformará en verdadera con el conector not.
Para armar expresiones lógicas debemos tener en cuenta que los tipos de datos deben ser compatibles, es decir, no se pueden comparar variables enteras con variables alfanuméricas, o reales con enteras, etc. También debemos tener en cuenta que el resultado de una evaluación será siempre de tipo boolean: verdadero o falso.
Veamos algunos ejemplos:

            Supongamos la siguiente declaración de variables
variables
                                   A: entero;
                                   B: real;
                                   C: entero;
                                   D: real;
                                   E: texto;
                                   F: texto;
                                   G: boolean;
            Y las siguientes asignaciones
                                   A=56
                                   B=5.2
                                   C=28
                                   D=53.8
                                   E=”Programación I”
                                   F=”Materia”
            Evaluar las expresiones lógicas que siguen. Si no es posible, justificar.
1.    A < C                               Falso
2.    A= C*2                            Verdadero
3.    E=F                                  Falso
4.    B<C                                 No puede evaluarse por ser B y C de distintos tipos
5.    G= A<C and A=C*2      Falso (la primer expresión es falsa, la segunda verdadera; ambas juntas son entonces falsas)
6.    not (E=F)                        Verdadero (ya que E=F era falsa)
7.    not G                               Verdadero
8.    A or E=F                         No se puede evaluar, porque A no es una expresión lógica ni una variable booleana

Decíamos entonces, que una estructura selectiva evalúa una condición y si se cumple, realiza una acción (o varias). Por ejemplo, se leen dos números naturales, queremos imprimir la suma sólo si ésta es menor que 26. El programa sería:

                        Programa Condiciones                
Variables
                                   A: entero
                                   B: entero
                                   C: entero
                        Comenzar
                                   Leer (A)
                                   Leer (B)
                                   C ß A+B
                                   Si C < 26 entonces
                                   Comenzar
                                               Escribir (C)
                                   Terminar
                        Terminar

A diferencia de otros programas que habíamos escrito, en éste puede suceder (en el caso en que la suma sea 26 o más) que haya una instrucción (Escribir (C)) que no se realice. Por eso a esta estructura se la llama selectiva, porque el programa selecciona qué instrucciones realiza y cuáles no. Este mismo programa, escrito en Pascal quedaría:

                        Program condiciones;
                        uses wincrt;             
var
                                   A: integer;
                                   B: integer;
                                   C: integer;
                        begin
                                   readln (A);
                                   readln (B);
                                   C := A+B;
                                   if C < 26 then
                                   begin
                                               writeln (C);
                                   end;
                        end.

Otro ejemplo: se leen tres parciales de una materia de un alumno; el alumno aprueba la materia cuando tiene 7 o más en al menos dos de los tres parciales. Informar si el alumno aprobó.

                        Programa notas
                        Constantes
                                   Cartel = “Aprobó la materia”
Variables
                                   Nota1: real
                                   Nota2: real
                                   Nota3: real
                        Comenzar
                                   Leer (Nota1)
                                   Leer (Nota2)
                                   Leer (Nota3)
                                   Si (Nota1 >= 7)and(Nota2 >= 7)and(Nota3 >= 7) entonces

Los tres parciales aprobados
 
                                   Comenzar
                                               Escribir (Cartel)
                                   Terminar
                                   Si (Nota1 >= 7)and(Nota2 >= 7)and(Nota3 < 7) entonces

Aprobados sólo el 
primero y el segundo
 
                                   Comenzar
                                               Escribir (Cartel)
                                   Terminar
                                   Si (Nota1 >= 7)and(Nota2 < 7)and(Nota3 >= 7) entonces

Aprobados sólo el 
primero y el tercero
 
                                   Comenzar
                                               Escribir (cartel)
                                   Terminar
                                   Si (Nota1 < 7)and(Nota2 >= 7)and(Nota3 >= 7) entonces

Aprobados sólo el 
segundo y el tercero
 
                                   Comenzar
                                               Escribir (cartel)
                                   Terminar
                        Terminar
                                  
Ejercicio: Ahora pasá este último programa al editor Pascal, respetando la sintaxis del lenguaje.


Las estructuras de selección dobles son aquéllas en las cuales se realiza una acción (o varias) si la condición se cumple y otra/s si no se cumple. La forma general de esta estructura es la siguiente:

                        Si <condición> entonces
                        comenzar
                                   <acción por verdadero 1>
                                   <acción por verdadero 2>
                                   …       
                                   …
                                   <acción por verdadero n>
                        Terminar
                        Si no
                        Comenzar
                                   <acción por falso 1>
                                   <acción por falso 2>
                                   …       
                                   …
                                   <acción por falso n>
                        Terminar

Por ejemplo: se leen dos números naturales, informar si la suma es mayor o igual que 26 o menor que ese valor.


                        Programa Condiciones2  
                        Constantes
                                   Menor=”La suma es menor que 26”
                                   Mayor=”La suma es mayor o igual que 26”      
Variables
                                   A: entero
                                   B: entero
                                   C: entero
                        Comenzar
                                   Leer (A)
                                   Leer (B)
                                   C ß A+B
                                   Si C >= 26 entonces
                                   Comenzar
                                               Escribir (Mayor)
                                   Terminar
                                   Si no
                                   Comenzar
                                               Escribir (Menor)
                                   Terminar
                        Terminar

Y en Pascal:

                        Program condiciones2;
                        uses wincrt;
                        const
                                   Mayor=”La suma es mayor o igual que 26”;
                                   Menor=”La suma es menor que 26”;                 
var
                                   A: integer;
                                   B: integer;
                                   C: integer;
                        begin
                                   readln (A);
                                   readln (B);
                                   C := A+B;
                                   if C >= 26 then
                                   begin
                                               writeln (Mayor);

Fíjense que aquí no va el “;” (nunca se pone antes de un else)
 
                                   end
                                   else
                                   begin
                                               writeln (Menor);
                                   end;
                        end.

Otro ejemplo: dados dos números naturales, dividir por 2 el mayor y multiplicar por 4 el menor

                        Programa Condiciones3  
Variables
                                   A: entero
                                   B: entero
                                   DIVISION: real                    
                                   MULTI: entero
                        Comenzar
                                   Leer (A)
                                   Leer (B)
                                   Si A > B entonces
                                   Comenzar
                                               DIVISION ß A / 2
MULTI ß B * 4                                           
                                   Terminar
                                   Si no
                                   Comenzar
                                               DIVISION ß B / 2
MULTI ß A * 4                                           
                                   Terminar
                                   Escribir (“La mitad del mayor es: “, DIVISION)
                                   Escribir (“El cuádruple del menor es: “, MULTI)
                        Terminar

Y en Pascal:

                        Program condiciones3;
                        uses wincrt;
var
                                   A: integer;
                                   B: integer;
                                   DIVISION: real;
                                   MULTI: integer;
                        begin
                                   writeln (“Ingrese dos números :”);                                  
readln (A);
                                   readln (B);
                                   if A > B then
                                   begin
                                               DIVISION := A / 2;
MULTI := B * 4;                                           
end
                                   else
                                   begin
                                               DIVISION := B / 2;
MULTI := A * 4;                                           
                                   end;
                                   writeln (“La mitad del mayor es: “, DIVISION);
                                   writeln (“El cuádruple del menor es: “, MULTI);
                        end.


Una estructura de selección múltiple permite elegir uno entre varias alternativas de acción; ya no se trata de “Verdadero” o “Falso” porque en estas estructuras no hay una condición que es necesario que se cumpla para poder ejecutar una sentencia, sino una variable cuyo valor determina el camino a seguir. Por ejemplo, dada la nota de una materia, el concepto se define según el siguiente esquema: 0: reprobado; 1, 2, 3: aplazado; 4, 5: regular; 6, 7: bien; 8, 9: muy bien; 10: sobresaliente. Supongamos que la variable que guarda la nota se llama NOTA, entonces dependiendo del valor de la variable NOTA el programa va a escribir alguno de los seis conceptos posibles. Fíjense que en este caso no hay una pregunta que se contesta con Verdadero o Falso, sino más bien estoy preguntando ¿cuánto vale NOTA?, y voy viendo valores posibles para definir el concepto. Un programa que haga lo que dijimos antes quedaría así:

            Programa CondMultiples
            Variables
                        NOTA: entero
                        CONCEPTO: texto
            Comenzar
                        Leer (NOTA)
                        Según valor de NOTA
                        Comenzar
                                   0: CONCEPTO ß “Reprobado”
                                   1 a 3: CONCEPTO ß “Aplazado”
                                   4 a 5: CONCEPTO ß “Regular”
                                   6 a 7: CONCEPTO ß “Bueno”
                                   8 a 9: CONCEPTO ß “Muy bueno”
                                   10: CONCEPTO ß “Sobresaliente”
                                   Otro caso: CONCEPTO ß “Error en la nota”
                        Terminar
                        Escribir (CONCEPTO)
            Terminar

Y en Pascal:

            Program CONDMULTIPLES;
            uses wincrt;
            var
                        NOTA: integer;
                        CONCEPTO: string;
            begin
                        write (‘Ingrese la nota: ‘);
                        readln (NOTA);
                        case NOTA of
                                   0: CONCEPTO := “Reprobado”;
                                   1..3: CONCEPTO :=  “Aplazado”;
                                   4..5: CONCEPTO :=  “Regular”;
                                   6..7: CONCEPTO := “Bueno”;
                                   8..9: CONCEPTO := “Muy bueno”;
                                   10: CONCEPTO := “Sobresaliente”;
                        end;
                        writeln (CONCEPTO);
            end.



PRÁCTICA 3
ESTRUCTURAS SELECTIVAS

  1. Determinar el valor de verdad de los siguientes enunciados
    1. 3 + 7 = 9 or 1 + 7 = 8
    2. 3 + 2 = 7 and 4 + 4 =8
    3. París está en Italia y Londres está en Inglaterra
    4. París está en Italia o Londres está en Inglaterra
    5. VAR1= 3; VAR2 = 6; VAR3 = 18
                                          i.    VAR1 = VAR3/VAR2
                                        ii.    VAR3 = VAR1 * VAR2
                                       iii.     VAR1 > 67

  1. Dados los siguientes elementos y sus características:

ELEMENTO
COLOR

CÓDIGO

FORMA

DISPONIBLE

A
Rojo
S
Triángulo
Sí
B
Verde
Q
Círculo
No
C
Azul
Q
Cuadrado
No
D
Amarillo
Z
Círculo
Sí
E
Azul
Q
Triángulo
Sí
F
Rojo
S
Cuadrado
Sí
G
Verde
S
Círculo
Sí
H
Amarillo
Z
Triángulo
No

Escribir las condiciones para encontrar y decir cuáles son:

a)    Todos los triángulos verdes.
b)    Todos los cuadrados azules.
c)    Los elementos de código S disponibles.
d)    Los elementos de código Z no disponibles.
e)    Los círculos de código Q que no sean azules.
f)     Los cuadrados de código S que no sean verdes.
g)    Los triángulos disponibles azules que no tengan código Z.
h)   Los elementos de código Q o de código Z que no estén disponibles.
i)     Los elementos azules o rojos que no sean ni círculos ni cuadrados.

Realizar la programación Pascal para los siguientes casos


  1. Se leen dos números reales. Informar el doble del mayor y el cuadrado del menor.
  2. Dados dos números cualesquiera, elevar al cubo el menor de ellos y multiplicar por 7 el menor. Mostrar la suma de los dos resultados obtenidos anteriormente.
  3. Dado un número cualquiera, mostrar 0 si es positivo y 1 si es negativo.
  4. Dados dos números enteros, mostrar su suma si ambos son positivos; mostrar su producto si ambos son negativos; y mostrar el doble de cada uno de ellos si tienen signos distintos.
  5. Se ingresa el nombre de un empleado, la sección a la que pertenece y su calificación. Si el empleado pertenece a la sección “Contabilidad” y fue calificado con 7 o más puntos, le corresponde un 25% de aumento; si es de la sección “Personal” y tiene una calificación de 5 puntos o más, corresponde un aumento del 15%; a todos los empleados de la sección “Maestranza” corresponde un aumento de 20% cualquiera sea su calificación, mientras que a todos los empleados que hayan obtenido como calificación un 10 en cualquier sección llevan un 30% de aumento. Mostrar en un cartel el nombre del empleado y el porcentaje de aumento que le corresponde.
  6. En una empresa se desea abonar a los empleados un plus según su antigüedad: si tienen entre 0 y 1 año, no se le abona antigüedad; entre 2 y 5 años, el 10% sobre el sueldo básico; entre 6 y 10 años, el 15%, entre 11 y 15 años, el 20%; entre 16 y 20 años, el 25%; entre 20 y 25 años, el 30%, y entre 25 y 30 años, el 35%. Se ingresa el nombre, el sueldo básico de un empleado, y la cantidad de años que lleva en la empresa; mostrar cuál es el sueldo total que le corresponde.
  7. Dado un número entero comprendido entre 1 y 100, decir a qué decena pertenece.
  8. Los operarios de una empresa trabajan en dos turnos; uno diurno, cuyo código es menor que 10, y otro nocturno, de código mayor o igual que 10. Se desea calcular el jornal para un operario sabiendo que, para el turno nocturno, el pago es de $ 7 la hora y, para el turno diurno, de $ 5 la hora pero, en este último caso, si el día es domingo, se paga un adicional de $ 4 la hora.
  9. Construir un algoritmo que escriba los nombres de los días de la semana, dependiendo del valor de la variable DIA. Si DIA toma un valor fuera del rango definido, escribir un mensaje de error.
  10. En un curso de Ciencias de la Computación, la calificación final del estudiante se determina a partir del rendimiento en tres aspectos del trabajo cuatrimestral. Existe una calificación de exámenes parciales, que cuenta con 30 % del total; la calificación de trabajo de taller con 20 % del total; y el examen final con el 50 % restante. Se leen las calificaciones y se pide informar la nota final.
  11. Una compañía de ventas de automóviles paga, a su personal de la sección de ventas, un salario de 300 pesos, más una comisión de 20 pesos por automóvil vendido, más 5 % del valor de venta. Diseñar un algoritmo para calcular el salario de un vendedor en un mes dado, conociendo el número de automóviles vendidos y el precio de cada uno de estos.
  12. Dados tres números enteros, mostrarlos ordenados de mayor a menor.
  13. Dados dos números enteros, si el primero de ellos es el doble del segundo, mostrar el doble de la suma de ambos; si es el triple, mostrar el triple de la resta del primero por el segundo; si es la mitad, mostrar la mitad de la suma de sus raíces cuadradas; y si es la décima parte, mostrar la décima parte de la suma de sus cuadrados.
  14. Se leen tres valores que corresponden al día, mes y año. Verificar si los datos constituyen una fecha posible o no.
  15. Dado un número entero, informar si es primo o no.
  16. Dado un número cualquiera, informar si es cuadrado perfecto o no.

No hay comentarios.:

Publicar un comentario