lunes, 27 de agosto de 2007

Practica 7: Ejercicios de estructuras selectivas compuestas y multiples.

Materia: Lógica Computacional.
Profesor: Lic. Salomón Aquino.

OBJETIVOS
Al finalizar la práctica, los estudiantes serán capaces de:
• Resolver Problemas con estructuras de selección Compuesta y Múltiple.

II. Introducción Teórica.
Hasta este punto hemos trabajado con sentencias IF que implementan decisiones que implican una o dos alternativas. En esta práctica se mostrará como se puede utilizar la sentencia IF para implementar decisiones que impliquen varias alternativas.
Estructuras Selectivas Compuestas.
Se identifican porque para solucionarlos se necesita establecer más de una condición. Por lo general dentro de este grupo están incluidos los ifs anidados, en los cuales dentro de un if se encuentra otro y dentro de este hay otro, y así sucesivamente.

Una sentencia IF es anidada cuando la sentencia de la rama verdadera o la rama falsa, es a su vez una sentencia IF. A este tipo de estructura se le conoce como selectiva compuesta o multi-alternativa.
Ejemplo. Si resolvemos el problema de la práctica anterior para saber si un número es positivo, negativo o nulo usando selección compuesta, el módulo sería el siguiente:



Es recomendable utilizar sangrías para diferenciar un if de otro y se deben utilizar con cuidado para evitar posibles ambigüedades.

Ejemplo 1:
Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto se consideran horas extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8; si las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al triple.

La solucion es la siguiente:

#include
#include
int main ( )
{
float ht,ph,he,het,phe,pt;
printf("\nIntroduzca la horas trabajadas: ");
scanf("%f",&ht);
printf("\n");
printf("\nIntroduzca el precio por hora: ");
scanf("%f",&ph);
printf("\n");
if (ht > 40)
{
he = ht - 40;
if (he > 8)
{
het = he -8;
phe = ph * 2 * 8 + ph * 3 * het;
}
else phe = ph * 2 * he;
pt = ph * 40 + phe;
}
else
pt = ph * ht;
printf("El salario a pagar es %f \n", pt);
system("pause");
return 0;
}


Ejemplo 2:
Se desea agregar una letra para representar la calificación de los alumnos, las calificaciones son notas entre 1 y 10; use los siguientes parámetros: A para calificaciones mayores o iguales a 9, B para calificaciones mayores o iguales a 8, C para calificaciones mayores o iguales a 7, D para calificaciones mayores o iguales a 6, F para todas las demás calificaciones.
#include
<#include stdlib.h>
main ( )
{
int nota;
printf ("Escriba la nota obtenida (valores enteros entre 1-10): ");
scanf ("%d",¬a);
if (nota>=9)
printf ("\nEl concepto en base a su nota es A");
else
if (nota>=8)
printf ("\nEl concepto en base a su nota es B");
else
if (nota>=7)
printf ("\nEl concepto en base a su nota es C");
else
if (nota>=6)
printf ("\nEl concepto en base a su nota es D");
else
printf ("\nEl concepto en base a su nota es F");

printf ("\nEl programa ha terminado\n\n");
system(“pause”);
return 0;
}

Ejemplo 3. Calcular el mayor de tres números enteros.
#include
#include
int main ( )
{
int a, b, c, mayor;
printf ("\nIntroduzca tres enteros: ");
scanf ("%d %d %d",&a, &b, &c);
if (a > b)
if (a > c) mayor = a;
else mayor =c;
else
if (b > c ) mayor = b;
else mayor = c;
printf (“El mayor es %d \n”, mayor);
system(“pause”);
return 0;
}
Estructuras Selectivas Múltiples:
Este tipo de estructuras permiten hacer la selección entre dos o más alternativas. Siempre se realiza una evaluación lógica que es la llave de entrada al ciclo selectivo.
La sentencia que se utiliza para este fin es Switch, que ejecuta una de las alternativas (la que cumpla la condición) siempre y cuando el resultado de la evaluación lógica sea verdadero.
La sentencia switch es especialmente útil cuando la selección se base en el valor de una variable simple o de una expresión simple denominada expresión de control o selector.
El valor de esta expresión puede ser de tipo int o char, pero no de tipo float ni double o string.
Cada posible respuesta es un valor único, constante y diferente de los otros. Además debe ser del mismo tipo que la evaluación lógica.
Si se quiere considerar un proceso para un resultado falso utilizamos la instrucción Default, que es el valor por omisión. Dado que cada uno de los casos puede contener varias expresiones debemos indicarle al compilador que el caso ha terminado y que debe salir del ciclo de selección, para este fin utilizamos la instrucción break. Esta hace que siga la ejecución en la siguiente sentencia al switch.
El ciclo Switch debe estar agrupado entre llaves, la llave para abrir ( { ) se escribe después de la evaluación lógica y la llave para cerrar ( } ), se escribe después del último caso.
switch ( [Evaluación Lógica] )
{
case ( [ posible respuesta 1 ] ) :
Expresión(es);
break;
case ( [ posible respuesta n ] ) :
Expresión(es);
break;
default:
Expresión(es);
break;
}
Si el valor selector no está listado en ninguna etiqueta case, no se ejecutará ninguna de las opciones a menos que se especifique una acción por defecto (omisión). Aunque esta etiqueta default es opcional, se recomienda su uso a menos que se esté absolutamente seguro de que todos los valores del selector estén incluidos en las posibles respuestas del case.

Ejemplo 4:
Escriba un programa tal que al escribir el número de mes muestre el nombre completo del mes (hecho para el primer semestre).

#include
#include
main ( )
{
int mes;
printf ("Escriba el número del mes (primer semestre): ");
scanf ("%d",&mes);
switch (mes) {
case (1):
printf ("Enero");
break;
case (2):
printf ("Febrero");
break;
case (3):
printf ("Marzo");
break;
case (4):
printf ("Abril");
break;
case (5):
printf ("Mayo");
break;
case (6):
printf ("Junio");
break;
default:
printf ("Escribio un numero mayor de seis, recuerde solo primer semestre");
break;
}
printf ("\n\n\nFin del Programa \n");
system(“pause”); return 0;
}
Caso particular de Case
Está permitido tener varias expresiones case en una alternativa dada dentro de la sentencia switch.
Ejemplo 4:
#include
#include
main()
{
int c;
printf("Digite el valor de c:\n");
scanf("%d",&c);
switch ( c ) {
case (0) : case (1) : case (2): case (3) : case (4) :
printf("esta entre 1 y 4\n");
break;
case (5) : case (6) : case (7): case (8) : case (9) :
printf("esta entre 5 y 9\n");
break;
default:
printf("no esta ahi \n");
}
system(“pause”);
return 0;
}
La sentencia switch es útil cuando se quieren elaborar menús para que el usuario seleccione opciones. Un menú de un restaurante presenta una lista de alternativas para que un cliente elija entre sus diferentes opciones. Un menú en un programa de computadora hace la misma función: presentar una lista de alternativas en la pantalla para que el usuario elija una de ellas.
Expresiones condicionales: EL OPERADOR ? :
Las sentencias de selección (if y switch) consideradas hasta ahora, son similares a las sentencias previstas en otros lenguajes, tales como Pascal y Fortran 90. C tiene un tercer mecanismo de selección, una expresión que produce uno de dos valores, resultado de una expresión lógica o booleana (también denominada condición). Este mecanismo se denomina expresión condicional. Una expresión condicional tiene el formato C ? A : B y es realmente una operación ternaria (tres operandos) en el que C, A y B son los tres operandos y ? : es el operador.
Sintaxis: condición ? expresión1 : expresión2
Ejemplo: Recuerdas los ejercicios que hicimos en la práctica 2?
#include stdio.h>
#include stdlib.h>
#include conio.h>
main()
{
int a,b,c;
a=3;
b=8;
c=10;
(a>3 && (b==4 || a + b<=c)) ? printf("verdadero\n") : printf("falso\n");
system(“pause”);
return 0;
}

COMPARACIÓN DE LAS SENTENCIAS IF-ELSE IF Y SWITCH.
Se necesita saber si un determinado carácter car es una vocal.
Solución if-else if
#include
#include
main()
{
char car;
printf("Digite el caracter:\n");
car=getchar();
if ((car=='a')||(car=='A'))
printf("%c es una vocal\n", car);
else if ((car=='e')||(car=='E'))
printf("%c es una vocal\n", car);
else if ((car=='i')||(car=='I'))
printf("%c es una vocal\n", car);
else if ((car=='o')||(car=='O'))
printf("%c es una vocal\n", car);
else if ((car=='u')||(car=='U'))
printf("%c es una vocal\n", car);
else
printf("%c no es una vocal\n", car);
system(“pause”);
return 0;
}

Solución con SWITCH.
#include
#include
main()
{
char car;
printf("Digite el caracter:\n");
car=getchar();
switch (car) {
case ('a'): case ('A'):
case ('e'): case ('E'):
case ('i'): case ('I'):
case ('o'): case ('O'):
case ('u'): case ('U'):
printf("%c es una vocal\n", car);
break;
default:
printf("%c no es una vocal\n", car);
}
system(“pause”);
return 0;
}


III. Ejercicios
1. La empresa Milagrito S.A. tiene la siguiente tabla de parámetros para pagar las comisiones de sus ejecutivos de ventas:



Escriba un programa que al introducir la cantidad vendida por el ejecutivo de ventas, calcule de cuánto será su comisión.
2. En base al valor de dos números enteros, determine si estos son:
A. Iguales.
B. No iguales.
C. El primero es mayor que el segundo.
D. El segundo es mayor que el primero.
E. El primero es mayor o igual que el segundo.
F. El segundo es mayor o igual que el primero.
3. Un restaurante, desea dar a conocer a sus clientes el plato que se ha preparado para cada uno de los tiempos de comida desayuno, almuerzo y cena. El restaurante prepara un plato único para cada uno de los tiempos. Cuando el cliente seleccione entre los tiempos de comida (desayuno, almuerzo o cena) se debe desplegar el detalle de este.
Ejemplo:
Seleccione su tiempo de Comida: desayuno
Detalle
Plátanos, Frijoles, Queso, Crema, Pan y Café.
4: Elabore un programa que pida dos números y que permita mostrar un menú con las cuatro operaciones básicas, donde el usuario pueda seleccionar la operación que desea realizar (basta con que seleccione el número).

domingo, 26 de agosto de 2007

Clase 7: Decisiones compuestas y múltiples.

Materia: Lógica Computacional
Profesor: Lic. Salomón Aquino.
Objetivos de la clase:
Al final de la clase los alumnos y alumnas serán capaces de:
1. Comprender las estructuras selectivas múltiples y compuestas y resolver problemas usando dichas estructuras.
2. Elaborar algoritmos, flujogramas y Diagramas N-S para dichas estructuras.



ESTRUCTURAS SELECTIVAS COMPUESTAS:
• En la solución de problemas encontramos numerosos casos en los que luego de tomar una decisión y marcar el camino correspondiente a seguir, es necesario tomar otra decisión. Dicho proceso puede repetirse numerosas veces.
• En aquellos problemas en donde un bloque condicional incluye otro bloque condicional se dice que un bloque está anidado dentro del otro.
• Diagrama y pseudocódigo:



• Ejemplo 1:
• Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto se consideran horas extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8; si las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al triple.

• ht = horas trabajadas het = horas extras que exceden de 8
• ph = pago por hora phe = pago por horas extras
• he = horas extras pt = pago que recibe el trabajador
Solución del ejemplo 1:

Algoritmo en pseudocodigo:
Inicio
Leer (ht, ph)
Si ht >40 entonces
He = ht – 40
Si he > 8 entonces
Het = he – 8
Phe = ph * 2 * 8 + ph * 3 * het
Sino
Phe = ph * 2 * he
Fin_si
Pt = ph * 40 + phe
Sino
Pt = ph * ht
Fin_si
Escribir (pt)
Fin




ESTRUCTURAS SELECTIVAS MÚLTIPLES.
• Con frecuencia es necesario que existan más de dos elecciones posibles. Este problema se podría resolver por estructuras selectivas simples o dobles, anidadas o en cascada, pero si el número de alternativas es grande puede plantear serios problemas de escritura y de legibilidad.
• Usando la estructura de decisión múltiple se evaluará una expresión que podrá tomar n valores distintos, 1, 2 , 3, ....,n y según que elija uno de estos valores en la condición, se realizará una de las n acciones o lo que es igual, el flujo del algoritmo seguirá sólo un determinado camino entre los n posibles.
• Esta estructura se representa por un selector el cual si toma el valor 1 ejecutará la acción 1, si toma el valor 2 ejecutará la acción 2, si toma el valor N realizará la acción N.
Ejemplo de selección múltiple:




Solución en diagrama N-S y pseudocodigo:



Fin de la clase.
Gracias por asistir.

lunes, 13 de agosto de 2007

Practica 6: Ejercicios de estructuras selectivas simples y dobles.

Materia: Lógica Computacional.
Profesor: Lic. Salomón Aquino.
OBJETIVOS
Al finalizar la práctica, los estudiantes serán capaces de:
• Identificar las estructuras de selección simple (If) y doble (If-else) en la solución de problemas
• Escribir programas en lenguaje C con estructuras selectivas simples y dobles.

INTRODUCCIÓN TEÓRICA.
Estructuras Selectivas.
La solución de problemas selectivos involucra una serie de acciones en las que la ejecución de alguna dependerá de que se cumplan una o varias condiciones.
Estas estructuras se identifican porque en la fase de solución del problema existe algún punto en el cual es necesario establecer una pregunta, para decidir si ciertas acciones deben realizarse o no.
La Sentencia IF
En C la estructura de control de selección principal es una sentencia IF. La sentencia IF tiene dos formatos o alternativas posibles. El formato más sencillo tiene la sintaxis siguiente:


Supongamos por ejemplo, que tenemos el caso de que los alumnos cuya calificación sea mayor o igual que 6 tienen nota suficiente para aprobar el curso. El enunciado seria el siguiente en pseudocódigo:
Si nota del estudiante mayor o igual que 6
Escriba “APROBADO”

Lo que la estructura de selección hace es evaluar la expresión “nota del estudiante es mayor o igual que 6”. Si el resultado de esta evaluación es Verdadero, entonces se imprime “APROBADO” pero si el resultado de la evaluación es Falso; se ignora la impresión y ejecuta la línea que sigue después de la decisión.
Para una mayor comprensión se presenta el flujograma de la decisión anterior:




En este caso, nos estamos refiriendo a una estructura de selección simple ya que no se ejecuta ninguna acción en el caso que la condición sea falsa.
Si en el ejemplo cambiáramos la condición y dijéramos que si la nota no es mayor o igual a 6 entonces escribir “alumno reprobado”, en este caso nos estamos refiriendo a una estructura de selección doble, ya que existen las dos opciones: que la condición sea verdadera, o que sea falsa.

Sintaxis en lenguaje C
Para la estructura selectiva simple:
If ( [condición] )
[ïnstrucción];
Cuando las instrucciones que se van a imprimir al cumplirse la condición son varias, utilizamos llaves para indicar que corresponden a esa estructura.
If ( [condición] )
{
[instruccion1];
[instruccion2];
}
Para la estructura selectiva doble, agregamos la palabra else para indicar el grupo de instrucciones cuando la condición es falsa.
If ( [condición] )
{
[instruccion1];
[instruccion2];
/* acción que se realiza si la expresión lógica es verdadera*/
}
else
{
[instruccion1];
[instruccion2];
/* acción que se ejecuta si la expresión lógica es falsa */
}




EJERCICIOS RESUELTOS
1) Codificando el ejemplo anterior, tenemos el siguiente programa:
#include
#include
main()
{
float nota;
printf(“introduzca la nota:\n”);
scanf(“%f”, ¬a);
if (nota >=6.0)
printf(“aprobado\n”);
system(“pause”);
return 0;
}
2) Ejemplo Selectivo doble
Tomaremos como base el ejemplo de la nota, pero felicitando a los que aprueben y con un mensaje de aviso a los que reprueben.
En este ejemplo podrás notar que se agregaron llaves ya que son dos mensajes los que se tuvieron que desplegar.



Ejemplo 3. Otra versión del ejemplo anterior:
En base al parámetro de 6.0 como nota para poder aprobar el curso, escriba APROBADO si el alumno cumple con la nota mínima o si ésta es mayor, pero deberá escribir REPROBADO si la nota es menor.

#include
#include
main ( )
{
float nota;
char nombre[30];
printf("Escriba su nombre: ");
scanf("%s",nombre);
printf("\nEscriba su nota: ");
scanf("%f",¬a);
if (nota >= 6)
{
printf ("%s, nos complace informarle que usted ",nombre);
printf ("\n ha APROBADO el curso con una nota de %.2f",nota);
printf ("\ny puede inscribirse en el modulo siguiente.");
}
else
{
printf ("%s, lamentamos informarle",nombre);
printf ("\nque usted ha REPROBADO el curso con una nota de %.2f",nota);
}
printf ("\n\n\n fin del programa \n\n");
system(“pause”);
return 0;
}
Observa las nuevas instrucciones que se han agregado.
Ejemplo 4.
Dados dos números enteros, se desea determinar si el primero es divisible por el segundo, si es cierto desplegar “es divisible” y si no lo es, desplegar “no es divisible”.
#include
#include
int main()
{
int n,d;
printf(“Introduzca dos enteros: “);
scanf(“%d %d”, &n, &d);
if (n%d ==0)
printf(“%d es divisible por %d\n”,n,d);
else
printf(“%d no es divisible por %d\n”,n,d);
system(“pause”);
return 0;
}



Si al ejecutar el programa introducimos 36 y 5, 36 no es divisible por 5 ya que se obtiene un residuo de 1 (n%d ==0 es falsa, entonces se ejecuta la cláusula else).



EJERCICIOS:
Elabora programa en Dev-C++ para los ejercicios siguientes:
1) Dado un número introducido por el usuario, indicar si éste es positivo, negativo o nulo. Resuélvelo usando estructura selectiva simple.
2) Calcular el mayor de dos números leídos del teclado y visualizarlo en pantalla. Utiliza la forma if – else.
3) Escriba un programa que pida un número y a continuación escriba si es par o impar usando la instrucción mod.
4) Calcular el promedio de calificaciones de un alumno. Las dos primeras notas valen 30% cada una y la tercera 40%. Si el promedio es mayor o igual a 7 imprimirá aprobado, de lo contrario dirá reprobado. Si el promedio es igual a 10, dirá alumno excelente. Se desea imprimir el nombre del alumno, código de la materia y el promedio obtenido.

domingo, 12 de agosto de 2007

Clase 6: Decisiones Simples y Dobles.

Materia: Lógica Computacional
Profesor: Lic. Salomón Aquino.



Objetivos de la clase:
• Al final de la clase los alumnos y alumnas serán capaces de:
– Comprender las estructuras selectivas y resolver problemas usando dichas estructuras.
– Elaborar algoritmos, flujogramas y Diagramas N-S para estructuras selectivas simples y dobles.

Estructuras Selectivas:
• Estas estructuras se identifican porque en la fase de solución del problema existe algún punto en el cual es necesario establecer una pregunta, para decidir si ciertas acciones deben realizarse o no.
• Las condiciones se especifican usando expresiones lógicas. La representación de una estructura selectiva se hace con palabras en pseudocódigo (if – then – else o en español si – entonces - sino) y en flujograma con una figura geométrica en forma de rombo.
• Las estructuras selectivas o alternativas se clasifican en:
– Simples
– Dobles
– Compuestas
– Múltiples
Estructuras selectivas simples:
• Se identifican porque están compuestos únicamente de una condición.
• La estructura si – entonces evalúa la condición y en tal caso: Si la condición es verdadera, entonces ejecuta la acción Si (o acciones si son varias). Si la condición es falsa, entonces no se hace nada.
Representación de decisión simple:


Ejemplo 1. Construir un algoritmo tal, que dado como dato la calificación de un alumno en un examen, escriba “Aprobado” en caso que esa calificación fuese mayor que 6.
• Entradas: calificación
• Datos adicionales: un alumno aprueba si la calificación es mayor que 6
• Variables:
• Cal = calificación
• Algoritmo:
Inicio
Leer (cal)
Si cal > 6 entonces
Escribir (“aprobado”)
Fin_si
Fin

Solución Ejemplo 1:


Ejemplo 2 :Dado como dato el sueldo de un trabajador, aplíquele un aumento del 15% si su sueldo es inferior a $1000. Imprima en este caso, el nuevo sueldo del trabajador.
• Salidas: nuevo sueldo. Entradas: sueldo del trabajador
• Datos adicionales:
• Si sueldo es inferior a $1000 entonces aplicar aumento
• aumento = sueldo * 0.15 y Nuevo sueldo = sueldo + aumento
• Variables:
• Sue = sueldo
• Aum = aumento
• Nsue = nuevo sueldo
• Algoritmo:
Inicio
Leer (Sue)
Si Sue < 1000 entonces
Aum <-- Sue * 0.15
Nsue <-- Sue + Aum
Escribir (Nsue)
Fin_si
Fin
Estructuras de Selección Doble:
• Son estructuras lógicas que permiten controlar la ejecución de varias acciones y se utilizan cuando se tienen dos opciones de acción, por la naturaleza de estas se debe ejecutar una o la otra, pero no ambas a la vez, es decir, son mutuamente excluyentes.



Ejemplo 3: Dado como dato la calificación de un alumno en un examen, escriba “aprobado” si su calificación es mayor que 8 y “Reprobado” en caso contrario.



Ejemplo 4: Dado como dato el sueldo de un trabajador, aplicar un aumento del 15% si su sueldo es inferior a $1000 y 12% en caso contrario, luego imprimir el nuevo sueldo del trabajador.


Fin de la clase.
Gracias por asistir.