Programas en C++ y C: áreas, MCD, triángulos, Fibonacci, dígitos y dados
Ejercicios de programación en C++ y C
A continuación se presentan varios programas didácticos que ilustran el uso de funciones, estructuras de control, bucles y constantes en los lenguajes C++ y C.
1. Cálculo de áreas geométricas
El siguiente programa permite al usuario seleccionar una figura y calcular su área mediante funciones independientes.
- Círculo: área = radio² × π
- Cuadrado: área = lado²
- Rectángulo: área = base × altura
- Triángulo: área = (base × altura) / 2
#include <iostream>
#include <cmath>
using namespace std;
void areaDelCirculo(void);
void areaDelCuadrado(void);
void areaDelRectangulo(void);
void areaDelTriangulo(void);
void mostrarArea(float area);
const float Pi = 3.14159;
int main(){
char opcion;
cout << "Selecciona el área que deseas calcular" << endl;
cout << " a) Círculo\n b) Cuadrado\n c) Rectángulo\n d) Triángulo\n";
cin >> opcion;
switch(opcion){
case 'a': areaDelCirculo(); break;
case 'b': areaDelCuadrado(); break;
case 'c': areaDelRectangulo(); break;
case 'd': areaDelTriangulo(); break;
}
return 0;
}
void mostrarArea(float area){
cout << "El área es: " << area << endl;
return;
}
void areaDelCirculo(void){
float radio, area = 0;
cout << "Ingresa el radio: ";
cin >> radio;
area = pow(radio, 2) * Pi;
mostrarArea(area);
return;
}
void areaDelCuadrado(void){
float lado, area = 0;
cout << "Ingresa un lado: ";
cin >> lado;
area = pow(lado, 2);
mostrarArea(area);
return;
}
void areaDelRectangulo(void){
float base, altura, area = 0;
cout << "Ingresa la base: ";
cin >> base;
cout << "Ingresa la altura: ";
cin >> altura;
area = base * altura;
mostrarArea(area);
return;
}
void areaDelTriangulo(void){
float base, altura, area = 0;
cout << "Ingresa la base: ";
cin >> base;
cout << "Ingresa la altura: ";
cin >> altura;
area = (base * altura) / 2;
mostrarArea(area);
return;
}Nota: el valor de π corregido es 3.14159.
2. Máximo común divisor con el algoritmo de Euclides
El algoritmo de Euclides calcula el MCD de dos números mediante restas sucesivas.
#include <iostream>
using namespace std;
int algoritmoDeEuclides(int numero1, int numero2);
int main(){
int num1, num2;
cout << "Ingresa dos números" << endl;
cin >> num1 >> num2;
cout << "El MCD de " << num1 << " y " << num2 << " es: " << algoritmoDeEuclides(num1, num2) << endl;
return 0;
}
int algoritmoDeEuclides(int numero1, int numero2){
while(numero1 != numero2){
if(numero1 > numero2){ numero1 -= numero2; }
else { numero2 -= numero1; }
}
return numero1;
}3. Triángulo de números
Este programa imprime un triángulo de dígitos formado por ascenso y descenso módulo 10.
#include <iostream>
using namespace std;
const int MAXIMO_DE_FILAS = 10;
void escribirCaracter(int n, char simbolo);
void escribirCaracterAscendente(int fila, int n);
void escribirCaracterDescendente(int n, int fila);
void escribirFila(int fila, int numeroDeFila);
void escribirTriangulo(int numeroDeFila);
int main(){
cout << "Introduzca el número de filas: ";
int numeroDeFilas;
cin >> numeroDeFilas;
escribirTriangulo(numeroDeFilas);
return 0;
}
void escribirCaracter(int n, char simbolo){
for(int i = 0; i < n; i++){ cout << simbolo; }
return;
}
void escribirCaracterAscendente(int fila, int n){
for(int i = fila; i <= n; i++){ cout << i % 10; }
return;
}
void escribirCaracterDescendente(int n, int fila){
for(int i = n; i >= fila; i--){ cout << i % 10; }
return;
}
void escribirFila(int fila, int numeroDeFila){
escribirCaracter((numeroDeFila - fila), ' ');
escribirCaracterAscendente(fila, ((2 * fila) - 1));
escribirCaracterDescendente(((2 * fila) - 2), fila);
cout << endl;
return;
}
void escribirTriangulo(int numeroDeFila){
for(int fila = 1; fila <= numeroDeFila; fila++){ escribirFila(fila, numeroDeFila); }
return;
}4. Serie de Fibonacci
La sucesión de Fibonacci inicia con 0 y 1, y cada término siguiente es la suma de los dos anteriores.
#include <iostream>
using namespace std;
const int PRIMER_NUMERO_FIBONACCI = 0;
const int SEGUNDO_NUMERO_FIBONACCI = 1;
void imprimirFibonacci(int numero);
int main(){
int numero;
cout << "Introduzca N: ";
cin >> numero;
imprimirFibonacci(numero);
return 0;
}
void imprimirFibonacci(int numero){
if(numero > 0){ cout << PRIMER_NUMERO_FIBONACCI << ", "; }
if(numero > 1){ cout << SEGUNDO_NUMERO_FIBONACCI << ", "; }
int fibonacciPrimero = PRIMER_NUMERO_FIBONACCI;
int fibonacciActual = SEGUNDO_NUMERO_FIBONACCI;
for(int i = 2; i < numero; i++){
int fibonacciSegundo = fibonacciPrimero;
fibonacciPrimero = fibonacciActual;
fibonacciActual = fibonacciPrimero + fibonacciSegundo;
cout << fibonacciActual << ", ";
}
cout << endl;
return;
}5. Suma de dígitos extremos
Este programa suma los dígitos de los extremos de un número, avanzando hacia el centro.
#include <iostream>
using namespace std;
void escribirSumaDeDigitos(int numero);
int buscarDigito(int numero, int digito);
int verificarCantidadDeDigitos(int numero);
int main(){
int numero;
cout << "Ingrese un número: ";
cin >> numero;
escribirSumaDeDigitos(numero);
return 0;
}
void escribirSumaDeDigitos(int numero){
int numeroDeDigitos = verificarCantidadDeDigitos(numero);
for(int i = 0; i < numeroDeDigitos / 2; i++){
int digitoInicial = buscarDigito(numero, i);
int digitoFinal = buscarDigito(numero, (numeroDeDigitos - i - 1));
cout << digitoInicial << " + " << digitoFinal << " = " << (digitoInicial + digitoFinal) << endl;
}
if(numeroDeDigitos % 2 != 0){ cout << buscarDigito(numero, (numeroDeDigitos / 2)); }
return;
}
int buscarDigito(int numero, int digito){
int resto = numero;
for(int i = 0; (resto > 0) && (i < digito); i++){ resto /= 10; }
return resto % 10;
}
int verificarCantidadDeDigitos(int numero){
int resto = numero;
int i = 1;
while(resto > 9){ resto /= 10; ++i; }
return i;
}6. Juego de dados (craps) en C
Este programa simula el juego de craps utilizando una enumeración para representar el estatus del juego y la función rand() para generar tiradas aleatorias.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum Estatus { CONTINUA, GANA, PIERDE };
int tiraDados(void);
int main(){
int suma;
int miPunto;
enum Estatus estatusJuego;
srand(time(NULL));
suma = tiraDados();
switch(suma){
case 7:
case 11:
estatusJuego = GANA;
break;
case 2:
case 3:
case 12:
estatusJuego = PIERDE;
break;
default:
estatusJuego = CONTINUA;
miPunto = suma;
printf("Su punto es %d\n", miPunto);
break;
}
while(estatusJuego == CONTINUA){
suma = tiraDados();
if(suma == miPunto){
estatusJuego = GANA;
} else {
if(suma == 7){ estatusJuego = PIERDE; }
}
}
if(estatusJuego == GANA){
printf("Gana el jugador");
} else {
printf("Pierde el jugador");
}
return 0;
}
int tiraDados(void){
int dado1;
int dado2;
int sumaTemp;
dado1 = 1 + (rand() % 6);
dado2 = 1 + (rand() % 6);
sumaTemp = dado1 + dado2;
printf("El jugador tiró %d + %d = %d\n", dado1, dado2, sumaTemp);
return sumaTemp;
}