Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Array (coger un numero y compararlo con el resto)

Estas en el tema de Array (coger un numero y compararlo con el resto) en el foro de C/C++ en Foros del Web. Tengo una duda sobre los arrays. Si creo un array con 10 posiciones, y cada una se llena con numeros introducidos por el usuario, ¿puedo ...
  #1 (permalink)  
Antiguo 22/12/2013, 08:36
 
Fecha de Ingreso: octubre-2013
Ubicación: Murcia
Mensajes: 54
Antigüedad: 10 años, 6 meses
Puntos: 0
Array (coger un numero y compararlo con el resto)

Tengo una duda sobre los arrays. Si creo un array con 10 posiciones, y cada una se llena con numeros introducidos por el usuario, ¿puedo coger un numero de ese array y compararlo con el resto de la forma que os pongo abajo?

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     int num[10];
  7.    
  8.     printf ("\n Introduce el primer numero: ");
  9.     scanf ("%d", &num[0]);
  10.     printf ("\n Introduce el segundo numero: ");
  11.     scanf ("%d", &num[1]);
  12.     printf ("\n Introduce el tercer numero: ");
  13.     scanf ("%d", &num[2]);
  14.     printf ("\n Introduce el cuarto numero: ");
  15.     scanf ("%d", &num[3]);
  16.     printf ("\n Introduce el quito numero: ");
  17.     scanf ("%d", &num[4]);
  18.     printf ("\n Introduce el sexto numero: ");
  19.     scanf ("%d", &num[5]);
  20.     printf ("\n Introduce el septimo numero: ");
  21.     scanf ("%d", &num[6]);
  22.     printf ("\n Introduce el octavo numero: ");
  23.     scanf ("%d", &num[7]);
  24.     printf ("\n Introduce el noveno numero: ");
  25.     scanf ("%d", &num[8]);
  26.     printf ("\n Introduce el decimo numero: ");
  27.     scanf ("%d", &num[9]);
  28.    
  29.     if (num[0] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[0]);
  30.     if (num[1] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[1]);
  31.     if (num[2] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[2]);
  32.     if (num[3] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[3]);
  33.     if (num[4] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[4]);
  34.     if (num[5] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[5]);
  35.     if (num[6] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[6]);
  36.     if (num[7] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[7]);
  37.     if (num[8] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[8]);
  38.     if (num[9] > num[10]) printf ("\n El numero %d es el mayor de todos\n\n\n\n", num[9]);
  39.  
  40.   system("PAUSE"); 
  41.   return 0;
  42. }

Cita:
No me funciona bien, si pongo el mismo valor a todos excepto a uno, el programa si hace lo que quiero, pero cuando hay mas de 2 valores distintos, ya da fallos como la de mostarme dos numeros mayores o mas.
El ejercicio a priori es simple:

- Pide al usuario que introduzca 10 numeros y estos se almacenan en el array. Despues muestra en pantalla el mayor de esos 10 numeros (si no son todos iguales). Es muy posible que mi plantamiento no sea el correcto, pero con lo expuesto, solo quiero saber que estoy haciendo mal o que estoy pasando por alto.
  #2 (permalink)  
Antiguo 22/12/2013, 09:18
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Array (coger un numero y compararlo con el resto)

La finalidad es encontrar el nº mayor; necesitas una premisa que iras modificando segun las comparaciones, la premisa de salida es que el primer numero es el mayor de todos. Luego comparas el mayor con el segundo, si el segundo es mayor asignas el segundo como mayor y comparas con el siguiente, etc hasta comparar con el ultimo. Algo asi:

Código C:
Ver original
  1. int lista[10] = {1, 7, 3, 4, 5, 5, 6, 8, 9, 0};
  2. int q, id_mayor;
  3.  
  4. id_mayor = 0;//premisa de salida
  5. //ejecuto un ciclo que va desde el siguiente al mayor hasta el ultimo
  6. for(q = id_mayor + 1; q < sizeof(lista)/sizeof(int); q++) {
  7.     if(lista[q] > lista[id_mayor]) {//se cumple?
  8.         id_mayor = q;//asigno el nuevo indice
  9.     }
  10. }

En la comparacion omito comparar el primero con el primero porque ya se que serán iguales. El id_mayor es el indice del valor dentro de la lista. Comprueba que puedes hacer lo mismo iniciando con la premisa de que el ultimo es el mayor y haciendo el ciclo desde el anterior al ultimo hasta el primero.

Saludos
vosk
  #3 (permalink)  
Antiguo 22/12/2013, 09:55
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Array (coger un numero y compararlo con el resto)

num[0] > num[10] lo que estas mirando es si: valor de num0 es mayor que num10 si algún numero es mayor que el num10 si es mayor imprime el mensaje si es menor creo que salta la comparación a la siguiente.
Eso no te sirve para buscar el mayor de los números introducidos.
  #4 (permalink)  
Antiguo 22/12/2013, 10:23
 
Fecha de Ingreso: octubre-2013
Ubicación: Murcia
Mensajes: 54
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Array (coger un numero y compararlo con el resto)

Muchas gracias a ambos.

Vosk, me lio un poco con el tema "sizeof", pero viendo tu respuesta, creo que ese ejercicio seria mas para ordenar los numeros que pones tu, y no para guardar en el array los 10 numeros que el usuario introduce, de donde tendria que hayar el mayor de esos numeros.

Corrigeme si me equivoco.

Gracias de nuevo a ambos
  #5 (permalink)  
Antiguo 22/12/2013, 11:57
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Array (coger un numero y compararlo con el resto)

vosk es un fiera jaja
Teóricamente seria así:
Eso sigue la pauta de vosk pero te lo explico de forma sencilla.
Tienes 10 números como bien mencionas.
Para saber cual es el mayor debes de compararlos todos unos con otros ¿no?
Entonces empiezas por comparar el array[0] con el id_mayor de vosk que inicia con 0.
El "id_mayor" no es mas que una variable que va siempre guardando el numero que sea mayor (Es una especie de recipiente temporal que cambia de valor cuando encontremos un numero mayor).
Funciona así:
Comparo array[0] con id_mayor, si lo que contiene array es mayor que lo que contiene id_mayor lo guardo en el mismo id_mayor.

Como se hace eso? Pues Así!

if ( array[0] > id_mayor ){
id_mayor = array[0];
}

Después repetimos el proceso con el siguiente valor de array[1]¿no?
Entonces es lo mismo pero cambiamos el 0 por 1 en array.

if ( array[1] > id_mayor ){//si array1 es mayor que id_mayor
id_mayor = array[1]; //entonces guardamos ese valor mayor en id_mayor
}
//VOLVEMOS A REPETIR EL PROCESO(hasta terminar todos los numeros)
array[2]....array[3]....array[4].....

Fíate que el id_mayor solo cambia el valor si lo que contiene el array[] es mayor.

Al final de las 10 comprobaciones imprimes el id_mayor que tendría guardado el mayor numero de todos.
Eso es exactamente lo que hace el código de vosk pero de una manera mas compacta, es menos comprencible pero es justo lo mismo.
Las repeticiones son un cáncer que debes estirpar si quieres ser un buen programador ;) XD
Espero haber aclarado y no me equivoque que me suele pasar mucho jaja
Saludos!
  #6 (permalink)  
Antiguo 22/12/2013, 12:08
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Array (coger un numero y compararlo con el resto)

Ok, el algoritmo es para encontrar el mayor de una lista; esa lista la puedes poner manualmente (como hice yo) o puedes preguntar al usuario cada valor (como hiciste tu).

Para preguntar al usuario ya lo tienes resuelto, pero tambien puedes hacerlo con un ciclo. Y ademas puedes incrementar la rapidez del calculo planteando la premisa inicial de que el valor mas grande es uno muy pequeño, luego cada vez que preguntas al usuario comparas y siempre tienes el mayor de los entrados en la lista. Algo asi:

Código C:
Ver original
  1. #define TAMLISTA 10
  2. static char *ORDINARIOS[TAMLISTA] = {
  3.     "primero", "segundo", "tercero",
  4.     "cuarto", "quinto", "sexto", "septimo",
  5.     "octavo", "noveno", "decimo"};
  6.  
  7.  
  8. int main() {
  9.     int q, lista[TAMLISTA];
  10.     int num_mayor = INT_MIN;
  11.  
  12.     for(q = 0; q < TAMLISTA; q++) {
  13.         printf("Entra el %s: ", ORDINARIOS[q]);
  14.         scanf("%d", &lista[q]);
  15.         if(lista[q] > num_mayor) {
  16.             num_mayor = lista[q];
  17.             printf("Ahora el mayor es el %d\n", num_mayor);
  18.         }
  19.     }
  20.  
  21.     printf("Finalmente el mayor es %d", num_mayor);
  22.  
  23.     return 0;
  24. }

De esta forma tal como vas entrando valores ya vas obteniendo el mayor. El INT_MIN está en la cabecera limits.h, y es el valor minimo al que puede llegar un int.

Lo de antes del sizeof no te preocupes, solo es para saber el nº de elementos sabiendo el tamaño de la lista y el tipo de dato, de esta forma si cambias el tamaño de la lista el ciclo sigue funcionando sin tocar nada; es una buena practica evitar los valores picados a mano hardcoded, es mejor usar defines para datos que vas a usar mas de una vez, de esta forma si tienes que cambiar algo solo cambias el define y te olvidas de buscar por dentro del codigo.

Saludos
vosk
  #7 (permalink)  
Antiguo 22/12/2013, 12:09
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Array (coger un numero y compararlo con el resto)

@vangodp: "...vosk es un fiera jaja..."

Gracias, luego te pago una birra :))
  #8 (permalink)  
Antiguo 22/12/2013, 12:43
 
Fecha de Ingreso: octubre-2013
Ubicación: Murcia
Mensajes: 54
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Array (coger un numero y compararlo con el resto)

Muchisimas gracias a todos!!! no solo he reducido las lineas escritas, si no que he comprendido a la perfeccion el proceso de este ejercicio que es lo que importaba (aunque se que los arrays tienen mas miga y no es facil). Ahora el programa me ha quedado asi:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     int num[10];
  7.     int n = 0;
  8.     int i;
  9.    
  10.     for (i = 0; i < 10; i++){
  11.         printf ("\n Introduce el primer numero: ");
  12.         scanf ("%d", &num[i]);
  13.         }
  14.    
  15.     for (i = 0; i < 10; i++){
  16.    
  17.         if (num[i] > n){
  18.            n = num[i];        
  19.            }
  20.            }
  21.            
  22.            printf ("\n El numero mayor es %d\n\n\n\n", n);
  23.  
  24.  
  25.   system("PAUSE"); 
  26.   return 0;
  27. }

Gracias de nuevo gente.
  #9 (permalink)  
Antiguo 22/12/2013, 15:50
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Array (coger un numero y compararlo con el resto)

una idea!
Cambia esto:
Código C++:
Ver original
  1. printf ("\n Introduce el primer numero: ");
Por esto:
Código C++:
Ver original
  1. printf ("\n Introduce el valor %d: ", i+1);

solo se va a ver mas GUAY jeje por lo demas es perfecto ;)
  #10 (permalink)  
Antiguo 23/12/2013, 04:13
 
Fecha de Ingreso: octubre-2013
Ubicación: Murcia
Mensajes: 54
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Array (coger un numero y compararlo con el resto)

ya ves que si se queda mejor, jeje k crack!! Muchas gracias vosk.
  #11 (permalink)  
Antiguo 23/12/2013, 05:19
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Array (coger un numero y compararlo con el resto)

"...Muchas gracias vosk..."

A mi no me lo agradezcas, la ultima aportacion es de vangodp ;)

Saludos
vosk
  #12 (permalink)  
Antiguo 23/12/2013, 07:19
 
Fecha de Ingreso: octubre-2013
Ubicación: Murcia
Mensajes: 54
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Array (coger un numero y compararlo con el resto)

es verdad, jajajaja I sorry, xDDD

Etiquetas: coger, funcion, int, numero, programa
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 21:56.