C++ Ejemplos y Ejercicios
C++ Ejemplos y Ejercicios
C++ Ejemplos y Ejercicios
1.- INTRODUCCIÓN
El lenguaje C se origina con el lenguaje BCPL, creado por Martin Richards, el lenguaje
B implementado por Ken Thompson y por último el lenguaje C , implementado por
Dennis Ritchie en 1971.
C++ es muy potente, complejo y extenso y como sus estructuras básicas son las
mismas que otros muchos lenguajes resulta de interés trabajar con él
Hola, mundo
Hallar el resto de una división también llamado módulo es una importante operación
en programación.
//módulo
#include <iostream>
int main ()
{
std::cout <<48%5; El resultado es el resto de dividir 48 entre 5;
es decir 3.
return 0;
}
//Suma y resultado
#include <iostream>
int main ()
{
std::cout <<”6+7=” << 6+7; Cuando el programa se ejecute aparecerá en
pantalla 6+7= 13
return 0;
}
//Cuadrado de un número
#include <iostream>
int main ()
{
int numero; numero guarda un número entero
std::cout<<”Dime un numero:”; Pedimos el número al usuario
std::cin>>numero; Leemos un dato que guardamos
en la variable numero.
std:: cout <<”El cuadrado de tu numero es”<<numero*numero;
Calculamos y mostramos el
resultado.
return 0;
}
Problema 1: Calcula la resta de dos números que introduzca el usuario. Utiliza tres
variables.
2.5.- Evitar escribir std::
En programas largos puede resultar tedioso escribir std:: delante de cada cout y de
cada cin. Añadiendo using namespace std; al principio del programa se evitará
esto último.
int main ()
{
int n1, n2, suma;
cout<<”Dime un numero:”;
cin>>n1;
cout<<”Dime otro numero:”;
cin>>n2;
suma = n1+n2;
cout <<”Su suma es” <<suma <<endl;
return 0;
}
//Decimales
#include <iostream>
using namespace std;
int main ()
{
float n1, n2, cociente;
cout<<”Dime un numero:”;
cin>>n1;
cout<<”Dime otro numero:”;
cin>>n2;
cociente = n1/n2;
cout <<”La división es”<<cociente <<endl;
return 0;
}
Si queremos una precisión mayor utilizaremos una variable de tipo double que
tiene 15 cifras de precisión y permite disminuir errores de redondeo aunque ocupa
más espacio.
//seno
#include <iostream>
#include<cmath>
using namespace std;
int main ()
{
int numero=9;
double raiz = sqrt(numero)”;
cout<<”La raiz de:” <<numero<<”es”<<raiz << endl;
float angulogrados=45;
float PI=3.14159265;
double anguloradianes=angulogrados*PI/180;
cout <<”El seno de” <<angulogrados << “es”<<sin(anguloradianes) << endl;
return 0;
}
Problema 2: Crea un programa que calcule el coseno de ángulos con los siguientes
grados: 30, 45,60 y 90
3.1.- if
Para comprobar si se cumple una condición se emplea if (condición) sentencia;
int main ()
{
int numero;
cout<<”Escribe un número:”;
cin>> numero;
if (numero>0)
cout <<”El número es positivo.”;
return 0;
}
// sentencia compuesta
#include <iostream>
using namespace std;
int main ()
{
int numero;
cout<<”Escribe un número:”;
cin>> numero;
if (numero>0)
{
cout <<”El número introducido es positivo.”;
cout <<” También puedes escribir números negativos.”;
}
return 0;
}
3.2.- El caso contrario: else
Qué hacemos si no se cumple una condición.
// if y else
#include <iostream>
using namespace std;
int main ()
{
int numero;
cout<<”Escribe un número:”;
cin>> numero;
if (numero>=0)
cout <<”El número introducido es positivo.”;
else
cout <<”El número introducido es negativo.”;
return 0;
}
return 0;
}
Problema 5
Crea un programa que pida un número entero al usuario e indique si es múltiplo de 5.
Para ello, deberá comprobar si el resto que obtiene al dividir dicho número entre cinco
es cero.
Problema 6
Realiza un programa que pida dos números e indique si el primero es múltiplo del
segundo.
Problema 7
Crea un programa que pida al usuario dos números enteros y diga cuál es menor.
Problema 8
Realiza un programa que pida dos número al usuario. Si el segundo no es cero,
mostrará la división de ambos; de lo contrario, aparecerá un mensaje de error.
int main ()
{
int numero;
cout<<”Escribe un número:”;
cin>> numero;
if (!(numero==0))
cout <<”No es cero.”;
if ((numero==2)||(numero==3))
cout <<” Es dos o tres.”;
if ((numero>=2)&&(numero<=7))
cout <<” Esta entre 2 y 7 (incluidos).”;
return 0;
}
// Operador condicional
#include <iostream>
using namespace std;
int main ()
{
int a=3, b=5;
int mayor= a>b ? a:b
cout<<”El mayor es:” << mayor;
return 0;
}
int main ()
{
int a=3, b=5, mayor;
if (a>b)
mayor = a;
else
mayor = b;
cout <<” el mayor es:”<< mayor;
return 0;
}
3.6.- switch
Para analizar varios valores posibles de una misma variable, se puede emplear la
orden switch. La variable entre paréntesis y cada posible valor se indica tras la
palabra case:. Las ordenes a ejecutar deben terminar con break y usando default se
indica qué hacer si no se da ninguno de los casos preestablecidos.
int main ()
{
int numero;
cout <<” Introduce un número del 1 al 5”;
cin>> numero;
switch (numero)
{
case 1: cout<<”Uno”;
break;
case 2: cout<<”Dos”;
break;
case 3: cout<<”Tres”;
break;
case 4: cout<<”Cuatro”;
break;
case 5: cout<<”Cinco”;
break;
default: cout<<”Valor incorrecto!”;
}
return 0;
}
Cuando varios casos tengan que mostrar un mismo resultado, se puede dejar vacío el
primero de ellos. Por ejemplo como 9 y 10 son ambos un sobresaliente,
case 9:
case 10: cout<<”Sobresaliente”;
break;
Problema 9
Crea un programa que pida al usuario tres números reales e indique el valor numérico
del mayor de ellos. Tener en cuenta que el usuario puede meter algún valor repetido.
Problema 10
Elabora un programa que pida al usuario dos números enteros y diga:” Uno de los
números es negativo”, “los dos números son negativos” o bien “ Ninguno de los
números es negativo”, según corresponda.
Problema 11
Diseña, usando if, un programa que pida al usuario un número del 1 al 10 y diga si es
par o no.
Problema 12
Elabora, usando switch, un programa que pida al usuario un número del 1 al 10 y
escriba el nombre de la nota correspondiente.
Problema 13
Crea un programa, usando switch, que pida a un usuario un número del 1 al 10 y diga
si es múltiplo de 3 o no.
4.- BUCLES
Muchas veces tendremos que verificar las condiciones más de una vez y para ello
utilizaremos bucles.
4.1.- while
Para repetir una condición utilizaremos while (mientras) en lugar de if.
int main ()
{
int numero;
cout <<” Escribe un numero positivo”;
cin>> numero;
while (numero<=0)
{
cout <<” Ese numero no es positivo”<<endl;
cout <<” Escribe otro numero positivo”;
cin>> numero;
}
return 0;
}
Si el usuario escribe un número negativo, le dirá que no es negativo y que escriba
uno positivo tantas veces como el usuario meta números negativos. Una vez que
meta un número positivo, se saldrá del while y terminará el programa porque ya no
se cumple la condición del while.
4.2.- do-while
El do-while, haz mientras se cumpla la condición establecida.
int main ()
{
int numero;
do
{
cout <<” Escribe un numero positivo”;
cin>> numero;
if(numero<=0)
cout <<” Ese numero no es positivo”<<endl;
}
while (numero<=0);
return 0;
}
Con while, si introducimos un número positivo la primera vez, la condición del while
no se cumple y por tanto no se entrará en el bucle while y el programa terminará sin
embargo con do-while, siempre se realizará una vez las órdenes que se indiquen ya
que la condición se comprobará al final.
4.3.- Contadores
En programación se suelen usar mucho contadores para lo que usaremos while,
aumentando el valor de una variable.
int main ()
{
int numero=1;
while (numero<=10)
{
cout<<numero<< “ “;
numero=numero+1;
}
return 0;
}
4.4- for
Para crear contadores se puede usar una orden, for (para) de modo que podamos
agrupar los tres primeros pasos, valor inicial, incremento y comprobación.
int main ()
{
int numero;
for(numero=1; numero<=10; numero=numero+1)
cout<<numero<< “ “;
return 0;
}
Podemos salir de un bucle antes de tiempo utilizando la orden break.
// Interrumpir un bucle con break
#include <iostream>
int main ()
{
int numero;
for (numero=1; numero<=10; numero++)
{
if (numero == 5)
break;
cout << numero <<” ”;
}
return 0;
}
int main ()
{
while(3>2) cout>>”Hola”;
for (int numero=0; numero<=10;)
cout << “ Hola “;
for (;;)
cout << “ Hola “;
return 0;
}
Podemos anidar bules para por ejemplo escribir tablas de multiplicar del 1 al 5.
// Bucles anidados
#include <iostream>
using namespace std;
int main ()
{
int tabla, numero;
for (tabla=1; tabla<=5; tabla++)
{
for(numero = 1; numero<=10; numero++)
cout<<tabla<<”por”<<numero <<”es”<<tabla*numero<<endl;
break;
cout << endl;
}
return 0;
}
4.5- Incremento
Incrementar variables es una operación tan común que algunos lenguajes incorporan
una forma abreviada numero++.
int main ()
{
int numero;
for(numero=1; numero<=10; numero++)
cout<<numero<< “ “;
return 0;
}
int main ()
{
int numero;
for(numero=10; numero>=0; numero-=2)
cout<<numero<< “ “;
return 0;
}
int main ()
{
for(int numero=10; numero>=0; numero-=2)
cout<<numero<< “ “;
return 0;
}
Problema 14
Diseña un programa, usando while, que escriba en pantalla, de mayor a menor, los
números impares pares del 1 al 30.
Problema 15
Elabora un programa que dé al usuario la oportunidad de adivinar un número del 1 al
100, en un máximo de seis intentos. En cada intento, el programa deberá avisar al
usuario de si se ha pasado o se ha quedado corto.
Problema 16
Crea un programa que pida números positivos al usuario y calcule la suma de todos
ellos (saldremos del bucle con un número negativo o con el cero).
Problema 17
Elabora un programa que pida al usuario su código de usuario y su contraseña, y que
no le permita finalizar hasta que introduzca el código de usuario 2017 y la contraseña
7890.
// Arrays1
#include <iostream>
using namespace std;
int main ()
{
int datos[7] = (300,200,100,0,-100,250,175);
int suma;
int i;
for (i=0; i<=6; i++)
suma +=datos[i];
cout<<”Su suma es”<<suma;
return 0;
}
// Arrays2
#include <iostream>
using namespace std;
int main ()
{ int datos[5];
int i;
for (i=0; i<=4; i++)
{
cout<<”Dime el dato”<<i+1<<”:”;
cin>>datos[i];
}
for (i=4; i>=0; i--)
cout<<”El dato”<<i+1<<”es”<<datos[i]<<endl;
return 0;
}
Problema 18
Crea un programa que pida cuatro números al usuario, los memorice utilizando un
array, calcule su media aritmética y , finalmente, muestre en pantalla tanto la media
como los datos tecleados.
// Arrays bidimensionales
#include <iostream>
using namespace std;
int main ()
{ int medidas[2][10];
{
{2.25, 2.27, 2.30, 2.32, 2.33, 2.35, 2.36, 2.37, 2.38, 2.39}
{2.23, 2.26, 2.27, 2.29, 2.31, 2.32, 2.33, 2.35, 2.38, 2.40}
};
cout<<”La tercera medida de la serie 2 es ”<<tiempos[1][2];
return 0;
}
int main ()
{ float valor;
int datos[3];
cout<<”valor vale”<<valor<endl;
for (int i=0; i<=2; i++)
cout<<”El dato”<<i+1<<”es”<<datos[i]<<endl;
return 0;
}
int main ()
{ int datos[1000];
int contador=0;
int actual;
do
{
cout<<”dime un dato (5555 para salir):”;
cin>>actual;
if ((actual != 55555) && (contador<=999))
{
datos[contador] = actual;
contador++;
}
}
while ((actual != 55555) && (contador<=999));
cout<<”Los”<<contador<<”datos son: ”;
for (int i=0; i<contador; i++)
cout<<datos [i]<<” ”;
return 0;
}
Problema 19
Crea un programa que pida 11 números al usuario, los memorice (utilizando una tabla
no variables), calcule su media aritmética y finalmente muestre en pantalla los datos
tecleados y la media.
Problema 20
Elabora un programa que almacene en una tabla el número de días que tienen cada
mes (suponiendo que se trata de un año no bisiesto), pida al usuario que indique un
mes determinado (considerando 1=enero u 12= diciembre) y muestra en pantalla el
número de días que tiene el mes indicado.
Problema 21
Crea un programa que pida al usuario diez números enteros e indique cuál es el
menor.
Problema 22
Busca información sobre la “ordenación de burbuja” y crea un programa que pida diez
datos numéricos al usuario y los muestre ordenados de menor a mayor.
6.- FICHEROS
Para no perder la información que maneja un determinado programa, volcaremos los
datos antes de salir del programa a un fichero.
Para manejar ficheros, hay que primero abrir el fichero, luego leer sus datos o
escribirlos en el fichero y por último cerrar el fichero.
Hay que recordar que si queremos abrir un fichero, éste tiene que existir y para
escribir en un fichero éste no puede ser de sólo lectura.
int main ()
{
ofstream fichero(“prueba.txt”);
fichero <<”Esto es una linea” <<endl;
fichero <<”Esto es otra linea” <<;
fichero <<” y esto es la continuación de la linea anterior” <<endl;
fichero.close();
cout<<”Fichero creado”<<endl;
return 0;
}
int main ()
{
ifstream fichero(“prueba.txt”);
string palabra;
fichero>>palabra
cout<<”Se ha leido:”<<endl;
cout<<palabra << endl;
fichero.close();
return 0;
}
int main ()
{
ifstream fichero(“prueba.txt”);
string linea;
getline(fichero, linea);
cout<<”Se ha leido la linea”<<endl;
cout<<linea << endl;
fichero.close();
return 0;
}
int main ()
{
string linea;
ifstream fichero(“prueba.txt”);
while(!fichero.eof())
{
getlinte(fichero,linea);
if (!fichero.eof())
cout<<linea<<endl;
}
fichero.close();
return 0;
}
Esta será la estructura básica de casi cualquier programa que deba leer un fichero
completo, de principio a fin: abrir, procesar todos los datos con
while(!fichero.eof()) y cerrar. Por ejemplo, se podrían mostrar y numerar así las
líneas de un fichero.
int contador=1;
ifstream fichero(“prueba.txt”);
while(!fichero.eof())
{
getlinte(fichero,linea);
if (!fichero.eof())
cout<<contador<<”:”<<linea<<endl;
contador++;
}
fichero.close();
int main ()
{
string nombre;
string linea;
cout<<”Dime el nombre del fichero:”;
getline(cin, nombre);
ifstreamfichero(nombre.c_str());
while(!fichero.eof())
{
getlinte(fichero,linea);
if (!fichero.eof())
cout<<linea<<endl;
}
fichero.close();
return 0;
}
int main ()
{
string nombre;
string linea;
cout<<”Dime el nombre del fichero:”;
getline(cin, nombre);
ifstreamfichero(nombre.c_str());
if(fichero.fail()
{
cout<<”¡No existe el fichero!”<<endl;
exit(1);
}
while(!fichero.eof())
{
getlinte(fichero,linea);
if (!fichero.eof())
cout<<linea<<endl;
}
fichero.close();
return 0;
}
Problema 23
Crea un programa que pida números y los guarde en un fichero numeros.txt,
separados por espacios en blanco. Finalizará cuando se introduzca el número 0.
Problema 24
Elabora un programa que pida un nombre de fichero y muestre su contenido,
haciendo una pausa cada 7 líneas (lee línea a linea con getline y comprueba si
(numerolinea%7==6)
Problema 25
Diseña un programa que muestra el resultado de la suma de los números
almacenados en numeros.txt
7.- FUNCIONES
cout<<”segundo ejercicio”<<endl;
for(i=0; i<20; i++)
cout<< “ - “;
cout<<endl;
cout<<”tercer ejercicio”<<endl;
for(i=0; i<20; i++)
cout<< “ - “;
cout<<endl;
return 0;
}
Este código hace aparecer en pantalla Primer ejercicio subrayado, luego segundo
ejercicio subrayado y así sucesivamente.
cout<<”segundo ejercicio”<<endl;
subrayar();
cout<<”tercer ejercicio”<<endl;
subrayar();
return 0;
}
//primera función
#include <iostream>
using namespace std;
void subrayar()
{
int i;
for(i=0; i<20; i++)
cout<< “ - “;
cout<<endl;
}
int main ()
{
cout<<”primer ejercicio”<<endl;
subrayar();
cout<<”segundo ejercicio”<<endl;
subrayar();
cout<<”tercer ejercicio”<<endl;
subrayar();
return 0;
}
Este programa tiene dos bloque uno de ellos es main, el cuerpo del código, el otro
bloque, subrayar que se encarga de realizar la tarea repetitiva.
El término void indica que no se trata de una función matemática que devuelva un
resultado numérico, sino de un procedimiento o subrutina que realiza algo y no
devuelve ningún resultado.
Además la variable i es una variable local ya que solo es accesible dentro del bloque
en el que está declarada luego su valor no se podrá consultar ni variar desde main. A
diferencia de las variables globales que son las que se meten fuera de main y de
subrayar de modo que sea accesible desde ambas funciones como se ve en el
siguiente ejemplo.
cout<<”segundo ejercicio”<<endl;
subrayar(18);
cout<<”tercer ejercicio”<<endl;
subrayar(21);
return 0;
}
Ejercicio 26
Crea una función escribir tabla que muestre en pantalla la tabla de multiplicar del
número que el usuario introduzca por teclado.
Como podemos observar una función que devuelve un valor no será void sino que
será int o de algún otro tipo y deberá terminar por la orden return.
Si una función puede devolver un valor de entre varios distintos, puede contener
varias órdenes return distintas. Por ejemplo, creamos una función que diga cuál es el
mayor de dos números reales:
Habrá ocasiones en que nos interese modificar el valor de un parámetro, por ejemplo
en las ocasiones en que haya que devolver más de un resultado. Para conseguirlo,
debemos preceder el nombre del parámetro por el símbolo & (denominado
“ampersand” en inglés y “et”, en francés) con el fin de indicar que los cambios que se
realicen en ese parámetro deben conservarse:
//Modificar un parámetro
#include <iostream>
using namespace std;
void duplicar(int &n)
{
n=n*2;
}
int main ()
{
int numero=5;
cout<<”El numero vale”<<numero<<endl;
duplicar(numero);
cout<<”Tras duplicar se convierte en “ <<numero<<endl;
return 0;
}
Ejercicio 29
Crea una función intercambia que reciba dos números enteros e intercambie sus
valores por medio de la utilización de dos parámetros por referencia:
intercambiar(int &a, int &b).