Foros del Web » Programación para mayores de 30 ;) » Programación General »

Algoritmo para numeros entre rangos

Estas en el tema de Algoritmo para numeros entre rangos en el foro de Programación General en Foros del Web. Hola, Necesito ayuda con este algoritmo: Desarrolle un algoritmo que pida 10 números y permita determinar: ¿Cuáles son mayores de 100? ¿Cuáles están entre el ...
  #1 (permalink)  
Antiguo 06/04/2011, 07:34
 
Fecha de Ingreso: abril-2011
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Algoritmo para numeros entre rangos

Hola,

Necesito ayuda con este algoritmo:

Desarrolle un algoritmo que pida 10 números y permita determinar:

¿Cuáles son mayores de 100?
¿Cuáles están entre el 30 y 50?
¿Cuáles son menores de 30?

Por ejemplo si los numeros fueran: 70, 30, 150, 45, 10, 50, 400, 15, 66, 80

Me debe mostrar:
Mayores a 100 estan: 150, 400
Entre 30 y 50 estan: 30, 45, 50
Menores a 30 estan: 10, 15

Recordar que los números son introducidos por el usuario.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 06/04/2011, 09:30
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Algoritmo para numeros entre rangos

¿Qué código tienes hecho? ¿En que lenguaje? ¿Cuales son tus dudas?
  #3 (permalink)  
Antiguo 06/04/2011, 15:17
 
Fecha de Ingreso: abril-2011
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Algoritmo para numeros entre rangos

Pues estoy trabajando con diagramas de flujo, y solo tengo la captura de los números. es decir:

te describo el pseudocódigo:

Inicio
1.- Declaración de variables: n1, n2, n3, n4, n5, n6, n7, n8, n9, n10
2.- Escribir el mensaje: Teclea el 1er. número:
3.- Almacenar el numero en la variable n1
4.- Escribir el mensaje: Teclea el 2do. número:
5.- Almacenar el numero en la variable n2
.
.
.
Escribir el mensaje: Teclea el 10mo. número:
Almacenar el numero en la variable n10

ya de ahi no se como seguir...

Para comparar y ver en que rango esta un número se me ocurre esto:

Si n1 > 100
Entonces mayor1 = n1 (Almaceno el valor en una variable llamada mayor1)
Si n2 > 100
Entonces mayor2 = n2 (Almaceno el valor en una variable llamada mayor2)
.
.
Así sucesivamente con los demás.

Después tendria que volverlos a comparar pero ahora así:

Si n1 >= 30 AND n1 <=50
Entonces rango1 = n1 (Almaceno el valor en una variable llamada rango1)
Si n2 >= 30 AND n2 <=50
Entonces rango2 = n2
.
.
Así sucesivamente con los demás.

Y después tendría que comprararlos así:

Si n1 < 30
Entonces menor1 = n1
Si n2 < 30
Entonces menor2 = n2
.
.
Así sucesivamente con los demás.


Pero no se como implementarlo ya siguiendo este proceso tendria que agregar todas las comparaciones varias veces, es dedir todas las comparaciones anteriores dentro de cada comparación dando una cantidad gigantezca de comparaciones y para imprimirlos lo que haria dentro de camino del ciclo SI ( if ) es imprimir las variables de la siguiente forma:

Mayores a 100 estan: mayor1, mayor2, mayor3, ... , mayor10
Entre 30 y 50 estan: rango1, rango2, rango3, ... , rango 10
Menores a 30 estan: menor1, menor2, menor3, ... , menor10

Aqui supongo que no importa que se impriman todas las variables ya que al declararlas no se les asigno un valor y por lo tanto no tendrán nada, excepto a las que se les haya asignado un valor de los leidos despues de cumplirse una condición.


Otra cosa que me dijeron por ahi es que usando arreglos se puede pero no se como.

Muchas gracias

Última edición por programador7; 06/04/2011 a las 15:40
  #4 (permalink)  
Antiguo 07/04/2011, 01:47
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Algoritmo para numeros entre rangos

En vez de meter los números en variables independientes, metelos en un array, después sólo tienes que hacer un bucle para recorrer ese array.

La manera más facil es que recorras el array tantas veces como condiciones quieras comprobar e ir comprobando elemento a elemento.

Otra forma más eficiente es tener un array con los números y uno para cada condición y la primera vez que recorres el array hacer todas las comprobaciones e ir rellenando los arrays auxiliares, que serán los que imprimas luego.
  #5 (permalink)  
Antiguo 07/04/2011, 06:50
 
Fecha de Ingreso: abril-2011
Mensajes: 5
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Algoritmo para numeros entre rangos

Gracias por responder Heimish2000

De la forma que dices usando arreglos sería más o menos así:

Se supone que debo usar diagramas de flujo pero para una mejor interpretación pongo el código que usaría en Java.


Código:
// El arreglo Vec contiene todos los números leidos
for (i = 1; i < 11; i++)
{
   if (Vec[i] > 100)
    Mayores[i] = Vec[i]; // El arreglo Mayores contendrá unicamente los números que son mayores a 100
  else
    if (Vec[i] >= 30 && Vec[i] <= 50)
      Rango[i] = Vec[i]; // El arreglo rango contendrá unicamente los números que estan entre 30 y 50
    else
      if (Vec[i] < 30)
        Menores[i] = Vec[i]; // El arreglo Menores contendrá unicamente los números que son menores a 30
}

do
{
  System.out.println ("Mayores a 100 estan: " + Mayores[i]);
  System.out.println ("Entre 30 y 50 estan: " + Rango[i]);
  System.out.println ("Menores a 30 estan: " + Menores[i] );
  Mayores[i] = Mayores[i] + 1;
  Rango[i] = Rango[i] + 1;
  Menores[i] = Menores[i] + 1;
}
while (Mayores[i] < 11 &&  Rango[i] < 11 && Menores[i] < 11)
Con esto supongo funcionaria pero creo que el problema es la impresión de los números porque con esto me imprimira todos los elementos del arreglo y algunas posiciones estan vacias y por lo tanto me imprimira algunos mensajes de más ya que se imprimirian 10 mensajes para cada caso, es decir que tendría algunas líneas diciendo "Mayores a 100 estan: " y ningún número y lo mismo en las otras condiciones.

Que me recomiendan

Última edición por programador7; 07/04/2011 a las 07:08
  #6 (permalink)  
Antiguo 07/04/2011, 09:15
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Algoritmo para numeros entre rangos

No sería un do-while, sería un for (varios, de hecho). En esa condición estás comprobando que el elemento sea menor a 11, no que el indice sea menor a 11. Es más, estás incrementando el valor de la posición i del array, pero no i.

Puedes hacer varias cosas, la más sencilla es declararte una variable entera por array para saber cuantos elementos tienes en cada array y luego imprimirlos.

Código Java:
Ver original
  1. // El arreglo Vec contiene todos los números leidos
  2. for (i = 1; i < 11; i++)
  3. {
  4.    if (Vec[i] > 100){
  5.     Mayores[i] = Vec[i];
  6.     cont_mayores++;}
  7.   else
  8.     if (Vec[i] >= 30 && Vec[i] <= 50){
  9.       Rango[i] = Vec[i];
  10.       cont_rango++:}
  11.     else
  12.       if (Vec[i] < 30){
  13.         Menores[i] = Vec[i];
  14.         cont_menores++;}
  15. }
  16.  
  17. for (i = 1; i <= cont_mayores; i++)
  18. System.out.print (Mayores[i]);
  19.  
  20. for (i = 1; i <= cont_rango; i++)
  21. System.out.print (Rango[i]);
  22.  
  23. for (i = 1; i <= cont_menores; i++)
  24. System.out.print (Menores[i]);
  #7 (permalink)  
Antiguo 11/04/2011, 17:45
 
Fecha de Ingreso: abril-2011
Mensajes: 88
Antigüedad: 13 años, 7 meses
Puntos: 24
Respuesta: Algoritmo para numeros entre rangos

no se si te interesaria hacer esto pero para abrir mas las posibilidades de rango yo tendria una funcion a la que llamas con el rango que quieras mostrar.

(perdona que este en c++)
Código:
//...

#define NUM_MAX 10

void imprimirRango(int* rango, int desde, int hasta){
for (int i=0;i<NUM_MAX;i++)
if (rango[i]>=desde && rango[i]<=hasta)
cout<<rango[i]<<endl;
}

int main(void){
int rango[NUM_MAX];

//obtener numberos...

imprimirRango(rango, 30, 50); //entre 30 y 50

return 0;
}

Etiquetas: numeros, rangos, algoritmos
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 03:38.