Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: LOUNELSON en 7 Abril 2011, 04:17 am



Título: crear en pseint un programa que de el numero que mas se repite
Publicado por: LOUNELSON en 7 Abril 2011, 04:17 am
HOLA HE ESTADO INTENTANDO HACER UN PROGRAMA QUE ME DE EL NUMERO MAS  REPETIDO EN UNA DETERMINADA LISTA DE NUMEROS .. PERO NO HE LOGRADO CONSEGUIR UNA RESPUESTA POSITIVA LO QUE HE HECHO HASTA EL MOMENTO ES:
ESTOY EMPEZANDO CON ESTE TEMA DE LOS ARREGLOS ASI QUE SI ME AYUDAN SE LOS AGRADESERE MUCHO.  :D


Código:
	//definir arreglos;
dimension Lista1[5];
dimension moda[5];
dimension moda2[5];
//numerico:i;
// Inicialización;
     i<-0;
j<-0;

Para j<-1 hasta 5 Hacer
         moda[j]<-0;
moda2[j]<-0;

FinPara
Para i<-1 hasta 5 Hacer
Lista1[i]<-0;
FinPara

//lectura de datos;
Para i<-1 hasta 5 Hacer
escribir " introduzca los numeros de la primera lista ";
leer Lista1[i];
FinPara
//proceso;
//numero que se repite en cada lista;
mayor<-moda2[j];
     moda[1]<-Lista1[1] ;
     para i<-1 hasta 5 Hacer
   para j<-1 hasta 5 Hacer
    si  moda[j]=Lista1[i]
Entonces
    moda2[j]<-moda2[j]+1;
FinSi
si mayor< moda[j]
Entonces
 mayor<- moda[j]
finsi

 finpara
    finpara
    
 escribir " se repite " , mayor;
FinProceso


Título: Re: crear en pseint un programa que de el numero que mas se repite
Publicado por: crazykenny en 15 Abril 2011, 09:06 am
Yo, personalmente, lo haria con una matriz de un nivel para almacenar todos los numeros, y luego haria un bucle FOR/NEXT de dos niveles, donde el segundo nivel tenga dos valores y el primero tendria, basicamente, un valor igual a la cantidad de numeros que haya en la matriz; me explico; inicialmente, creas una matriz con los numeros en cuestion, y luego, un bucle FOR/NEXT, con una variable asignada a 0 (ejemplo X#=0) que haria referencia al tamaño de la matriz; entonces, dentro del bucle, cada vez que aparezca un numero en el bucle, pues comprobaria con otro bucle FOR/NEXT dentro de este si el numero esta dentro de la matriz de dos niveles; si esta en el primer valor del segundo nivel (0 por defecto, que seria algo asi como matrix#(var#,0), donde var# no puede superar a X#, ya que es el limite logico de la matriz), pues aumentamos el segundo valor (matrix#(var#,1)) en uno; y, si no esta, pues volcaria el contendido de la matriz en otra, para luego crear la matriz "base" con los numeros y cantidad de veces que se repite con un numero superior a uno, para, asi, volver a pasar los numeros volcados a la matriz principal; no se si me explico, quedaria algo asi en lo que respeta a volcar numeros;
Citar
if X#>1
   X#=X#-1
   dim matriz_b#(X#,1)
   for tr#=0 to X#
      for t=0 to 1
         opciones#=matriz#(tr#,t)
         matriz_b#(tr#,t)=opciones#
      next
   next
   X#=X#+1
   dim matriz_b#(X#,1)
   X#=X#-1
   for tr#=0 to X#
      for t=0 to 1
         opciones#=matriz_b#(tr#,t)
         matriz#(tr#,t)=opciones#
      next
   next
   X#=X#+1
   matriz#(X#,0)=numero#
   matriz#(X#,0)=1
Por cierto, si X# es igual a 0, tan solo habrias de crear la matriz principal, para luego asignarle el numero en cuestion en el valor 0 del primer nivel la matriz y 1 en el segundo nivel de la matriz.
Por utlimo, para saber cual es el numero que mas se repite, yo haria otro bucle FOR/NEXT, con dos variables; una, para indicar el numero que mas se repite, y otra para indicar cuantas veces, y basicamente, seria comprobar con el bucle cuantas veces se repite cada numero y comprobando si es superior a la variable en cuestion, y si lo es, pues asignas cuantas veces se repite el numero a la variable (mas que nada para luego seguir con el bucle y la comprobacion para ver si hay otro numero que se repita mas y hacer lo siguiente) y luego asignar la primera variable al numero en cuestion, y, si se repiten varios numeros un numero igual de veces, pues haces lo de antes de ir ampliando la matriz, y si por lo que sea, aparece otro numero que se repite mas veces que los de la matriz, pues nada, dejas la variable que limita la matriz a 1, y luego guardas ese numero en la matriz.
Espero haberte servido de ayuda, pese al "lio" que te he metido aqui.
Saludos.