Programa que calcula el número más próximo al primero

Iniciado por DickGumshoe, 9 Noviembre 2011, 23:36 PM

0 Miembros y 2 Visitantes están viendo este tema.

DickGumshoe

¡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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main (void){
 
    float n,n_mejor,d_mejor,a,d;
   
    printf("Introduce el primer numero");
    scanf("%f",&a);
   
    printf("Introduce el segundo numero");
    scanf("%f",&n);
   
  d_mejor=(n-a)*(n-a);
   
    printf("Introduce el tercer numero");
    scanf("%f",&n);
   
  d_mejor=(n-a)*(n-a);
  if(d<d_mejor){
                d_mejor=d;
                n_mejor=n;
                }
   
         
         
    printf("Introduce el cuarto numero");
    scanf("%f",&n);
   
    d_mejor=(n-a)*(n-a);
  if(d<d_mejor){
                d_mejor=d;
                n_mejor=n;
                }
           
    printf("Introduce el quinto numero");
    scanf("%f",&n);
     
                 d_mejor=(n-a)*(n-a);
  if(d<d_mejor){
                d_mejor=d;
                n_mejor=n;
                }
               

         printf("El numero mas cercano al primero es %f",n);
             
   
    system("pause");
}
   


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.

$Edu$

#1
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

DickGumshoe

Cita de: $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

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.

$Edu$

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:


- 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

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

RyogiShiki

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


DickGumshoe

#6
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".

$Edu$

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.

DickGumshoe

Cita de: $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.

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í...

$Edu$

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