elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito ayuda con mi código help
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda con mi código help  (Leído 2,758 veces)
gabrielgjha1

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Necesito ayuda con mi código help
« en: 15 Julio 2017, 19:01 pm »

Muy buenas tardes, espero que estén teniendo un buen día era para saber si me podrían ayudar con mi código que tenga mas de 1 moda, osea que si tengo 1 2 2 3 3 4 4 en un vector que me diga que la moda fueron 2,3 y 4 llevo un buen rato tratando y no lo consigo implementar solo me dice 1 moda y cuando no existe, aqui les dejo el codigo

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. int main(){
  4. int n,opc,i,j,e;
  5. int vec[100],moda=0,cmoda=0;
  6. int vec2 [n][n];
  7. printf ("ingrese con cuantos datos va a trabajar");
  8. scanf ("%i",&n);
  9. for (i=0;i<n;i++){
  10. printf ("\ningrese numero %i:",i+1);
  11. scanf ("%i",&vec[i]);
  12. }
  13. for (i=0;i<n;i++){
  14. e=0;
  15. for (j=0;j<n;j++)
  16. if (i!=j&&vec[i]==vec[j])
  17. e++;
  18. if (e>cmoda){
  19. moda=vec[i];
  20. cmoda=e;
  21. }
  22. }
  23. if (moda>=1){
  24. printf ("%i",moda);
  25. }
  26. else {
  27. printf ("no hay moda");
  28. }
  29. }
  30.  


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.391


Ver Perfil
Re: Necesito ayuda con mi código help
« Respuesta #1 en: 16 Julio 2017, 02:20 am »

Código:
array Modas() =  Funcion ContarPresencias(array Numeros() ) 
    array x(0 a numeros.MaxValue)  // esto es, exige previamente o bien conocer a priori el valor mayor del array o recorrerlo en un bucle para localizarlo.

    // Contar la presencia de cada valor en el array.
    Bucle para k desde 0 a Numeros.Length-1
         x(numeros(k)) += 1
    Fin Bucle

    // Buscar la moda o modas que pudiera haber...
    Bucle para k desde 0 a x.Length -1
        Si x(k) > n luego
            n = x(k)
            Modas=1
        O si x(k) = n luego
            Modas +=1
        Fin Si
    Fin bucle

    Redimensionar Array m(0 a Modas -1)
    k=0
    Hacer Mientras (modas > 0)
        Si n= x(k) luego
            Modas -=1   //hacemos una cuenta regresiva, para ser más óptimos, nos da igual en que orden aparezcan las modas, ¿no?
            m(Modas) = k            
        Fin si
        k +=1
    Repetir

    Devolver m //el array....
Fin Funcion
La llamada a esta función con el array de valores: 1, 2, 2, 3, 3, 4, 4 devolvería un array con 3 elementos y estos serían sus valores: m(0) = 4 , m(1) = 3 , m(2) = 2

Nota sin embargo que esta solución al usar parcialmente el algoritmo counting, tiene algunas serias limitaciones:
 --- solo vale para números, no para cadenas.
 --- solo vale para enteros, no para decimales (no es dle todo cierto, pero sería costoso multiplicar todos los números para convertirlos en enteros)
 --- si el valor mayor del array es gigante, será costoso en memoria, ya se necesita memoria auxilair del array de contar presencia de cada valor desde 0 hasta el mayor valor hallado en el array. por ejemplo si tienes un array de 5 elementos y sus valores son estos: 5,6,76543210,16,84, exige crear un array de 76543211 elementos...
 --- si hay valores negativos, es costoso, exige buscar el valor menor, sumar ese valor a todos, para hacer el menor igual a 0, y al final restar ese valor al consignar los valores en el array 'm'...


Ahora bien, si es algo simple como el ejemplo que has puesto cumple perfectamente tus necesidades...

-----------------------------------------
p.d.: modificado, para indicar la salida que daría la función con tus datos de ejemplo como entrada. OJO: Solo indica los valores de moda, no la frecunecia alcanzada en la moda. Si fuere preciso esto, podría devolverse dicho valor en un índice más (el último en el array)... y los cambios al código serían estos:
Citar
Redimensionar Array m(0 a Modas -1)
 Redimensionar Array m(0 a Modas)

y...
 
Citar
k = 0
  Hacer Mientras (modas > 0)

  k = 0
  m(Modas) =n
  Hacer Mientras (modas > 0)
y finalmente la salida sería entonces:
  array con 4 elementos y estos serían sus valores: m(0) = 4 , m(1) = 3 , m(2) = 2 y la cuenta de moda: m(3) = 3


« Última modificación: 16 Julio 2017, 18:24 pm por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito ayuda con un código cpp
Programación Visual Basic
5g33s14yga 1 2,434 Último mensaje 10 Marzo 2013, 02:32 am
por tincopasan
Necesito ayuda en el codigo..
Programación C/C++
zimmerman 1 1,857 Último mensaje 1 Octubre 2013, 15:29 pm
por eferion
necesito ayuda con un codigo
Programación C/C++
kyosatoishy 6 2,917 Último mensaje 12 Octubre 2016, 20:09 pm
por engel lex
Hola amigos Necesito su ayuda con este codigo necesito pasarlo de C++ A C# ayuda
Programación C/C++
ManicaHere 0 3,722 Último mensaje 1 Diciembre 2016, 05:29 am
por ManicaHere
Necesito ayuda ocn un codigo
Desarrollo Web
DR167734 0 1,933 Último mensaje 9 Mayo 2017, 20:43 pm
por DR167734
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines