lunes, 26 de agosto de 2013

UNIDAD 3 (segunda parte) - 4TO. AÑO

UNIDAD 3
ESTRUCTURAS ITERATIVAS

Tal como dijimos en el apunte anterior, todo algoritmo de solución a un problema informático puede escribirse en base a tres estructuras básicas. Ya hemos visto dos de ellas: la estructura secuencial y la estructura selectiva.
La tercera y última de estas estructuras es la estructura iterativa o repetitiva.
Esta estructura permite que una determinada cantidad de instrucciones se repita varias veces.
Existen cuatro tipos de estructuras iterativas. La primera que veremos es la estructura iterativa determinada por programa.
Supongamos el siguiente ejercicio: se leen dos números enteros, mostrar la suma de ambos. Claramente el algoritmo de solución es el siguiente:

                        Program Dosnumeros;
                        Uses wincrt;
                        Var
                                   N1: integer;
                                   N2: integer;
                                   SUMA: integer;
                        Begin
                                   Readln (N1);
                                   Readln (N2);
                                   SUMA := N1 + N2;
                                   Writeln (SUMA);
                        End.

Pero si el ejercicio dijera “se leen tres pares de números enteros; informar la suma de cada par”, lo mismo que escribimos más arriba habría que repetirlo tres veces.

                        Program Trespares;
                        Uses wincrt;
                        Var
                                   N1: integer;
                                   N2: integer;
                                   SUMA: integer;
                        Begin
                                   Readln (N1);
                                   Readln (N2);
                                   SUMA := N1 + N2;
                                   Writeln (SUMA);
                                   Readln (N1);
                                   Readln (N2);
                                    SUMA := N1 + N2;
                                   Writeln (SUMA);
                                   Readln (N1);
                                   Readln (N2);
                                   SUMA := N1 + N2;
                                   Writeln (SUMA);
                        End.

Hasta ahora no parece haber problemas, pero ¿si quisiéramos leer mil pares de números? ¿tendríamos que repetir mil veces lo mismo?
No; justamente para esto existen estas estructuras.
Si el programador sabe cuántas veces tiene que repetir una serie de instrucciones, le aclara al compilador que lo haga introduciendo una variable entera que se la denomina contador y que va contando las vueltas de la repetición. Para nuestro ejemplo, tendríamos que decirle que tiene que leer dos variables enteras e imprimir su suma mil veces, es decir, desde la vez 1 hasta la vez 1000. Esta estructura se denomina iterativa determinada por programa. Así es como nos queda el programa:

                        Program Milpares;
                        Uses wincrt;
                        Var

La variable I es la que va a contar las veces q
ue se repiten las sentencias: contará desde 
1 hasta 1000.
 
                                   N1: integer;
                                   N2: integer;
                                   SUMA: integer;
                                   I: integer;  
                        Begin
                                For    I:=1 to 1000     do
                                Begin

Las sentencias que se encuentran 
dentro de la estructura iterativa, se 
epetirán mil veces tal como lo indica la 
variable I.
 
Readln (N1);
                                               Readln (N2);
                                               SUMA := N1 + N2;
                                               Writeln (SUMA);
                                   End;
                        End.

Otro ejemplo: Se leen las tres notas de la materia “Programación” de 30 alumnos de un curso. Se desea imprimir el promedio de cada alumno.

Como cada alumno tiene tres notas y tenemos treinta alumnos, deberemos leer 30 veces un grupo de tres notas, y de cada grupo obtener el promedio y mostrarlo. Es decir, se trata de una estructura iterativa determinada por programa con un contador que va a controlar desde 1 hasta 30, y dentro de esta estructura se leerán tres variables reales (las notas pueden tener decimales) y se calculará y mostrará el promedio.


                        Program Promedios;
                        Uses wincrt;
                        Var
                                   NOTA1: real;
                                   NOTA2: real;
                                   NOTA3: real;
                                   PROMEDIO: real;
                                   I: integer;
                        Begin
                                   For I:= 1 to 30 do
                                   Begin
                                               Readln (NOTA1);
                                               Readln (NOTA2);
                                               Readln (NOTA3);
                                               PROMEDIO := (NOTA1 + NOTA2 + NOTA3) / 3;
                                               Writeln (PROMEDIO);
                                   End;
                        End.

Ejercicio: ¿cómo habría que modificar el ejercicio anterior si además de mostrar el promedio de cada alumno, quisiera mostrar un cartel que diga si aprobó o no la materia (considerando que aprueba con 6 o más)?

Siguiendo el último ejemplo, podría darse el caso de que el mismo programa tuviera que utilizarlo para cualquier curso, independientemente de la cantidad de alumnos que tenga. El programador no sabe cuántos alumnos tiene un curso para poder decidir hasta qué valor llegará el contador, pero la persona que va a cargar los datos sí lo sabe. Por lo tanto, una solución a ese problema sería que el programa le pregunte al usuario cuántas veces va a repetir la estructura, y guardar ese valor en una variable entera que va a determinar el tope superior de la estructura. A este tipo de estructura se la denomina estructura iterativa determinada por usuario. El algoritmo ahora es:

                        Program Promedios2;
                        Uses wincrt;
                        Var
                                   NOTA1: real;
                                   NOTA2: real;
                                   NOTA3: real;
                                   PROMEDIO: real;

El contador I se moverá entre la vez 1 y la vez FINAL 
que va a ser introducida por el usuario. Como el 
programador no sabe cuántas veces se realizará
 la repetición, utiliza el valor que el usuario le 
proporciona y que guarda en la variable FINAL.
 
                                   I: integer;
                                   FINAL: integer;
                        Begin
                                   Readln (FINAL);
For I:= 1 to FINAL do
                                   Begin
                                               Readln (NOTA1);
                                               Readln (NOTA2);
                                               Readln (NOTA3);
                                               PROMEDIO := (NOTA1 + NOTA2 + NOTA3) / 3;
                                               Writeln (PROMEDIO);
                                   End;
                        End.

Pero puede suceder incluso que ni siquiera el usuario sepa cuántas veces se va a repetir una estructura. Por ejemplo, si estamos en un consultorio médico y vamos recorriendo las fichas de los pacientes y calculamos para cada paciente el aumento (o disminución) de peso entre la primera y la última visita. La persona que va cargando los datos no tiene por qué saber de antemano cuántas fichas hay; simplemente va a introducir valores hasta que se terminen las fichas. En este caso, tenemos dos variables para guardar los dos valores del peso y una tercera para guardar y mostrar la diferencia entre ambas. Deberemos leer los pesos, hacer la resta y mostrarla. Y eso lo haremos… ¿cuántas veces? No sabemos, sólo sabemos que lo repetiremos hasta que se terminen las fichas. El usuario podría indicar al programa que las fichas se terminaron cuando ambos valores de entrada sean cero; es decir, el usuario ingresará valores hasta que ingrese dos ceros. Esto requiere de una nueva estructura llamada estructura iterativa con condición de salida, es decir, la repito hasta que se cumple una condición que me indica que debo salir de ella, pero no puedo saber cuántas veces será eso. En este caso, no hay ningún contador que controle la cantidad de veces que se hace, sino que se le pregunta al usuario si desea continuar o no. El algoritmo que soluciona el ejemplo es el siguiente:


                        Program Pesos;
                        Uses wincrt;
                        Var
                                   PRIMERA: real;
                                   ULTIMA: real;
                                   DIFERENCIA: real;

La variable de tipo char almacena una sola 
letra.
 
                                   CONTINUAR: char; 
                        Begin
                                   Repeat
                                               Readln (PRIMERA);
                                               Readln (ULTIMA);
                                               DIFERENCIA := ULTIMA - PRIMERA;
                                               Writeln (DIFERENCIA);
                                               Writeln (‘Presione “S” para seguir, “T” para terminar’);
                                               Readln (CONTINUAR)
                                   Until CONTINUAR = ‘T’;
                        End.


Las sentencias que se encuentran dentro de la estructura entre “repeat” y “until” (noten que en este caso no hay “begin” y “end”), se repiten hasta que el usuario ingrese ‘T’, cuyo valor va a quedar guardado en la variable CONTINUAR. Cuando el usuario presione T, la variable CONTINUAR va a indicar el fin de la estructura.
 
 





Otro ejemplo: en un vivero se controla la floración de los rosales. Cada rosal tiene una ficha en la que se consignan semanalmente la cantidad de pimpollos que nacen. Un programa informa si el rosal es apto para la venta, lo cual sucede cuando de una semana para la otra el rosal tiene al menos cinco pimpollos más. Los rosales se encuentran codificados R-1, R-2…, R-n. Se lee el código de cada rosal, los pimpollos que contenía la semana anterior y los que contiene esta semana. Se desea mostrar los códigos de los rosales con un cartel que indique “APTO” o “NO APTO” según corresponda.

                        Program Rosales;
                        Uses wincrt;
                        Const
                                   CARTELAPTO = ‘El rosal se encuentra apto para la venta’;
                                   CARTELNOAPTO = ‘El rosal no se encuentra apto para la venta’;
Var
                                   CODIGO: string;                             
SEMANA1: integer;
                                   SEMANA2: integer;
                                   AUMENTO: integer;
                                   FIN: char;
                        Begin
                                   Repeat
                                               Readln (CODIGO);
                                               Readln (SEMANA1);
                                               Readln (SEMANA2);
                                               AUMENTO := SEMANA2 – SEMANA1;
                                               If AUMENTO >= 5 then
                                               Begin
                                                           Writeln (CODIGO);
Writeln (CARTELAPTO);
                                               End
                                               Else
                                               Begin
                                                           Writeln (CODIGO);
Writeln (CARTELNOAPTO);
                                               End;
                                               Writeln (‘Desea terminar? (“S” o “N”): ‘);
                                               Readln (FIN);
                                   Until FIN = ‘S’;
                        End.

Este programa lee los valores, calcula el aumento, y luego se fija si corresponde imprimir un cartel o el otro; todo esto, dentro de la estructura iterativa que se repetirá hasta que el usuario ingrese una “S” para indicar que “Sí” desea terminar.

Por último, existe otro tipo de estructuras que permiten ingresar datos una cierta cantidad de veces que no se sabe cuántas serán, que se denominan estructuras iterativas con condición de entrada. Es decir, en lugar de repetir las instrucciones hasta que decido salir de la estructura, voy a repetir las instrucciones mientras que le permita ingresar a la estructura. En este caso, la condición de repetición la pongo al principio y no al final. Podríamos considerar que ingresamos valores mientras que el código no sea la palabra ‘FIN’. En cuanto la variable CODIGO tenga el valor ‘FIN’, voy a dejar de entrar en la estructura.
Supongamos que Veamos cómo queda:

                        Program Rosales2;
                        Uses wincrt;
                        Const
                                   CARTELAPTO = ‘El rosal se encuentra apto para la venta’;
                                   CARTELNOAPTO = ‘El rosal no se encuentra apto para la venta’;
Var
                                   CODIGO: string;                             
SEMANA1: integer;
                                   SEMANA2: integer;
                                   AUMENTO: integer;
                        Begin
                                   Readln (CODIGO);
                                   While CODIGO <> ‘FIN’ do
                                   Begin
                                               Readln (SEMANA1);
                                               Readln (SEMANA2);
                                                AUMENTO := SEMANA2 – SEMANA1;
                                               If AUMENTO >= 5 then

Debo leer el CODIGO antes de comenzar la estructura, 
para saber si entro o no, y debo volver a leerlo al 
final, para obtener un nuevo valor de CODIGO. Si el 
primer CODIGO es ‘FIN’, ni siquiera se ejecuta una 
vez; si no, comenzará a ejecutarse y antes de 
terminar, volverá a pedir un nuevo CODIGO, para 
obtener un nuevo dato, el cual servirá también para 
saber si vuelvo a ejecutar las instrucciones o no.
 
                                               Begin
                                                           Writeln (CODIGO);
Writeln (CARTELAPTO);
                                               End
                                               Else
                                               Begin
                                                           Writeln (CODIGO);
Writeln (CARTELNOAPTO);
                                               End;
                                               Readln (CODIGO);
                                   End;
                        End.

La diferencia fundamental entre estas dos últimas estructuras iterativas, es que en el caso de tener una condición de salida, las instrucciones se ejecutan al menos una vez; cuando hay una condición de entrada, es posible que nunca se ejecuten las sentencias que están dentro de la estructura. Por eso, cuando no sabemos cuántas veces se repite una estructura, y tampoco se lo podemos preguntar al usuario, utilizaremos una estructura repetitiva con condición de entrada si es posible que no exista ningún dato para procesar, y con condición de salida en caso contrario. Por ejemplo, si tengo que controlar personas que se vienen a anotar a un curso por día, utilizaré una estructura iterativa con condición de entrada, porque puede ser que nadie venga a anotarse; pero cuando quiero calcular sueldos de empleados en una empresa, utilizaré una estructura iterativa con condición de salida, porque al menos un empleado debe haber.




PRÁCTICA 3
ESTRUCTURAS DE PROGRAMACIÓN


¡¡¡¡NO INTENTES HACER ESTOS EJERCICIOS SIN HABER LEÍDO ANTES EL APUNTE QUE LOS PRECEDE!!!!


Los siguientes ejercicios están ordenados según el grado de dificultad. Por lo tanto, hacélos respetando el orden. Si te trabás en alguno, INMEDIATAMENTE consultámelo así puedo aclararte en qué te equivocás para que puedas seguir adelante.
En principio, vamos a hacer todos los ejercicios en Pascal. Luego los haremos todos en Visual Basic.

  1. Se leen cien pares de números. Para cada par de números leídos, imprimir el resultado de su multiplicación.
  2. Para cada uno de los días de un mes, se leen las temperaturas máxima y mínima. Mostrar la temperatura máxima promedio y la temperatura mínima promedio de ese mes.
  3. Calcular y mostrar el cuadrado y la raíz (en Pascal, la raíz de N se escribe SQRT(N)) de todos los números que se ingresan por teclado, hasta que se indique el fin.
  4. En un jardín botánico se desea realizar una estadística con los siguientes datos: NOMBRE DEL EJEMPLAR, ALTURA ACTUAL, ALTURA MEDIDA EN EL CONTROL ANTERIOR, FLORACIÓN (completa o incompleta). Para ello se ingresan los datos en una computadora. Informar el crecimiento de todos los ejemplares y cuáles son los que han completado su floración.
  5. Este año han ingresado a la Universidad 1000 nuevos alumnos que se distribuyeron entre las siguientes carreras: ABOGACÍA, MEDICINA, ODONTOLOGÍA, VETERINARIA, HISTORIA, CIENCIAS ECONÓMICAS. Se ingresan el nombre del alumno y el código de carrera (respectivamente 01, 02, 03, 04, 05 y 06). Se pide mostrar cada alumno en qué carrera se anotó.
  6. Dados cien números enteros, imprimir la mitad de la raíz cuadrada de los que son mayores que 28.
  7. Ingresar números hasta que se ingrese el 0. Mostrar sólo los números múltiplos de 3 (en Pascal, “NUM es múltiplo de tres” se escribe “NUM MOD 3 = 0”) que sean menores o iguales que 100.
  8. Se leen los datos de los ciudadanos de la Ciudad Autónoma de Buenos Aires: apellido, nombre, sexo y edad. Se desea mostrar los nombres de los varones que tienen edad para votar.
  9. Se ingresan 100 pares de números. Se debe obtener lo siguiente: si ambos números son positivos, imprimir los dos números y su suma; si ambos son negativos, mostrar los dos números y su resta; si sólo uno es positivo, mostrar los dos números y su producto.
  10. Se desea obtener, para cada empleado, el monto a pagar en concepto de horas extras. Para ello se ingresarán: APELLIDO Y NOMBRE DEL EMPLEADO, CANTIDAD DE HORAS EXTRAS y TIPO DE HORAS EXTRAS (diurna, nocturna o feriado). El valor de la hora extra depende del tipo de hora: diurna, $10.-, nocturna, $15.-, y feriado, $20.-.
  11. En un curso se han tomado tres exámenes y se obtiene la siguiente información: ALUMNO, NOTA1, NOTA2, y NOTA3. Leer los datos y calcular el promedio de cada alumno, informado si aprobó (6 o más), si debe recuperar (4 a 6) o si debe recursar la materia (menos de 4)
  12. En una fábrica de rulemanes, por cada producto realizado se registra el número de máquina en que se realizó (de 1 a 6) y el diámetro de cada rulemán. Teniendo en cuenta que los rulemanes deben ser de 2 cm. De diámetro, con una tolerancia de 0,2 mm., mostrar un cartel ‘FUERA DE TOLERANCIA’ en cada rulemán que corresponda, mostrando también la máquina en la que se fabricó.
  13. Los 300 obreros de una empresa cobran $ 5.- por hora de trabajo y $ 8.- por hora extra. Si trabajan más de 200 horas mensuales, a las excedentes se las considera extra. Se debe tener presente que del valor total del sueldo se le debe descontar un 20% en concepto de jubilación y obra social. Dados el NOMBRE Y APELLIDO, la CANTIDAD TOTAL DE HORAS trabajadas en el mes, calcular el sueldo neto del empleado.



DESAFÍO:

Se ingresan cien números. Determinar e informar cuál de ellos es el mayor.

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.