Autor
|
Tema: Determinar el Mayor de cinco numeros (Leído 4,103 veces)
|
Omaredy09
Desconectado
Mensajes: 1
|
Mi profesor nos dejo hacer una funcion en c++ que determine el mayor de cinco numeros. De antemano les comento que él no quiere que usemos arrays, él quiere que intentemos hacer un mecanismo con bucles e intentar no usar demasiados condicionales. Ciertamente lo veo algo complicado, no se como hacerlo sin usar varios condicionales. Les agradeceria que me aconsejaran o me dieran ideas para resolver el problema. Gracias de antemano por su tiempo. http://www.subirimagenes.com/privadas-imagenproblema-2438045.htmlEse es link de la imagen, por si quieren verla
|
|
« Última modificación: 3 Agosto 2018, 04:34 am por Omaredy09 »
|
En línea
|
|
|
|
K-YreX
|
Ya que no puedes usar un array para resolver este problema, una posible solución es crear una función auxiliar con dos parámetros y usarla en tu función. Quedaría algo de este estilo: int Mayor (int a, int b){ int mayor = a; if (b > mayor) mayor = b; return mayor; } int Mayor (int n1, int n2, int n3, int n4, int n5){ int mayor = Mayor (Mayor (n1, n2), Mayor (n3, n4)); mayor = Mayor (mayor, n5); return mayor; }
Ambas funciones pueden tener el mismo nombre porque el número de parámetros es distinto. Si tienes alguna duda al respecto puedes buscar información sobre la sobrecarga de funciones. Al llamar a la función Mayor desde la propia función se resuelven primero las funciones interiores y finalmente la exterior. Como faltaría por comprobar un número lo he comprobado en otra línea aunque se podría hacer todo a la vez. Queda un poco ilegible el código pero puedes probar a hacerlo.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Quédate con tu profesor: int mayor(int n1, int n2, int n3, int n4, int n5) { int mayor = n1; for(int *p=&n2; p<=&n5; ++p) if(*p > mayor) mayor = *p; return mayor; }
|
|
« Última modificación: 4 Agosto 2018, 03:07 am por MAFUS »
|
En línea
|
|
|
|
engel lex
|
Quédate con tu profesor: int mayor(int n1, int n2, int n3, int n4, int n5) { int mayor = n1; for(int *p=&n2; p<=&n5; ++p) mayor = *p; return mayor; }
cuidado con ese codigo, nada te asegura que se cargue en memoria de n1 a n5 en orden, revisa los posts sobre los indeterminados de la forma de carga int a = 1; printf("%i, %i, %i, %i, %i", ++a , a ++, a ++, ++a , a );
|
|
« Última modificación: 4 Agosto 2018, 03:10 am por engel lex »
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Cierto, no se asegura que se carguen en ese orden, pero sí que serán contiguos en memoria. Por lo cual es igual el orden en que se carguen porque a la hora de crear el marco de la función siempre ocuparán los mismos espacios en el marco.
Por cierto, he modificado un poco el código: no tenía en cuenta si el elemento actual era mayor a 'mayor'.
|
|
|
En línea
|
|
|
|
engel lex
|
Cierto, no se asegura que se carguen en ese orden, pero sí que serán contiguos en memoria. Por lo cual es igual el orden en que se carguen porque a la hora de crear el marco de la función siempre ocuparán los mismos espacios en el marco.
es decir, n2 puede cargarse de ultimo, por lo que generará un acceso invalido de memoria y no me refiero en tiempo de ejecución, me refiero en la forma que los elementos se cargan a la pila para procesar
|
|
« Última modificación: 4 Agosto 2018, 03:15 am por engel lex »
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
La convención cdecl, que es la estándar en C y C++, dice que los argumentos se pasarán de derecha a izquierda, que con esto no hay que confundir con que los argumentos de una llamada se pueden evaluar en el orden que el compilador prefiera.
Si se dejara que cada vez que se hace una llamada el orden del paso de los argumentos pudiera cambiar esta información se debería guardar en algún sitio para saber la función llamada dónde buscar esos argumentos, o se debería usar algo parecido a reflections en otros lenguajes, cosa que en C no existe. Los nombres de las variables desaparecen. En el stackframe solo queda el xBP y el offset, y esto debe estar escrito a fuego en el código máquina, por tanto el orden tiene que estar perfectamente definido, sea cual sea la convención de llamada que se use. Que por cierto, el código que he pasado no funcionará con cualquier convención que use registros.
|
|
« Última modificación: 4 Agosto 2018, 15:59 pm por MAFUS »
|
En línea
|
|
|
|
CalgaryCorpus
|
Basado en el requerimiento original, y pensando de lo que nos dice que el profesor querria restringir el uso de arreglos, tal vez se trate de un curso introductorio y ni siquiera las funciones han sido vistas aun. En ese caso, la solucion propuesta no serviria tampoco. Como no hay muchas pistas, adivino que solo se puede usar while y los datos se leen uno tras otro, quedando algo asi como: leer numero maximo = numero repetir 4 veces { leer numero si el numero > maximo -> maximo = numero } imprimir maximo
No hay uso de arreglos, no hay paso de parametros ni funciones, solo lectura de un entero en 5 ocasiones, actualizando el maximo cuando corresponde.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
mayor de tres numeros en c++...
Programación C/C++
|
rub'n
|
9
|
14,396
|
27 Mayo 2010, 04:03 am
por rub'n
|
|
|
Ordenar 5 números de menor a mayor e imprimir los números impares
Programación C/C++
|
ERIK546
|
6
|
25,754
|
23 Junio 2012, 00:36 am
por ERIK546
|
|
|
DETERMINAR MAYOR O MENOR EN ARREGLO
Programación C/C++
|
wazausky
|
2
|
2,636
|
12 Noviembre 2012, 14:53 pm
por leosansan
|
|
|
Cinco acusados en el mayor caso de fraude informático de EEUU
Noticias
|
wolfbcn
|
0
|
1,550
|
26 Julio 2013, 14:33 pm
por wolfbcn
|
|
|
Li-Fi podría ofrecer mayor velocidad que el Wi-Fi en sólo cinco años
Noticias
|
wolfbcn
|
0
|
1,149
|
25 Noviembre 2014, 02:04 am
por wolfbcn
|
|