J'ai créé un programme en langage c qui ne veux pas s'éxécuter.
Ce programme fait 684 lignes.
Ce programme permet d'afficher la date de la pleine lune qui suit la date que je choisi.
Vous allez me dire ça sert rien.
Ce prog n'est pas précis du tout.
Je vais l'améliorer.
Petite précision ce programme fonctionnait sous debian lenny mais depuis squeeze impossible de le faire fonctionner.
Voici comment je le compile.
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <SDL/SDL.h>
/* ms mois synodique */
/* Formule de Mr COPERNIC */
/* #define ms (1/((1/27,322)-(1/365,25))) */
/* pleine lune de départ : 18/09/1910 19:19:32 */
/* Heure normale d'Europe centrale (HNEC) */
/* Compilation */
/* cd documents_perso/Projets/programmes/glune/programme_principal_en_c/ */
/* gcc -g glune-0.15.c -o glune-0.15 */
/* -g lance le debugger gdb lors de la compilation */
/* Exécution */
/* gdb ./glune-0.15 */
/* run */
int main(int argc,char *argv[], char *env[])
{
/* Rayon moyen de la lune en kilomètres */
int rml;
/* Masse de la lune en kilogrammes */
long double ml;
/* Nombre de jour moyen dans une année */
double nja=365.25;
double p,ms;
/* Variable de saisie du "choix dans la date" */
int jc;
int mc;
int ac;
/* Dernier jour du mois choisi */
int djmc;
/* Nombre de jour de l'année choisie jusqu'au mois choisi */
int njmc;
double dnjmc;
/* Calcul de la différence d'année */
int nadb;
double dnadb;
int njpaac;
double dnjpaac;
/* Nombre de jours entre la pleine lune de départ et la date choisie */
int njdcpl;
double dnjdcpl;
/* Nombre de jours restant jusqu'à la fin de l'année de la pleine lune de départ */
int njrad;
double dnjrad;
/* Nombre de jours restant jusqu'au mois d'octobre */
int njrms;
double dnjrms;
int nmrad;
/* Jour de pleine lune de départ */
int jpld=18;
double djpld=18.80523148148;
double djdj;
/* Mois de pleine lune de départ */
int mpld=9;
int djmpld=30;
double ddjmpld=30.0;
/* Année de la pleine lune de départ */
int apld=1910;
/* Label de pleine lune */
char lpl[50]="Pleine lune";
/* Jour de pleine lune */
int jpl;
/* Label du dernier quartier */
char ldq[50]="Dernier quartier";
/* Jour du dernier quartier */
int jdq;
double dq;
/* Dernier croissant */
double dc;
/* Label du dernier quartier */
char ldc[50]="Dernier croissant";
/* Label de nouvelle lune */
char lnl[50]="Nouvelle lune";
/* Jour de nouvelle lune */
int anl;
int mnl;
int jnl;
double djnl;
int nl;
double dnl;
/* Intervalle entre nouvelle lune et le jour choisi */
double vnl;
/* Label du premier quartier */
char lpq[50]="Premier quartier";
/* Jour du premier quartier */
int jpq;
double pq;
/* Premier croissant */
double pc;
/* Label du premier quartier */
char lpc[50]="Premier croissant";
/* Jour de pleine lune suivante */
int jpls;
double djpls;
/* Mois de pleine lune suivante */
int mpls;
/*int nmpls;*/
/* Année de pleine lune suivante */
int apls;
/* Jour de pleine lune précèdente */
int jplp;
/* Jour de pleine lune incrémentée */
int jpli;
/* Différence entre l'année de la pleine lune à la date choisie et le première pleine lune */
int dna;
/* Nombre d'année bisextile entre la date choisie et la première année de pleine lune */
int nab;
double dnab;
/* Nombre d'année non-bisextile entre la date choisie et la première année de pleine lune */
int nanb;
double dnanb;
/* Première année bisextile */
int pab=1912;
/* Année bisextile (Tableau) */
int xb;
int tb[xb];
int ib;
/* Année non bisextile (Tableau) */
int xnba, xnbb, xnbc;
int tnba[xnba];
int tnbb[xnbb];
int tnbc[xnbc];
int inba=0;
int inbb=0;
int inbc=0;
/* Dernier jour des mois de l'année choisie */
int djmac1;
int djmac2;
int djmac3;
int djmac4;
int djmac5;
int djmac6;
int djmac7;
int djmac8;
int djmac9;
int djmac10;
int djmac11;
int djmac12;
/* Nombre de pleine lune */
double b=0;
double X=0;
int c=0;
/* Nombre de jour entre la pleine lune qui suit le jour choisi et la première pleine lune */
double njap;
/* Intervalle entre la date choisie et la lune suivante */
int ii;
int ipls;
double dii;
/* Convertion de la pleine lune suivante en HH:MM:SS */
double dhipls;
int dv;
/* Intervalle entre la date choisie et la nouvelle lune suivante */
int inl;
double dinl;
/* Choix mois cmpls pour pleine lune suivante */
int cmpls;
double dcmpls;
/* Choix mois cmnl pour pleine lune suivante */
int cmnl;
double dcmnl;
int ab;
int anb;
/* Mois synodique en HH:MM:SS */
/* Jour */
int njms;
double dnjms;
/* Heure */
double dhms;
int nhms;
/* Minute */
double dnmms;
double dmms;
int nmms;
/* Seconde */
double dnsms;
double dsms;
int nsms;
/* Première pleine lune choisie en HH:MM:SS */
double dhjpld;
int nhjpld;
double dnmjpld;
double dmjpld;
int nmjpld;
double dnsjpld;
double dsjpld;
int nsjpld;
/* Convertion de la pleine lune suivante en HH:MM:SS */
double dnhipls;
int nhipls;
double dnmipls;
double dmipls;
int nmipls;
double dnsipls;
double dsipls;
int nsipls;
/* Date d'aujourd'hui */
time_t t;
t = time(NULL);
scanf("%t",&t);
printf("Date d'aujourd'hui : %s", ctime(&t));
/* Rayon moyen de la lune en kilomètres */
rml=1738;
printf("Rayon moyen de la lune : %d Km\n", rml);
/* Masse de la lune en kilogrammes */
ml=7.35E22;
printf("Masse de la lune : %Lg Kg\n", ml);
p=1/nja;
ms=1/((1/27.322)-p);
printf("Lunaison moyenne (Mois synodique) : %3.9f\n",ms);
/* Mois synodique en HH:MM:SS */
njms=ms;
dnjms=ms-njms;
dhms=dnjms*24.0;
nhms=dhms;
dnmms=dhms-nhms;
dmms=dnmms*60.0;
nmms=dmms;
dnsms=dmms-nmms;
dsms=dnsms*60.0;
nsms=dsms;
printf("Mois synodique : %d jours %d heures %d minutes %d secondes\n",njms, nhms, nmms, nsms);
/* Première pleine lune choisie en HH:MM:SS */
djdj=djpld-jpld;
dhjpld=djdj*24.0;
nhjpld=dhjpld;
dnmjpld=dhjpld-nhjpld;
dmjpld=dnmjpld*60.0;
nmjpld=dmjpld;
dnsjpld=dmjpld-nmjpld;
dsjpld=dnsjpld*60.0;
nsjpld=dsjpld;
printf("Pleine lune de départ : %d/%d/%d %d:%d:%d\n\n", jpld, mpld, apld, nhjpld, nmjpld, nsjpld);
/* Jours restant jusqu'au mois d'octobre */
njrms=djmpld-jpld;
dnjrms=ddjmpld-djpld;
/*printf("Décompte du nombre de jour jusqu'au mois d'octobre : %d\n",njrms);*/
/* Jours restant jusqu'à la fin de la première année de pleine lune */
njrad=njrms+31+30+31;
dnjrad=dnjrms+31+30+31;
/*printf("Décompte du nombre de jour jusqu'à la fin de l'année 1910 : %d\n",njrad);*/
/* Mois restant jusqu'à la fin de la première année de pleine lune */
nmrad=12-mpld;
/*printf("Décompte du nombre de mois jusqu'à la fin de l'année 1910 : %d\n",nmrad);*/
/* Saisie du jour choisi */
printf("Saisir le jour de la date d'aujourd'hui :\n");
scanf("%d",&jc);
printf("Saisir le mois de la date d'aujourd'hui :\n");
scanf("%d",&mc);
printf("Saisir l'année de la date d'aujourd'hui :\n");
scanf("%d",&ac);
printf("Date à laquelle je veux avoir les informations concernant la lune : %d/%d/%d\n",jc,mc,ac);
/*****************************************************/
/* AFFICHAGE DE L'ANNEE BISEXTILE OU NON BISEXTILE */
/*****************************************************/
/* Année bisextile (Tableau) */
ib=0;
for (xb=1; xb<=28; xb++)
{
tb[xb]=pab+ib;
ib+=4;
if (ac==tb[xb])
{
printf("Année bisextile\n");
ab=1;
/*printf("ab=%d\n",ab);*/
}
}
/*printf("25ième année bisextile : %d\n", tb[25]);*/
/* Année non bisextile (Tableau) */
for (xnba=1; xnba<=28; xnba++)
{
tnba[xnba]=(apld-1)+inba;
inba+=4;
if (ac==tnba[xnba])
{
/*printf("Année non bisextile\n");*/
anb=1;
/*printf("anb=%d\n",anb);*/
}
}
for (xnbb=1; xnbb<=28; xnbb++)
{
tnbb[xnbb]=(apld)+inbb;
inbb+=4;
if (ac==tnbb[xnbb])
{
/*printf("Année non bisextile\n");*/
anb=1;
/*printf("anb=%d\n",anb);*/
}
}
for (xnbc=1; xnbc<=28; xnbc++)
{
tnbc[xnbc]=(apld+1)+inbc;
inbc+=4;
if (ac==tnbc[xnbc])
{
/*printf("Année non bisextile\n");*/
anb=1;
/*printf("anb=%d\n",anb);*/
}
}
/*printf("24ième année non bisextile : %d\n", tnbc[8]);*/
/* Dernier jour du mois choisi */
if (mc==1)
djmc=31;
else if (mc==2)
djmc=28;
else if (mc==3)
djmc=31;
else if (mc==4)
djmc=30;
else if (mc==5)
djmc=31;
else if (mc==6)
djmc=30;
else if (mc==7)
djmc=31;
else if (mc==8)
djmc=31;
else if (mc==9)
djmc=30;
else if (mc==10)
djmc=31;
else if (mc==11)
djmc=30;
else if (mc==12)
djmc=31;
printf("Dernier jour du mois choisi : %d\n",djmc);
/* Différence entre l'année de la pleine lune à la date choisie et le première pleine lune */
dna=ac-(apld+1);
/*printf("Nombre d'années entre l'année choisie et la première année : %d\n",dna);*/
nadb=ac-pab;
nab=nadb/4;
/*printf("nombre d'année bisextile : %d\n",nab);*/
nanb=dna-nab;
/*printf("nombre d'année non bisextile : %d\n",nanb);*/
njpaac=nab*366+nanb*365;
dnjpaac=nab*366+nanb*365;
/*printf("Nombre de jours entre l'année choisie et la première année : %d\n",njpaac);*/
/* Derniers jours des mois de l'année choisie */
djmac1=31;
if (anb==1)
{
djmac2=28;
}
if (ab==1)
{
djmac2=29;
}
djmac3=31;
djmac4=30;
djmac5=31;
djmac6=30;
djmac7=31;
djmac8=31;
djmac9=30;
djmac10=31;
djmac11=30;
djmac12=31;
/* Calcul du nombre de jour de l'année choisie jusqu'au mois choisi */
if (mc==1)
{
njmc=jc;
dnjmc=jc;
}
else if (mc==2)
{
njmc=jc+djmac1;
dnjmc=jc+djmac1;
}
else if (mc==3)
{
njmc=jc+djmac1+djmac2;
dnjmc=jc+djmac1+djmac2;
}
else if (mc==4)
{
njmc=jc+djmac1+djmac2+djmac3;
dnjmc=jc+djmac1+djmac2+djmac3;
}
else if (mc==5)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4;
}
else if (mc==6)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5;
}
else if (mc==7)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6;
}
else if (mc==8)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7;
}
else if (mc==9)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8;
}
else if (mc==10)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8+djmac9;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8+djmac9;
}
else if (mc==11)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8+djmac9+djmac10;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8+djmac9+djmac10;
}
else if (mc==12)
{
njmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8+djmac9+djmac10+djmac11;
dnjmc=jc+djmac1+djmac2+djmac3+djmac4+djmac5+djmac6+djmac7+djmac8+djmac9+djmac10+djmac11;
}
/*printf("Nombre de jours de l'année choisie jusqu'au mois choisi : %d\n",njmc);*/
/* Nombre de pleine lune entre la date d'aujourd'hui et la première pleine lune */
/* Nombre de jours entre le première lune et la date choisie */
njdcpl=njmc+njpaac+njrad;
dnjdcpl=dnjmc+dnjpaac+dnjrad;
/*printf("Nombre de jours entre la date choisie et la première pleine lune : %d\n",njdcpl);*/
/*printf("Nombre de jours entre la date choisie et la première pleine lune (en décimale) : %f\n",dnjdcpl);*/
/* Nombre de pleine lune (Compteur) */
while (X<njdcpl)
{
X=b+ms*c;
c++;
}
/* printf("Nombre de pleine lune depuis la première pleine lune : %d\n",c); */
/* Attention bug fonction main */
njap=((c-1)*ms)-(1-djdj);
/*printf("Nombre de jour entre la pleine lune qui suit le jour choisi et la première pleine lune : %f\n",njap);*/
/* Intervalle entre la date choisie et la pleine lune suivante */
ii=njap-njdcpl;
ipls=njap-njdcpl;
dii=njap-njdcpl;
printf("Nombre de jour entre la nième pleine lune et le jour choisi (ii) : %d\n",ii);
printf("Nombre de jour exact entre la nième pleine lune et le jour choisi (dii) : %f\n",dii);
/* Convertion de la pleine lune suivante en HH:MM:SS */
dv=dii-ipls;
if (dv==1)
{
dhipls=(dii-1)-ipls;
/*printf("Différence : %f\n",dis);*/
}
if (dv==0)
{
dhipls=dii-ipls;
/*printf("Différence : %f\n",dis);*/
}
dnhipls=dhipls*24.0;
nhipls=dnhipls;
dnmipls=dnhipls-nhipls;
dmipls=dnmipls*60.0;
nmipls=dmipls;
dnsipls=dmipls-nmipls;
dsipls=dnsipls*60.0;
nsipls=dsipls;
/*printf("Affichage de l'heure éxacte de la pleine lune : %d heures %d minutes %d secondes\n", nhipls, nmipls, nsipls);*/
/* Valeur du dernier quartier */
dq=(3*ms)/4;
/* Valeur du dernier croissant */
dc=(ms/2)-1;
/* Valeur du premier croissant */
pc=(ms/2)+1;
/* Valeur du premier quartier */
pq=ms/4;
/* Affichage de la date de la pleine lune */
/* Jour choisi étant jour de pleine lune */
if (ii==0)
{
printf("Phase de la lune : %s\n",lpl);
apls=ac;
mpls=mc;
jpls=jc;
printf("Date et heure de la pleine lune : %d/%d/%d %d:%d:%d\n", jpls, mpls, apls, nhipls, nmipls, nsipls);
}
/* Jour choisi qui n'est pas le jour de pleine lune */
/* Affichage de la pleine lune suivante */
if (ipls>0)
{
cmpls=jc+ii;
dcmpls=jc+dii;
printf("Choix mois (cmpls) : %d\n", cmpls);
/*printf("Choix mois en décimale : %f\n", dcmpls);*/
if (cmpls<=djmc)
{
apls=ac;
mpls=mc;
jpls=jc+dii;
djpls=jc+dii;
}
else if (cmpls>djmc)
{
if (mc<12)
{
apls=ac;
mpls=mc+1;
jpls=dii-(djmc-jc);
djpls=dii-(djmc-jc);
}
else if (mc==12)
{
apls=ac+1;
mpls=mc-11;
jpls=dii-(djmc-jc);
djpls=dii-(djmc-jc);
}
}
/* Affichage de la date de la pleine lune suivante */
printf("Date de la pleine lune suivante : %d/%d/%d %d:%d:%d\n", jpls, mpls, apls, nhipls, nmipls, nsipls);
}
/* Nouvelle lune */
/* Intervalle entre la date choisie et la nouvelle lune suivante */
/* Valeur de la nouvelle lune */
nl=ms/2;
dnl=ms/2;
printf("valeur de ms/2 : %f\n", dnl);
djnl=djpls-dnl;
jnl=djpls-nl;
printf("Jour de nouvelle lune en décimale (djnl) : %f\n", djnl);
printf("Jour de nouvelle lune (jnl) : %f\n", jnl);
/* Intervalle entre la date choisie et la nouvelle lune */
inl=(njap-nl)-njdcpl;
dinl=(njap-nl)-njdcpl;
printf("Nombre de jour entre la nouvelle lune suivante et le jour choisi (inl) : %d\n",inl);
printf("Nombre de jour exact entre la nouvelle lune suivante et le jour choisi (dinl) : %f\n", dinl);
cmnl=jc+inl;
printf("cmnl : %d\n", cmnl);
/* Jour choisi étant jour de nouvelle lune */
if (inl==0)
{
printf("Phase de la lune : %s\n",lnl);
if (cmnl<=djmc)
{
anl=ac;
mnl=mc;
jnl=jc+inl;
}
else if (cmnl>djmc)
{
if (mc<12)
{
anl=ac;
mnl=mc+1;
jnl=inl-(djmc-jc);
}
else if (mc==12)
{
apls=ac+1;
mpls=mc-11;
jpls=inl-(djmc-jc);
}
}
/* Affichage de la date de la nouvelle lune */
printf("Date et heure de la nouvelle lune : %d/%d/%d %d:%d:%d\n", jnl, mnl, anl, nhipls, nmipls, nsipls);
}
{
FILE *f;
char filename[255];
{
sprintf((char *) &filename,"calendrier_lunaire.txt");
printf("Ecriture des données sur %s\n",filename);
f = fopen(filename,"w");
fprintf(f,"********************************\n");
fprintf(f,"* Calendrier lunaire *\n");
fprintf(f,"********************************\n");
/*fprintf(f,"Date d'aujourd'hui : %s",ctime(&t));*/
fprintf(f,"Lunaison moyenne (Mois synodique) : %f\n",ms);
fprintf(f,"Mois synodique : %d jours %d heures %d minutes %d secondes\n",njms, nhms, nmms, nsms);
fprintf(f,"Pleine lune de départ : %d/%d/%d %d:%d:%d\n\n", jpld, mpld, apld, nhjpld, nmjpld, nsjpld);
fprintf(f,"Date à laquelle je veux avoir les informations concernant la lune : %d/%d/%d\n",jc,mc,ac);
/* Jour choisi qui n'est pas le jour de pleine lune */
/* Affichage de la pleine lune suivante */
if (ipls>0)
{
cmpls=jc+ii;
dcmpls=jc+dii;
if (cmpls<=djmc)
{
apls=ac;
mpls=mc;
jpls=jc+dii;
}
else if (cmpls>djmc)
{
if (mc<12)
{
apls=ac;
mpls=mc+1;
jpls=dii-(djmc-jc);
}
else if (mc==12)
{
apls=ac+1;
mpls=mc-11;
jpls=dii-(djmc-jc);
}
}
/* Affichage de la date de la pleine lune suivante */
fprintf(f,"Date de la pleine lune suivante : %d/%d/%d %d:%d:%d\n", jpls, mpls, apls, nhipls, nmipls, nsipls);
}
fclose(f);
}
}
return EXIT_SUCCESS;
}