Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Validar mayor nota de N notas ingresadas

Estas en el tema de Validar mayor nota de N notas ingresadas en el foro de C/C++ en Foros del Web. Hola que tal, estoy realizando un algoritmo que me valide cual de todas las notas de exámenes ingresadas es la mayor y cuales son iguales. ...
  #1 (permalink)  
Antiguo 29/01/2016, 10:24
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 9 años, 6 meses
Puntos: 0
Validar mayor nota de N notas ingresadas

Hola que tal, estoy realizando un algoritmo que me valide cual de todas las notas de exámenes ingresadas es la mayor y cuales son iguales.

Primero pido la cantidad de notas a evaluar. Si son 3, pediré tres veces la nota.
Si ingreso por ejemplo estas notas (15,20,16). Debería informarme solo el 20.
Si ingreso estas (20,20,14), Debería informarme las dos 20.

En el programa voy pidiendo nombre, cedula y nota. Debo devolver en un string el nombre de la personas o de las personas con mayor nota.

Tengo esto hecho.

Código:
for(i=1;i<=num;i++)
{
 cout<<"Ingrese nombre: ";
 cin>>nombre;
 cout<<"Ingrese cedula: ";
 cin>>cedula;
 cout<<"Ingrese nota: ";
 cin>>nota;
 cout<<endl;
 mayor=nota;
 if (nota<0 || nota>20)
 {
  cout<<"Nota Invalida"<<endl;
  cout<<endl;
 }
 else
 {
   if (nota >= mayor){
   res+="Nombre: "+nombre+" Cedula: "+cedula+"\n";
   }
 }
}
Alguna sugerencia? Gracias

PD: No debo usar Array
  #2 (permalink)  
Antiguo 29/01/2016, 11:41
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Validar mayor nota de N notas ingresadas

Cuando dices que no puedes usar Array te refieres a que no puedes usar contenedores de la STL o a que no puedes usar punteros?

Si puedes usar contenedores yo usaría los siguiente:

Código C++:
Ver original
  1. struct Datos
  2. {
  3.   std::string nombre;
  4.   std::string cedula;
  5. };
  6.  
  7. std::vector<Datos> alumnos; // para almacenar los nombres con la nota más alta
  8. int nota; // para almacenar la nota más alta

En el caso de no poder usar contenedores pero si punteros...
Código C++:
Ver original
  1. struct Datos
  2. {
  3.   std::string nombre;
  4.   std::string cedula;
  5. };
  6.  
  7. Datos* alumnos; // para almacenar los nombres con la nota más alta
  8. int numAlumnos; // Por comodidad, indica cuantos nombres hay en el array.
  9. int nota; // Para almacenar la nota más alta

Como te tienen que indicar el número de notas, puedes usar ese número para inicializar el array alumnos, ya que ese es el peor caso posible (todas las notas iguales).

La idea entonces del algoritmo puede ser:

Si la nota actual es mayor que nota: Actualizas nota y vacías alumnos. En el caso del contenedor puedes usar clear() y en el del array, numAlumnos=0.
Si la nota actual es igual a nota, almacenas el nombre en alumnos. En el caso del contenedor puedes usar push_back() y, en el caso del array... bueno, parto de que sabes hacerlo... e incrementas numAlumnos.
Si la nota actual es inferior a nota no haces absolutamente nada.

¿Por qué en el caso de los contenedores no tengo numAlumnos? Por varias razones:
  • El contenedor tiene un método llamado push_back, que introduce un elemento al final de la lista.
  • El contenedor tiene un método size(), que me indica el número de elementos de la lista.

Estos motivos hacen que el uso de la variable sea totalmente prescinsible.

Total, que una vez has pedido todas las notas, únicamente te habrás quedado con la nota más alta y con todos aquellos alumnos que comparten dicha nota, con un simple bucle deberías ser capaz de componer el string de salida.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #3 (permalink)  
Antiguo 29/01/2016, 12:31
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Validar mayor nota de N notas ingresadas

Hola eferion. No debo usar ni punteros ni estructuras de datos ni nada de eso.

El problema esta en que debo ir almacenando en un String (la variable que se llame res), aquellos datos cuya nota sea mayor que las demas.

Si ingrese, Nombre = Juan Nota= 14 , Nombre = Maria Nota=15, Nombre = Sandra Nota=16

Debe Devolverme solo a Sandra.

Si Coloco Nombre = Juan Nota= 16 , Nombre = Maria Nota=15, Nombre = Sandra Nota=16


Debe Devolverme solo a Sandra y Juan.

No debo usar arreglos, solo ir almacenando en un string aquella persona o personas con notas mas altas.
  #4 (permalink)  
Antiguo 29/01/2016, 13:55
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: Validar mayor nota de N notas ingresadas

En ese caso lo único que tienes que hacer es separar el caso de que la nota sea igual y la nota sea superior. Similar al código que tienes puesto manejas el caso de que sea igual, puesto que debes añadir sus datos al string, en caso de que no sean iguales sobreescribes el string. Ejemplo:

Código C++:
Ver original
  1. // código previo
  2. else {
  3.  if (nota == mayor) {
  4.     res+="Nombre: "+nombre+" Cedula: "+cedula+"\n";
  5.  }
  6.  else if (nota > mayor) {
  7.    mayor = nota;
  8.    res = "Nombre: "+nombre+" Cedula: "+cedula+"\n";
  9. }
  10. // ....
  #5 (permalink)  
Antiguo 29/01/2016, 14:30
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Validar mayor nota de N notas ingresadas

Cita:
Iniciado por jdag1992 Ver Mensaje
Hola eferion. No debo usar ni punteros ni estructuras de datos ni nada de eso.

El problema esta en que debo ir almacenando en un String (la variable que se llame res), aquellos datos cuya nota sea mayor que las demas.
Lo que te he explicado se puede aplicar perfectamente a ese caso... lo único que tienes que necesitas es un string donde ir almacenando los datos y una variable para almacenar la nota:
  • Si la nota es más alta que la almacenada borras el string, almacenas en el string los datos del usuario y actualizas la nota más alta.
  • Si la nota es igual a la almacenada añades en el string los datos del usuario
  • Si lanota es inferior a la almacenada no haces nada y pasas al siguiente.

Al final del proceso te quedará un string con los datos de los alumnos con las notas más altas.

Esto viene a ser lo que te ha explicado xKuZz... estoy cansado y lo he leído después de contestar.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #6 (permalink)  
Antiguo 29/01/2016, 15:04
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Validar mayor nota de N notas ingresadas

hola jdag1992, veras he visto tu problema y tal como yo lo entiendo quieres saber quienes tiene la maxima nota sea uno o varios, si es asi puedo ayudarte con la logica pero el programa tendras que hacerlo tu, pues tengo algun conocimiento de c pero casi nada de c++ asi que solo puedo aportar la logica.

la idea me la diste tu pues como dices tienes que guardarlo todo en un string y creo que eso es lo que quiere el profe que trabajes la clase string.

como resolver el problema sin arrays? simplemente sumando strings:

tal como en este ejemplo (que no es mio claro jjj)
..........................................
string result;
string s1 = "hello";
// without the extra space at the end
string s2 = "world";
result = s1;
result += ' ';
// append a space at the end
result += s2;
..........................................

la logica que propongo seria algo como ...

==========================================
int maxnota (val inicial -255)
string resultado (inicializada a "")

pide el numero de alumos
repite (num_alumnos)
pide los datos nombre, cedula y nota
compara la nota con maxnota
si es mayor
pon nota en maxnota
pon resultado con el de la varible nombre
// solo habra un nombre en resultado
si no, si es igual
suma el valor de la variable nombre a la variable resultado
// añadiendo los nombres con igual nota a resultado
// recuerda añadir un espacion entre los nombres
visuliza "relacion de alumnos que han obtenido la maxima nota ("+maxnota+") son: "+resultado
==========================================
... ahora a aprender como funciona la clase string

espero te sirva
suerte
  #7 (permalink)  
Antiguo 29/01/2016, 15:07
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Validar mayor nota de N notas ingresadas

vaya me puse a buscar la solución y no vi que eferion se había adelantado
  #8 (permalink)  
Antiguo 29/01/2016, 15:14
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Validar mayor nota de N notas ingresadas

int maxnota (val inicial -255)
string resultado (inicializada a "")

pide el numero de alumos
repite (num_alumnos)
....pide los datos nombre, cedula y nota
....compara la nota con maxnota
....si es mayor
........pon nota en maxnota
........pon resultado con el de la varible nombre
........// solo habra un nombre en resultado
....si no, si es igual
........suma el valor de la variable nombre a la variable resultado
........// añadiendo los nombres con igual nota a resultado
........// recuerda añadir un espacio entre los nombres
visuliza "relacion de alumnos que han obtenido la maxima nota ("+maxnota+") son: "+resultado

Etiquetas: c++, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:56.