Control Condicion Al

56
Estructuras de control condicional Computación

Transcript of Control Condicion Al

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 1/56

Estructuras de control

condicional

Computación

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 2/56

Operadores relacionales

Operador Significado

== igualdad

!= Diferente> Mayor que

< Menor que

>= Mayor o igual

<= Menor o igual

Los operadores relacionales permiten construir expresiones booleanas esdecir, 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.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 3/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 4/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 5/56

Sentencia if 

La sentencia if permite decidir ejecutar o no una instrucción o un bloque deinstrucciones.

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 6/56

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;

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 7/56

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 vecesque a es mayor que b.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 8/56

Sentencia if - else

La sentencia if  – else permite decidir entre ejecutar una instrucción (o unbloque 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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 9/56

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;

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 10/56

Tarea

Escriba un programa que lea tres números reales y decida si forman untriá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.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 11/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 12/56

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;

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 13/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 14/56

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;

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 15/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 16/56

Operadores lógicos

Existen 4 operadores lógicos en C: and = &&, or = ||, not = !, xor = ^. Losoperadores 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 01 0 0

1 1 1

expresión1 expresión2 expresión1 || expresión2

0 0 0

0 1 11 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

!

&&

||

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 17/56

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)

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 18/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 19/56

 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)

...

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 20/56

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” 

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 21/56

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

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 22/56

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

verdaderofalso

falso

verdadero

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 23/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 24/56

#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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 25/56

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;

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 26/56

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.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 27/56

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 del

caso abreak;

Acción del

caso bbreak;

caso zAcción del

caso zbreak;

Acción por

omisión

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 28/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 29/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 30/56

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.30C 21.50

 Además si el empleado trabaja mas de 150 horas mensuales tiene una

bonificación del 5 % de sueldo.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 31/56

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 caracteres

categoria – carácter 

horas - entero

Variables (salida)

pagoHora – real (float)

bono – real (float)

sueldo – real (float)

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 32/56

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 longitudmáxima, si teclea “ juan perez”, solo se almacenar á “ juan”.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 33/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 34/56

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;

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 35/56

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 

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 36/56

Tarea

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

……… 

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 37/56

Tarea casera

Modifique el programa de los días de la semana para desplegar “entresemana” 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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 38/56

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

a

acbb x2

4

2

> 0 Dos raíces diferentes

= 0 Una raíz repetida

< 0 Raíces complejas conjugadas

b2  – 4ac

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 39/56

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, sino4. 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.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 40/56

Variables

Coeficientes:

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;

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 41/56

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;

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 42/56

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; 

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 43/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 44/56

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

a

acbb x

2

42

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 45/56

 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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 46/56

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;

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 47/56

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

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 48/56

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

Hola Adios

v

v

F

F

v

v

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 49/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 50/56

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

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 51/56

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;

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 52/56

Ejercicios

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

#include <iostream.h>

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 53/56

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

}

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 54/56

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;

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 55/56

Tarea casera

Escriba un programa que lea tres números reales representandolos 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 ?:.

7/28/2019 Control Condicion Al

http://slidepdf.com/reader/full/control-condicion-al 56/56