domingo, 6 de abril de 2014

Ejercicios C++: procedimientos y funciones

Hola! En esta entrada seguimos avanzando con C++ y soluciono ejercicios de procedimientos y funciones.


Escribe un programa que imprima una pirámide de dígitos como la de la figura, tomando
como entrada el número de filas de la misma (debe ser menor de 10):

#incluye<iostream>
using namespace std;

int LeerNFilas(){
 int filas;
 do{
  cout << "Introduce el número de filas de la pirámide entre 1 y 10 ";
  cin >> filas;
 }while(filas < 1 || filas > 10);
 return filas;
}

void PiramideDigitos(int filas){
 for(unsigned i= 1; i <= filas; i++){
  for(unsigned j = 1; j <= (filas - i); j++){
   cout << " ";
  }
  for(unsigned j= 1; j <= i; j++){
   cout << j;
  }
  for(unsigned h = (i-1); h >= 1; h-- ){
   cout << h;
  }

  cout << endl;
 }
}


int main() {
 int filas;
 cout << "Practica 4. Pirámide de dígitos" << endl;
 filas= LeerNFilas();
 PiramideDigitos(filas);
 return 0;
}

Escribe un programa que calcule el valor de S para un número real X dado por teclado,
utilizando la siguiente serie:
S = 1 + x + (x ^ 2) / 2! + (x^ 3) / 3! + (x ^ 4/4!) + ...
Nota: No se añadirán más sumandos cuando se calcule uno con valor menor que 0.0001.


#include  <iostream>
using namespace std;

const double MINIMO = 0.0001;



double potencia(double a,unsigned b) {
 double resultado = 1;
 if(b == 1){
  resultado = a;
 } else if (b > 1){
  for(int i = 1; i <= b; i++){
   resultado = resultado * a;
  }
 }
 return resultado;
}
unsigned factorial(int x){
 unsigned fact = 1;
 for(unsigned i= 2; i <= x; i++){
  fact = fact * i;
 }
 return fact;
}

double serie(double x){
 double suma = 1;
 double sumando = 1;
 unsigned i = 1;
 while(sumando >= MINIMO){
  sumando = potencia(x, i)/ factorial(i);
  suma = suma + sumando;
  i++;
 }
 return suma;
}


int main (){
 cout << " Introduzca el valor de X (X>=0 y X<=1): ";
 double x;
 cin >> x;

 if (! (x >= 0 && x <= 1)){
  throw "Error . Valor de X fuera de rango" ;
 } else {
  cout << " Serie : " << serie (x) << endl ;
 }
} 

Escribe un programa que calcule e imprima por pantalla los N primeros números primos,
siendo N un número natural que se introduce por teclado. Por ejemplo, si N = 8, los primos
que se mostrarán por pantalla son 1, 2, 3, 5, 7, 11, 13, 17..
#include <iostream>
using namespace std;


unsigned leerDato(){
 unsigned n;
 cout << "Introduce N: ";
 cin >> n;
 return n;
}

bool esPrimo(unsigned num){
 bool loes = true ;
 unsigned i = 2;
 while((loes == true) && (i <= unsigned(num/2))){ //modificar para que sea mas rapido
  if(num != i){
   if(num%i == 0){
    loes = false;
   }
  }
  i++;
 }
 return loes;
}

void imprimePrimos(unsigned N){
 unsigned contador = 0;
 unsigned i = 1;

 while(contador < N){
  if(esPrimo(i)){
   cout << i <<", ";
   contador ++;
  }
  i++;
 }
}

int main() {
 unsigned N;
 cout << "Programa que calcula e imprime por pantalla los N primeros números primos." << endl; // prints !!!Hello World!!!
 N = leerDato();
 imprimePrimos(N);
 return 0;
}
Dos números a y b se dice que son amigos si la suma de los divisores de a (salvo él mismo)
coincide con b y viceversa. Diseña un programa que tenga como entrada de teclado dos
números naturales n y m y que muestre en la pantalla todas las parejas de números amigos
que existan en el intervalo determinado por n y m. El programa debe asegurarse de que n sea
menor que m.

#incluye <iostream>
using namespace std;


void leerDatos(unsigned& n, unsigned& m){
 do{
 cout << "Introduzca n y m (n < m) :";
 cin >> n >> m;
 }while (m < n);
}

unsigned SumaDivisores(unsigned num){
 unsigned suma = 1;
 for(unsigned i= 2; i < num; i++){
  if(num%i == 0){
   //cout << "Divisores de 6: " << i << endl;
   suma = suma + i;
  }
 }
 //cout << "Suma divisores de 6:" << suma << endl;
 return suma;
}

bool sonAmigos(unsigned a, unsigned b){
 bool son = false;
 if((SumaDivisores(a) == b) && (SumaDivisores(b)== a)){
  son = true;
 }
 return son;
}

void imprimirParejas(unsigned n, unsigned m){
 for(unsigned i = n; i <= m; i++){
  for(unsigned j = i; j <= m; j++){
   cout << i << " y "<< j;
   if(sonAmigos(i, j)){
    cout << " son amigos."<< endl;
    cout<<" Suma de divisores de "<<i<<" es "<<SumaDivisores(i)<<" = "<<j<<endl;
    cout<<" Suma de divisores de "<<j<<" es "<<SumaDivisores(j)<<" = "<<j<<endl;
   }else{
    cout << " no son amigos." << endl;
   }
  }
 }
}

int main() {
 unsigned n, m;
 cout << "Programa que muestra en la pantalla todas las parejas de números amigos que existan en el intervalo determinado por n y m." << endl; // prints !!!Hello World!!!
 leerDatos(n, m);
 imprimirParejas(n,m);
 return 0;
}

Escribe un algoritmo que lea un número natural N por teclado y dibuje un rombo de
asteriscos como el de la figura (N=5):

#include <iostream>
using namespace std;

void leerDatos(int& x){
 do{
  cout << "Introduce altura de la pirámide: ";
  cin >> x;
 }while( x < 1);
}

void dibujarFila(int x, int i){
 for(unsigned j = 1; j <= (x-i); j++){
  cout << "  ";
 }
 for(unsigned j = 1; j<= i; j++){
  cout << " *  ";
 }

}

void dibujarPiramide (int x){
 for(unsigned i = 1; i <= x; i++){
  dibujarFila(x, i);
  cout << endl;
 }
}

void dibujarPiramideInv (int x){
 for(unsigned i= 1; i < x; i++){
  for(unsigned j = 1; j <= i ; j++){
   cout << "  ";
  }
  for(unsigned j = 1; j <= (x - i); j++){
   cout << " *  ";
  }

  cout << endl;
 }
}

int main() {
 int x;
 leerDatos(x);
 dibujarPiramide(x);
 dibujarPiramideInv(x);
 return 0;
}


Diseña un algoritmo que lea de teclado un número natural N mayor que cero y muestre las N
primeras filas del siguiente triángulo.

#include <iostream>
using namespace std;

int LeerNFilas(){
 int filas;
 do{
  cout << "Introduce el número de filas de la pirámide: ";
  cin >> filas;
 }while(filas < 1);
 return filas;
}

void PiramideDigitos(int filas){
 for(unsigned i= 1; i <= filas; i++){
  for(unsigned j = 1; j <= (filas - i); j++){
   cout << " ";
  }
  for(unsigned j= i; j <= (i + i -1); j++){
   cout << j%10;
  }
  for(unsigned h = (i + i -2); h >= i; h-- ){
   cout << h%10;
  }

  cout << endl;
 }
}


int main() {
 int filas;
 cout << "Practica 4. Pirámide de dígitos" << endl;
 filas= LeerNFilas();
 PiramideDigitos(filas);
 return 0;
}

Un saludo! (:

No hay comentarios:

Publicar un comentario