1 / 54

Estructuras de control condicional

Estructuras de control condicional. Programación básica. Operadores relacionales. Los operadores relacionales permiten construir expresiones booleanas es decir, expresiones cuyo valor es 1 o 0. Los operadores relacionales permiten comparar valores o expresiones aritméticas.

maxime
Télécharger la présentation

Estructuras de control condicional

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Estructuras de control condicional Programación básica

  2. Operadores relacionales Los operadores relacionales permiten construir expresiones booleanas es decir, expresiones cuyo valor es 1 o 0. Los operadores relacionales permiten comparar valores o expresiones aritméticas. En C el valor 1 se interpreta como verdadero y el 0 como falso.

  3. Ejemplos 1 > 2 = 0 falso 3 < 5 = 1 verdadero (7 – 4) == 3 = 1 verdadero 17 >= (5 + 12) = 1 verdadero i = 3; j = 7; i * j != 21 = 0 falso float a=0.1; (3*a – 0.3) == 0 = 0 falso (OJO con los reales) 3 > 1 > 0 = 1 verdadero Asignar a una variable la mayor de otras dos: a = 17; b = 15; c = a*(a>=b) + b*(b>=a); c = 17 a>=b = 1 y b>=a = 0

  4. Tarea Encuentre el valor de las siguientes expresiones relacionales 2 != 7 3 > 2 -1 <= -2 (5 – 7) > (3 – 4) (3*2 + 5*4) == (8*5/2 + 4*4 – 10) Encuentre el valor asignado a la variable x, suponga a = 3, b = 4, c = 12 x = (2*a > c – b)*c + (c == 2*b + 2*a – 2)*a; x = (a <= b)*(a – b) + (c > 2*a + 5)*(c – 2*a);

  5. Uso de expresiones para tomar decisiones Se pueden utilizar expresiones relacionales para seleccionar entre dos o más expresiones a evaluar. Por ejemplo: (3*a + b)*(a<0) + (5*a – b)*(a>=0) Será igual a 3*a+ b si a es menor que cero, e igual a 5*a – b si a es mayor o igual a cero. Por ejemplo se a = –3 y b= 4, la expresión se evaluara como: (3*(–3)+4)*(–3<0)+(5*(–3)–4)*(–3>=0)=(–9+4)*(1)+(–15–4)*(0)= –5 Si a = 2 y b = 4, el valor será (3*(2)+4)*(2<0)+(5*(2)–4)*(2>=0)=(6+4)*(0)+(10–4)*(1)=6

  6. Ejemplo de conversión con expresiones relacionales El siguiente programa convierte una temperatura leída desde el teclado de la escala Celsius a la Farenheit y viceversa. Se le solicita al usuario el tipo de conversión que desea realizar: main(){float tempOriginal,tempConvertida;int opcion; cout << "Teclee temperatura: "; cin >> tempOriginal; cout << "Tipo de conversión (1 - C a F, 2 - F a C): ";cin >> opcion; //solicita tipo de conversióntempConvertida = (opcion==1)*(9*tempOriginal/5+32)+ (opcion==2)*(5.0/9*(tempOriginal-32)); cout << "Valor convertido: " << tempConvertida << endl;}

  7. Actividad Modifique el programa de conversión de temperaturas para incluir conversiones de centígrados a Kelvin y Kelvin a centígrados.

  8. Sentencia if La sentencia if permite decidir ejecutar o no una instrucción o un bloque de instrucciones. Sintaxis if (condición) Instrucción o bloque; Un bloque es una secuencia de instrucciones englobadas entre llaves (“{}”). La condición esta formada por una expresión booleana. verdadero condición sentencias falso

  9. Ejemplo de if simple Prueba si un número leído desde el teclado es par. #include<iostream.h>int main(){int numero; cout << "teclee un número: "; cin >> numero;if(numero % 2 == 0) cout << "número par";return 0; }

  10. Ejemplo 2 de if simple Si el número a es divisible por el número b, se despliega el número de veces que a es mayor que b. #include<iostream.h>int main(){int a,b,n; cout << "teclee un número: "; cin >> a; cout << "teclee un número: "; cin >> b;if(a % b == 0){ n = a / b; cout << a << " es " << n << " veces " << b; }return 0; }

  11. Sentencia if - else La sentencia if – else permite decidir entre ejecutar una instrucción (o un bloque de instrucciones) y otra instrucción (o un bloque de instrucciones) Sintaxis if (condición) Instrucción o bloque; else Instrucción o bloque; falso verdadero condición sentencias sentencias

  12. Ejemplo de if - else simple Prueba si un número leído desde el teclado es par. #include<iostream.h>int main(){int numero; cout << "teclee un número: "; cin >> numero;if(numero % 2 == 0) cout << "número par"; else cout << "número impar";return 0; }

  13. Tarea Escriba un programa que lea tres números reales y decida si forman un triángulo. Suponga que los números se leen de mayor a menor. Escriba un programa que lea tres números reales representando los lados de un triángulo y decida si el triángulo es rectángulo o no. Suponga que los números se leen de mayor a menor. Entregar impreso.

  14. Intersección de dos rectas Programa para determinar si dos rectas se interceptan Suponga que las rectas se representan por la ecuación de la forma y = m x + b Donde m es la pendiente y b es la ordenada al origen. La única forma en que las dos rectas no se interceptan en un punto es cuando son paralelas, es decir, cuando las dos tienen la misma pendiente. Podemos expresar el algoritmo de la siguiente forma si pendiente1 diferente de pendiente2 calcular la intersección imprimir resultado sino informar que no se interceptan

  15. Programa #include<iostream.h>int main(){float m1,m2,b1,b2,x,y; cout << "teclee la pendiente y ordenada al origen 1: "; cin >> m1 >> b1; cout << "teclee la pendiente y ordenada al origen 2: "; cin >> m2 >> b2;if(m1 != m2){ x = (b2 - b1)/(m1 - m2); y = m1*x+b1; cout << "Las rectas se interceptan en: " << x << ", " << y << endl; }elsecout << "Las rectas no se interceptan...";return 0; }

  16. Sistema de ecuaciones 2x2 Se desea resolver un sistema de ecuaciones de 2x2 de la forma a x + b y = c d x + e y = f El sistema puede resolverse con las fórmulas x = (c e – b f) / (a e – b d) y = (a g – c e) / (a e – b d) El sistema tiene solución si el denominador de estas fracciones es diferente de cero. El algoritmo es: si (a f – b e ) != 0 calcular solución mostrar resultado sino informar que no hay solución

  17. Programa sis2x2.cpp #include<iostream.h>int main(){float a,b,c,d,e,f,x,y; cout << "teclee los coeficientes a, b, c, d, e, f: "; cin >> a >> b >> c >> d >> e >> f;if( (a*f - b*e) != 0){ x = (c*e - b*f)/(a*e - b*d); y = (a*f - c*d)/(a*e - b*d); cout << " x = " << x << "\ny = " << y << endl; }elsecout << "El sistema no tiene solución\n";return 0; }

  18. Tarea Un punto está sobre una recta si al avaluar la ecuación y – mx – b se obtiene un valor positivo y está bajo la recta si se obtiene un valor negarivo. Escriba un programa que lea los valores de la pendiente m y la ordenada al origen b, y las coordenadas (x, y) de un punto e imprima si el punto esta sobre o bajo la recta. (x,y) y = mx + b y – mx + b > 0 y – mx + b < 0

  19. Operadores lógicos Existen 4 operadores lógicos en C: and = &&, or = ||, not = !, xor = ^. Los operadores lógicos tienen una prioridad más baja que los operadores relacionales. Prioridad de evaluación ! && ||

  20. ejemplos de operadores lógicos x > 5 || x == 3 verdadero para x = 3, 6, 7, ... ! (x == 7) && x % 2 != 0 verdadero para x = 1, 3, 5, 9, 11, ... x <= -1 || x > 5 || x ==2 verdadero para x = …, -2, -1, 2, 6, 7, 8, ... En el siguiente fragmento se despliegan solo los múltiplos de 7 o cuadrados perfectos if(num % 7 == 0 || sqrt(num)-floor(sqrt(num))==0)

  21. Discusión Escriba sentencias que sean verdaderas para: x = 1, 2, 4, 8 x = 7, 14, 21, …, 49 x = 1, 2, 3, 6, 7, 8, 9 x = …, - 5, -3, -1, 0, 2, 4, 6, …

  22. Anidamiento Una sentencia if puede tener en su parte verdadera o falsa otra sentencia if. O sea if(condición1) if(condición2) if(condición3) sentencias; else if(condición2) if(condición3) ...

  23. Ejemplo de anidamiento Se desea un programa para imprimir un letrero dependiendo de la siguiente tabla:

  24. Diagrama de flujo verdadero falso cal < 6 verdadero falso “Reprobado” cal < 7 verdadero falso cal < 8 “Suficiente” falso verdadero cal < 9 “Bien” “Muy bien” “Excelente”

  25. #include<iostream.h>int main(){float cal; cout << "teclee la calificación: "; cin >> cal;if(cal < 6)cout << “Reprobado\n"; if(cal >= 6 && cal < 7)cout << “Suficiente\n"; if(cal >=7 $$ cal < 8)cout << “Bien\n"; if(cal >=8 && cal < 9)cout << “Muy bien\n"; else cout << “Excelente\n"; return 0; } #include<iostream.h>int main(){float cal; cout << "teclee la calificación: "; cin >> cal;if(cal < 6)cout << “Reprobado\n"; elseif(cal < 7)cout << “Suficiente\n"; elseif(cal < 8)cout << “Bien\n"; elseif(cal < 9)cout << “Muy bien\n"; else cout << “Excelente\n"; return 0; }

  26. Comparación de 3 números Se desea comparar 3 números leídos desde el teclado, imprimiendo el mayor de ellos. Se puede resolver comparando el primero con el segundo, luego si el primero es mayor, se compara el primero con el tercero. Si el primero no es mayor que el segundo, entonces se compara el segundo con el tercero. verdadero falso a>b verdadero falso verdadero b>c falso a>c “b mayor” “c mayor” “c mayor” “a mayor”

  27. Solución con condiciones compuestas Utilizando condiciones compuestas, primero comparamos el primero con los dos restantes, si es mayor que los otros dos, imprimimos el primero, sino, comparamos el segundo con los otros dos, etc. Note que debe usar >= para que se imprime forzosamente un resultado. falso a>=b && a>=c verdadero verdadero “a mayor” falso b>=a && b>=c “b mayor” c>=a && c>=b verdadero “c mayor”

  28. Anidamiento Condiciones compuestas #include<iostream.h>int main(){float a, b, c; cout << "teclee 3 números: "; cin >> a >> b >> c;if(a > b) if(a > c) cout << a << endl; elsecout << c << endl; else if(b > c) cout << b << endl; elsecout << c << endl; return 0; } #include<iostream.h>int main(){float a, b, c; cout << "teclee 3 números: "; cin >> a >> b >> c;if(a >= b && a >= c) cout << a << endl; else if(b >= a && b >= c) cout << b << endl; else if(c >= a && c >= b) cout << c << endl; return 0; }

  29. Tarea Escriba una sentencia que sea verdadera para x = ...,-2,-1,0,3,6,9,12,15,18,... Rescriba las siguientes sentencias de if anidados sin usar ningún anidamiento: if ( a < c ) if ( a < b )if ( b < c ) if ( a >= b ) x = y; x = z;else else x = z; x = y; else else x = z; x = z;

  30. Tarea casera 1. Escriba un programa en C que lea tres números y los imprima en orden. Ayuda: existen 6 casos: a>b>c, a>c>b, b>a>c, b>c>a, c>a>b y c>b>a. Haga una versión con condiciones compuestas y otra con sentencias if anidadas. Parta del diseño del algoritmo, dibuje el diagrama de flujo y escriba el programa en C. Recuerde que el formateo del código es importante. 2. Escriba un programa que para resolver una ecuación cuadrática. Considere todos los casos posibles: 2 soluciones diferentes, una solución doble y raíces complejas conjugadas.

  31. Sentencia switch La sentencia switch permite elegir entre varias alternativas. Sintaxis switch (<expresión>){ case <constante>:[case <constante>:]<sentencias>;break; ... [default:<sentencias>;break;] } Acción del caso a break; caso a Acción del caso b break; caso b Acción del caso z break; caso z Acción por omisión

  32. Proceso Dia_de_la_semana Escribir "Teclee número del día: "; Leer dia; Segun dia Hacer 1: Escribir "domingo"; 2: Escribir "lunes"; 3: Escribir "martes"; 4: Escribir "miércoles"; 5: Escribir "jueves"; 6: Escribir "viernes"; 7: Escribir "sabado"; De Otro Modo: Escribir "día no válido"; FinSegun FinProceso

  33. ejemplo de switch Programa para leer un número de día (1 – lunés,… 7 – domingo) SIEMPRE PONGA break AL FINAL DE CADA OPCIÓN EN LA SENTENCIA SWITCH. #include <iostream.h> int main(){ int dia; cout << "teclee el número del día: "; cin >> dia; switch(dia){ case 1:cout << "Lunes" << endl;break; case 2:cout << "Martes" << endl;break; case 3:cout << "Miércoles" << endl;break; case 4:cout << "Jueves" << endl;break; case 5:cout << "Viernes" << endl;break; case 6:cout << "Sabado" << endl;break; case 7:cout << "Domingo" << endl;break; default: cout << "día no válido" << endl; } system("PAUSE"); }

  34. Ejemplo de menú /* Ejemplo-switch-1 */ #include <iostream.h> main(){ int a; cout << "\t\tMenu"; cout <<"\n-----------------------------------"; cout <<"\n1 - Microsoft Word"; cout <<"\n2 - Yahoo messenger"; cout <<"\n3 - AutoCAD"; cout <<"\n4 - Java Games"; cout <<"\n-----------------------------------"; cout <<"\nIngrese numero de su preferencia: "; cin >> a; // leer entrada Se elige entre varias opciones de un menú 1 - Microsoft Word"; 2 - Yahoo messenger"; 3 - AutoCAD"; 4 - Java Games"; Cada opción despliega un mensaje diferente switch (a){ case 1: // si entrada es 1 cout <<"\nPersonal Computer Software\n";break; case 2: // si entrada es 2 cout <<"\nWeb based Software\n";break; case 3: // si entrada es 3 cout <<"\nScientific Software\n";break; case 4: // si entrada es 4 cout <<"\nEmbedded Software\n";break; default: cout <<"\nEntrada incorrecta\n"; } system("PAUSE"); }

  35. Ejemplo de empleados Calcular el sueldo mensual de un empleado que trabaja por horas, el pago de cada hora trabajada depende de su categoría: categoria     pago x hora A               26.90 B               24.30 C               21.50 Además si el empleado trabaja mas de 150 horas mensuales tiene una bonificación del 5 % de sueldo.

  36. Algoritmo Se ingresara el nombre del empleado, seguido de su categoría y al final el número de horas trabajadas. Algoritmo 1. Leer datos 2. Determinar sueldo con base en su categoría 3. Determinar monto de bonificación 4. Imprimir nombre, categoría y sueldo total Variables (entrada) nombre – cadena de caracteres categoria – carácter horas - entero Variables (salida) pagoHora – real (float) bono – real (float) sueldo – real (float)

  37. Proceso PagoPorHora 1 Escribir "Nombre del trabajador: "; 2 Leer nombre; 3 Escribir "Categoría: "; 4 Leer categoria; 5 Escribir "Horas trabajadas: "; 6 Leer horas; 7 Segun categoria Hacer 8 1: 9 pagoHora <- 26.90; 10 2: 11 pagoHora <- 24.30; 12 3: 13 pagoHora <- 21.5; 14 FinSegun 15 sueldo <- horas*pagoHora; 16 Si horas>150 Entonces 17 bonificacion <- sueldo*1.05; 18 Sino 19 bonificacion <- 0; 20 FinSi 21 sueldo <- sueldo+bonificacion; 22 Escribir "Sueldo total = ",sueldo; 23 FinProceso

  38. El tipo char y cadena (char[]) La categoría se almacenará en una variable de tipo char (carácter) El nombre del empleado se almacenará en una cadena de caracteres. En C hay que especificar la longitud máxima de la cadena. La declaración sigue la siguiente sintaxis: char variable[longitud máxima]; Ejemplo: char nombre[30]; La lectura solo lee la cadena hasta el primer espacio o hasta la longitud máxima, si teclea “juan perez”, solo se almacenará“juan”.

  39. Declaración y lectura char nombre[7]; //nombre del empleado char categoria; //categoría A, B, C int horas; //horas trabajadas float pagoHora, sueldo, bonificacion; cout << "nombre del empleado: "; cin >> nombre; cout << "categoría: "; cin >> categoria; cout << "horas trabajadas: "; cin >> horas;

  40. Cálculo del sueldo Se determinará mediante una sentencia switch el pago por hora en función de la categoría. //determinación del pago por horas switch(categoria){ case 'a':case 'A':pagoHora = 26.90;break; case 'b':case 'B':pagoHora = 24.30;break; case 'c':case 'C':pagoHora = 21.50;break; } //calculo del sueldo sin bonificación sueldo = horas*pagoHora; //cálculo de bonificación if(horas>150) bonificacion = 0.05*sueldo; else bonificacion = 0.0; //sueldo total sueldo = sueldo+bonificacion;

  41. Salida de resultados La salida se presentará en forma tabular //Salida en forma tabular cout << "\nnombre\tCateg\tHoras\tPago/Hr\tBoni.\tsueldo\n" <<nombre<<"\t"<<categoria<<"\t"<<horas<<"\t"<<pagoHora<< "\t"<<bonificacion<<"\t"<<sueldo<<endl;

  42. Actividad Escriba un algoritmo y el diagrama de flujo y haga el programa en C correspondiente, que lea dos números reales y un símbolo de operación y realice la operación aritmética seleccionada (+, -, *, /, ^(potencia, función pow), %(residuo flotante, función fmod)) entre los dos números tecleados. Utilice la sentencia switch. Verifique que el segundo número no sea cero para las operaciones de % y / y envíe el mensaje adecuado en estos casos. Si el operador no es alguno de los considerados, envíe el mensaje adecuado al usuario. Ejemplo: Teclear obtener 3.5 7.8 * 27.3 7.4 16.3 / 0.45399 8.44 3.1 % 2.24 7.6 2.3 ^ 106.138

  43. Ejemplo El siguiente algoritmo despliega el número de días que tiene cada mes del año. 1 Proceso sin_titulo 2 Escribir "Ingrese numero de mes" 3 Leer mes 4 Segun mes Hacer 5 1,3,5,7,8,10,12: 6 Escribir "el mes ",mes," tiene 31 dias“ 7 4,6,9,11: 8 Escribir "el mes ",mes," tiene 30 dias" 9 2: 10 Escribir "el mes ",mes," tene 28 dias, 29 si es bisiesto" 11 De Otro Modo: 12 Escribir "no existe es emes" 13 FinSegun 14 FinProceso

  44. Programa en C #include <iostream> using namespace std; main(){ int op; cout << "Ingrese el numero de mes (1-12):"; cin >> op; switch(op){ case 1:case 3:case 5:case 7:case 8:case 10:case 12: cout <<"El mes "<<op<<" tiene 31 días\n";break; case 4:case 6:case 9:case 11: cout <<"El mes "<<op<<" tiene 31 dias\n";break; case 2: cout <<"El mes "<<op<<" tiene 28 días, 29 si es bisieto\n";break; defaul: cout<<"NO EXISTE EL MES "<<op<<endl; } system("pause"); }

  45. Actividad Escribir una versión del anterior programa utilizando sentencias if-else. Haga el diagrama de flujo y el programa en pseudo código.

  46. Sentencia ?: La sentencia if puede abreviarse mediante el operador ?:. La sintaxis es: condición ? operando1 : operando2; Esta muy relacionado a la sentencia if/else. El operador regresa el operando1 si la condición es verdadera y regresa el operando2 si es falsa. Ejemplo: cout << ( cal >= 60 ? “Aprobado” : “Reprobado”); Esta sentencia imprimirá “Aprobado” se cal es mayor o igual a 60 e imprimirá “Reprobado” si es menor que 60. Note que los paréntesis son necesarios dado que el operador ?: tiene la menor precedencia. También es válido: cal >= 60 ? cout << “Aprobado” : cout << “Reprobado”;

  47. Ejemplos Sentencia if sentencia ?: if(a>5) x = 6;else x = 7; a>5 ? x=6: x=7; if(x>8 && x<12) (x>8 && x<12)?a=2*b+c:a=3*b+c; a = 2*b+c; else a = 3*b+c; if(a>b) (a>b)?(b>c?x=5*a+c:x=6*a+b;):x=8*a+4*b; if(b>c) x = 5*a+c; else x = 6*a+b; else x = 8*a+4*b;

More Related