Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: J.cE en 24 Marzo 2014, 03:38 am



Título: ayuda en C
Publicado por: J.cE en 24 Marzo 2014, 03:38 am
tengo un problema, quisiera por favor si me pueden ayudar, me he quedado atascado
el codigo es el siguiente:

Código:
 
#include <time.h>
#include <stdio.h>
/*-------------prototipo de funcion--------------*/
void fecha(int *d, int *m, int *a);
/*-------------algoritmo principal----------------*/
int main()
{
    int dia, mes, anho;

    fecha(&dia, &mes, &anho);
    printf("%d-%d-%d\n", dia, mes, anho);
}
/*-------------procedimento fecha---------------*/
void fecha(int *d, int *m, int *a)
{
    time_t ahora;
    struct tm *fecha;
    time(&ahora);
    fecha = localtime(&ahora);
    d = fecha->tm_mday;
    m = fecha->tm_mon+1;
    a = fecha->tm_year+1900;
    printf("%d-%d-%d\n", d, m, a);
}
   

porque en un printf me escribe una cosa diferente del otro printf?


Título: Re: ayuda en C
Publicado por: nolasco281 en 24 Marzo 2014, 04:54 am
Queria ver si te podia ayudar y ver la diferencia de la que hablas de salida pero no me corrio.

(https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2F2.bp.blogspot.com%2F-lR2lj7vk5FM%2FUy-sNhGhiOI%2FAAAAAAAAAk8%2Fks5iCjfni20%2Fs1600%2FPrueba.png&container=blogger&gadget=a&rewriteMime=image%2F*)

claro ya ves porque. vere si lo hago correr


si no me equivoco el error que me salta es por que estoy declarando un puntero de tipo entero como argumento de una funccion. no?


Título: Re: ayuda en C
Publicado por: J.cE en 24 Marzo 2014, 05:05 am
que raro, ami si me funciona, no se como subir una captura de pantalla para mostrartela....


Título: Re: ayuda en C
Publicado por: engel lex en 24 Marzo 2014, 05:16 am
nolasco281 no te corre porque es un programa de C y tu lo estás compilando como C++


Título: Re: ayuda en C
Publicado por: nolasco281 en 24 Marzo 2014, 05:23 am
Ya

(https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2F1.bp.blogspot.com%2F-_eukB9Ap44k%2FUy-yvykdeoI%2FAAAAAAAAAlM%2FSHru4x8FqQE%2Fs1600%2FPrueba1.png&container=blogger&gadget=a&rewriteMime=image%2F*)

si es este las impresiones que te hace la segunda es la direccion en memoria de la funcion fecha en este caso esto apuntado ahi por eso salen eso numero. es la direccion en memoria si no me equivoco.

gracias englex tienes razon cree un proyecto para C++ ahora lo hago en C gracias.

tienes razon lo corri asi

Código
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. #include <time.h>
  7. #include <stdio.h>
  8. /*-------------prototipo de funcion--------------*/
  9. void fecha(int d, int m, int a);
  10. /*-------------algoritmo principal----------------*/
  11.  
  12. int main()
  13. {
  14.    int dia, mes, anho;
  15.  
  16.    fecha(dia, mes, anho);
  17.    printf("%d-%d-%d\n", dia, mes, anho);
  18.  
  19.    system("PAUSE");
  20.    return EXIT_SUCCESS;
  21. }
  22. void fecha(int d, int m, int a)
  23. {
  24.    time_t ahora;
  25.    struct tm *fecha;
  26.    time(&ahora);
  27.    fecha = localtime(&ahora);
  28.    d = fecha->tm_mday;
  29.    m = fecha->tm_mon+1;
  30.    a = fecha->tm_year+1900;
  31.    printf("%d-%d-%d\n", d, m, a);
  32. }


Título: Re: ayuda en C
Publicado por: J.cE en 24 Marzo 2014, 05:26 am
Ya

(https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2F1.bp.blogspot.com%2F-_eukB9Ap44k%2FUy-yvykdeoI%2FAAAAAAAAAlM%2FSHru4x8FqQE%2Fs1600%2FPrueba1.png&container=blogger&gadget=a&rewriteMime=image%2F*)

si es este las impresiones que te hace la segunda es la direccion en memoria de la funcion fecha en este caso esto apuntado ahi por eso salen eso numero. es la direccion en memoria si no me equivoco.

gracias englex

pero yo quiero que me imprima las fechas y no la direccion de la memoria, alguna idea?


Título: Re: ayuda en C
Publicado por: nolasco281 en 24 Marzo 2014, 05:29 am
Hola amigo primero que nada tu pregunta fue

porque en un printf me escribe una cosa diferente del otro printf?

no aclaraste lo que deseabas. Saludos.


Título: Re: ayuda en C
Publicado por: J.cE en 24 Marzo 2014, 05:32 am
Hola amigo primero que nada tu pregunta fue

porque en un printf me escribe una cosa diferente del otro printf?

no aclaraste lo que deseabas. Saludos.

te agradezco nolasco281 por la ayuda, pero tambien me surge esa pregunta de como hacer para que no pase la direccion de memoria


Título: Re: ayuda en C
Publicado por: nolasco281 en 24 Marzo 2014, 05:43 am
Hola amigo segun yo y mis pocos conocimientos

Cuando llega a esta instruccion;

printf("%d-%d-%d\n", dia, mes, anho);
lo que le estas pidiendo que haga es eso que imprim
a la direccion en memoria y soy un aprendiz igual que tu dejame aver si te puedo ayudarte ya que pratico C++ y no se casi nada de C.

PD:Re cuerda que la programacion es una serie de instrucciones que se ejecutan secuencial mente no lo olvides cuando tengas o te aparezca un error solo fijate en que parte lo esta haciendo y listo. dejame sequir viendo Saludos.



Hola amigo despues de estar viendo y tratando cosas me di cuenta de algo.

1. Texplico cuando el programa se ejecuta lo primero que hace es empezar por las variables no ok.

2. lo siquiente que hace es llamar a la funcion fecha que tienes tres argunmentos o parametros como quieras llamerles y tu le pasas dia mes y a~no ok.

3 Despues esos argumetos se evaluan en la funcion y te devuelven  la fecha como lo podes notar en la primera imprecion.

4 luego llega al printf es es donde tu te preguntas por que te imprime la direccion no? es por que es el ultimo valor que tomaron las variables, no me entiendes ok si tu vienes y modificas el codigo.

en esta linea y pones

Código
  1. int dia=2, mes=9, anho=8;

veras una salida como esta

(http://1.bp.blogspot.com/-T8cq7KGLntQ/Uy_FNmSM7EI/AAAAAAAAAlc/GrIuss3x4fM/s1600/Prueba2.png)

es porque en la direccion que se almacen no hay nada pero si inicializas las variables veras los valores con que la inicializaste ya no entra a la direccion de memoria sino al valor de la variable.

Y tambien ese es el objetivo de usar funciones para evitar redundancia de codigo.
tu puedes llamar esa funcion donde la nesecites. Claro dentro del ambito de donde se declare.

(http://3.bp.blogspot.com/-_uA2iqkvXEU/Uy_GntE0sVI/AAAAAAAAAlk/TBzcHZAi_KQ/s1600/Prueba3.png)

espero haber ayudado saludos y cuidate. tambien aprendi saludos.

PD: Recuerda.

un entero tiene (int). 4 Bytes = 4x8 = 32 bits
Con 32 bits se pueden representar 232=4294967296 valores.



Título: Re: ayuda en C
Publicado por: leosansan en 24 Marzo 2014, 07:46 am
tengo un problema, quisiera por favor si me pueden ayudar, me he quedado atascado
.............................................
porque en un printf me escribe una cosa diferente del otro printf?

Porque los valores se los has pasado a la función por valor por lo que su valor al volver a main no varían respecto a los que ya tenían en dicha función main  y como no los habías inicializados contienen basura o valores indeterminados.

Para actualizar los valores en main con los obtenidos en la función tendrás que pasarlos por referencia mediante el uso de punteros ... y de esta forma no es necesario inicializar las variables, aunque siempre es aconsejable hacerlo:


Citar

EN LA FUNCION FECHA:24-3-2014
EN MAIN: 24-3-2014

Presione una tecla para continuar . . .

Process returned 0 (0x0)   execution time : 0.435 s
Press any key to continue.


Por cierto, te falta la librería stdlib para el uso de system y de EXIT_SUCCESS:

Código
  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. /*-------------prototipo de funcion--------------*/
  5. void fecha(int *d, int *m, int *a);
  6. /*-------------algoritmo principal----------------*/
  7.  
  8. int main()
  9. {
  10.    int dia, mes, anho;
  11.    fecha(&dia, &mes, &anho);
  12.    printf("EN MAIN: %d-%d-%d\n", dia, mes, anho);
  13.    system("PAUSE");
  14.    return EXIT_SUCCESS;
  15. }
  16. void fecha(int *d, int *m, int *a)
  17. {
  18.    time_t ahora;
  19.    struct tm *fecha;
  20.    time(&ahora);
  21.    fecha = localtime(&ahora);
  22.    *d = fecha->tm_mday;
  23.    *m = fecha->tm_mon+1;
  24.    *a = fecha->tm_year+1900;
  25.    printf("EN LA FUNCION FECHA:%d-%d-%d\n", *d, *m, *a);
  26. }

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


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)



 


Título: Re: ayuda en C
Publicado por: nolasco281 en 24 Marzo 2014, 08:03 am
aaaaaaaaah sabia que se tenia que poder

Eso era, saludos sequia viendo porque no me salia.
y era esto printf("EN LA FUNCION FECHA:%d-%d-%d\n", *d, *m, *a);

las referencias como indicas.

Saludos gracias leosansan por sacarme algunas dudas a mi tambien.


Título: Re: ayuda en C
Publicado por: J.cE en 24 Marzo 2014, 14:44 pm
muchas gracias amigos por la ayuda...