Ayuda programa en C!

Iniciado por joseh94, 5 Noviembre 2014, 00:04 AM

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

joseh94

Hola a todos!

Estoy haciendo ejercicios de la universidad sobre programacion en C, y tengo un ejercicio que me pide dado un vector (que yo voy introduciendo) dar la posición del número más cercano al primero, y he escrito el siguiente código:

#include <stdio.h>

main()
{
    int n,cont,h;
    float vector[80];
    printf("Cuantos numeros?: ");
    scanf("%d",&n);
    for(cont=0;cont<n;cont++)
    {
        printf("x= ");
        scanf("%f",&vector[cont]);
    }
    h=vector[1]-vector[0];
    for(cont=2;cont<n;cont++)
        if(abs(vector[cont]-vector[0])<h)
            h=cont;
    printf("La posicion del mas cercano es: %d\n",h);
    return 0;
}


Pero por ejemplo al introducir el vector [2,6,4,1,10], la salida es un 4, osea, me dice que el más cercano al 2 es el 10, y tendría que dar un 3, ¿alguien me puede ayudar?.

Gracias de antemano!!

Flakito81

debe de ser cosa del cansancio pero no entiendo exactamente lo que tiene que hacer el programa.
¡podrias poner dos ejemplos?

crack81

Buenas amigo aqui esta tu codigo lo reutilize del tuyo porque me dio flojerea tenias problemas con las llaves{}
sin mas aqui esta :

Código (cpp) [Seleccionar]
#include <stdio.h>
#include<stdlib.h>

main()
{
    int n,cont,h,pos=1;
    float vector[80];
    printf("Cuantos numeros?: ");
    scanf("%d",&n);
    for(cont=0;cont<n;cont++)
    {
        printf("x= ");
        scanf("%f",&vector[cont]);
    }
    h=abs(vector[0]-vector[1]);
    for(cont=2;cont<n;cont++){
        if((abs(vector[cont]-vector[0]))<h){
            h=abs(vector[0]-vector[cont]);
            pos=cont;
        }
    }

    printf("La posicion del mas cercano es: %d\n",pos);
    return 0;
}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

leosansan

#3
Cita de: crack81 en  5 Noviembre 2014, 02:31 AM
Buenas amigo aqui esta tu codigo lo reutilize del tuyo porque me dio flojerea tenias problemas con las llaves{}
.....................................................

Falta el tipo "int" de la función main.  ;)

¿Y por qué no usar el mismo for de entrada de los datos para ir averiguando la posición? :

Código (cpp) [Seleccionar]
#include <stdio.h>
#include<stdlib.h>

int main ( ) {
 int n , cont , pos = 1 ;
 float vector [ 80 ] ;
 printf ( "Cuantos numeros?: " ) , scanf ( "%d" , &n ) ;
 for ( cont = 0 ; cont < n ; cont++ ) {
   printf ( "x = " ) , scanf ( "%f" , &vector [ cont ] ) ;
     if( cont > 1 && ( abs ( vector [ cont ] - vector [ 0 ] ) ) < abs ( vector [ pos ] - vector [ 0 ] ) )
       pos = cont ;
 }
 printf( "\nLa posicion del mas cercano es: %d\n " , pos ) ;
 return 0;
}


¡¡¡¡ Saluditos! ..... !!!!



eferion

leosansan, se te coló una coma entre el printf y el scanf.

Por un momento pensé que ibas a meter macros jejejeje

leosansan

Cita de: eferion en  5 Noviembre 2014, 17:41 PM
leosansan, se te coló una coma entre el printf y el scanf.

No se me coló, lo puse así para ahorrar una línea por cada pareja de printf y scanf .  :rolleyes:

Cita de: eferion en  5 Noviembre 2014, 17:41 PM
Por un momento pensé que ibas a meter macros jejejeje

;-) Y dale, ¡Ouggg Gran Maestro!, estando tú presente ni me atrevo a esas cosas.  :)

Un fuerte abrazo amigo eferion.

¡¡¡¡ Saluditos! ..... !!!!



eferion

#6
Cita de: leosansan en  5 Noviembre 2014, 18:58 PM
No se me coló, lo puse así para ahorrar una línea por cada pareja de printf y scanf .  :rolleyes:

¿No debería ser un punto y coma en vez de solamente una coma? jejeje

Cita de: leosansan en  5 Noviembre 2014, 18:58 PM
;-) Y dale, ¡Ouggg Gran Maestro!, estando tú presente ni me atrevo a esas cosas.  :)

Gran maestro yo??? jajajaja, me halagas. Tampoco te creas que soy un gurú de las macros... de echo prefiero evitarlas salvo para cosas muy muy muy concretas. Yo personalmente pienso que las macros son uno de los cánceres de C++... la compilación de programas en C++ es lentísima en parte gracias a la existencia de las macros... no ofrecen ningún tipo de tipado... su código no se puede depurar...

leosansan

Cita de: eferion en  5 Noviembre 2014, 21:49 PM
¿No debería ser un punto y coma en vez de solamente una coma? jejeje

"Creo" que puedes separar instrucciones/funciones, como el scanf y el printf, por una coma sin necesidad de un punto y coma para cada uno de ellos. Vamos, como el declarar varias variables del tipo int, como ejemplo: int i , j , k ;

Cita de: eferion en  5 Noviembre 2014, 21:49 PM
Gran maestro yo??? jajajaja, me halagas.

A cada uno lo que se merece y sí, es un halago a tus profundos conocimientos de C++...y C.

¡¡¡¡ Saluditos! ..... !!!!