Tag Archives: arreglos

Cómo pasar una matriz o arreglo como parámetro a una función

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
using namespace std;

void pedir(int matriz[3], int len)
{
    for(int i=0; i<=len; i++)
    {
        cout << "Numero " << i+1 <> 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;
}
Advertisements

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
#include
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<>n;
    for(c=0;c50 && peso[c]60 && peso[c]70 && peso[c]80 && 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-60t";
            break;
            case 1:
                cout<<"61-70t";
            break;
            case 2:
                cout<<"71-80t";
            break;
            case 3:
                cout<<"81-90t";
            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<<"nn";
    }
    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.

Ordenar arreglo de manera ascendente o descendente (burbuja)

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 1nDescendente 2n--> 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*/