Autor
|
Tema: Ayuda con problema en C (Leído 3,183 veces)
|
Pantuflo
Desconectado
Mensajes: 2
|
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.
|
|
|
En línea
|
|
|
|
AckeR
Desconectado
Mensajes: 109
Tu única Limitación Es tú Imaginación (:
|
Hola! Para que puedas encontrar el valor Mayor podrías hacer algo así: 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
|
|
|
En línea
|
...DaR LaS GraCiaS No CuestA NadA...
|
|
|
.:BlackCoder:.
Desconectado
Mensajes: 388
Cada dia C++!!
|
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
|
|
|
En línea
|
"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); }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 return 0; }
saludos
|
|
|
En línea
|
|
|
|
Pantuflo
Desconectado
Mensajes: 2
|
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.
|
|
|
En línea
|
|
|
|
Ari Slash
|
#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); }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 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
|
|
« Última modificación: 11 Mayo 2010, 17:11 pm por Ari-Slash »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
problema hal.dll ayuda
Windows
|
marrison
|
2
|
2,342
|
24 Noviembre 2012, 23:55 pm
por marrison
|
|
|
Ayuda con problema C++
Programación C/C++
|
JeseBichito10
|
2
|
3,115
|
3 Abril 2014, 12:24 pm
por Eternal Idol
|
|
|
Problema en C [Ayuda]
Programación C/C++
|
cacacolass
|
9
|
3,082
|
30 Abril 2014, 08:09 am
por eferion
|
|
|
[C++] Divisibilidad por primos de un número por partes
Programación C/C++
|
El_Lentejas
|
6
|
5,209
|
17 Junio 2020, 21:56 pm
por dijsktra
|
|
|
Ayuda con un problema
Programación C/C++
|
gonwhter
|
1
|
3,039
|
1 Diciembre 2020, 18:02 pm
por @XSStringManolo
|
|