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

como sacar la moda de n elementos

Estas en el tema de como sacar la moda de n elementos en el foro de C/C++ en Foros del Web. hola a todos tengo una duda muy grande el cual consiste es que ocupo sacar la moda de n elementos el cual la moda es ...
  #1 (permalink)  
Antiguo 31/05/2008, 00:01
Avatar de duskrow  
Fecha de Ingreso: abril-2008
Mensajes: 267
Antigüedad: 16 años
Puntos: 8
como sacar la moda de n elementos


hola a todos tengo una duda muy grande el cual consiste es que ocupo sacar la moda de n elementos el cual la moda es el numero que se repite mas en la serie numerica,

un ejemplo 1 , 2 , 2 , 4 , 5 , 8 ,2 , 10 , 5

la moda ahy es el 2 pork es el k mas se repite.


entonces quisiera hacer esto en c++

y que solo imprimiera el numero que se repite mas es el ("moda")...


ojala me pudieran aiudar :)


thanks
  #2 (permalink)  
Antiguo 31/05/2008, 01:34
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: como sacar la moda de n elementos

Sugerencia: Utiliza una tabla hash en la que la clave sea el elemento y el valor sea la cuenta (que ira cambiando) de las veces que aparece dicho elemento.
__________________
Pop & Rock Bands
Pop Music Stars
  #3 (permalink)  
Antiguo 31/05/2008, 10:40
 
Fecha de Ingreso: mayo-2008
Ubicación: Chile
Mensajes: 189
Antigüedad: 16 años
Puntos: 3
Respuesta: como sacar la moda de n elementos

mmm... lo veo muy dificil, por lo menos de hacer con variables, porque deberias tener una variable para cada numero y los numeros son infinitos 0.o
Tal vez exista una forma de hacerla, pero no la conozco, tal vez si fuera de tal numero a otro numero te podria ayudar
  #4 (permalink)  
Antiguo 02/06/2008, 05:13
Avatar de PC's Troll  
Fecha de Ingreso: junio-2005
Ubicación: Caracas-Venezuela
Mensajes: 55
Antigüedad: 18 años, 10 meses
Puntos: 0
Respuesta: como sacar la moda de n elementos

Se me ocurren dos formas
  1. Una matríz de 2*256 y le pones límite al usuario de 256 ingresos DISTINTOS.
  2. Utilizar estructura de datos de mínimo 3 valores (número, repeticiones, puntero al sig)

De cualquiera de las dos maneras deberás recorrer el conjunto de registros cada vez que el usuario ingresa un nuevo valor para saber si existe y sólo sumar repeticiones o si no existe y agregarlo. Por último deberás recorrer el conjunto de registros para conocer cuál es el que se repite más (número mayor en campo repeticiones).

Es un ejercicio interesante así que ya está en mi lista de ejercicios a resolver

En los días por venir puedo postear la solución si así lo deseas, pero es mejor si lo haces tú solo ya que te sentirás mejor contigo mismo al momento de resolverlo.
  #5 (permalink)  
Antiguo 02/06/2008, 08:01
 
Fecha de Ingreso: mayo-2008
Ubicación: Caracas
Mensajes: 35
Antigüedad: 16 años
Puntos: 1
Respuesta: como sacar la moda de n elementos

Código:
/* medidas.c */ 
#include <stdio.h> 
#include <conio.h> 

#define MAX 100 

float media(int V[], int elementos); 
int moda(int V[], int elementos); 

void main() 
{ 
   int V[MAX], nModa, i, elementos, contador; 
   float nMedia; 

   clrscr(); 
   /* Lectura de numeros */ 
   printf("--- Medidas ---\n"); 
   printf("Numero de elementos: "); 
   scanf("%d", &elementos); 
   for(i=0; i<elementos; i++) 
   { 
      printf("V [%d] = ", i); 
      scanf("%d", &V[i]); 
   } 


   /* Calcula media y obtiene numeros mayores */ 
   nMedia = media(V, elementos); 
   printf("\nMedia = %0.2f\n", nMedia); 
   printf("Elementos mayores que la media:\n"); 
   contador = 0; 
   for(i=0; i<elementos; i++) 
   { 
      if((float)V[i]>nMedia) 
      { 
         printf("V [%d] = %d\n", i, V[i]); 
         contador++; 
       } 
   } 
   printf("Total = %d", contador); 
    


   /* Calcula moda y obtiene numeros mayores */ 
   nModa = moda(V, elementos); 
   if(nModa==-1) 
      printf("\n\nNo existe moda"); 
   else 
   { 
      printf("\n\nModa = %d\n", nModa); 
      printf("Elementos mayores que la moda:\n"); 
      contador = 0; 
      for(i=0; i<elementos; i++) 
      { 
         if(V[i]>nModa) 
         { 
            printf("V [%d] = %d\n", i, V[i]); 
            contador++; 
          } 
      } 
      printf("Total = %d", contador); 
   } 
    

   getch(); 
} 

float media(int V[], int elementos) 
{ 
   int i; 
   float nMedia; 
   float suma = 0; 

   /* Obtiene suma */ 
   for(i=0;i<elementos;i++) 
      suma += V[i]; 

   nMedia = suma / elementos; 

   return nMedia; 
} 

int moda(int V[], int elementos) 
{ 
   int i, j, k, total, indice, existeModa, N[MAX], Rep[MAX]; 
   int nModa; 
   /* Saca copia del arreglo */ 
   for(i=0;i<elementos;i++) 
      N[i]=V[i]; 

   /* Saca numeros distintos */ 
   total = elementos; 
   for(i=0;i<elementos;i++) 
   { 
      for(j=i+1;j<elementos;j++) 
      { 
      /* Si encuentra numero repetido */ 
      if(N[i]==N[j]) 
      { 
          /* Recorre una posicion elementos posteriores */ 
          for(k=j+1;k<elementos;k++) 
          N[k-1]=N[k]; 

          elementos--; 
          j--; 
      } 
      } 
   } 

   /* Halla repeticiones de cada numero distinto */ 
   for(i=0; i<elementos; i++) 
       Rep[i] = 0; 
   for(i=0; i<elementos; i++) 
       for(j=0;j<total;j++) 
      if(N[i]==V[j]) 
         Rep[i]++; 

   /* Halla indice del elemento que mayor numero de veces se repite */ 
   indice = 0; 
   for(i=1; i<elementos; i++) 
      if(Rep[i]>Rep[indice]) 
    indice = i; 

    /* Verificacion por si 2 numeros se repiten igual numero de veces */ 
    existeModa=1; 
    for(i=0;i<elementos;i++) 
   if(i!=indice) 
   { 
      if(Rep[i]==Rep[indice]) 
      { 
         existeModa = 0; 
         break; 
       } 
   } 

     if(existeModa==1) 
   nModa = N[indice]; 
     else 
   nModa = -1; 

     return nModa; 
}
Gracias a adrianvaca
  #6 (permalink)  
Antiguo 02/06/2008, 09:12
 
Fecha de Ingreso: mayo-2008
Ubicación: Caracas
Mensajes: 35
Antigüedad: 16 años
Puntos: 1
Información Respuesta: como sacar la moda de n elementos

Otro ejemplo de como calcular moda

el input es el vector con los datos a evaluar y el número de datos del vector.
el output es la moda

Código:
float EncontrarModa(float *Datos, int N)
{ //PRUEBA ESCRITORIO
	register int t, w;                  //Contadores dentor del vector
	float md, AnteriorModa;      //moda temporal y moda anterior al ciclo
	int cont, antcont;                //Contadores de la repeticion del dato

	AnteriorModa=0;
	antcont=0;
	for (t=0; t< N; ++t) {
		md = Datos[t];
		cont = 1;
		for(w=t+1; w < N; ++w)
			if(md == Datos[w])
				cont++;
		if(cont > antcont) {
			AnteriorModa = md;
			antcont = cont;
		}
	}
	return AnteriorModa;
}
Vuelvo a escribir cuado consiga otro codigo ;)
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 16:51.