Propones una funcion que no funciona. No contempla que los valpres almacenados en las variables sean iguales.
Te invito a buscar cualquier ejemplo o analizar el funcionamiento de la función para ver si es cierto que no contempla que los valores sean iguales. Se empieza asignando como mayor a <numero1> y se actualiza en caso de que otro de los números sea mayor estricto. ¿Qué más da que dos números sean iguales? mayor{5,5} = 5. Que más da que el mayor sea el primero o el segundo, si son iguales. Mejor tratar al primero como mayor y nos ahorramos una asignación más a lo tonto.
Esto se usa siempre para determinar el mayor de dos números:
// Lo que se le pasa a alguien por la cabeza cuando esta empezando
// Aqui si es cierto que si no ponemos >= en la condicion tendriamos un problema si numero1 == numero2
int mayor;
if(numero1 >= numero2)
mayor = numero1;
else
mayor = numero2;
// Como se suele hacer para optimizar
int mayor = numero1; // suponemos que numero1 es mayor
if(numero2 > mayor) // solo si numero2 es mayor estricto actualizamos el mayor, si son iguales mantenemos numero1 ya que es correcto
mayor = numero2;
Propones utilizar arrays en un programa que se presupone que el usuario puede introducir la cantidad de valores que quiera. En lugar de usar vectores que no dejan de estar implementados con arrays.
Los contenedores de la STL están muy bien pero para una tarea trivial como es esta no recomiendo su uso. Estás metiendo una enorme cantidad de código (funciones, constantes, etc) que traen consigo cada una de las librerías dedicadas a un contenedor cuando con un array que no añade nada más se puede solucionar.
Además creo que los contenedores de la STL no deberían usarse hasta haber hecho algún algoritmo tedioso con arrays:
1º Para saber desenvolverse en situaciones difíciles en las que por un motivo u otro, sea obligatorio usar arrays.
2º Para comprender mejor el potencial de los contenedores y ver la de trabajo que quitan.
Seguro que hay más razones pero sólo destacaré esas. Imagina que empiezas a programar usando desde el principio la librería <vector> y un día te dicen "¿cómo llevas trabajar con memoria dinámica?" o piensas "¿por qué la gente se esfuerza en aprender memoria dinámica y a usar <new> y <delete> cuando el <vector> lo hace todo solo?"
Siguiendo por esa linea, seria mas eficiente usar set como contenedor.
Depende lo que entiendas por eficiente... Crear un set de valores donde vamos a meter un array ponte de 1000000 números en los que hay 20 repetidos. Habrá quien diga que mejor un set "así evitas meter los valores que son iguales. Al final coges el último y ya está" Y... El set se ordena por arte de magia? De verdad alguien piensa eso? Requiere tiempo de ejecución que aunque no se vea de forma explícita, está ahí. Habrá quien diga que mejor una cola con prioridad, con las operaciones suficientes para resolver esa tarea y menos costosa y habrá quien no se quede ahí y diga "cuando la cola con prioridad no esté vacía comparas el valor que vas a meter con el top y solo lo introduces si el nuevo valor es mayor, así no introduces todos los valores y por ende no requieres de tanto espacio" Y yo me pregunto al final eso no acaba siendo un bucle que determina el mayor entre el mayor actual y el siguiente número del array?? Mejor saber sacarse las castañas del fuego sin tanto contenedor de la STL aunque no digo que no tengan su utilidad, pero no para algo tan trivial...
Suprimi el valor decimal a proposito aunque lo correcto sea redondear porque no queria solucionarle la tarea.
Muy bien, entonces digamos que lo comenté para que si alguien lo iba a pasar por alto, se parara a pensarlo. Ya que al final siempre alguien acaba liado preguntándose "¿por qué me salen estos dos porcentajes iguales si uno vale 20,99% y el otro 20,02%? Por no haber hecho un cast en la división.
En base al resto que comentas intente acercar el codigo al lenguaje humano para que lo entienda.
Para acercarse al lenguaje humano están los comentarios a los que no pondré quejas ya que explicas todo lo que vas haciendo y eso está bien sobre todo para la gente que empieza o el pseudocódigo el cual ya cada cual puede encargarse de traducir a su manera.
Pero por ejemplo crear una variable para guardar el enter del final... Si alguien está empezando y se acostumbra a hacerlo así porque es lo que vio cuando él estaba empezando a programar, algún día le harán preguntas como "¿por qué creas esa variable?" o "¿por qué de tipo int si vas a guardar un enter"? o podrá pensar que eso funciona cuando pulsas enter hasta que un día se equivoque y le dé a otra tecla y se diga "¿por qué pido que pulsen Enter para salir si cualquier tecla sirve?" Son pequeños detalles pero que la gente cuando lo ve debería preguntarse ese tipo de cosas y en cambio muchos lo pasan por alto y dicen "pues se hace así y ya está". Y no es que se haga así, cada uno podrá hacerlo como quiera al final, pero que sepan las opciones que tienen.
Solo quiero dejar claro que tanto el comentario anterior como este son críticas constructivas. No lo hago por tocar las narices ni nada pero en el fondo todos tenemos nuestro ego y nos gusta defenderlo. Y personalmente me gusta explicar el porqué de lo que hago y digo en un mundo que cada vez más se usa el motivo del porque sí hasta en el sistema educativo, sin ningún tipo de razonamiento en el que apoyarse. Ahora que ya he soltado mi reivindicación y he mostrado las posibilidades que hay hasta para hacer la función más simple del mundo. Suerte a todos y ánimo con la programación