Hola chicos tengo un problemilla... Estoy haciendo una prueba de un programa por modulos.
Y el codeblocks me arroja el error de:
os dejo el codigo de los modulo y me vais diciendo...
prueba.cpp
Calendario.h
Calendario.cpp
Decirme algo por favor que no se por donde cogerlo!!!!
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
Código [Seleccionar]
#include <stdio.h>
#include "Calendario.h"
int main()
{
int r;
r = ImprimirCalendario(1,2012);
}
Calendario.h
Código [Seleccionar]
#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
Código [Seleccionar]
#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!!!!