Curso de C++ (Página 9 Ejemplos 7 a 9)

pagina009f Principal pagina010

Ejemplos capítulos 7 a 9

Ejemplo 5

Volvamos al ejemplo del capítulo 1, aquél que sumaba dos más dos. Ahora podemos comprobar si el ordenador sabe realmente sumar, le pediremos que nos muestre el resultado:

// Este programa suma 2 + 2 y muestra el resultado
// No me atrevo a firmarlo
#include <iostream.h> 
int main()
{
   int a; 

   a = 2 + 2; 
   cout << "2 + 2 = " << a << endl; 
   return 0; 
}

Espero que tu ordenador fuera capaz de realizar este complicado cálculo, el resultado debe ser:

2 + 2 = 4

Nota: si estás compilando programas para consola en un compilador que trabaje en entorno Windows, probablemente no verás los resultados, esto es porque cuando el programa termina se cierra la ventana de consola automáticamente. Tienes dos opciones para evitar este inconveniente. Ejecuta los programas desde una ventana DOS, o añade la línea "getchar();", justo antes de la línea "return 0;", en este último caso, necesitarás incluir el fichero de cabecera "stdio.h". De este modo el programa no terminará hasta que pulses una tecla.

Ejemplo 6

Veamos un ejemplo algo más serio, hagamos un programa que muestre el alfabeto. Para complicarlo un poco más, debe imprimir dos líneas, la primera en mayúsculas y la segunda en minúsculas. Una pista, por si no sabes cómo se codifican los caracteres en el ordenador. A cada carácter le corresponde un número, conocido como código ASCII. Ya hemos hablado del ASCII de 256 y 128 caracteres, pero lo que interesa para este ejercicio es que las letras tienen códigos ASCII correlativos según el orden alfabético. Es decir, si al carácter 'A' le corresponde el código ASCII n, al carácter 'B' le corresponderá el n+1.

// Muestra el alfabeto de mayúsculas y minúsculas 
#include <iostream.h>

int main() 
{ 
   char a; // Variable auxiliar para los bucles 
   // El bucle de las mayúsculas lo haremos con un while
   a = 'A'; 
   while(a <= 'Z') cout << a++; 
   cout << endl; // Cambio de línea 
   // El bucle de las minúsculas lo haremos con un for 
   for(a = 'a'; a <= 'z'; a++) cout << a; 
   cout << endl; // Cambio de línea return 0; 
} 

Tal vez eches de menos algún carácter, efectivamente la 'ñ' no sigue la norma del orden alfabético en ASCII, esto es porque el ASCII lo inventaron los anglosajones, y no se acordaron del español. De momento nos las apañaremos sin ella.

Ejemplo 7

Para este ejemplo queremos que se muestren cuatro líneas, la primera con el alfabeto, pero mostrando alternativamente las letras en mayúscula y minúscula, AbCdE... La segunda igual, pero cambiando mayúsculas por minúsculas, la tercera en grupos de dos, ABcdEFgh... y la cuarta igual pero cambiando mayúsculas por minúsculas.

Piensa un poco sobre el modo de resolver el problema. Ahora te daré la solución.

Por supuesto, para cada problema existen cientos de soluciones posibles, en general, cuanto más complejo sea el problema más soluciones existirán, aunque hay problemas muy complejos que no tienen ninguna solución, en apariencia.

Bien, después de este paréntesis, vayamos con el problema. Almacenaremos el alfabeto en una cadena, no importa si almacenamos mayúsculas o minúsculas. Necesitaremos una cadena de 27 caracteres, 26 letras y el terminador de cadena.

Una vez tengamos la cadena le aplicaremos diferentes procedimientos para obtener las combinaciones del enunciado.

// Muestra el alfabeto de mayúsculas y minúsculas: 
// AbCdEfGhIjKlMnOpQrStUvWxYz 
// aBcDeFgHiJkLmNoPqRsTuVwXyZ
// ABcdEFghIJklMNopQRstUVwxYZ
// abCDefGHijKLmnOPqrSTuvWXyz 

#include <iostream.h> 
#include <ctype.h> 
int main() 
{ 
   char alfabeto[27]; // Cadena que contendrá el alfabeto 
   int i; // variable auxiliar para los bucles 
   // Aunque podríamos haber iniciado alfabeto directamente, 
   // lo haremos con un blucle 
   for(i = 0; i < 26; i++) alfabeto[i] = 'a' + i; 
   alfabeto[26] = 0; // No olvidemos poner el fin de cadena 
   // Aplicamos el primer procedimiento si la posición es par 
   // convertimos el carácter a minúscula, si es impar a mayúscula 
   for(i = 0; alfabeto[i]; i++) 
      if(i % 2) alfabeto[i] = tolower(alfabeto[i]); 
      else alfabeto[i] = toupper(alfabeto[i]); 
   cout << alfabeto << endl; // Mostrar resultado 
  
   // Aplicamos el segundo procedimiento si el carácter era una 
   // mayúscula lo cambiamos a minúscula, y viceversa 
   for(i = 0; alfabeto[i]; i++) 
      if(isupper(alfabeto[i])) alfabeto[i] = tolower(alfabeto[i]); 
      else alfabeto[i] = toupper(alfabeto[i]); 
   cout << alfabeto << endl; // Mostrar resultado 

   // Aplicamos el tercer procedimiento, pondremos los dos primeros 
   // caracteres directamente a mayúsculas, y recorreremos el resto de 
   // la cadena, si el carácter dos posiciones a la izquierda es 
   // mayúscula cambiamos el caracter actual a minúscula, y viceversa 
   alfabeto[0] = 'A'; 
   alfabeto[1] = 'B'; 
   for(i = 2; alfabeto[i]; i++) 
      if(isupper(alfabeto[i-2])) alfabeto[i] = tolower(alfabeto[i]); 
      else alfabeto[i] = toupper(alfabeto[i]); 
   cout << alfabeto << endl; // Mostrar resultado 

   // El último procedimiento, es tan simple como aplicar 
   // el segundo de nuevo 
   for(i = 0; alfabeto[i]; i++) 
      if(isupper(alfabeto[i])) alfabeto[i] = tolower(alfabeto[i]); 
      else alfabeto[i] = toupper(alfabeto[i]); 
   cout << alfabeto << endl; // Mostrar resultado 
   
   return 0; 
} 

Ejemplo 8

Bien, ahora veamos un ejemplo tradicional en todos los cursos de C y C++.

Se trata de leer caracteres desde el teclado y contar cuántos hay de cada tipo. Los tipos que deberemos contar serán: consonantes, vocales, dígitos, signos de puntuación, mayúsculas, minúsculas y espacios. Cada carácter puede pertenecer a uno o varios grupos. Los espacios son utilizados frecuentemente para contar palabras.

// Cuenta letras 
#include <iostream.h> 
#include <ctype.h> 
int main() 
{ 
   int consonantes = 0; 
   int vocales = 0; 
   int digitos = 0; 
   int mayusculas = 0; 
   int minusculas = 0; 
   int espacios = 0; 
   int puntuacion = 0; 
   char c; // caracteres leidos desde el teclado
 
   cout << "Contaremos caracteres hasta que se pulse ^Z" << endl; 
   while((c = getchar()) != EOF) 
   { 
      if(isdigit(c)) digitos++; 
      else if(isspace(c)) espacios++; 
      else if(ispunct(c)) puntuacion++; 
      else if(isalpha(c)) 
      { 
         if(isupper(c)) mayusculas++; else minusculas++; 
         switch(tolower(c)) { 
            case 'a': 
            case 'e': 
            case 'i': 
            case 'o': 
            case 'u': 
               vocales++; 
               break; 
            default: 
               consonantes++; 
         } 
      } 
   } 
   cout << "Resultados:" << endl; 
   cout << "Dígitos:     " << digitos << endl; 
   cout << "Espacios:    " << espacios << endl; 
   cout << "Puntuación:  " << puntuacion << endl; 
   cout << "Alfabéticos: " << mayusculas + minusculas << endl; 
   cout << "Mayúsculas:  " << mayusculas << endl; 
   cout << "Minúsculas:  " << minusculas << endl; 
   cout << "Vocales:     " << vocales << endl; 
   cout << "Consonantes: " << consonantes << endl; 
   cout << "Total: " << digitos + espacios + vocales + 
      consonantes + puntuacion << endl; 
   return 0; 
} 

pagina009f Principal pagina010