Código C++

  • Blog
  • Acerca
  • Autor
  • Contacto
  • Posts guardados en "arreglos":

    Bueno, casi creo que nunca he hablado de matrices, parámetros o funciones en este blog, pero este post es una petición de Rodrigo que me dijo por email que tenía problemas con su tarea porque no sabe cómo pasar una matriz como parámetro a una función en c++. Es algo sencillo, pero difícil de deducir. Veamos.

    Si tu arreglo es de una dimensión…
    int matriz[4];
    … la forma de declarar la función es la siguiente:
    void fx(int m[4]) { ...código... }
    Y la forma de llamar la función sería:
    fx(matriz);

    Si el arreglo es de dos dimensiones…
    int matriz[4][3];
    … pues es lo mismo:
    void fx(int m[4][3]) { ...código... }
    Y la forma de llamar la función sería:
    fx(matriz);

    Si la función retorna una matriz…
    int matriz[4];
    … se declara normal:
    void fx(int m[4]) { return matriz[4]; }
    Y la forma de llamar la función sería:
    matriz[4] = fx(matriz);

    Este programa pide tres números, los almacena en una matriz, le suma 1 a cada elemento y los muestra, usando para cada acción una función. Así que tenemos funciones que reciben matrices y que retornan matrices. Chéquenlo.

    #include<iostream>
    using namespace std;
     
    void pedir(int matriz[3], int len)
    {
        for(int i=0; i<=len; i++)
        {
            cout << "Numero " << i+1 << ":? ";
            cin >> matriz[i];
        }
    }
     
    int sumar(int matriz[3], int len)
    {
        for(int i=0; i<=len; i++)
            matriz[i]++;
        return matriz[3];
    }
     
    void mostrar(int matriz[3], int len)
    {
        for(int i=0; i<=len; i++)
            cout << matriz[i] << " ";
    }
     
    int main()
    {
        int matriz[3]={0}, len = sizeof(matriz)/sizeof(int);
        pedir(matriz, len-1);
        matriz[3] = sumar(matriz, len-1);
        mostrar(matriz, len-1);
        return 0;
    }

    Histograma con números aleatorios y asteriscos

    Bueno, tal vez el título quedó muy poco descriptivo, pero la idea es pedir un número de personas, luego se le pediría a cada persona su peso pero nosotros solo vamos a generar un número aleatorio en determinado rango. Luego se clasificaría a esas personas en rangos de peso y al final mostrar una tabla que muestre la frecuencia de cada rango con asteriscos, así:

    51-60 ***
    61-70 **
    71-80 ***
    80-91 *
    91-mas *****

    El código en C++ sería así:

    #include<stdlib.h>
    #include<iostream>
    using namespace std;
     
    int main()
    {
        int n,c,c2,peso[500],cat[5]={0},lim;
        // n -> numero de personas
        // c y c2 para ciclos
        // peso[500] arreglo para guardar el peso de las personas
        // cat[5] arreglo para guardar el número de personas en cada categoria de peso
        srand(time(NULL)); // Inicializa los números aleatorios
        cout<<"Introduce el número de personas: ";cin>>n;
        for(c=0;c<=n-1;c++)
        {
            peso[c]=51+rand()%(120-51); //guarda un número aleatorio del 51 al 120 en cada elemento del arreglo
            // según su valor se aumenta un elemento de nuestro otro arreglo
            if(peso[c]>50 && peso[c]<=60)
                cat[0]++;
            if(peso[c]>60 && peso[c]<=70)
                cat[1]++;
            if(peso[c]>70 && peso[c]<=80)
                cat[2]++;
            if(peso[c]>80 && peso[c]<=90)
                cat[3]++;
            if(peso[c]>90)
                cat[4]++;
        }
        cout<<"\n";
        for(c=0;c<=4;c++)
        {
            switch(c)
            {
                // segun cada caso imprime algo diferente
                case 0:
                    cout<<"51-60\t";
                break;
                case 1:
                    cout<<"61-70\t";
                break;
                case 2:
                    cout<<"71-80\t";
                break;
                case 3:
                    cout<<"81-90\t";
                break;
                case 4:
                    cout<<"90-  \t";
                break;
            }
            lim=cat[c]; // no podemos usar un arreglo como limite del ciclo (la verdad
                       // no se porque), entonces lo pasamos a una variable normal
            for(c2=1;c2<=lim;c2++)
                    cout<<"*";
            cout<<"\n\n";
        }
        cin.get();cin.get(); // detiene la ejecución al final (es como getch();)
    }

    A propósito, este programa fue una petición especial de un usuario.

    Programa que lee un arreglo de 10 números y los ordena con el método de la burbuja de manera ascendente o descendente según se elija. Para esto utiliza una función que recibe el arreglo y la varible ‘ord’ (1=asc, 2=desc), luego utiliza otra función para imprimirlo.

    #include<iostream>
    using namespace std;
     
    int ordenar(int[],int);
    int imprimir(int[]);
     
    int main()
    {
      int c,lista[9],ord;
      for(c=0;c<=9;c++)
      {
        cout<<"Numero "<<c+1<<": "; cin>>lista[c];
      }
      cout<<"\nAscendente 1\nDescendente 2\n--> Opción: "; cin>>ord;
      if(ord==1 || ord==2)
      {
        ordenar(lista,ord);
        imprimir(lista);
      }
    }
     
    int ordenar(int lista[],int ord)
    {
      int c1,c2,aux;
      for(c1=0;c1<=9;c1++)
      {
        for(c2=0;c2<9;c2++)
        {
          if(ord==1)
          {
            if(lista[c2]>lista[c2+1])
            {
              aux=lista[c2];
              lista[c2]=lista[c2+1];
              lista[c2+1]=aux;
            }
          }
          else
          {
            if(lista[c2]<lista[c2+1])
            {
              aux=lista[c2];
              lista[c2]=lista[c2+1];
              lista[c2+1]=aux;
            }
          }
        }
      }
      return 0;
    }
     
    int imprimir(int lista[])
    {
    int c;
      for(c=0;c<=9;c++)
        cout<<lista[c]<<" ";
      cin.get();cin.get();
    }
    /*Creado por THEbatzuk*/