Ayuda con problema en C

Iniciado por Pantuflo, 11 Mayo 2010, 04:28 AM

0 Miembros y 1 Visitante están viendo este tema.

Pantuflo

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:


#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.

AckeR

Hola!

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

Código (cpp) [Seleccionar]


int mayor = valor1;

if(valor2 > mayor)
mayor = valor2;



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

Suerte

...DaR LaS GraCiaS No CuestA NadA...

.:BlackCoder:.

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
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




Ari Slash

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

#include <stdio.h>
#include <conio.h>

int main(){
     int recibido,max1=0,max2=0,orden1=0,orden2=0,i;

     for(i=0;i<68;i++){
                      do{
                         printf("\nIngrese %d ° valor mayor a 0:",i+1);
                         scanf("%d",&recibido);
                      }while (recibido<=0); //se repetira hasta que ingrese numeros mayor a 0
                     
                      if(recibido>max1){
                         max1=recibido;   // si es mayor al max1 se guardara el valor y su orden
                         orden1=i;
                      }
                      if(recibido<max1 && recibido>max2){
                         max2=recibido; //si es menor al max1 pero mayor al max 2, guardamos en max2, junto al orden
                         orden2=i;
                      }
     }
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);
// al i le sumamos +1 para que el orden sea entendible al usuario al igual que cuando se pide ingresar un valor
getch();
return 0;
}



saludos

Pantuflo

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.

Ari Slash

#5
#include <stdio.h>
#include <conio.h>

int main(){
    int recibido,max1=0,max2=0,orden1=0,orden2=0,i;

    for(i=0;i<6;i++){
                     do{
                        printf("\nIngrese %d ° valor mayor a 0:",i+1);
                        scanf("%d",&recibido);
                     }while (recibido<=0); //se repetira hasta que ingrese numeros mayor a 0

                     if(recibido>max1){
                        max2=max1;
                        orden2=orden1;
                        max1=recibido;   // si es mayor al max1 se guardara el valor y su orden
                        orden1=i;
                        recibido=0;
                        } else {
                     if(recibido<max1 && recibido>max2){
                                        max2=recibido; //si es menor al max1 pero mayor al max 2, guardamos en max2, junto al orden
                                        orden2=i;
                                        recibido=0;
                     }
                      }
    }
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);
// al i le sumamos +1 para que el orden sea entendible al usuario al igual que cuando se pide ingresar un valor
getch();
return 0;
}



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
if(recibido>max1){
                        max2=max1;
                        orden2=orden1;
                        max1=recibido;   // si es mayor al max1 se guardara el valor y su orden
                        orden1=i;
                        recibido=0;
                        }



saludos