C++ Informática I Fundamentos de los computadores Ainara Pradera Héctor Solar Aviso Viernes día 1 de diciembre -> Miércoles día 29 de noviembre de 9:00 a 11:00 Índice • Visibilidad de variables • Bucles FOR, WHILE y DO-WHILE • Bifurcaciones IF, SWITCH y Operador Condicional • Cadenas de caracteres Creación y visibilidad de las variables en C++ En C++ pueden crearse variables en cualquier parte de la función. Creación y visibilidad de las variables en C++ En C++ puede haber dos variables con el mismo nombre si hay una o más llaves de separación entre ellas. void main (void) { int a=3,i=1; cout<<a<<endl; for (;i<=1;i++) { double a=4.2; cout<<a<<endl; } cout<<a<<endl; } void main (void) { int a=3,i=1; cout<<a<<endl; for (;i<=1;i++) { double a=4.2; cout<<a<<endl; } int a; } Error Creación y visibilidad de las variables en C++ En C++ cuando se crean dos variables con el mismo nombre tiene prioridad la que están más encerrada entre llaves frente la más externa. Al salir de un bloque encerrado entre llaves, las variables que han sido creadas DENTRO de ese bloque de llaves, se destruyen. Creación y visibilidad de las variables en C++ Otro ejemplo: int i; void main(void) { for (i=1; i<=10 ;++i) { int suma=0; suma=suma+i; } cout<<suma; } Error Bucles FOR En Matlab están muy orientados a controlar una variable for i=1:2:10 valor inicial:paso:valor final sentencias end En C++ el esquema es algo diferente… Bucles FOR for (SENTENCIAS A EJECUTAR AL COMIENZO; CONDICIÓN DE CONTINUACIÓN; SENTENCIAS A EJECUTAR AL FINALIZAR EL BUCLE) { CUERPO DEL BUCLE } Bucles FOR for ( int i=1,suma=0; i<=10 ;++i) { suma=suma+i; // ó suma+=i; } cout<<suma; Bucles FOR int i=1;suma=0; for ( ; i<=10 ;) { suma=suma+i; i++; } cout<<suma; Bucles FOR int i, suma=0; for (i=1; i<=10 ;i=i+1) { suma=suma+i; } cout<<suma; Bucles FOR for ( int i=1,suma=0; i<=10 ;suma+=i++); cout<<suma; Bucles FOR Dos errores típicos de bucles FOR: int i, suma=0; for (i=1; i<=10 ;i=i+1); { suma=suma+i; } cout<<suma; for ( int i=1,suma=0; i<=10 ;suma+=i++) cout<<suma; Bucles WHILE En Matlab guardan un gran parecido con C++ while (expresión de control) { Cuerpo del bucle While } Bucles WHILE int i=1, suma=0; while ( i<=10) { suma+=i++; } cout<<suma; Bucles WHILE int i=11, suma=0; while ( i--) { suma+=i; } cout<<suma; Bucles DO-WHILE En Matlab guardan un gran parecido con C++ do { Cuerpo del bucle Do-While } while (expresión de control); La ventaja es que permite ejecutar el bucle al menos una vez. Veremos su utilidad en uno de los ejercicios. Bucles DO-WHILE int i=1, suma=0; do { suma+=i++; } while ( i<=10); cout<<suma; Bucles DO-WHILE int i=10, suma=0; do { suma+=i; } while ( i--); cout<<suma; Bucles WHILE y DO-WHILE Dos errores típicos de bucles WHILE y DO-WHILE: int i=1, suma=0; int i=1, suma=0; while ( i<=10); do { { suma+=i++; suma+=i++; } } cout<<suma; while ( i<=10) cout<<suma; Bifurcaciones IF En Matlab guardan un gran parecido con C++ if (expresión de control) {Instrucciones que se ejecutan en este caso} else if (expresión de control II) {Instrucciones que se ejecutan en este caso} … else if (expresión de control N) {Instrucciones que se ejecutan en este caso} else {Instrucciones que se ejecutan en este caso} Bifurcaciones IF Un error típico de bifurcaciones IF: char respuesta; cout<<"Introduzca la opcion que desea:\t\t"; cin>>respuesta; if (respuesta=='a'); cout<<"La respuesta es "<<respuesta<<"\n"; if (respuesta=='b') cout<<"La respuesta es "<<respuesta<<"\n"; Bifurcaciones IF Un “error” típico de bifurcaciones IF: char respuesta; cout<<"Introduzca la opcion que desea:\t\t"; cin>>respuesta; if (respuesta=='a') { cout<<"La respuesta es "<<respuesta<<"\n"; } else if (respuesta=='b') { cout<<"La respuesta es"<<respuesta<<"\n"; } else (respuesta!='b'||respuesta!='a') { cout<<"Respuesta incorrecta\n"; } Bifurcaciones SWITCH Se parece a la bifurcacion if, con algunas diferencias: switch (expresion) { case expresion_cte_1: sentencia_1; break; case expresion_cte_2: sentencia_2; break; … case expresion_cte_N: sentencia_N; break; default: sentencia break; } Bifurcaciones SWITCH char respuesta; cout<<"Introduzca la opcion que desea:\t\t"; cin>>respuesta; switch (respuesta) { case 'a': cout<<"La respuesta es "<<respuesta<<"\n"; break; case 'b': cout<<"La respuesta es"<<respuesta<<"\n"; break; default: cout<<"Respuesta incorrecta\n"; break; } Operador condicional El operador condicional es ternario tiene 3 operandos. Permite realizar una bifurcación. Expresión general: expresión_control? sentencia_1 : sentencia_2; Ej: Se evalúa la primera expresión: char respuesta; cout<<"Introduzca la opcion que desea:\t\t"; cin>>respuesta; respuesta=='a'? cout << “Respuesta a" : cout << “Respuesta b"; si es true (!=0), se ejecuta la expresión_2. si es false (==0), se ejecuta la expresión_3. Cómoda para casos sencillos. Anidamiento Se pueden anidar bucles y bifurcaciones entre sí. Es decir, poner unos dentro de otros. Pero CUIDADO!!! if (a>=b) if (b!=14) c=a/b; else c=0; if (a>=b) { if (b!=14) c=a/b; } else c=0; Ejercicio 8.3 y 9.1 Comienzo Pedimos el número Multiplicamos y restamos FIN No Si Dar resultado ¿Hemos acabado? Ejercicio 10.2 Comienzo Historia: C y C++ Pedimos los valores de A y B ¿Es A divisible entre B? No Si Decimos que A es divisible entre B Decimos que A NO es divisible entre B Pedimos la respuesta a si quiere continuar (R) Si FIN ¿Es R==‘N’? No No ¿Es R==‘S’? Si Cadenas de caracteres En C++ los espacios en blanco son caracteres. H o l a 0 1 2 3 4 J u a n 5 6 7 8 72 111 108 97 32 74 117 97 110 char frase [9]=“Hola Juan” Cadenas de caracteres En C++ para guardar 9 caracteres hacen falta 10 celdas. En la última celda se guarda el carácter nulo ‘\0’ H o l a 0 1 2 3 4 J u a n \0 5 6 7 8 9 72 111 108 97 32 74 117 97 110 0 Cadenas de caracteres Para obtener una cadena de caracteres (con espacios) por pantalla: char mi_cadena [longitud]; cin.getline (mi_cadena,longitud); La librería estándar <string.h> contiene muchas funciones útiles para manejar cadenas. Las + interesantes están en las prácticas Cadenas de caracteres char frase [10]; cin.getline (frase,10); for (int i=0 ;i<10;i++) { cout<<frase[i]<<endl; } Ordenar programa ¡¡ORDEN!! El compilador Visual C++ introduce tabuladores automáticamente: #include <libreria.h> void main (void) { char var1; int var2; while (expresion) { if (expresion) { sentencia2; } else if (expresion2) { sentencia2; } else (expresion) { sentencia2; } } } #include <libreria.h> void main (void) { char var1; int var2; while (expresion) { if (expresion) {sentencia2; } else if (expresion2) { sentencia2;} else (expresion) { Sentencia2;} }} Ejercicio 1.3 asi es esta frase que queremos comprobar esta esta esta esta esta esta esta esta Comienzo Ejercicio 1.3 Historia: C y C++ Pedir frase y palabra Calcular longitudes 1ª Letra de frase ¿Letra frase = 1ª Letra palabra? No Siguiente letra frase Si Siguiente letra palabra Siguiente letra frase No ¿Son iguales? No Fin Encontrada No Si Si ¿Hemos acabado Letras palabra? Si ¿Hemos acabado Letras frase? No encontrada Fin