ayuda en C

Iniciado por J.cE, 24 Marzo 2014, 03:38 AM

0 Miembros y 1 Visitante están viendo este tema.

J.cE

tengo un problema, quisiera por favor si me pueden ayudar, me he quedado atascado
el codigo es el siguiente:


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

nolasco281

#1
Queria ver si te podia ayudar y ver la diferencia de la que hablas de salida pero no me corrio.



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?
Lo que se puede imaginar... se puede programar.

J.cE

que raro, ami si me funciona, no se como subir una captura de pantalla para mostrartela....

engel lex

nolasco281 no te corre porque es un programa de C y tu lo estás compilando como C++
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

nolasco281

#4
Ya



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 (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>

using namespace std;

#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);
   
   system("PAUSE");
   return EXIT_SUCCESS;
}
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);
}
Lo que se puede imaginar... se puede programar.

J.cE

Cita de: nolasco281 en 24 Marzo 2014, 05:23 AM
Ya



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?

nolasco281

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.
Lo que se puede imaginar... se puede programar.

J.cE

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

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

nolasco281

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

int dia=2, mes=9, anho=8;

veras una salida como esta



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.



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.

Lo que se puede imaginar... se puede programar.

leosansan

#9
Cita de: J.cE en 24 Marzo 2014, 03:38 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 (cpp) [Seleccionar]
#include <time.h>
#include <stdio.h>
#include <stdlib.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("EN MAIN: %d-%d-%d\n", dia, mes, anho);
   system("PAUSE");
   return EXIT_SUCCESS;
}
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("EN LA FUNCION FECHA:%d-%d-%d\n", *d, *m, *a);
}


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