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

[SOLUCIONADO] Hallar numero menor sin usar if ni case

Estas en el tema de Hallar numero menor sin usar if ni case en el foro de C/C++ en Foros del Web. Hola tengo el siguiente ejercicio ingresar 4 numeros y hallar el promedio de los 3 numeros mas altos el problema es que debo resolverlo sin ...
  #1 (permalink)  
Antiguo 30/01/2016, 00:23
 
Fecha de Ingreso: mayo-2015
Mensajes: 23
Antigüedad: 9 años, 7 meses
Puntos: 0
Hallar numero menor sin usar if ni case

Hola tengo el siguiente ejercicio

ingresar 4 numeros y hallar el promedio de los 3 numeros mas altos

el problema es que debo resolverlo sin usar if o case

lo q he echo hasta ahora es algo como esto

int n1 , n2 ,n3 ,n4 , menor , promedio , x=0

//en este caso si el numero 2 fuera menor
while(n1>n2 && n3>n2 && n4 >n2 && x=0 ){

menor=n2

promedio = (n1 +n2+n3+n4) -menor)/3

imprimir promedio

x=x+1
}

asi he echo para cada caso en el q cada numero pueda ser menor
me podrian indicar si lo que he echo esta bien o hay otra forma gracias
  #2 (permalink)  
Antiguo 30/01/2016, 04:53
 
Fecha de Ingreso: enero-2014
Mensajes: 60
Antigüedad: 10 años, 11 meses
Puntos: 1
Respuesta: Hallar numero menor sin usar if ni case

hola jpaulxD, el problema lo llevas bien encaminado quizás faltaría saber que pasaría si hay valores repetidos

la variable de salida de bucle 'x' debes asignarle un cero antes de entrar en el bucle y no en la pregunta del while, ahí deberías comparar "==", no asignar '='

la variable menos no es necesaria pues ya sabes cuales son los mas altos, así te ahorrarías una asignación, una suma, y una resta además de la variable

cuando preguntas si hay otra forma ...

pues claro que hay, por ejemplo lo mismo con un for que se repita solo una vez
for(int i=0; i<1; i++){ ... }

otra forma de hacerlo es con el operador ternario '?' y te pongo el ejemplo:

Código c:
Ver original
  1. #include <stdio.h>
  2.  
  3. void main(){
  4.  
  5.    int n1, n2 ,n3, n4, promedio;
  6.  
  7.    printf("introduce 4 numeros separados por espacios:\n");
  8.    scanf("%i %i %i %i",&n1, &n2, &n3, &n4);
  9.  
  10.    (n1<=n2 && n1<=n3 && n1<=n4) ? (promedio=(n2+n3+n4)/3)              // el n1 queda último
  11.       : ((n2<=n1 && n2<=n3 && n2<=n4) ? (promedio = (n1+n3+n4)/3)      // el n2 queda último
  12.          :((n3<=n1 && n3<=n2 && n3<=n4) ? (promedio = (n1+n2+n4)/3)    // el n3 queda último
  13.             :(promedio = (n1+n2+n3)/3)));                              // el n4 queda último
  14.    printf("el promedio de los tres numeros mas altos es %i ", promedio);
  15. }

espero te sirva
  #3 (permalink)  
Antiguo 30/01/2016, 05:00
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Hallar numero menor sin usar if ni case

Hay varias formas de resolver el problema. Tirando de ingeniería puedes hacerte unas funciones tal que:

Código C:
Ver original
  1. int min(int a, int b)
  2. {
  3.   return b ^ ((a ^ b) & -(a < b));
  4. }
  5.  
  6. int max(int a, int b)
  7. {
  8.   return a ^ ((a ^ b) & -(a < b));
  9. }
  10.  
  11. void sort(int* first, int* second)
  12. {
  13.   int a = min(*first,*second);
  14.   int b = max(*first,*second);
  15.  
  16.  *first = a;
  17.  *second = b;
  18. }

Con esta función ya tienes todo lo necesario para trabajar. Sort va a dejar en el primer parámetro el número menor. Si llamas a sort con, por ejemplo, n3 y n4, n3 se quedará con el menor de los dos. Después comparas n2 y n3 y el menor se quedará en n2... Si consigues dejar el menor en, por ejemplo n1 simplemente tienes que preocuparte de calcular el promedio de n2, n3 y n4.

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.
  #4 (permalink)  
Antiguo 06/02/2016, 01:41
 
Fecha de Ingreso: mayo-2015
Mensajes: 23
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Hallar numero menor sin usar if ni case

Muchas gracias por la ayuda :D

Etiquetas: case, condición, logica, menor, numero
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 14:25.