Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DickGumshoe en 9 Noviembre 2011, 23:36 pm



Título: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 9 Noviembre 2011, 23:36 pm
¡Hola!

Estoy creando un pequeño programa, en el que introduzco cinco números, y debe calcularme el más próximo al primero. Por ejemplo, si pongo 5,9,6,3,1; sería 6 el número más próximo al primero. O si pongo 5,7,4,6,9; los números más próximos son dos; 6 y 4.

Pero llevo toda la tarde intentándolo, y nada...

El código que tengo por ahora es:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main (void){
  5.  
  6.    float n,n_mejor,d_mejor,a,d;
  7.  
  8.    printf("Introduce el primer numero");
  9.    scanf("%f",&a);
  10.  
  11.    printf("Introduce el segundo numero");
  12.    scanf("%f",&n);
  13.  
  14.  d_mejor=(n-a)*(n-a);
  15.  
  16.    printf("Introduce el tercer numero");
  17.    scanf("%f",&n);
  18.  
  19.  d_mejor=(n-a)*(n-a);
  20.  if(d<d_mejor){
  21.                d_mejor=d;
  22.                n_mejor=n;
  23.                }
  24.  
  25.  
  26.  
  27.    printf("Introduce el cuarto numero");
  28.    scanf("%f",&n);
  29.  
  30.    d_mejor=(n-a)*(n-a);
  31.  if(d<d_mejor){
  32.                d_mejor=d;
  33.                n_mejor=n;
  34.                }
  35.  
  36.    printf("Introduce el quinto numero");
  37.    scanf("%f",&n);
  38.  
  39.                 d_mejor=(n-a)*(n-a);
  40.  if(d<d_mejor){
  41.                d_mejor=d;
  42.                n_mejor=n;
  43.                }
  44.  
  45.  
  46.         printf("El numero mas cercano al primero es %f",n);
  47.  
  48.  
  49.    system("pause");
  50. }
  51.  
  52.  

Ah, d_mejor es la distancia menor entre "a" y cualquier otro número.

Ah ,y el programa me gustaría hacerlo con if, else, printf y scanf, para mejorar el uso de ellos e ir poco a poco aprendiendo programación.

Muchísimas gracias.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: $Edu$ en 9 Noviembre 2011, 23:47 pm
Jeje esta bueno el ejercicio, intentalo hacer en papel y lapicera primero pensando siempre en todas los posibles numeros que ingresara el usuario.

Busca sobre ordenamiento burbujeo para saber la idea general, luego yo tomaria el valor del primer numero en una variable ( a ) y luego el resto en un array el que haras un ordenamiento burbujeo pero personalizado para tu ejercicio, talvez restar el primer item del array entre a y si el resultado es menor al resultado del segundo item del array restado por a no haces ningun cambie de orden, pero si es mayor, haces el cambio.

Despues con alguna variable auxiliar controlas si de esas cuentas que hiciste existe algun - 1 como resultado, y ahi te darias cuenta que hay 2 numeros proximos como en el ejemplo que mostraste.

Intenta aprender el burbujeo y lo traes aca con tu burbujeo personalizado

Te digo esta forma de hacerlo porque tu forma es poco fiable, fijate que haces las cuentas mientras va ingresando los valores, en vez de hacer todo una vez q se ingresaron todos los datos, porque talvez tienes que hacer que una funcion devuelva los numeros proximos y ahi no podras hacer eso que haces


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 9 Noviembre 2011, 23:52 pm
Jeje esta bueno el ejercicio, intentalo hacer en papel y lapicera primero pensando siempre en todas los posibles numeros que ingresara el usuario.

Busca sobre ordenamiento burbujeo para saber la idea general, luego yo tomaria el valor del primer numero en una variable ( a ) y luego el resto en un array el que haras un ordenamiento burbujeo pero personalizado para tu ejercicio, talvez restar el primer item del array entre a y si el resultado es menor al resultado del segundo item del array restado por a no haces ningun cambie de orden, pero si es mayor, haces el cambio.

Despues con alguna variable auxiliar controlas si de esas cuentas que hiciste existe algun - 1 como resultado, y ahi te darias cuenta que hay 2 numeros proximos como en el ejemplo que mostraste.

Intenta aprender el burbujeo y lo traes aca con tu burbujeo personalizado

Te digo esta forma de hacerlo porque tu forma es poco fiable, fijate que haces las cuentas mientras va ingresando los valores, en vez de hacer todo una vez q se ingresaron todos los datos, porque talvez tienes que hacer que una funcion devuelva los numeros proximos y ahi no podras hacer eso que haces

Muchas gracias, pero lo que pasa es que me gustaría aprender bien a usar if y else, ya que programas como este, no me salen por ejemplo con esos códigos, y si avanzo más,  quizá me líe un poco...

En papel he puesto todas las posibilidades que hay, lo que pasa que después al intentar pasarlo, no sé cómo podría hacerlo...

Muchas gracias de nuevo.

Saludos.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: $Edu$ en 10 Noviembre 2011, 00:52 am
Pero no te permiten usar bucles? o no has aprendido aun? Buscaste sobre ordenamiento burbuja?

Lo de hacerlo en papel y lapicera es que yo por ejemplo, me fijo las posibilidades de numeros que podra ingresar el usuario anotandome todo lo siguiente:

Código:
- 7, 3 , 2 , 6 , 4   --> hay solo 1 numero proximo

- 7, 3, 8 , 6 , 4   --> hay 2 numeros proximos

- 7 , 5, 8 , 6 , 4   --> sigue habiendo 2 numeros proximos ( esto es algo insolito pero a veces hay que anotarlo para saber que como conclusion habra o 1 numero proximo o 2, ni mas ni menos.

Ahora buscaremos una combinacion que use todo y de la forma mas entreverada posible, por ejemplo que este al final el numero proximo y otro al lado del primero (tal vez no importa pero como no sabemos aun.. )

- 7 , 8, 5, 4, 6  --> este servira para empezar a pensar el algoritmo

Pensemos como obtendremos esos datos, vamos a crear una funcion que devuelva un array con los numeros proximos? seria lo mas profesional pienso pero esto lo estoy pensando yo, vs tendras que pensar con tus conocimientos, talvez no has aprendido a crear funciones o usar arrays, pero sigamos.

funcion (integer[] numeros) {

' el primer numero es el que mas usaremos porque es al que hallaremos sus numeros proximos asi que lo guardamos

int num;

num = numeros[0] ' el primer numero del array

' ahora pensemos cuando un numero sera mas proximo a num que otro..
' si tenemos num = 7 en nuestro array que preparamos y el segundo elemento del array es 8, como sabemos su distancia? eso quiere decir ser proximo no? del 7 al 8 cuanto hay? 1? no es 8 - 7?, ahora pensemos con el que sigue.. con el 5, 7 - 5 = 2, entonces ya esta mas lejos que con el 8.

' Bien sabemos como saber cual es mas proximo a nuestro numero, pero habria q ver como los vamos organizando..
' para eso usamos el metodo burbuja ( yo lo se porque lo he usado, vs si no sabias te entiendo y por eso te digo que lo vayas a buscar y aprender), pero el metodo de ordenamiento burbuja es para ordenar de menor a mayor un array o viceversa, lo tendre que personalizar..
' El metodo burbuja para ordenar de menor a mayor verifica en un array si el elemento que le sigue es menor entonces cambian sus valores, nosotros no queremos eso, sino saber si la resta de un elemento con nuestro num es mayor a la del siguiente elemento con num.


}

Lo que te puse como comentario, es lo que pienso yo, pero el resto lo planteo siempre, porque ahora te toca a vs buscar el metodo burbuja , comprenderlo y practicarlo y luego personalizarlo para lo que quieres aca, pero trata de hacer todo lo que me voy planteando o pensando siempre, creo que es una forma buena de encarar ejercicios que no salen tan rapido


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: rir3760 en 10 Noviembre 2011, 01:39 am
Deberías utilizar bucles y arrays ya que ello te permitiría desarrollar el programa de una forma mas fácil y corta.

Lo que debes hacer (utilizando arrays y bucles) para conocer el primer numero mas cercano al primero:

1) Das por sentado que este es el segundo.
2) Mediante un bucle obtienes la diferencia entre el primero y el tercero, cuarto y quinto. Si la diferencia es menor tomas nota.

Eso es todo.

Para el calculo de la diferencia entre dos números puedes utilizar las funciones "abs" (para números de tipo "int", prototipo en <stdlib.h>) y "fabs" (para números de tipo "double", prototipo en <math.h>) que te da el valor absoluto de su único argumento.

Un saludo


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: RyogiShiki en 10 Noviembre 2011, 03:35 am
Tener en cuenta cuando puedes tomar un número como el más cercano. Porque el primer número va a estableces un punto en una recta numérica, y va a tener dos tipos de "números más cercanos" los números más cercanos que se encuentran hacia la derecha de la recta numérica, y los números más cercanos que se encuentran hacia la izquierda de la recta con respecto a la posición del primer número. En tus ejemplos solamente se toman en cuenta los dos lados si la distancia entre el de la derecha y el de la izquierda (en la recta) están a una unidad de distancia del número referencia. Así que debes tener presente que (según como tu lo planteaste) si los números de la izquierda o de la derecha están a más de una unidad de distancia del número referencia solo puedes tomar el que menos unidades de distancia tenga. Y como ya lo ejemplificaste si esto no se cumple debes tomar el número de la derecha y el de la izquierda Si y solo sí los dos se encuentran a una unidad de distancia del número referencia, o en su defecto a una cantidad igual de unidades de distancia del número referencia. Eso para que tengas en cuenta.

Saludos


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 10 Noviembre 2011, 15:38 pm
Ah, bueno... Gracias a todos. Ni puedo hacerlo con bucles y array, ni sé. Es que mi hermana está estudiando Matemáticas, y hay una asignatura de Informática, y como me interesa aprender programación, la estoy ayudando, y su profesor por ahora solo deja de esa forma...



¿Alguien podría ayudarme? Es que por más que lo intento, no me sale...

Muchísimas gracias...


Mod: Prohibido el doble o triple post. Usa el botón "Modificar".


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: $Edu$ en 11 Noviembre 2011, 22:45 pm
Lo que te puse yo mas que nada era para que veas como hay que enfrentar los proyectos con papel y lapicera segun lo hago yo, intenta hacerlo y saldra, volve a leer lo que he puesto, nadie te dejara el codigo aca porque no es la idea y esta prohibido hacer las tareas a los demas.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 11 Noviembre 2011, 22:49 pm
Lo que te puse yo mas que nada era para que veas como hay que enfrentar los proyectos con papel y lapicera segun lo hago yo, intenta hacerlo y saldra, volve a leer lo que he puesto, nadie te dejara el codigo aca porque no es la idea y esta prohibido hacer las tareas a los demas.

Yo no quiero  que me hagan la tarea... Si es todo lo contrario, lo único que quiero es aprender... Pero el profesor de mi hermana, ni le explica los códigos, ni nada. Y cada vez que le pregunta una duda de un programa, dice "Uff... No tengo ganas de buscarte el fallo, que hay muchos códigos".

Lo tengo planteado en papel, de hecho lo hago siempre; para cualquier programa, pero lo que no sé es cómo pasarlo, porque el número siempre nos da mal a mi hermana y a mí...


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: $Edu$ en 12 Noviembre 2011, 00:15 am
Pedis un valor, y lo guardas en una variable, luego pedis el valor del segundo y haces la resta con el numero guardado y guardas eso y guardas en otra variable ese numero ingresado como el numero proximo, luego haces lo mismo siempre y vas verificando si la resta de uno es menor al del que esta como numero proximo, entonces modificas el numero proximo actual.

int num; ' primer numero

int resta; ' la resta

int proximo; ' el numero proximo

Restar el numero ingresado con num y guardar el resultado en resta. Poner ese numero ingresado en proximo.
Pedir siguiente numero, hacer la resta y verificar si el resultado es menor a lo que vale la variable resta, si es asi cambiaras la variable proximo por el numero ingresado. Y asi hara eso siempre. No puedo ayudarte mas, y habra otras soluciones tambien


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 12 Noviembre 2011, 00:26 am
Pedis un valor, y lo guardas en una variable, luego pedis el valor del segundo y haces la resta con el numero guardado y guardas eso y guardas en otra variable ese numero ingresado como el numero proximo, luego haces lo mismo siempre y vas verificando si la resta de uno es menor al del que esta como numero proximo, entonces modificas el numero proximo actual.

int num; ' primer numero

int resta; ' la resta

int proximo; ' el numero proximo

Restar el numero ingresado con num y guardar el resultado en resta. Poner ese numero ingresado en proximo.
Pedir siguiente numero, hacer la resta y verificar si el resultado es menor a lo que vale la variable resta, si es asi cambiaras la variable proximo por el numero ingresado. Y asi hara eso siempre. No puedo ayudarte mas, y habra otras soluciones tambien

Ah, vale, muchas gracias.

Eso más o menos lo tenía puesto en el papel explicándolo, pero como al pasarlo no daba bien y tenía puesto tantas cosas, no sabía qué parte estaba mal. Sabiendo que eso está bien, creo que volveré a empezar el programa, para no liarme con tanto código como antes.

Muchísimas gracias.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: $Edu$ en 12 Noviembre 2011, 01:25 am
Hace el intento y si fracasas por lo menos deja aca el codigo para ver que haces mal, pero yo no se C++ pero lo puedo comprender al codigo y veremos que le pasa, saludos


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 12 Noviembre 2011, 02:02 am
Bueno... Aquí estoy de vuelta... (Lo siento...).

(Ahora estoy haciendo solo que si solo hay un número que se aproxime más al primero, y no dos).

Ahora me parece que tengo el código mejor que antes, e incluso podría llegar a pensar que lo tengo bien, excepto por una cosa, y es que al poner, por ejemplo, 1,2,3,4,5... Me dice que el número más aproximado es "0.00000"

El código que tengo es:

Código
  1.  
  2.  
  3.  
  4.  
  5.    #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. int main (void){
  9.  
  10.    float a,r,n,d,d2,d3,d4,n_cercano;
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.    printf("Introduce el primer numero");
  19.    scanf("%f",&a);
  20.  
  21.    printf("Introduce el segundo numero");
  22.    scanf("%f",&n);
  23.                    d=(n-a)*(n-a);
  24.  
  25.  
  26.    printf("Introduce el tercer numero");
  27.    scanf("%f",&n);
  28.  
  29.                    d2=(n-a)*(n-a);
  30.  
  31.                    if(d2<d){
  32.                             n_cercano=n;
  33.                             d=d2;
  34.                             }
  35.  
  36.    printf("Introduce el cuarto numero");
  37.    scanf("%f",&n);
  38.                   d3=(n-a)*(n-a);
  39.                     if(d3<d){
  40.                             n_cercano=n;
  41.                             d=d3;
  42.                             }
  43.  
  44.     printf("Introduce el quinto numero");
  45.    scanf("%f",&n);
  46.                   d4=(n-a)*(n-a);
  47.                    if(d4<d){
  48.                             n_cercano=n;
  49.                             d=d4;
  50.                             }
  51.  
  52.  
  53.  
  54.        printf("El numero mas cercano al primero es %f",n_cercano);
  55.  
  56.  
  57.  
  58.  
  59. system("pause");
  60. }
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
Muchas gracias, y siento si os molesto mucho...


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: $Edu$ en 12 Noviembre 2011, 02:20 am
No me gusta mucho como esta quedando pero te digo que te falto asignarle:

 n_cercano=n;

en la toma del segundo numero, es decir, en los demas haces la comparacion, pero en el segundo numero como es el primer numero posible para el numero cercano, ya se lo asignas.

Fijate si asi anda


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 12 Noviembre 2011, 02:29 am
No me gusta mucho como esta quedando pero te digo que te falto asignarle:

 n_cercano=n;

en la toma del segundo numero, es decir, en los demas haces la comparacion, pero en el segundo numero como es el primer numero posible para el numero cercano, ya se lo asignas.

Fijate si asi anda

Ah, vale, muchas gracias. Se me olvidó ponerlo ahí...

Bueno, entonces ya me sale esa parte. Ahora seguiré cinco minutos intentando poner si 2 números están a la misma distancia del primero, sino lo intento mañana pro la mañana.

Muchísimas gracias de nuevo.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: RyogiShiki en 12 Noviembre 2011, 02:33 am
Bueno no he revisado el código, pero te hago unos apunte. Para que declarar como float cuando solo los usas como enteros (int).

Ahora, te recomiendo este es un ejemplo en buenas prácticas de identación:

(http://i56.tinypic.com/207kv2e.png)

Es bueno que dejes comentarios en las partes que te parezcan que sean complejas así cuando vuelvas a mirar el código sabes que hace cada cosa.

Es bueno que los nombres de las variables sean explicitas y tengan relación con su uso, así te evitas dolores de cabeza más tarde.


Mod: Tamaño máximo de las imágenes -> 800x600px.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: DickGumshoe en 12 Noviembre 2011, 02:41 am
Ah, muchas gracias a ti también por la aclaración.

Declaré como float porque se supone que el programa también debe reconocer números decimales (aunque la función del programa es más bien aprender, así que también podría haberlo declarado como int, como bien dices).

Lo de los comentarios lo hice en un solo programa, pero veo que ya me va siendo necesario volver a usarlo.

Muchas gracias.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: Taurs en 4 Septiembre 2018, 19:32 pm
Solucion pero aun falta cuando existen 2  o mas numeros cercanos al primero, espero que les sirva!(esta en python)

Código
  1. num1 = int (input("Ingrese un numero1: "))
  2. num2 = int (input("Ingrese un numero2: "))
  3. num3 = int (input("Ingrese un numero3: "))
  4. num4 = int (input("Ingrese un numero4: "))
  5. num5 = int (input("Ingrese un numero5: "))
  6. ##
  7. r2 = abs(num1 - num2)
  8. r3 = abs(num1 - num3)
  9. r4 = abs(num1 - num4)
  10. r5 = abs(num1 - num5)
  11.  
  12. menor = r2
  13. cercano = num2
  14. if r3 < menor:
  15.    menor = r3
  16.    cercano = num3
  17.    print ("El mas cercano es:  num3 y su valor ingresado es: ", num5)
  18. if r4 < menor:
  19.    menor = r4
  20.    cercano = num4
  21.    print ("El mas cercano es: num 4 y su valor ingresado es: ", num4)
  22. if r5 < menor:
  23.    menor = r5
  24.    cercano = num5
  25.    print ("El mas cercano es:  num5 y su valor ingresado es: ", num5)
  26. if r2 == menor:
  27.    print ("El mas cercano es:  num2 y su valor ingresado es: ", num2)


Mod: Obligatorio el uso de etiquetas GeSHi para códigos.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: Beginner Web en 4 Septiembre 2018, 20:40 pm
Yo te podria ayudar si me sacas de una duda, a que te refierenes con el primero? "mas proximos al primero"


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: MAFUS en 4 Septiembre 2018, 21:58 pm
Este post es de 2011, dudo que vaya a responder.


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: Beginner Web en 4 Septiembre 2018, 23:14 pm
No me habia dado cuenta de la fecha como salto al principio dije "a ver tiene una hermana y si lo ayudamos?"  ;-)


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: jca1 en 13 Septiembre 2018, 03:14 am
Idem del post de beginner web xd


Título: Re: Programa que calcula el número más próximo al primero
Publicado por: dijsktra en 29 Enero 2019, 10:07 am
No me habia dado cuenta de la fecha como salto al principio dije "a ver tiene una hermana y si lo ayudamos?"  ;-)

Bueno, vale, pues ayudémoslo! Total, quedará registrado en Internet para la posteridad para el que quiera consultarlo...

Lo que no entiendo es por qué no le dejan usar arrays ni bucles...En fin...

Código
  1. #include <stdio.h> // scanf, printf
  2. #include <stdlib.h> // abs
  3.  
  4. /*
  5.    Note: Arrays and loops forbidden! 8-O
  6.  
  7.    P : True
  8.    fun min5(a0,a1,a2,a3,a4) dev <p,d>:(int,int)
  9.    Q : p=min i : 1 <= i < 5 : |ai-a0|=d and
  10.        d=min i : 1<=i<N : |ai-a0|
  11.  
  12.    (Not sure about legitimate use of ai at object language)
  13.  
  14. */
  15.  
  16.  
  17. void min5(const int a0,const int a1,const int a2,const int a3,const int a4,
  18.          int *p, int *d)
  19. {
  20.  *p=1; *d=abs(a0-a1);
  21.  if (*d>abs(a0-a2))
  22.    { *p=2; *d=abs(a0-a2);}
  23.  if (*d>abs(a0-a3))
  24.    { *p=3; *d=abs(a0-a3);}
  25.  if (*d>abs(a0-a3))
  26.    { *p=3; *d=abs(a0-a3);}
  27.  if (*d>abs(a0-a4))
  28.    { *p=4; *d=abs(a0-a4);}
  29.  return;
  30. }
  31.  
  32. int main(int argc, char *args[])
  33. {
  34.  int a0,a1,a2,a3,a4;
  35.  int p,d;
  36.  for( ;scanf("%d%d%d%d%d",&a0,&a1,&a2,&a3,&a4)==5 ; )
  37.    {
  38.      min5(a0,a1,a2,a3,a4,&p,&d);
  39.      printf("%d %d\n",p,d);
  40.    }
  41.  return 0;
  42. }
  43.  
  44.  
  45.  

EDIT Según me han hecho notar, efectivamente hay un errata: las líneas 25-26 aparecen duplicadas por error

Algunas pruebas de ejecución...

  • La línea impar es la entrada de cinco variables(a0,a1,a2,a3,a4).
  • La línea par saca el ordinal de la variable que esta más cerca (4 -> a4) y la distancia |a4-a0|. En caso de varías a la misma distancia, escoge la de ordinal más baja

Código:
1001 1002 2 3 4
1 1
1001 2 1002 3 4
2 1
1001 2 3 1002 4
3 1
1001 2 3 4 1002
4 1
1001 1001 1001 1001 1001
1 0