13/05/2009, 18:03
|
| | Fecha de Ingreso: junio-2006
Mensajes: 63
Antigüedad: 18 años, 6 meses Puntos: 0 | |
Respuesta: moda en un arreglo..ayuda! Hola amigo programador
Aca te mando mi manera de encontrar la moda un Arreglo Unidimecional.
La idea es contar las repeticiones de cada numero y obtener el mayor numero de repeticiones de un numero y ver si es unico, y si lo es tiene moda y si no lo es entonces no tiene moda, mejor chequea el codigo.
Código:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define Max 40
void leerR(int Ar[Max], int *n);
void mostrarR(int Ar[Max], int n);
void modaR(int Ar[Max], int n);
int main(){
int A[Max],nc;
leerR(A,&nc);
mostrarR(A,nc);
modaR(A,nc);
system("pause");
return 0;
}
void leerR(int Ar[Max], int *n){
int i,val;
printf("\n Ingrese el tamaño: ");
scanf("%d",n);
printf("\n Leer:\n");
for(i=0;i<*n;i=i+1){
printf(" a[%d]= ",i);
scanf("%d",&val);
Ar[i]=val;
}
}
void mostrarR(int Ar[Max], int n){
int i;
printf("\n");
for(i=0;i<n;i=i+1){
printf(" %d",Ar[i]);
}
printf("\n");
}
void modaR(int Ar[Max], int n){
int i,j,k,c,pos,aux,Aux[Max],Cnt[Max],mayor=0;
for(i=0;i<n;i=i+1){
Aux[i]=Ar[i];
}
for(i=0;i<n;i=i+1){
c=1;
for(j=i+1;j<n;j=j+1){
if(Aux[i]==Aux[j]){//compara el numero con los demas
c=c+1;
for(k=j;k<n-1;k=k+1){//elimina el repetido
aux=Aux[k];
Aux[k]=Aux[k+1];
Aux[k+1]=aux;
}
n=n-1;
j=j-1;
}
}
Cnt[i]=c;
if(mayor<c){
mayor=c;//se le asigna el mayor valor repeticiones
}
}
c=0;
for(i=0;i<n;i=i+1){//busca si el valor repetido es unico
if(Cnt[i]==mayor){
pos=i;
c=c+1;
}
}
if(c==1){
printf("\n La moda es: %d\n",Ar[pos]);
}else{
printf("\n No tiene moda\n");
}
mostrarR(Aux,n);//muestra el arreglo sin repeticiones
mostrarR(Cnt,n);//muestra la cantidad de repiticiones
printf("\n");
}
|