Anda di halaman 1dari 18

ESTRUCTURAS DE SELECCIN

SENTENCIAS IF Y SWITCH
Las sentencias de decisin o tambin llamadas de CONTROL DE FLUJO son estructuras de control que realizan una pregunta la cual retorna verdadero o falso (evala una condicin) y selecciona la siguiente instruccin a ejecutar dependiendo la respuesta o resultado.

La instruccin if es, por excelencia, la ms utilizada para construir estructuras de control de flujo. SINTAXIS Primera Forma Ahora bien, la sintaxis utilizada en la programacin de C++ es la siguiente:
If (condicin) Set de instrucciones Siendo condicin el lugar donde se pondr la condicin que se tiene que cumplir para que sea verdadera la sentencia y as proceder a realizar el set de instrucciones o cdigo contenido dentro de la sentencia.
} {

Segunda Forma
Ahora veremos la misma sintaxis pero ahora le aadiremos la parte Falsa de la sentencia:
If (condicin) { Set de instrucciones } Else { Set de instrucciones 2 } //PARTE VERDADERA

//Parte FALSA

La forma mostrada anteriormente muestra la unin de la parte VERDADERA con la nueva secuencia la cual es la parte FALSA de la sentencia de decisin IF en la cual esta compuesta por l:
Else { Set de instrucciones 2 } //Parte FALSA

La palabra Else o De lo contrario indica al lenguaje que de lo contrario al no ser verdadera o no se cumpla la parte verdadera entonces realizara el set de instrucciones 2.

EJEMPLOS:
// PROGRAMA DEMO este programa introduce un numero negativo y lo compara si es //mayor que cero #INCLUDE <IOSTREAM.H> Void main() { Float numero; //obtener numero introducido por usuario Cout ingrese un numero positivo o negativo: Cin >> numero; //comparar numero a cero If (numero >0) Cout << numero << es mayor que cero << endl; If (numero <0) Cout <<numero << es menor que cero << endl; If(numero ==0) Cout <<numero<< es igual a cero << endl; } // EJEMPLO 2 //Prueba de divisibilidad de un nmero #INCLUDE <IOSTREAM.H> Void main() { Int n,d; Cout<< introduzca dos enteros:; Cin>> n >> d; If (n%d == 0) cout << n << es divisible por << d << endl; Else Cout << n << no es divisible por << d << endl; }

Sentencia switch Switch es otra de las instrucciones que permiten la construccin de estructuras de control. A diferencia de if, para controlar el flujo por medio de una sentencia switch se debe de combinar con el uso de las sentencias case y break. Notas: cualquier nmero de casos a evaluar por switch as como la sentencia default son opcionales. La sentencia switch es muy til en los casos de presentacin de mens.
Sintaxis:
Switch (condicin) { Case primer_caso: Bloque de instrucciones 1 Break; Case segundo_caso: Bloque de instrucciones 2 break; case caso_n: bloque de instrucciones n break; default: bloque de instrucciones por defecto }

Ejemplo 1
switch (numero) { case 0: cout << "numero es cero"; }

Ejemplo 2
switch (opcin) { case 0: cout << "Su opcin es cero"; break; case 1: cout << "Su opcin es uno"; break; case 2: cout << "Su opcin es dos"; }

Ejemplo 3
switch (opcin) { case 1: cout << "Su opcin es 1"; break; case 2: cout << "Su opcin es 2"; break; case 3: cout << "Su opcin es 3"; break;

default: cout << "Elija una opcin entre 1 y 3"; }

Sentencias de iteracin
DEFINICIN Las Sentencias de Iteracin o Ciclos son estructuras de control que repiten la ejecucin de un grupo de instrucciones. Bsicamente, una sentencia de iteracin es una estructura de control condicional, ya que dentro de la misma se repite la ejecucin de una o ms instrucciones mientras o hasta que una a condicin especfica se cumpla. Muchas veces tenemos que repetir un nmero definido o indefinido de veces un grupo de instrucciones por lo que en estos casos utilizamos este tipo de sentencias. en C++ los ciclos o bucles se construyen por medio de las sentencias for, while y do - while. La sentencia for es til para los casos en donde se conoce de antemano el nmero de veces que una o ms sentencias han de repetirse. Por otro lado, la sentencia while es til en aquellos casos en donde no se conoce de antemano el nmero de veces que una o ms sentencias se tienen que repetir.

Sentencias For
for(contador; final; incremento) { Cdigo a Repetir; }

donde:
1. contador es una variable numrica 2. final es la condicin que se evala, o sea, el valor final para contador 3. incremento es el valor que se suma o resta al contador Ejemplo 1:
for(i=1; i<=10; i++) { cout<<"Hola Mundo"; }

Esto indica que el contador "i" inicia desde 1 y finaliza cuando el contador "i" sea menor o igual a 10 ( en este caso llegar hasta 10) e "i++" realiza la sumatoria por unidad lo que hace que el for y el contador se sumen. repitiendo 10 veces "HOLA MUNDO" en pantalla.

Ejemplo 2:
for(i=10; i>=0; i--) { cout<<"Hola Mundo";

Este ejemplo hace lo mismo que el primero, salvo que el contador se inicializa a 10 en lugar de 1; y por ello cambia la condicin que se evala as como que el contador se decrementa en lugar de ser incrementado.

Sentencia while
while(condicin) { cdigo a Repetir }

donde:
1. condicin es la expresin a evaluar

Ejemplo 1:
int contador = 0; while(contador<=10) { contador=contador+1; cout<<"Hola Mundo"; }

El contador Indica que hasta que este llegue a el total de 10 entonces se detendr y ya no se realizar el cdigo contenido dentro de la sentencia while, de lo contrario mientras el "contador" sea menor a 10 entonces el cdigo contenido se ejecutar desplegando hasta 10 veces "Hola Mundo" en pantalla.

Sentencia do - while
La sentencia do es usada generalmente en cooperacin con while para garantizar que una o ms instrucciones se ejucuten al menos una vez. Por ejemplo, en la siguiente construccin no se ejecuta nada dentro del ciclo while, el hecho es que el contador inicialmente vale cero y la condicin para que se ejecute lo que est dentro del while es "mientras el contador sea mayor que diez". Es evidente que a la primera evaluacin hecha por while la condicin deja de cumplirse.
int contador = 0; while(contador > 10) { contador ++; cout<<"Hola Mundo"; }

Al modificar el segmento de cdigo anterior usando do tenemos:


int contador = 0; do { }

contador ++; cout<<"Hola Mundo";

while(contador > 10);

Observe cmo en el caso de do la condicin es evaluada al final en lugar de al principio del bloque de instrucciones y, por lo tanto, el cdigo que le sigue al do se ejecuta al menos la primera vez.

Sentencias break y continue


En la seccin (Sentencia switch) vimos que la sentencia break es utilizada con el propsito de forzar un salto dentro del bloque switch hacia el final del mismo. En esta seccin volveremos a ver el uso de break, salvo que esta ocasin la usaremos junto con las sentecias for y la sentencia while. Adems, veremos el uso de la sentencia continue.

break
La sentencia break se usa para forzar un salto hacia el final de un ciclo controlado por for o por while. Ejemplo: En el siguiente fragmento de cdigo la sentencia break cierra el ciclo for cuando la variable ( i ) es igual a 5. La salida para el mismo ser:
01234
for (i=0; i<10; i++) { if (i == 5) break; cout << i << " "; }

continue
La sentencia continue se usa para ignorar una iteracin dentro de un ciclo controlado por for o por while. Ejemplo: En el siguiente fragmento de cdigo la sentencia continue ignora la iteracin cuando la variable ( i ) es igual a 5. La salida para el mismo ser:
012346789
for (i=0; i<10; i++) { if (i == 5) continue; cout << i << " "; }

Uso de break y continue junto con while

Los dos ejemplos anteriores se presentan en seguida, salvo que en lugar de for se hace uso de while. Nota: no deje de observar que la construccin del ciclo while para el caso de la sentencia continue es diferente, esto para garantizar que el ciclo no vaya a caer en una iteracin infinita. break
int i = 0; while (i<10) { if (i == 5) break; cout << i << " "; i++; }

continue
int i = -1; while (i<10) { i++; if (i == 5) continue; cout << i << " "; }

EJEMPLOS: SENTENCIA SWITCH: // PROGRAMA DE ILUSTRACION DE LA SENTENCIA SWITCH #INCLUDE <iostream.h> Int main () { Char nota; Cout<<introduzca calificacin (A-D) y pulse enter:; Cin >> nota; Switch (nota) { Case A: cout << Excelente <<Examen superado\n; Break; Case B: cout << Notable <<suficiencia \n; Break; Case C: cout << Aprobado\n; Break; Case D: cout << Suspendido <<Examen Reprobado\n; Break; Default: Cout no es posible esta nota; } Cout << final de programa << endl; Return 0: } 7

COMPARACION DE LAS SENTENCIAS IF ELSE- IF Y SWITCH


2) SE NECESITA SABER SI UN DETERMINADO CARCTER CAR ES UNA VOCAL SOL: CON IF- ELSE- IF If (( car==a) || (car == A)) Cout << car <<es una vocal << endl; Else if (( car == e || (car == E)) Cout << car << es una vocal << endl; Else if (( car == i || (car == I)) Cout << car << es una vocal << endl; Else if (( car == o || (car == O)) Cout << car << es una vocal << endl; Else if (( car == u || (car == U)) Cout << car << es una vocal << endl; Else Cout << car <<no es una vocal << endl; SOLUCION CON SWITCH: Switch (car) { Case a: case A: Case e: case E: Case i: case I: Case o: case O: Case u: case U: Cout << car << es una vocal << endl; Break; Default Cout << car << no es una vocal << endl; } EJEMPLO: TIPOS DE VEHICULOS Y PEAJES.

Int tipo_vehiculo, peaje; Cout << introduzca tipo de vehiculo: ; Cin >> tipo_vehiculo, peaje; Switch (tipo_vehiculo); { Case 1: Cout << turismo; Peaje= 500; Break; Case 2: Cout << autobus; Peaje= 3000; Break; Case 3: Cout << motocicleta; Peaje= 300; Break; 8

default: Cout << vehiculo no autorizado; } EJEMPLO: UNA CONSTRUCCION DE SELECCIN MULTIPLE SE PUEDE IMPLEMENTAR MAS EFICIENTEMENTE CON UNA ESTRUCTURA IF-ELSE- IF QUE CON UNA SECUENCIA DE SENTENCIAS INDEPENDIENTE IF: Cout << introduzca nota: ; Cin >> nota If (nota <0 || nota > 100) { Cout << nota << no es una nota valida, \n; Return ? } If (nota >=90) & (nota <= 100) Return A If (nota >=80) & (nota <=90) Return B; If (nota >=70) & (nota <= 80) Return C; If (nota >=60) & (nota <= 70) Return D; If (nota < 60) Return F; ESTRUCTURAS DE CONTRO BUCLES O CICLOS: WHILE: EL COMPORTAMIENTO O FUNCIONAMIENTO DE LA SENTENCIA WHILE ES: 1. Se evala la condicin 2. Si la condicin es verdadera 3. La sentencia especificada, denomina el cuerpo del ciclo se ejecuta 4. Vuelve el control al paso 1 5. En caso contrario : El control se transfiere a la sentencia siguiente del while. 1. Inicializacin, CONTADOR se establece a un valor inicial 0 2. Prueba/condicin , se comprueba el valor del contador antes de que empiece la repeticin de cada bucle o cada iteracin 3. Actualizacin , el contador se actualiza ( se decrementa o incrementa en 1 mediante el operador -- o ++, durante cada iteracin. OPERADORES DE INCREMENTO Y DECREMENTO: Los operadores de incremento y decremento soportan una sintaxis abreviada para aadir o restar al valor de una variable, la sintaxis : 9

++nombrevariable Nombrevariable++ --nombrevariable

//preincremento //postincremento //predecremento

Nombrevariable-- //postdecremento

EJEMPLO : K= i++ // asigna el valor 3 a k y 4 a i K=++i //asigna el valor 5 a k y 5 a i K= i-- // asigna el valor 5 a k y 4 a i K=--i //asigna el valor 4 a k y 3 a i

USO DE LOS OPERADORES DE INCREMENTO ++ PARA CONTROLAR LA ITERACION DE UN CICLO //PROGRAMA DE CALCULO DE CALORIAS #include <iostream.h> Int main () { Int num_de_elementos, cuenta, caloras_por_alimento, caloras_total; Cout << Cuntos alimentos ha comido hoy?; Cin >> num_ de_ elementos; Caloras_total = 0; Cuenta= 1; Cout <<introducir el numero de calora de cada uno de los << num_elementos << alimentos tomados: \n ; While (cuenta++ <= num_ de_ elementos) { Cin >> caloras_por_alimento; Caloras_total = caloras_total + caloras_por_alimento ; } Cout << las caloras totales consumidas hoy son : <<caloras_total << endl; Return 0; } //CALCULO DE LA MEDIA ARITMETICA DE 6 NUMEROS #include <iostream.h> #include<string.h> Int main() { Const int TotalNum= 6; Int contadornum=0; Float sumanum=0; 10

Cout << introduzca <<totalNum << numerous << endl; While (contadornum < totalnum) { //valores a procesar Float numero; Cin>> numero; //leer el siguiente numero Sumanum += numero; ++contadornum // incrementar nmeros leidos } Float media = sumanum / contadornum; Cout << La media: << Media << endl: Return 0; } REPETICION : EL CICLO FOR La sentencia FOR es un mtodo para ejecutar un bloque de sentencias un nmero fijo de veces. El ciclo FOR a diferencia del WHILE en que las operaciones de control del bloque se sitan en un solo sitio: en la cabecera de la sentencia. SINTAXIS: For ( inicializacin; condicionIteracion; incremento ; sentencias 1) Inicializacin de la variable del control del bucle o ciclo; 2) Condicin Iteracion: Expresion lgica que determina si las sentencias se han de ejecutar mientras sea verdadera; 3) Incrementa o decrementa la variable de control del bucle 4) Sentencias acciones que se ejecutaran por cada iteracion del ciclo EJEMPLO: //IMPRIMIR HOLA 10 VECES For (int i =0; i<10; i++) Cout << hola;

EJEMPLOS: EJEMPLOO 1 //MOSTRAR LOS MULTIPLOS DE 3 COMPRENDIDOS ENTRE LOS NUMEROS 1 Y 20 #Include <stdio.h> #include<conio.h> #include<iostream.h> Int main () { Clrscr; 11

For (int i=1; i<=20; i++) { Cout << I; If ( I /3 == 0) cout << Es multiplo de 3 << endl; Else cout << no es multiplo de 3 << endl; } Getch(); Return 0; } EJEMPLO2 // HALLAR LA SUMA DE A + B + C + 100 #include <stdio.h> #include<conio.h> Int main() { Int A,B,C, suma; Cout<< ingrese valor para A: Cin >> A; Cout <<ingrese valor para B:; Cin >>B Cout <<ingrese valor para C:; Cin >>C; Suma= A + B+C+100; Cout << la suma es : Cin >> suma; Getch(); Return 0; } 1) /* programa para mostrar la suma acumulada de los multiplos de M y N a partir del numero 100 hasta un numero dado por el programador */ #include<stdio.h> main() { /* determinar el numero mayor */ int m,n,final,i; int acum_m,acum_n; int total; acum_m =0; acum_n =0; printf("Ingrese los valores de M y N separados por un espacio\n:"); scanf("%d %d",&m,&n); printf("Ingrese el numero final \n:"); 12

scanf("%d",&final); for(i=100;i<=final;i++) { if(i%m==0) acum_m += i; if(i%n==0) acum_n += i; } total = acum_m + acum_n; printf("La respuesta es %d \n:",total); return 0; } 2) /* ingresar 10 resultados de partidos entre 2 equipos ** 1 y 2 ** el programa debera: - publicar cual equipo gano mas veces - publicar la cantidad de goles del eq que mas gano - cuantas veces perdio el eq 2 */ #include <stdio.h> main() { int goles1,goles2,uno,dos,acugol1,acugol2,perdio2,i; uno=0; dos=0; acugol1=0; acugol2=0; perdio2=0; printf("Ingreso de SCORES\n"); printf("-----------------\n"); for(i=1;i<=10;i++) { scanf("%d %d",&goles1,&goles2); acugol1 += goles1; acugol2 += goles2; if (goles1>goles2) { uno++; perdio2++; } if (goles2>goles1) dos++; if (goles2==goles1) { acugol1 += goles1; acugol2 += goles2; } } if (uno>dos) { printf("EQ UNO gano mas veces \n"); printf("Hizo %d goles \n",acugol1); } if (dos>uno) { printf("EQ DOS gano mas veces \n"); printf("Hizo %d goles \n",acugol2); } if (dos==uno) printf("Igualaron en partidos\n"); printf("\n El EQ DOS perdio %d veces \n",perdio2); return 0; }

13

3) /* Determinar cual es la persona mayor de un grupo de 5 personas, por cada persona se ingresa dd Dia mm mes aa ao de nacimiento suponga que todos los meses son de 30 dias y el ao es de 360 dias*/ #include<stdio.h> main() { int dd,mm,aa; int hdd,hmm,haa; int i,mayor; float maxedad; float t1,t2,edad; maxedad = 0; printf("Ingrese la fecha de hoy [dd mm aaaa]\n:"); scanf("%d %d %d",&hdd,&hmm,&haa); // tiempo transcurrido hasta hoy t1= (haa-1)*360 +(hmm-1)*30 + hdd; printf("Ahora ingresar EDADES:\n"); printf("----------------------\n"); for(i=1;i<=5;i++) { printf(" %d.- Ingrese [dd mm aaaa]\n:",i); scanf("%d %d %d",&dd,&mm,&aa); //tiempo transcurrido hasta la fecha de nacimiento t2= (aa-1)*360 +(mm-1)*30 + dd; // edad edad=(t1-t2)/360.0; if (edad > maxedad) { maxedad = edad; mayor=i; } } printf("la persona ingresada en la posicion %d es la mayor\n",mayor); printf("Su edad es: %f \n",maxedad); return 0; } 4) /* Uso de Getche() para determinar cuantas veces se repite una vocal se termina el ingreso cuando se presiona x */ #include <stdio.h> #include <conio.h> main() { int parar,a,e,i,o,u; char ch; parar = 0; a = 0; e = 0; i = 0; 14

o = 0; u = 0; printf("Ingresar caracteres hasta presionar x : \n"); while(parar == 0) { ch = getche(); if (ch == 'a') a++; if (ch == 'e') e++; if (ch == 'i') i++; if (ch == 'o') o++; if (ch == 'u') u++; if (ch == 'x') parar=1; } printf("\n Conteo de vocales \n"); printf("\n la vocal a se repitio %d veces \n",a); printf("\n la vocal e se repitio %d veces \n",e); printf("\n la vocal i se repitio %d veces \n",i); printf("\n la vocal o se repitio %d veces \n",o); printf("\n la vocal u se repitio %d veces \n",u); return 0; }

5. /* Uso de Getche() para tamao de tres palabras se termina el ingreso cuando se presiona ENTER */ /* PROGRAMA PARA DETERMINAR EL TAMAO DE TRES PALABRAS Tenga en cuenta que cada palabra se separa por un espacion en blanco */ #include <stdio.h> #include <conio.h> main() { int parar,palabra,c; char ch; parar = 0; palabra = 1; c = 0; printf("Ingresar caracteres hasta presionar ENTER : \n"); while(parar == 0 && palabra <=3) { ch = getche(); if (ch == 13) parar=1; else if(ch!=' ') // ch no es espacio en blanco 15

c++; else { palabra++; printf("Tamao de palabra %d \n",c); c=0; } } if(ch == 13) printf("Tamao de palabra %d \n",c); return 0; }

6. ) /* Uso de Getche() para determinar cuantas veces se repite una vocal se termina el ingreso cuando se presiona x */ /* factorial para pares menores o iguales a 10 */ #include <stdio.h> main() { float factorial; int i,f; printf("Ingresar un numero: \n"); scanf("%d",&f); factorial = 1; if ((f%2==0) && (f<11)) { for(i=1;i<=f;i++) factorial = factorial * i; printf("\n El factorial de %d es %f \n",f,factorial); } return 0;
} 7, /* Uso de Getche() generalizado

se termina el ingreso cuando se presiona "." punto*/ #include <stdio.h> #include <conio.h> main() { int parar,palabra,v,c; char ch; parar = 0; palabra = 0; v = 0; c = 0; printf("Ingresar caracteres hasta presionar PUNTO : \n"); while(parar == 0) { ch = getche(); if (ch == '.') parar=1; else if(ch!=' ') { palabra++; switch(ch){ case 'a': case 'e': 16

case 'i': case 'o': case 'u': v++; break; default: c++; break; } } else { printf("Tamao de palabra %d \n",palabra); palabra = 0; } } printf("Tamao de palabra %d \n",palabra); printf("consonantes %d \n",c); return 0; }

8. /* Como acumular en una estructura repetitiva NOTAR COMO LOS VALORES INGRESADOS EN "a" SE VAN ACUMULANDO EN S - Las vueltas son 5 */ #include<stdio.h> main() { int i,a,s; s=0; // ojo debe inicializar la variable s en 0 para poder acumular for(i=0;i<5;i++) { printf("%d\n",i); scanf("%d",&a); s = s + a; //acumular } printf("%d\n",s); //mostrar el acumulado al final return 0; }
9. // LO MISMO DEL ANTERIOR PERO USANDO WHILE // ESTA VEZ LOS

ACUMULADOS SE HACEN INGRESANDO VALORES EN i // PERO TENGA EN CUENTA QUE EL BUCLE DARA VUELTAS HASTA QUE // SE ingrese en i un valor de cero
- Las vueltas son indeterminadas #include<stdio.h> main()

17

{ int i,s; s=0; i=1; while(i!=0) // mientras i distinto de 0 { scanf("%d",&i); s = s + i; //acumular } printf("%d\n",s); //mostrar el acumulado al final return 0; }

10. // aqui solo se acumulan los pares // para determinar si i es mltiplo de 2 // note que el residuo de dividir por dos osea "i%2" debe ser 0 (cero) #include<stdio.h> main() { int i,s; s=0; i=1; while(i!=0) // mientras i distinto de 0 { scanf("%d",&i); if(i%2 == 0) s=s+i; //acumular solo los pares } printf("%d\n",s); //mostrar el acumulado al final return 0; } 11. // acumula solo los impares // note como se usa laestructura "do while" (POST-TEST) // eso significa que EL BUCLE SE EJECUTA UNA VEZ POR LO MENOS // MIENTRAS QUE EN "WHILE" O "FOR" es posible que el bucle // no se ejecute ni una sola vez #include<stdio.h> main() { int i,s; s=0; i=1230; do { scanf("%d",&i); if(i%2 != 0) s=s+i; //acumular solo los impares } while(i!=0); printf("%d\n",s); //mostrar el acumulado al final return 0; } 18