Ver Mensaje Individual
  #5 (permalink)  
Antiguo 02/06/2008, 08:01
colx007
 
Fecha de Ingreso: mayo-2008
Ubicación: Caracas
Mensajes: 35
Antigüedad: 16 años, 7 meses
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