Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Pantuflo en 11 Mayo 2010, 04:28 am



Título: Ayuda con problema en C
Publicado por: Pantuflo en 11 Mayo 2010, 04:28 am
Hola, tengo una duda con un problema (con varios pero este es uno de ellos).
Es muy sencillo pero no me sale.

Tengo que hallar los 2 valores mayores y el orden de un grupo de 68 valores (en el foro encontré uno a medio resolver pero tampoco pude hacerlo funcionar).

Hasta acá hice yo:

Código:
#include <stdio.h>
#include <conio.h>

void main()
{
int v,v1,max1,max2,orden1,orden2,i;


      for(i=1;i<=68;i++)
      {
                           printf("\nIngrese valores mayores a 0:");
                           scanf("%d",&v);
                           printf("\nIngrese valores mayores a 0:");
                           scanf("%d",&v1);


                           if(v>0)
                           {
                            if(i==1||v>max1&&v>max2)
                              {
                                        max1=v;
                                  orden1=i;
                                    }
                                  if(i==1||v1>max2&&v1<max1)
                                    {
                                                      max2=v1;
                                                      orden2=i;
                                       }
                                }
                           }
printf("\nEl mayor valor es:%d de orden %d y el segundo mayor valor es:%d de orden:%d",max1,orden1,max2,orden2);
getch();



}

Vale aclarar que solo puedo usar for/while/if y funciones simples. Nada de arrays, por ejemplo. Tengo que usar Borland C++ pero el código tiene que ser en C.

Mi duda es (aparte de la codificación), cómo hago para que cuando ingreso un número que es mayor a los 2 que ya están, el max1 pase al max2 y el que ingreso quede en max1. No sé.
Si alguien puede decirme al menos dónde puedo buscar algo que me ayude, sería últil.


Título: Re: Ayuda con problema en C
Publicado por: AckeR en 11 Mayo 2010, 04:53 am
Hola!

Para que puedas encontrar el valor Mayor podrías hacer algo así:

Código
  1.  
  2. int mayor = valor1;
  3.  
  4. if(valor2 > mayor)
  5. mayor = valor2;
  6.  
  7.  

y así iras comparando hasta que termine el bucle y ahí determinaría cual fue el número mayor.

Suerte


Título: Re: Ayuda con problema en C
Publicado por: .:BlackCoder:. en 11 Mayo 2010, 05:00 am
No comprendo exactamente a que te refieres con el orden de un grupo 0o?... Aclara mejor el problema a ver, como te podemos ayudar, usa ejemplos...

Y te recomiendo que en los if, con condiciones multiples uses parentesis... Saludos


Título: Re: Ayuda con problema en C
Publicado por: Ari Slash en 11 Mayo 2010, 05:38 am
hola


acostumbrate a siempre empezar un ciclo iterativo desde 0, ya que en esa posicion quedara basura si estas trabajando con arrays.

, no soy bueno para hacer comentarios

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main(){
  5.     int recibido,max1=0,max2=0,orden1=0,orden2=0,i;
  6.  
  7.     for(i=0;i<68;i++){
  8.                      do{
  9.                         printf("\nIngrese %d ° valor mayor a 0:",i+1);
  10.                         scanf("%d",&recibido);
  11.                      }while (recibido<=0); //se repetira hasta que ingrese numeros mayor a 0
  12.  
  13.                      if(recibido>max1){
  14.                         max1=recibido;   // si es mayor al max1 se guardara el valor y su orden
  15.                         orden1=i;
  16.                      }
  17.                      if(recibido<max1 && recibido>max2){
  18.                         max2=recibido; //si es menor al max1 pero mayor al max 2, guardamos en max2, junto al orden
  19.                         orden2=i;
  20.                      }
  21.     }
  22. printf("\nEl mayor valor es:%d de orden %d y el segundo mayor valor es:%d de orden:%d",max1,orden1+1,max2,orden2+1);
  23. // al i le sumamos +1 para que el orden sea entendible al usuario al igual que cuando se pide ingresar un valor
  24. return 0;
  25. }


saludos


Título: Re: Ayuda con problema en C
Publicado por: Pantuflo en 11 Mayo 2010, 10:16 am
Gracias por las respuestas!!

Para los que no han comprendido, en el problema tengo que encontrar el mayor valor de 68 números y el SEGUNDO mayor valor. O sea, los dós más grandes y el orden en el cual esos números fueron ingresados por teclado.

Gracias Ari-Slash por el código. Lo testié pero me sigue pasando lo que me pasaba con todos los codigos que modifiqué hasta ahora (sin suerte de que funcionara).
Por ejemplo, ingresé los números:
1
2
3
5
4
10
en ese orden y el mayor valor me lo toma como 10 pero el segundo mayor me lo toma como 4 y no 5. Este problema surge al ingresar un valor mayor después de uno que ha sido mayor. No sé cómo arreglar eso.


Título: Re: Ayuda con problema en C
Publicado por: Ari Slash en 11 Mayo 2010, 16:41 pm
Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main(){
  5.     int recibido,max1=0,max2=0,orden1=0,orden2=0,i;
  6.  
  7.     for(i=0;i<6;i++){
  8.                      do{
  9.                         printf("\nIngrese %d ° valor mayor a 0:",i+1);
  10.                         scanf("%d",&recibido);
  11.                      }while (recibido<=0); //se repetira hasta que ingrese numeros mayor a 0
  12.  
  13.                      if(recibido>max1){
  14.                         max2=max1;
  15.                         orden2=orden1;
  16.                         max1=recibido;   // si es mayor al max1 se guardara el valor y su orden
  17.                         orden1=i;
  18.                         recibido=0;
  19.                         } else {
  20.                      if(recibido<max1 && recibido>max2){
  21.                                         max2=recibido; //si es menor al max1 pero mayor al max 2, guardamos en max2, junto al orden
  22.                                         orden2=i;
  23.                                         recibido=0;
  24.                      }
  25.                      }
  26.     }
  27. printf("\nEl mayor valor es:%d de orden %d y el segundo mayor valor es:%d de orden:%d",max1,orden1+1,max2,orden2+1);
  28. // al i le sumamos +1 para que el orden sea entendible al usuario al igual que cuando se pide ingresar un valor
  29. return 0;
  30. }


se le agrego esto
se supone que una vez que hay un nuevo numero mayor, el que esta antes pasa a ser el segundo mayor xD
Código
  1. if(recibido>max1){
  2.                         max2=max1;
  3.                         orden2=orden1;
  4.                         max1=recibido;   // si es mayor al max1 se guardara el valor y su orden
  5.                         orden1=i;
  6.                         recibido=0;
  7.                         }


saludos