domingo, 16 de marzo de 2014

Ejercicios de C++: estructuras de control (iteración)

Seguimos avanzando con C++. Tras practicar las sentencias de selección  en la entrada del viernes, ahora vemos las estructuras de control iterativas en estos siete ejercicios.

Ejercicio 1
Escribe un programa que calcule la suma de los N primeros números enteros positivos (el número N se leerá por teclado). Implementa dicho programa utilizando cada una de las tres estructuras de iteración de C++: while, do-while y for.

#include <iostream>
using namespace std;

int main() {
 int num;
 unsigned suma;
 cout << "Programa que calcula la suma de los N primeros números enteros positivos." << endl;
 do{
  cout<<"Introduce N (>0): ";
  cin>>num;
 }while (num<0);



 //Mediante un for.
  suma  = 0;
  for(unsigned i = 1; i <= num; i++){
  suma = suma + i;
  }
  cout << "La suma es " << suma << endl;

 //Mediante while
  {
   unsigned i = 1;
   suma = 0;
   while(i <= num){
    suma = suma + i;
    i++;
   }
   cout << "La suma es " << suma << endl;
  }
 //Mediante do while.
  {
   unsigned i = 1;
   suma = 0;
   do{
    suma = suma +i;
    i++;
   }while(i <= num);
   cout << "La suma es " << suma << endl;
  }

 return 0;
}
Ejercicio 2
En una fábrica de coches se desea calcular el precio medio de un número de modelos de coche, leído desde teclado. Se pide dado un numero de modelos de coche, introducir el precio (en euros) de cada modelo de coche (para esto usaremos una estructura iterativa) y posteriormente calcular el precio medio de los modelos.
#include <iostream>
using namespace std;

int main() {
 int num;
 double suma, prec;
 suma=0.0;
 do{
  cout << "Introduzca el número de modelos de coche: ";
  cin >> num;
 }while(num <= 0);

 for(int i= 1; i <= num; i++){
  cout <<"Precio modelo "<<i<<":";
  cin >> prec;
  suma = suma + prec;
 }
 cout << "El valor medio de los " << num << " modelos de coche asciende a: " << suma/num <<" €";
 return 0;
}

Ejercicio 3
Diseña un programa en C++ que muestre por pantalla un tablero de ajedrez, donde las posiciones blancas serán mostradas con el carácter ‘B’ y las posiciones negras serán mostradas con el carácter ‘N’. Un tablero de ajedrez tiene 8 filas y 8 columnas.
#include <iostream>
using namespace std;

int main() {
 cout << "Tablero de ajedrez." << endl; // prints !!!Hello World!!!

 for(int i= 1; i <= 8; i++){
  for(int j = 1; j <= 8; j++){
   if ((i + j)%2 == 0){
        cout << " B ";
   }else {
        cout << " N ";
   }
  }
  cout << endl;
 }
 return 0;
}
Ejercicio 4
Escribe un programa que, dada una secuencia de caracteres terminada en un punto, nos devuelva la posición en la tabla ASCII asociada a cada uno de los caracteres leídos. Posteriormente y antes de finalizar mostraremos por pantalla el número total de caracteres leídos.
#include <iostream>
using namespace std;

int main() {
 char a;
 int num = 0;
 cout << "Escriba una secuencia de caracteres terminada en un punto." << endl; // prints !!!Hello World!!!
 cin >> a;

 while(a != '.'){
  cout << "Posición en la tabla ASCII de " << a << " es: " << int(a) << endl;
  num++;
  cin >> a;
 }
 cout << endl;
 cout << "Se han leído "<< num << " caracteres.";
 return 0;
}
Ejercicio 5
La constante matemática pi puede ser calculada con la siguiente fórmula:

Esta fórmula fue descubierta en el siglo XVII por un matemático inglés llamado J. Wallis. Escribe un programa que lea un valor entero, n, y a continuación calcule pi a partir de la anterior multiplicando las primeras n fracciones de la parte derecha de la fórmula. Para comprobar el correcto funcionamiento del programa, con el valor n=20, el valor de pi es aproximadamente 3.10352 (con n=300 el valor es 3.13898).

En este ejercicio me detengo un poco más, pues he estado buscando información sobre esta fórmula y la he visto expresada de maneras muy distintas, por lo que se me han ocurrido distintas maneras de hacerlo. La primera es la que hice en primer momento y es quizá la mas ruda. Con esta podemos llegar a unos valores muy aproximados de pi, pero no son los que aparecen en el enunciado. Sin embargo los valores obtenidos mediante el segundo programa sí son los que aparecen, pero para realizar este hay que pensar (o quizá buscar) algo más. Os dejo ambas soluciones.

#include <iostream>
using namespace std;

int main() {
 int n;
 cout << "Introduce n:";
 cin >> n;
 double pi =4, i = 2, j=3;
 int nmult = 0;

 while(nmult <= n){
  pi = pi * i/j;
  i = i + 2;
  nmult++;
  if(nmult <= n){
   pi = pi * i/j;
   j = j + 2;
   nmult++;
  }
 }
 cout << "Pi = "<< pi<< endl;
 return 0;
}
#include <iostream>
using namespace std;

int main() {
 int n;
 double pi=2.0, fraccion;
 do{
  cout<<"Introduce n: ";
  cin>>n;
 }while(n < 0);
 for (int i=1; i<=n; i++){
  fraccion = (4.0*i*i /(2*i-1))/(2*i+1);
  pi = pi* fraccion;
 }

 cout<<"Pi = "<< pi;
 return 0;
}
Ejercicio 6
Codifique un programa que se comporte como una calculadora simple que realice operaciones hasta que el usuario introduzca el carácter ‘&’. Para ello deberá tener las siguientes características:

  • Solo efectuará operaciones con dos operandos.
  • Operaciones permitidas: (+,-,*,/).
  • Se trabajará con operandos enteros.- Pedirá en primer lugar la operación a realizar, y a continuación los dos operandos.
  • Si el operador no se corresponde con alguno de los indicados se emitirá un mensaje de error.

#include <iostream>
using namespace std;

int main() {
 char op;
 int a, b;
 cout << "Programa que se comporta como una calculadora simple." << endl;

 do{
 cout << "Operación \t: ";
 cin >> op;

 if(op == '&'){
  cout << "FIN DEL PROGRAMA.";
 } else {
  if((op != '+') && (op!= '-') && (op != '*')&&(op != '/')){
   cout << "ERROR." << endl;
  }else{
   cout << "Operando 1 \t: ";
   cin >> a;
   cout << "Operando 2 \t: ";
   cin >> b;
   cout << "Resultado \t: ";
   switch (op){
    case '+': cout << b+a << endl;
    break;
    case '-': cout << a - b << endl;
    break;
    case '*': cout << a* b << endl;
    break;
    case '/': cout << a/b << endl;
    break;
   }
  }
 }
 }while(op != '&');
 
 return 0;
}
Ejercicio 7
Modifique el programa anterior para que en el caso de que el usuario introduzca una operación equivocada el sistema termine elevando una excepción “Operación no existente”.
#include <iostream>
using namespace std;

int main() {
 char op;
 int a, b;
 cout << "Programa que se comporta como una calculadora simple." << endl;

 do{
 cout << "Operación \t: ";
 cin >> op;

 if(op == '&'){
  cout << "FIN DEL PROGRAMA.";
 } else {
  if((op != '+') && (op!= '-') && (op != '*')&&(op != '/')){
   throw "Operación no existente";
  }else{
   cout << "Operando 1 \t: ";
     cin >> a;
     cout << "Operando 2 \t: ";
     cin >> b;
     cout << "Resultado \t: ";
     switch (op){
     case '+': cout << b+a << endl;
     break;
     case '-': cout << a - b << endl;
     break;
     case '*': cout << a* b << endl;
     break;
     case '/': cout << a/b << endl;
     break;
     }
  }
 }
 }while(op != '&');
 
 return 0;
}

Un saludo ;)

No hay comentarios:

Publicar un comentario