Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- #define SALTO1 cout<<"\n"
- #define SALTO2 cout<<"\n\n"
- #define TAB3 cout<<"\t\t "
- //Menú
- bool programa();
- void menu();
- int leerOpc();
- //Pascal
- void triangPascal(int);
- void impMat(int**, int);
- void espaciar(int, int, int);
- void leerPascal();
- ///Fibonacci
- void fibonacci(int, long long int *);
- void leerFib();
- ///Armstrong
- int digitar(const int, int [], int);
- bool esNumArmstrong(int);
- long int pot(int, int);
- void leerArmstrong();
- int main()
- {
- while(programa());
- return 0;
- }
- bool programa(){
- int opc;
- do{
- system("clear");
- menu();
- opc = leerOpc();
- }while( (opc<1) || (opc>4) );
- system("clear");
- switch (opc){
- case 1:
- leerPascal();
- SALTO2;
- system("pause");
- return 1;
- case 2:
- leerFib();
- system("pause");
- return 1;
- case 3:
- leerArmstrong();
- system("pause");
- return 1;
- case 4:
- return 0;
- }
- }
- ///MENÚ
- void menu(){
- string menuOps[]={"M E N Ú",
- "1. Triángulo de Pascal",
- "2. Fibonacci",
- "3. Armstrong",
- "4. Salir"};
- int elem_menu=5;
- SALTO2;
- for(int i=0; i<elem_menu; i++){
- TAB3;
- cout<<menuOps[i]<<endl;
- if( i==0 ) SALTO2;
- }
- SALTO2;
- TAB3;
- }
- int leerOpc(){
- int opc;
- cin>>opc;
- return opc;
- }
- /// De MENÚ
- ///PASCAL
- void leerPascal(){
- int n_filas;
- cout<<"Cuántas filas deseas del triángulo de Pascal?\n\n\t";
- cin>>n_filas;
- SALTO2;
- triangPascal(n_filas);
- }
- void triangPascal(int n){
- int **triangle = new int*[n];
- for(int i=0; i<n; i++)
- triangle[i] = new int[n];
- //Rellenamos la matriz
- //0's
- for(int i=0; i<n; i++)
- for(int j=0; j<n; j++)
- triangle[i][j] = 0;
- // 1's
- for(int i=0; i<n; i++)
- for(int j=0; j<n; j++)
- if( (j==0) || (i==j) )
- triangle[i][j] = 1;
- // sumas
- for(int i=2; i<n; i++)
- for(int j=1; j<n && i!=j; j++)
- triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
- //Imprime la matriz
- impMat(triangle, n);
- //Borra la matriz triangle
- for(int i=0; i<n; i++)
- delete[] triangle[i];
- delete[] triangle;
- }
- void impMat(int **mat, int n){
- int spacing=3;
- int m=n+4;
- for(int i=0; i<n; i++, m--){
- for(int j=0; j<n; j++)
- if( mat[i][j] != 0 ){
- if( j==0 )
- espaciar(i+1, m, spacing);
- cout<<" "<<mat[i][j]<<" ";
- }
- cout<<endl;
- }
- }
- void espaciar(int fil, int n, int spcng){
- int spaces = (spcng*n-fil)/2;
- for(int i=0; i<=spaces; i++)
- cout<<" ";
- }
- /// De PASCAL
- /// FIBONACCI
- void fibonacci(const int elem, long long int *arr){
- int fib=1;
- arr[0]=0;
- for(int i=1; i<elem; i++){
- arr[i]=fib;
- fib = arr[i-1] + fib;
- }
- }
- void leerFib(){
- int numero;
- long long int *arr;
- //Si el num solicitado es menor o igual que 1
- do
- {
- cout << "Introduce un número mayor que 1: ";
- cin >> numero;
- }while(numero<=1);
- system("clear");
- cout << endl;
- cout << "Los " << numero << " primeros numeros de la serie de Fibonacci son:" << endl;
- arr = new long long int[numero];
- fibonacci(numero, arr);
- cout << endl << endl;
- //imp fib
- for(int j=0; j<numero; j++){
- cout<<arr[j];
- if( j!=(numero-1) )
- cout<<", ";
- else
- cout<<" ...";
- }
- SALTO2;
- }
- /// De FIBONACCI
- ///ARMSTROMG
- bool esNumArmstrong(int num){
- int tam=10,
- arr[tam],
- digits,
- sumDig=0;
- bool armstrong;
- //dígitos
- digits = digitar(num, arr, tam);
- //suma
- for(int i=0; i<digits; i++)
- sumDig += pot(arr[i], digits);
- //Vemoa si es un armstrong
- ( sumDig == num )?
- (armstrong=true): (armstrong=false);
- return armstrong;
- }
- void leerArmstrong(){
- int num;
- cout<<"Escribe un número y vamos a ver si es un número narcisista. Por ejemplo, el 153 lo es.";
- SALTO2;
- cin>>num;
- SALTO2;
- if( esNumArmstrong(num) )
- cout<<"Vaya! Vaya! Has encontrado uno! El número "<<num<<" es un número Armstromg.";
- else
- cout<<"Lo siento! Este número no es Armstromg.";
- SALTO2;
- }
- int digitar(const int num, int buffer[], int tam){
- int buf[tam], n=num, i, j;
- //digitando
- for(i=0; i<tam && n!=0; i++){
- buf[i] = (n%10);
- n /= 10;
- }
- i--;
- //inversión
- for(j=0; j<tam && i>=0; j++, i--)
- buffer[j] = buf[i];
- return j;
- }
- long int pot(int base, int exp){
- long int prod=1;
- //mult sucesivas
- for(int i=1; i<=exp; i++)
- prod *= base;
- return prod;
- }
- ///De ARMSTRONG
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement