UTNianos

Versión completa: [AYUDA] Ejercicio 21 Algoritmos y Estructura de datos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola, el ejercicio dice: "Dados N valores informar el mayor, el menor y en que posición del conjunto fueron ingresados." y mi problema es con la posición del menor, si me pudiesen ayudar con esto se los agradecería!

Mi código es:

#include <iostream>

using namespace std;

int main()
{
int mayor, menor, nvalores, valores, posmayor, posmenor;
mayor =0;
menor = 0;
cout << "Cuantos valores va a ingresar: ";
cin >> nvalores;

for(int i=1;i<=nvalores;i++)
{
cout << "Ingrese valor: ";
cin >> valores;

if(valores>=mayor)
{
mayor = valores;
posmayor=i;
}
if(valores<=menor)
{
menor = valores;
posmenor=i;
}
}
cout << "El mayor es: " << mayor << " su pos es: " << posmayor << endl;
cout << "El menor es: " << menor << " su pos es: " << posmenor << endl;
return 0;
}
Hola s3bas9721.
Los valores iniciales de menor y mayor tienen que ser tales que cualquier primer valor posible los supere.
O sea, que el primer valor ingresado sea mayor que "mayor" y menor que "menor".

En otras palabras, en "mayor" poné el menor valor posible. Y en "menor" poné el mayor valor posible.
De esta forma te asegurás que no te pierdas ningún valor.

Como lo tenés ahora, en "menor" tenés 0. Si todos los valores que ingresás son mayores a cero, nunca vas a capturar el menor.
Hola, el problema radica en que vos ya le estas asignando valores a mayor y menor... Lo cual si ingresas todos números negativos, no te va a funcionar el código.
Una posible solución es la siguiente:

int mayor, menor, nvalores, valores, posmayor, posmenor;

cout << "Cuantos valores va a ingresar: ";
cin >> nvalores;

cout << "Ingrese valor: ";
cin>> valores;
mayor= valores;
menor= valores

for(int i=1;i<=nvalores-1;i++)
{
cout << "Ingrese valor: ";
cin >> valores;

if(valores>=mayor)
{
mayor = valores;
posmayor=i;
}
if(valores<=menor)
{
menor = valores;
posmenor=i;
}
}

Avisame si te sirve. Saludooos
La tecnica del mayor sirve para cuando te dicen que son naturales o positivos.

El for que dice el chico de arriba deberia empezar en 2, por que el 1 lo usaste recien y sin hacer la resta en el segundo miembro del for
(10-06-2019 23:03)matiifran escribió: [ -> ]Hola, el problema radica en que vos ya le estas asignando valores a mayor y menor... Lo cual si ingresas todos números negativos, no te va a funcionar el código.
Una posible solución es la siguiente:

int mayor, menor, nvalores, valores, posmayor, posmenor;

cout << "Cuantos valores va a ingresar: ";
cin >> nvalores;

cout << "Ingrese valor: ";
cin>> valores;
mayor= valores;
menor= valores

for(int i=1;i<=nvalores-1;i++)
{
cout << "Ingrese valor: ";
cin >> valores;

if(valores>=mayor)
{
mayor = valores;
posmayor=i;
}
if(valores<=menor)
{
menor = valores;
posmenor=i;
}
}

Avisame si te sirve. Saludooos

Hola que tal, probé este código y cuando ingreso los números me resta una posición del mayor y la del menor me da números al azar

(11-06-2019 20:02)CarooLina escribió: [ -> ]La tecnica del mayor sirve para cuando te dicen que son naturales o positivos.

El for que dice el chico de arriba deberia empezar en 2, por que el 1 lo usaste recien y sin hacer la resta en el segundo miembro del for

Hola si, lo cambié eso pero el problema sigue siendo con la posición del menor que al hacerlo me da números al azar.

(10-06-2019 22:08)luchovl2 escribió: [ -> ]Hola s3bas9721.
Los valores iniciales de menor y mayor tienen que ser tales que cualquier primer valor posible los supere.
O sea, que el primer valor ingresado sea mayor que "mayor" y menor que "menor".

En otras palabras, en "mayor" poné el menor valor posible. Y en "menor" poné el mayor valor posible.
De esta forma te asegurás que no te pierdas ningún valor.

Como lo tenés ahora, en "menor" tenés 0. Si todos los valores que ingresás son mayores a cero, nunca vas a capturar el menor.
Hola hice lo siguiente, como menor lo inicié en 0 lo saqué y al probarlo funcionó.

Hola, muchas gracias por los comentarios me ayudaron a analizar mejor el problema y lo pude solucionar, dejo acá abajo el código por si alguno más adelante tiene el mismo problema con este mismo ejercicio:

#include <iostream>

using namespace std;

int main()
{
int mayor, menor, nvalores, valores, posmayor, posmenor;
mayor =0;

cout << "Cuantos valores va a ingresar: ";
cin >> nvalores;

for(int i=1;i<=nvalores;i++)
{
cout << "Ingrese valor: ";
cin >> valores;

if(valores>=mayor)
{
mayor = valores;
posmayor=i;
}
if(valores<=menor)
{
menor = valores;
posmenor=i;
}
}
cout << "El mayor es: " << mayor << " su pos es: " << posmayor << endl;
cout << "El menor es: " << menor << " su pos es: " << posmenor << endl;
return 0;
}

MI-21:"Dados N valores informar el mayor, el menor y en que posición del conjunto fueron ingresados."

#include <iostream>

using namespace std;

int main()
{
int mayor, menor, nvalores, valores, posmayor, posmenor;
mayor =0;

cout << "Cuantos valores va a ingresar: ";
cin >> nvalores;

for(int i=1;i<=nvalores;i++)
{
cout << "Ingrese valor: ";
cin >> valores;

if(valores>=mayor)
{
mayor = valores;
posmayor=i;
}
if(valores<=menor)
{
menor = valores;
posmenor=i;
}
}
cout << "El mayor es: " << mayor << " su pos es: " << posmayor << endl;
cout << "El menor es: " << menor << " su pos es: " << posmenor << endl;
return 0;
}
No es buena idea usar una variable sin inicializar, como estás haciendo con "menor".
Probablemente el compilador te tira una warning.

Imagino que en algún lado está definida una constante con el máximo valor para integer. Algo tipo INT_MAX.
URLs de referencia