Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Stopin

#1
Hola chicos tengo un problemilla... Estoy haciendo una prueba de un programa por modulos.

Y el codeblocks me arroja el error de:

Citarundefined reference to `ImprimirCalendario(int, int)'

os dejo el codigo de los modulo y me vais diciendo...

prueba.cpp


#include <stdio.h>
#include "Calendario.h"

int main()
{
  int r;
  r = ImprimirCalendario(1,2012);
}


Calendario.h

#pragma once

const int MinAno = 2011;
const int MaxAno = 3000;

/* ImprimirCalendario
*   - imprime el calendario especificado
*   - retorna el total de dias del mes:
      0 si mes o año incorrecto
*/
int ImprimirCalendario(int Mes, int Ano);


Calendario.cpp


#include <stdio.h>
#include "Calendario.h"

bool EsBisiesto(int ano)
{
  if(ano % 4 == 0)
  {
    if(ano % 100 == 0 && ano % 400 != 0)
    {
      return false;
    }
    else
    {
      return true;
    }
  }
  else
  {
    return false;
  }
}

int DiaSemana(int diaStart)
{
  if(diaStart == 6)
  {
    diaStart=0;
  }
  else
  {
    diaStart=diaStart+1;
  }
  return diaStart;
}

int ContarDiasSemana(int dias, int diaStart)
{
  for(int i=1; i<=dias; i++)
  {
    diaStart=DiaSemana(diaStart);
  }
  return diaStart;
}

int GetDiaSemana(int mesS, int anoS)
{
  int mesStart = 1;
  int anoStart = 2011;
  int diaStart = 0;

  for(int ano=anoStart; ano<=anoS; ano++)
  {
    for(int mes=mesStart; mes<=12; mes++)
    {
      if(ano == anoS && mes == mesS)
      {
        return diaStart;
      }
      else
      {
        switch(mes)
        {
          case 1: /*31*/
            diaStart=ContarDiasSemana(31,diaStart);
            break;
          case 2: /*28 ? 29*/
            if(EsBisiesto(ano))
            {
              diaStart=ContarDiasSemana(29,diaStart);
            }
            else
            {
              diaStart=ContarDiasSemana(28,diaStart);
            }
            break;
          case 3: /*31*/
            diaStart=ContarDiasSemana(31,diaStart);
            break;
          case 4: /*30*/
            diaStart=ContarDiasSemana(30,diaStart);
            break;
          case 5: /*31*/
            diaStart=ContarDiasSemana(31,diaStart);
            break;
          case 6: /*30*/
            diaStart=ContarDiasSemana(30,diaStart);
            break;
          case 7: /*31*/
            diaStart=ContarDiasSemana(31,diaStart);
            break;
          case 8: /*31*/
            diaStart=ContarDiasSemana(31,diaStart);
            break;
          case 9: /*30*/
            diaStart=ContarDiasSemana(30,diaStart);
            break;
          case 10: /*31*/
            diaStart=ContarDiasSemana(31,diaStart);
            break;
          case 11: /*30*/
            diaStart=ContarDiasSemana(30,diaStart);
            break;
          case 12: /*31*/
            diaStart=ContarDiasSemana(31,diaStart);
            break;
        }
      }
    }
  }
}

void PintarCabeceraMes(int mes, int ano)
{
  typedef char nombreMes[20];

  printf("\n");

  switch(mes)
  {
    case 1: /*31*/
      printf("ENERO                  %d\n", ano);
      break;
    case 2: /*28 ? 29*/
      printf("FEBRERO                %d\n", ano);
      break;
    case 3: /*31*/
      printf("MARZO                  %d\n", ano);
      break;
    case 4: /*30*/
      printf("ABRIL                  %d\n", ano);
      break;
    case 5: /*31*/
      printf("MAYO                   %d\n", ano);
      break;
    case 6: /*30*/
      printf("JUNIO                  %d\n", ano);
      break;
    case 7: /*31*/
      printf("JULIO                  %d\n", ano);
      break;
    case 8: /*31*/
      printf("AGOSTO                 %d\n", ano);
      break;
    case 9: /*30*/
      printf("SEPTIEMBRE             %d\n", ano);
      break;
    case 10: /*31*/
      printf("OCTUBRE                %d\n", ano);
      break;
    case 11: /*30*/
      printf("NOVIEMBRE              %d\n", ano);
      break;
    case 12: /*31*/
      printf("DICIEMBRE              %d\n", ano);
      break;
  }

  printf("===========================\n");
  printf("LU  MA  MI  JU  VI | SA  DO\n");
  printf("===========================");
  /*printf(" 1   2   3   4   5   6   7");
  printf(" 8   9  10  11  12  13  14");*/


}

void PintarBlancos(int diaStart, int i)
{
  if(diaStart==0)
  {
    printf("\n");
    if(i<10)
    {
      printf(" ");
    }
  }
  else if(diaStart == 5)
  {
    if(i<10)
    {
      printf(" |  ");
    }
    else
    {
      printf(" | ");
    }
  }
  else
  {
    if(i<10)
    {
      printf("   ");
    }
    else
    {
      printf("  ");
    }
  }
}

void PintarMes(int diaStart,int mes, int ano)
{
  int diasMes;
  int end;

  switch(mes)
        {
          case 1: /*31*/
            diasMes=31;
            break;
          case 2: /*28 ? 29*/
            if(EsBisiesto(ano))
            {
              diasMes=29;
            }
            else
            {
              diasMes=28;
            }
            break;
          case 3: /*31*/
            diasMes=31;
            break;
          case 4: /*30*/
            diasMes=30;
            break;
          case 5: /*31*/
            diasMes=31;
            break;
          case 6: /*30*/
            diasMes=30;
            break;
          case 7: /*31*/
            diasMes=31;
            break;
          case 8: /*31*/
            diasMes=31;
            break;
          case 9: /*30*/
            diasMes=30;
            break;
          case 10: /*31*/
            diasMes=31;
            break;
          case 11: /*30*/
            diasMes=30;
            break;
          case 12: /*31*/
            diasMes=31;
            break;
        }

  for(int i=1; i<=diasMes; i++)
  {
    if(i==1)
    {
      for(int j=0;j<diaStart;j++)
      {
        PintarBlancos(j,1);
        printf(".");
      }
    }

    PintarBlancos(diaStart,i);
    printf("%d",i);
    diaStart = DiaSemana(diaStart);

    if(i==diasMes && diaStart != 0)
    {
      end = (diaStart+(6-diaStart));
      for(int j=diaStart;j<=end;j++)
      {
        PintarBlancos(diaStart,1);
        printf(".");
        diaStart = DiaSemana(diaStart);
      }
      printf("\n");
    }
    else if(i==diasMes && diaStart==0)
    {
      printf("\n");
    }
  }

}

bool ComprobarDia(int dia, int mes, int ano)
{
  int diasMes;

  switch(mes)
  {
    case 1: /*31*/
      diasMes=31;
      break;
    case 2: /*28 ? 29*/
      if(EsBisiesto(ano))
      {
        diasMes=29;
      }
      else
      {
        diasMes=28;
      }
      break;
    case 3: /*31*/
      diasMes=31;
      break;
    case 4: /*30*/
      diasMes=30;
      break;
    case 5: /*31*/
      diasMes=31;
      break;
    case 6: /*30*/
      diasMes=30;
      break;
    case 7: /*31*/
      diasMes=31;
      break;
    case 8: /*31*/
      diasMes=31;
      break;
    case 9: /*30*/
      diasMes=30;
      break;
    case 10: /*31*/
      diasMes=31;
      break;
    case 11: /*30*/
      diasMes=30;
      break;
    case 12: /*31*/
      diasMes=31;
      break;
  }

  if(diasMes >= dia && dia >= 1)
  {
    return true;
  }
  else
  {
    printf("<<ERROR: El maximo de dias para ese mes es %d>>", diasMes);
    return false;
  }
}

/*********
* Imprimir Calendario
*   Imprime un calendario en funcion del mes y el ano recibidos
*   - Returns: 0 Si todo ok
*              1 Si Ano fuera de rango
*              2 Si Mes fuera de rango
*              3 Si el dia esta fuera de rango
*********/
int ImprimirCalendario(int Mes, int Ano)
{
  int dia;

  if(Ano >= MinAno && Ano <= MaxAno)
  {
    if(Mes >= 1 && Mes <= 12)
    {
      PintarCabeceraMes(Mes, Ano);
      PintarMes(GetDiaSemana(Mes, Ano),Mes, Ano);

      printf("Dia: ");
      scanf("%d", &dia);

      if(ComprobarDia(dia, Mes, Ano))
      {
        return dia;
      }
      else
      {
        return 103;
      }

    }
    else
    {
      return 101;
    }
  }
  else
  {
    return 102;
  }
}



Decirme algo por favor que no se por donde cogerlo!!!!