UTNianos

Versión completa: [AYUDA] Ejercicio Algoritmos y Estructura de datos en c++
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buen día!

bueno, tengo un problema hay un ejercicio que debemos entregar en c++ que no puedo resolver porque el profesor no me permitio hacerlo usando vectores ya que "no se vio en clase".

El ejercicio dice:

"Dado N cantidad de numeros, informar el mayor, menor y posicion"

Pude informar el menor y el mayor pero no puedo lograr informar la posición. porque usando contadores, siempre o me dice la cantidad de mayores o la cantidad de ingresados.. pude hacer casos "optimos" donde el ultimo era el mayor o el primero y andaba pero si variaba mucho eso no lo pude sacar.

Aca esta el codigo! si me pueden dar una mano genial!


#include <stdlib.h>
#include <conio.h>
#include <iostream>
using namespace std;
/* Ejercicio 22:

- Dados N valores

a) informar el mayor
b) el menor
c) en que posición del conjunto fueron ingresados.*/

int nValores;
int i;
int valores;
int mayor = 0;
int menor = 0;
int flag;
int countMayor=0;
int countMenor=0;

int main(){

cout << "Cuantos valores desea ingresar?" <<"\n"; //pide la cantidad de valores a ingresdar ya que dice "dado N valores"
cin >> nValores;

while (nValores <=0){
cout << "Ingrese un valor mayor a 0" << "\n"; //validacion por si ingresa un valor menor a 0
cin >> nValores;
}else{
break;
}

cout << "Ingrese un valor" << "\n";
cin >> flag; // registro del primer valor

mayor = flag; // inicializacion de mayor
menor = flag; // nicializacion de menor

for(i=0; i<nValores-1; i++){ //nValores -1 porque ya se ingreso 1 anterioridad

cout << "Ingrese un valor" << "\n";
cin >> valores; //agrega el segundo valor a valores

if (valores >= mayor){ //compara el nuevo valor con Mayor
mayor = valores; //Si es mayor asigna el valor agregado como el mayor

// countMayor++; -Revisar- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
if (valores <= menor) { //compara el nuevo valor con Menor
menor = valores; //Si es menor asigna el valor agregado como el menor

// countMenor++; - revisar- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}


cout << "El Mayor es " << mayor << /*" En la posicion " << (countMayor+1) <<*/ "\n" ;
cout << "El Menor es " << menor << /*" En la posicion " << (countMenor+1) << */"\n" ;

}


Hola, probá asignando "i" a los contadores dentro de cada if. A medida que avanza el for se va marcando la posición, avisame su funca jaja. Saludos.

if (valores >= mayor) //compara el nuevo valor con Mayor
{ mayor = valores; //Si es mayor asigna el valor agregado como el mayor
countMayor=i; //Le asigna a tu contador la posición del ciclo
}

if (valores <= menor) //compara el nuevo valor con Menor
{ menor = valores; //Si es menor asigna el valor agregado como el menor
countMenor=i; //Le asigna a tu contador la posición del ciclo
}
(03-05-2016 10:25)Manuel_Salinas escribió: [ -> ]Hola, probá asignando "i" a los contadores dentro de cada if. A medida que avanza el for se va marcando la posición, avisame su funca jaja. Saludos.

if (valores >= mayor) //compara el nuevo valor con Mayor
{ mayor = valores; //Si es mayor asigna el valor agregado como el mayor
countMayor=i; //Le asigna a tu contador la posición del ciclo
}

if (valores <= menor) //compara el nuevo valor con Menor
{ menor = valores; //Si es menor asigna el valor agregado como el menor
countMenor=i; //Le asigna a tu contador la posición del ciclo
}

Probe haciendo eso y cuando informa la posicion siempre devuelve un valor menos, (si fuera la posicion 5, muestra 4)

cuando quiero informarlo alfinal pruebo
cout << "posicion" << (countMenor+1);

e igual me devuelve un valor menos (no se lo agrega),

probe poniendo

<< ++countMenor

fuera del for

countMenor +=1;
countmenor = countMenor+1;
countmenor +1;

y cuando lo informo siempre devuelve una posición menos.
Si luego de la validación arrancás con el for directamente, y no le restas 1 a nValores?. Cuando declarás "flag" asignale valor cero, usalo de llave. Entonces dentro del for, empezás un if, si es igual al valor asignado a flag, asignás el valor de n al máximo y al mínimo y en el mismo sector, asignás 1 a flag. Entonces cuando de otra vuelta de ciclo for, la llave no va a ser 0 y gira al else, ahí comparás el valor de n con tus máximos o mínimos y vas incluyendo en tu contador a "i" según el caso, max o min. Eso lo usé en varios ejercicios de ese tipo y suele funcionar bien.
Simplemente crea dos enteros donde guardarás la posicion del mayor y menor, y luego en los if donde comprobas los asignas (dentro del for). Suponte las variables int posMayor,posMenor; Sería:

if (valores >= mayor){ //compara el nuevo valor con Mayor
mayor = valores; //Si es mayor asigna el valor agregado como el mayor
posMayor=i;
}
if (valores <= menor) { //compara el nuevo valor con Menor
menor = valores; //Si es menor asigna el valor agregado como el menor
porMenor=i;
}
URLs de referencia