Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con frecuencia de arreglo

Estas en el tema de Problema con frecuencia de arreglo en el foro de C/C++ en Foros del Web. Hola, les pasare a contar que tengo un trabajo donde se despliega un menu que pide llenar un arreglo de 15 posiciones con numeros de ...
  #1 (permalink)  
Antiguo 23/06/2011, 11:44
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 8 meses
Puntos: 9
Pregunta Problema con frecuencia de arreglo

Hola, les pasare a contar que tengo un trabajo donde se despliega un menu que pide llenar un arreglo de 15 posiciones con numeros de 1 al 10, puede hacerse manualmente o auntomatica, eso es lo facil, el problema que me piden es que muestre cuantos numeros se repiten en el arreglo, tomando en cuanta los numeros ingresados, si alguien me ayudara con esa instruccion se lo agradeceria mucho!!!

Saludos

Código C++:
Ver original
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     int arreglo[15];
  9.     int repeticiones[15];
  10.     int repeticion;
  11.     string respuesta;
  12.     int opcion;
  13.     int x;
  14.     int i;
  15.    
  16.     cout<<"******Contador de elementos en arreglo******"<<endl;
  17.    
  18.     while(respuesta!="n" && respuesta!="N")
  19.     {
  20.        cout<<"Para llenar arreglo manualmente, presione #1."<<endl;
  21.        cout<<"Para llenar arreglo automaticamente, presione #2."<<endl;
  22.        cin>>opcion;
  23.        system("cls");
  24.        
  25.        if(opcion==1)
  26.        {
  27.             int x=1;
  28.             while(x<16)
  29.             {
  30.                 cout<<"Ingrese el elemento "<<x<<" al arreglo(Valido del 1 al 10)"<<endl;
  31.                 cin>>arreglo[x];
  32.                 x++;
  33.                 }
  34.                 system("cls");
  35.                
  36.                 cout<<"Posicion"<<setw(13)<<"Arreglo"<<endl;
  37.                
  38.                 for(int i=1;i<16;i++)
  39.                 cout<<setw(8)<<i<<setw(13)<<arreglo[i]<<endl;
  40.                
  41.                
  42.                 }
  43.                
  44.                
  45.        cout<<"Desea realizar otro calculo s/n?"<<endl;
  46.        cin>>respuesta;
  47.        system("cls");
  48.        
  49.        }
  50.        return 0;
  51.        }

despues de esta instruccion no se que meter, ayuda!!

Código C++:
Ver original
  1. for(int i=1;i<16;i++)
  2.                 cout<<setw(8)<<i<<setw(13)<<arreglo[i]<<endl;
  #2 (permalink)  
Antiguo 23/06/2011, 16:28
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Problema con frecuencia de arreglo

Sensillamente puedes crear un array que vaya del 1 al 10

int contadores[11] = {0}; // puedes poner hasta 10 pero despues habria que cambiar unos indices.

Despues lo que haces es lo siguiente. Si el primer numero es un 1 sumas uno a la posicion 1, si es un 2 sumas un uno a la posicion dos. Lo haces de esta forma:

Código C:
Ver original
  1. for(int i=1;i<16;i++)
  2.          contadores[arreglo[i]] ++;

Código C:
Ver original
  1. for(int i=1;i<11;i++)
  2.                 cout<<setw(8)<<i<<setw(13)<<contadores[i]<<endl;c

Esta tecnica tiene un nombre, pero no me acuerdo. Se aprovecha de que tenes un numero maximo como entrada.
Espero que entiendas.
  #3 (permalink)  
Antiguo 24/06/2011, 11:19
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: Problema con frecuencia de arreglo

Cita:
Iniciado por sam90 Ver Mensaje
Sensillamente puedes crear un array que vaya del 1 al 10

int contadores[11] = {0}; // puedes poner hasta 10 pero despues habria que cambiar unos indices.

Despues lo que haces es lo siguiente. Si el primer numero es un 1 sumas uno a la posicion 1, si es un 2 sumas un uno a la posicion dos. Lo haces de esta forma:

Código C:
Ver original
  1. for(int i=1;i<16;i++)
  2. contadores[arreglo[i]] ++;

Código C:
Ver original
  1. for(int i=1;i<11;i++)
  2. cout<<setw(8)<<i<<setw(13)<<contadores[i]<<endl;c

Esta tecnica tiene un nombre, pero no me acuerdo. Se aprovecha de que tenes un numero maximo como entrada.
Espero que entiendas.
En efecto si se tiene un máximo funciona; pero si los números son generados aleatoriamente falla; en ese caso debes de tener una matriz bidimensional donde en una fila guardas los numeros y en otra sus frecuencias, cada vez que lees un numero primero lo busquas en la matriz (primera fila), si no lo hallas, lo guardas y en la segunda fila le pones frecuencia 1; pero si lo encuentras simplemente aumentas su frecuencia en 1 (segunda fila).
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #4 (permalink)  
Antiguo 01/07/2011, 02:29
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 8 meses
Puntos: 9
Respuesta: Problema con frecuencia de arreglo

listo la informcion que me dio Sam90 me ayudo mucho, igual grax a CapacProg por el dato

Etiquetas: frecuencia, repeticion, arreglos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:32.