estructuras de control condicional computación. operadores relacionales operadorsignificado...

56
Estructuras de control condicional Computación

Upload: daniel-aguirre-cuenca

Post on 24-Jan-2016

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Estructuras de control condicional

Computación

Page 2: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Operadores relacionales

Operador Significado

== igualdad

!= Diferente

> Mayor que

< Menor que

>= Mayor o igual

<= Menor o igual

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.

Page 3: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Ejemplos1 > 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

Page 4: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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);

Page 5: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Sentencia ifLa 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.

condición

sentencias

verdadero

falso

Page 6: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Ejemplo de if simplePrueba 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; }

Page 7: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Ejemplo 2 de if simple

#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; }

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.

Page 8: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Sentencia if - elseLa 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;

condición

sentencias

verdadero

sentencias

falso

Page 9: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Ejemplo de if - else simplePrueba 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; }

Page 10: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

TareaEscriba 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.

Page 11: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Intersección de dos rectasPrograma 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

Page 12: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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; } else cout << "Las rectas no se interceptan..."; return 0; }

Page 13: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Sistema de ecuaciones 2x2Se 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

Page 14: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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; } else cout << "El sistema no tiene solución\n"; return 0; }

Page 15: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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.

y = mx + b

(x,y)

y – mx + b < 0

y – mx + b > 0

Page 16: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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

expresión1

expresión2

expresión1 && expresión2

0 0 0

0 1 0

1 0 0

1 1 1

expresión1

expresión2

expresión1 || expresión2

0 0 0

0 1 1

1 0 1

1 1 1

expresión1

expresión2

expresión1 ^ expresión2

0 0 0

0 1 1

1 0 1

1 1 0

expresión ! expresión

0 1

1 0

Prioridad de evaluación

!

&&

||

Page 17: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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)

Page 18: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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, …

Page 19: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

AnidamientoUna 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)

...

Page 20: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Ejemplo de anidamientoSe desea un programa para imprimir un letrero dependiendo de la siguiente tabla:

condición letrero

cal < 6 “Reprobado”

6 <= cal < 7 “Suficiente”

7 <= cal < 8 “Bien”

8 <= cal < 9 “Muy bien”

9 <= cal < 10 “Excelente”

Page 21: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

#include <iostream.h>int main(){ float cal; cout << "teclee la calificación: "; cin >> cal; if(cal < 6) cout << “Reprobado\n";

else if(cal < 7) cout << “Suficiente\n";

else if(cal < 8) cout << “Bien\n";

else if(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";

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; }

Page 22: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Comparación de 3 númerosSe desea comparar 3 números leídos desde el teclado, imprimiendo el mayo 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.

a>b

b>c a>c

“a mayor”“c mayor”“b mayor” “c mayor”

verdadero

verdadero falso falso verdadero

Page 23: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Solución con condiciones compuestas

a>=b && a>=c

“a mayor”

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.

b>=a && b>=c

“b mayor”

c>=a && c>=b

“c mayor”

verdaderofalso

falso verdadero

verdadero

Page 24: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

#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;

else cout << c << endl;

else

if(b > c)

cout << b << endl;

else cout << 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; }

AnidamientoCondiciones compuestas

Page 25: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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;

Page 26: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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.

Page 27: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Sentencia switchLa sentencia switch permite elegir entre varias alternativas.

Sintaxis

switch (<expresión>){

case <constante>:[case <constante>:]<sentencias>;break; ...

[default:<sentencias>;break;]

}caso a

caso b

Acción delcaso a

break;

Acción delcaso b

break;

caso zAcción del

caso zbreak;

Acción poromisión

Page 28: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

ejemplo de 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");}

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.

Modifique el programa de los días de la semana para desplegar “entre semana” si el día es de 1 a 5, “sabado” si es 6 y “domingo” si es 7. utilice una sola sentencia cout para el caso de los días entre semana.

Page 29: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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 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");}

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

Page 30: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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.

Page 31: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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 en base a su categoría

3. Determinar monto de bonificación

4. Imprimir nombre, categoría y sueldo total

Algoritmo

Variables (entrada)nombre – cadena de caracterescategoria – carácterhoras - entero

Variables (salida)pagoHora – real (float)bono – real (float)sueldo – real (float)

Page 32: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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”.

Page 33: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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;

Declaración y lectura

Page 34: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Cálculo del sueldoSe 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;

Page 35: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Salida de resultados

//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;

La salida se presentará en forma tabular

Page 36: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

TareaEscriba un programa que despliegue un menú con las opciones:

a. Capital de Bélgica?

b. Río más grande se Sudamérica?

c. Sistema operativo de Microsoft?

d. Premio novel de química mexicano?

lea un carácter de ‘a’ a ‘d’ y despliegue la respuesta de la opción elegida. Utilice un sentencia switch.

Switch(variable){

case ‘a’ : cout << “jhsjkhkjhkjfhjkhfjkbkjnfkn”<< endl; break;

………

}

Page 37: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Tarea caseraModifique el programa de los días de la semana para desplegar “entre semana” si el día es de 1 a 5, “sabado” si es 6 y “domingo” si es 7.

Escriba un programa que lea un valor de temperatura en K, ºC o ºF y la convierta a las otras dos escalas, lea el tipo de conversión mediante un menú y una sentencia switch.

Escriba un programa que lea dos números reales y un símbolo de operación y realice la operación aritmética seleccionada (+, -, *, /) entre los dos números tecleados. Utilice la sentencia switch.

Ejemplo:

Teclear obtener

3.5 7.8 * 27.3

7.4 16.3 / 0.45399

Page 38: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Solución de una cuadrática

La ecuación cuadrática en forma general es

ax2 + bx +c = 0

La solución puede encontrarse con la fórmula:

Hay tres casos posibles dependiendo del valor del radicando

aacbb

x2

42

> 0 Dos raíces diferentes

= 0 Una raíz repetida

< 0 Raíces complejas conjugadas

b2 – 4ac

Page 39: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Diseño de un programa para resolver una cuadrática.

Algoritmo

1. Leer valores de los coeficientes

2. Determinar el valor del discriminante

3. Si el discriminante es mayor que cero encontrar las 2 raíces diferentes y mostrarlas en la pantalla, sino

4. Si el discriminante es igual a cero determinar la raíz doble y mostrarla en la pantalla, sino

5. Determinar las raíces complejas conjugadas y mostrarlas en la pantalla.

Page 40: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

VariablesCoeficientes:

a – coeficiente de x2, real (float)

b – coeficiente de x, real (float)

c – término independiente, real (float)

d – discriminante, real (float)

Declaración:

float a, b, c, d;

Lectura:

cout << “Teclee los coeficientes a, b, c: ”;

cin >> a >> b >> c;

Determinación del discriminante:

d = b*b – 4*a*c;

Page 41: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Variables para almacenar las raíces:

x1, x2 – raíces diferentes, reales (float)

xdoble – raíz doble (float)

xreal, ximg – parte reala e imaginaria de la raíz compleja

Declaración:

float x1,x2,x, xreal, ximag;

Page 42: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Determinación de cada casoUtilizaremos una sentencia if anidada:

If(d>0){

x1 = (-b – sqrt(d))/2/a;

x2 = (-b + sqrt(d))/2/a;

cout << “x1 =\t“<< x1 << “\nx2 =\t” << x2 << endl;

}else If(d=){

xdoble = (-b – sqrt(d))/2/a;

cout << “Raiz doble\nx =\t“<< xdoble << endl;

}else{

xreal = -b/2/a;

ximag = (sqrt(-d))/2/a;

cout << “x real =\t“<< xreal << “\nximag =\t” << ximg << endl;

}

Page 43: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

EjemploDos vehículos se mueven a diferentes velocidades en t = 0 y con aceleraciones constantes y diferentes y se encuentran en diferente posición, haga un programa que determine en que tiempos y posiciones ambos vehículos coinciden.

Sea x01, v1 y a1 la posición, la velocidad y la aceleración con que se mueve el primer vehículo y x02, v2 y a2 la posición, la velocidad y la aceleración en que se mueve el segundo vehículo.

Las ecuaciones de movimiento de cada cuerpo son:

x1 = x01+ v1 t + 0.5a1 t2

x2 = x02 +v2 t + 0.5a2 t2

Page 44: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Los tiempos pedidos se encuentran cuando x1 = x2 o

x01 + v1 t + 0.5a1 t2 = x02 +v2 t + 0.5a2 t2

Simplificando se llega a

0.5 (a1 – a2) t 2 + (v1 – v2) t +x01 – x02 = 0

Esta es una ecuación cuadrática de la forma

a x2 + b x + c = 0

Con

a = 0.5(a1 – a2) b = (v1 – v2) c = x01– x02

Cuya solución es:

Esta tiene solución cuando b2 – 4 a c > 0

aacbb

x2

42

Page 45: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Algoritmo

1. Leer los valores del primer vehículo

2. Leer los valores del segundo vehículo

3. Calcular los coeficientes a, b y c

4. Calcular el valor del discriminante

5. Si el discriminante es mayor o igual a cero

calcular los valores de t y guardarlos en t1, t2, pos1 , pos2

si t1>0 imprimir “se encontrarán en t1 en pos1”

si t2>0 imprimir “se encontrarán en t2 en pos2“

6 sino

informar que no se encuentran en ningún tiempo

Page 46: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Declaración y lectura de variables

//variables de entrada float x01,v1,a1,x02,v2,a2;

//coeficientes de la cuadrática y discriminante float a,b,c,d;

//tiempos float t1,t2,pos1,pos2;

//lectura de datos cout << "teclee el t1, x01 y a1: "; cin >> t1 >> x01 >> a1; cout << "teclee el t2, x02 y a2: "; cin >> t2 >> x02 >> a2;

Page 47: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Solución del problema a = 0.5*(a1-a2); b = v1-v2; c = x01-x02; d = b*b - 4*a*c; if(d>0){ t1 = (-b+sqrt(d))/2/a; t2 = (-b-sqrt(d))/2/a; if(t1>0){ pos1 = x01+v1*t1+0.5*a1*t1*t1; cout << "se encontrarán en "<<t1<<" s en " <<pos1<<" m"<<endl; } if(t2>0){ pos2 = x01+v1*t2+0.5*a1*t2*t2; cout <<"se encontrarán en "<<t2<<" s en " <<pos2<<" m"<<endl; } }else cout << "NO se encuentran"<<endl; system("PAUSE");}

Page 48: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

else colgado

if (x < y) if (x < z) cout << "Hola" ;else cout << "Adiós" ;

if (x < y) if (x < z) cout << "Hola" ; else cout << "Adiós" ;

x<y

x<z

Hola

Adios

x<y

x<z

HolaAdios

v

v

F

F

v

v

Page 49: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Soluciónif (x < y){ if (x < z) cout << “Hola" ;}else cout << "Adiós" ;

o

if (x < y && x < z) cout << “Hola" ;else cout << "Adiós" ;

Page 50: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

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”;

Page 51: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

EjemplosSentencia 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;

Page 52: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

EjerciciosTraducir a if

y = (a>b)?3*a+b:2*a+b;

z =a>=2*x?(a<6)?4*a:5*a:3*a+1;

¿Qué valores se imprimen? int a=8,b=9,x=5,y,z; y = (a>b)?3*a+b:2*a+b; z =a<=2*x?(a<6)?4*a:5*a:3*a+1; cout <<"y = "<< y <<" z= " <<z<<endl;

Page 53: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

#include <iostream.h>

main(){ int n; //numero par con operador ?: cout << "teclee n:"; cin >> n; n%2==0?cout << "numero par\n":cout << "numero impar\n"; system("PAUSE");}

#include <iostream.h>

main(){ int a,b,c,m; //numero mayor con operador ?: cout << "teclee a,b,c:"; cin >> a>>b>>c; a>=b ? a>=c ? cout << a : cout << c:b>=c ? cout << b:cout << c; a>=b ? a>=c ? m = a : m = c : b>=c ? m = b : m = c; cout << endl; cout << m << endl; system("PAUSE");}

Page 54: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

TareaTraduzca las sentencias if a sentencias con el operador ?:.

if(x>8) y = 23;else z = -5;

if(x>=8 && x!=12)

z = sqrt(6*x);

else

if(x>0)

z = sin(3*x);

else

z = sin(5*x);

Traduzca la siguiente sentencia con ? A if

x = (y>5)?2*y+1:(z<10)?3*y+2:5*z+1;

Page 55: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual

Tarea caseraEscriba 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 menor a mayor.

(punto extra) Escriba un programa para resolver una ecuación cuadrática. Considere el caso en que las soluciones sean complejas utilizando el operador ?:.

Page 56: Estructuras de control condicional Computación. Operadores relacionales OperadorSignificado ==igualdad !=Diferente >Mayor que =Mayor o igual