estrucutras y funciones....

Iniciado por ramona98, 22 Agosto 2013, 15:29 PM

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

ramona98

Hola!
Esto solo es un boceto del programa que quiero hacer, ya que la funcion no esta terminada...
Le he dado un valor para que me devuelva al ser llamada pero estoy teniendo problemas al darle valores a la estructura:

main.cpp:29:32: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:29:32: error: assigning to an array from an initializer list
main.cpp:30:37: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:30:37: error: assigning to an array from an initializer list
main.cpp:32:32: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:32:32: error: assigning to an array from an initializer list
main.cpp:33:37: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:33:37: error: assigning to an array from an initializer list
main.cpp:38:94: error: cannot convert 'main()::horayfecha' to 'int*' for argument '1' to 'int tiemporeal(int*, int*, int*, int*)'


Tampoco estoy seguro si declarando las variables int voy a tener problemas, quizas seria mejor long int?



#include <stdio.h>
#include <stdlib.h>
#include <string.h>



// Exercise 12-2: Design a structure to store time and date. Write a function to find
// the difference between two times in minutes.

int tiemporeal(int tim1[1], int dat1[2], int tim2[1], int dat2[2]) {
    // Idea= calcular minutos desde fecha 0 para ambas fechas
    // calcular diferencia entre ellas y return valor absoluto
    int difmin=2; // valor dado para probar
   
    return (difmin);
}

int main(void)
{
    int i;
   
   struct horayfecha {
    int timz[ ]; // Hora, minutos
    int data[];  // dia, mes y ano en digitos
    };

   struct horayfecha misfechas[1];
   
   misfechas[0].timz = { 23, 30};
   misfechas[0].data = { 1, 7, 1998 };
   
   misfechas[1].timz = { 22, 32};
   misfechas[1].data = { 2, 7, 1997 };
     
   
printf ("numero de minutos entre ambas fechas es %d\n", tiemporeal(misfechas[0], misfechas[1]) );
   

return (0);
}
 


Seguramente tengo mas fallos/errores o formas de mejorar el programa, estoy abierto a escuchar ideas :)
Gracias y saludos!

kaltorak

#1
Hola ramona98

Tu código tiene varios errores.

El primero a la hora de declarar el numero de elementos que tendrá el array "misfechas" pues has puesto que tendrá un solo elemento y como quieres que contenga dos elementos, tienes que poner 2, pues si pones uno el programa puede funcionar pero dará una error y se cerrara al perderse en la memoria.

Asi es como lo tienes puesto tu:

Código (cpp) [Seleccionar]
struct horayfecha misfechas[1];

y así es como tiene que ser:

Código (cpp) [Seleccionar]
struct horayfecha misfechas[2];

Otro error es a la hora de asignar valor a los arrays contenidos en la estructura.

Citar
Código (cpp) [Seleccionar]
misfechas[0].timz = { 23, 30};
  misfechas[0].data = { 1, 7, 1998 };
 
  misfechas[1].timz = { 22, 32};
  misfechas[1].data = { 2, 7, 1997 };


Este tipo de asignación de datos a aun array solo se pude hacer cuando es declarado no una vez que ha sido declarado, mira te pongo un ejemplo para que veas lo que digo.

Código (cpp) [Seleccionar]

int Tiempo[] = {23,30}; //Valido.


Código (cpp) [Seleccionar]
int Tiempo[2];

Tiempo[] = {23,30}; // No valido

//La forma correcta de hacerlo seria esta.

Tiempo[0] = 23;
Tiempo[1] = 30;


Otro error que tiene tu código es cuando declaras la función, lo haces pidiendo que como argumentos se introduzcan 4 arrays de tipo " int", pero luego cuando llamas a la función le pasas 2 estructuras en vez de los 4 arrays de tipo " int" que espera recibir.

Código (cpp) [Seleccionar]
int tiemporeal(int tim1[1], int dat1[2], int tim2[1], int dat2[2])

Código (cpp) [Seleccionar]
tiemporeal(misfechas[0], misfechas[1])

La forma correcta de llamar a la función que has creado seria así.

Código (cpp) [Seleccionar]
tiemporeal(misfechas[0].timz,misfechas[0].data,misfechas[1].timz,misfechas[1].data)

Aquí te pongo tu código modificado y operativo  ;)

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



// Exercise 12-2: Design a structure to store time and date. Write a function to find
// the difference between two times in minutes.

int tiemporeal(int tim1[], int dat1[], int tim2[], int dat2[]) {
   // Idea= calcular minutos desde fecha 0 para ambas fechas
   // calcular diferencia entre ellas y return valor absoluto
   int difmin=2; // valor dado para probar

   return difmin;
}

int main(void)
{
   int i;

  struct horayfecha {
   int timz[2]; // Hora, minutos
   int data[3];  // dia, mes y ano en digitos
   };

  struct horayfecha misfechas[2];

  misfechas[0].timz[0] = 23;
  misfechas[0].timz[1] = 30;
  misfechas[0].data[0] = 1;
  misfechas[0].data[1] = 7;
  misfechas[0].data[2] = 1988;

  misfechas[1].timz[0] = 22;
  misfechas[1].timz[1] = 32;
  misfechas[1].data[0] = 2;
  misfechas[1].data[1] = 7;
  misfechas[1].data[2] = 1997;


printf ("numero de minutos entre ambas fechas es %d\n", tiemporeal(misfechas[0].timz,misfechas[0].data,misfechas[1].timz,misfechas[1].data) );


return (0);
}


Un saludo
Kaltorak.