C++ : Trouver le Bug ! Un cado a gagner !! - Programmation
Marsh Posté le 12-06-2001 à 17:03:20
J'ai pas trouve le bug, mais deja dans ta fonction ajout, tu renvoies l'adresse d'une variable locale 'resu'... tres mauvais.
Marsh Posté le 12-06-2001 à 17:06:11
donc remplacer
Code :
|
par
Code :
|
Marsh Posté le 12-06-2001 à 17:07:34
tgrx a écrit a écrit : donc remplacer
|
et penser au delete...
Par contre sais tu que on peut mettre des commentaires pour aider a la relecture
Marsh Posté le 12-06-2001 à 17:23:12
Pfffou.... c'est pas pour etre mechant mais... c'est super mal ecrit, quasi impossible a relire...
Marsh Posté le 12-06-2001 à 17:24:09
Bon j'en suis pas sur mais je crois qu'il y a un zéro en trop dans l'initialisation de ton tableau t[] de la fonction cal(...)
enfin si j'ai bien compris l'utilité de ce tableau.
Voilà
@+
Archangel
PS: si c'est bien ça le bug ben pour le cadeau un million de francs en liquide serait là le bienvenu et en petite coupures avec les numéros de séries qui ne suivent pas je vérifierai.
Marsh Posté le 12-06-2001 à 17:34:43
fabd> ta formule pour trouver le jour est correcte, c'est ta fonction d'affichage qui fait n'importe quoi... je te donne la version correcte dans 5 minutes... et ton tableau des jours est bon aussi...
Marsh Posté le 12-06-2001 à 17:37:24
Adieu gentil million
Marsh Posté le 12-06-2001 à 17:45:43
Voici ce que tu dois remplacer a l'interieur de la fonction cal... en fait ta fonction precedente faisait varier le calendrier avec le jour courant (on n'avait pas le meme calendrier de juin 2001 pour le 01/06/2001 et le 02/06/2001).
Code :
|
Et maintenant, je veux le cadeau
Marsh Posté le 12-06-2001 à 17:49:46
Eh, kestion, je le met ou ce bout de code ??
Je supprime toute la fonction Cal en ne laissant kes les tablo ?
Je c, chui nul
Marsh Posté le 12-06-2001 à 17:50:12
Dit tgrx tu veux pas partager le million
Marsh Posté le 12-06-2001 à 17:52:27
archangel> euh... NAN
fabd>
Code :
|
Marsh Posté le 12-06-2001 à 17:53:36
fabd > a propos, "APPLICATION PROFESSIONEL", ca prend 2 n, 2 l et un e...
Marsh Posté le 12-06-2001 à 17:54:43
Trgx, je t
Attends, je relance un coup pour voir si g pas rever
Marsh Posté le 12-06-2001 à 17:56:14
Arf, j'avais pas vu ke tu avais poster la fonction entiere, c pour ca ke j été etonné de l'avoir bien placé du 1er coup
Dernier essai
Marsh Posté le 12-06-2001 à 17:57:26
tgrx a écrit a écrit : fabd> c'est tgrx, pas trgx |
Bon, keske je peux t'offrir ?
(le million, c si g 20/20 a l'oral )
Marsh Posté le 12-06-2001 à 17:58:53
Chaipo, de toute facon je suis pas en France en ce moment... ca va etre dur
Pour ton oral, ils s'appellent comment tes profs (pour que tu puisses avoir un 20/20... ) ??
Marsh Posté le 12-06-2001 à 18:03:27
D'ailleurs si t'as rien a faire, retouche ton code avant ton oral, parce que la il est vraiment crado... organise tes donnees, ajoute des commentaires, autrement tes examinateurs vont tirer la tronche...
Marsh Posté le 12-06-2001 à 18:04:54
C clair, c ce ke je comptai faire une foi ce probleme résolu.
encore merci
Marsh Posté le 12-06-2001 à 16:53:53
Voila, j'en ai marre, je trouve pas l'erreur, et g trop besoin ke ca marche.
J'offre un cado a celui ki trouve la solution :
le probleme : le calendrier généré en fin de programme ne fonctionne pas. Par exemple : pour le 12/06/2001, il dira Mercredi, alors, que ca tombe un Lundi.
VOila le programme :
//********************************************************************************
//
// APPLICATION PROFESSIONEL 1 - 2ieme Année BTS
//
//
//********************************************************************************
//bibliotheque
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
//declarations des fonctions
int mois(char*, int&);
int jour(char*, int&);
int an(char*, int &);
int cal(int,int,int);
char *ajout(int, char t[]);
//variables
int choix1, choix2, choix3, i, j, k , l, m, a, nbj, exxit, pause;
char valeur[20], resu[20],c;
//tableaux d'affichage des infos possibles ligne 7
char* typ_paye[13] = {"chŠque","traite", "billet … ordre" , "espŠces" , "virement bancaire" , "relev‚ bancaire"};
char* tdelai[13] = {"comptant","dans 30 jours", "dans 60 jours" ,"dans 90 jours"};
char* quantieme[13] = {"au 5 du mois" , "au 10 du mois", "au 20 du mois" ,"au 25 du mois", "au dernier jour du mois" , "au meme quantieme que la facture"};
int delai[4]={0,30,60,90};
void main ()
{
//menu du paiement
exxit=0;
cout<<"bonjour, bienvenue dans le programme.";
cout<<"\nEntrer une date sous la forme JJ/MM/AAAA\n\t";
cin >> valeur;
jour (valeur, l);
mois (valeur,m);
an (valeur,a);
//verifications
if(l!=-1)
cout<<"\nVoici le jour : "<<l;
else
{
cout<<"**** Il y a une erreur sur le jour ***\n";
exxit=1;
};
if(m!=-1)
cout<<"\nVoici le mois : "<<m;
else
{
cout<<"**** Il y a une erreur sur le mois ***\n";
exxit=1;
};
if(a!=-1)
cout<<"\nVoici l'ann‚e : "<<a;
else
{
cout<<"**** Il y a une erreur sur l'ann‚e ***\n";
exxit=1;
};
// verification : si erreur, fin du programme.
if(exxit==1)
{
cout<<"\n\tFin du programme : Vous avez entr‚ une date erronn‚e ...";
cin>>pause;
exit(0);
};
do
{cout<< "\nVeuillez choisir le type de paiment : \n";
cout<<"\t0 - chŠque\n";
cout<<"\t1 - traite\n";
cout<<"\t2 - billet … ordre\n";
cout<<"\t3 - espŠces\n";
cout<<"\t4 - virement bancaire\n";
cout<<"\t5 - relev‚ bancaire\n";
cout<<"\t6 - quitter\n";
cin>>choix1;
cout<<"\n";
}
while (choix1<0 ||choix1>6);
if (choix1==6)
{
cout<<"\n\tVous avez choisi de quitter le programme ....";
cout<<"\n\tA bient“t !";
exit(0);
};
do
{
cout<<"\nVeuillez choisir le type de paiement : "<<"\n";
cout<<"\t0 - comptant\n";
cout<<"\t1 - 30 jours\n";
cout<<"\t2 - 60 jours\n";
cout<<"\t3 - 90 jours\n";
cin>>choix2;
cout<<"\n";
}
while (choix2<0 ||choix2>3);
//Menu du choix au quantieme
do
{
cout<< "Veuillez choisir le quantiŠme : \n";
cout<<"\t0 - au 5 du mois\n";
cout<<"\t1 - au 10 du mois\n";
cout<<"\t2 - au 20 du mois\n";
cout<<"\t3 - au 25 du mois\n";
cout<<"\t4 - au dernier jour du mois\n";
cout<<"\t5 - au mˆme quantiŠme que de la facture\n";
cin>>choix3;
cout<<"\n";
}
while (choix3<0 ||choix3>5);
//affichage des reponses des menus
cout<<"Vous avez choisi de payer en "<<typ_paye[choix1];
cout<<"\n";
cout<<"Vous preferez payer "<<tdelai[choix2];
cout<<"\n";
cout<<"Vous payerez "<<quantieme [choix3];
cout<<"\n";
cout<<"\n";
strcpy(resu,ajout(delai[choix2],valeur));
cout<<"AprŠs calcul, vous devrez payer le :"<<resu<<"\n";
cout<<"\n";
cout<<"\n";
cal(l,m,a);
}
int jour(char*d, int &j)
{
int nj[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i, k, m, a, r;
i=d[0] - 48;
k=d[1] - 48;
j=i*10 + k;
mois(d,m);
an(d,a);
r=a%4;
if(m==2&&r==0)nj[1]=29;
if(j>nj[m-1])j=-1;
return 0;
}
int mois(char*d, int &j)
{
int i, k;
i=d[3]-48;
k=d[4]-48;
j=i*10 + k;
if(j<1||j>12)j=-1;
return 0;
}
int an(char *d, int &j)
{
int i, k,l,m;
i=d[6] - 48;
k=d[7] - 48;
l=d[8] - 48;
m=d[9] - 48;
j=i*1000 + k*100 +l*10+m;
if(j<=1980|| j>2010) j=-1;
return 0;
}
char *ajout(int nbj , char valeur[])
{
char resu[20];
int j;
int nj[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
jour(valeur, j);
mois(valeur,m);
an(valeur,a);
nbj = nbj + j;
while (nbj>nj[m])
{
nbj=nbj-nj[m];
m=m+1;
if (m>12)
{
a=a+1;
m=m-1;
}
}
resu[0] = nbj/10 + 48;
resu[1] = nbj%10 + 48;
resu[2] ='/';
resu[3] = m/10 + 48;
resu[4] = m%10 + 48;
resu[5] ='/';
resu[6] = a/1000 + 48;
resu[7] = (a%1000)/100 + 48;
resu[8] = ((a%1000)%100)/10 + 48;
resu[9] = ((a%1000)%100)%10 + 48;
resu[10] = ' ';
return resu;
}
int cal(int jour,int mois,int annee)
{
int mat[5][7];
int r,nb1,nb2,j,i,k=1;
int nj[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char* tabjour[7]={"D","L","M","M","J","V","S"};
int t[]={0,0,31,59,90,120,151,181,212,243,273,304,334,365};
nb1=(annee-1)*365+(annee-1)/4-(annee-1)/100+(annee-1)/400;
nb2=t[mois]+jour;
for(i=0;i<5;i++)
{
for(j=0;j<7;j++)
mat[i][j]=0;
}
if(mois>2)
{
r=annee%4;
if(r==0) nb2=nb2+1;
};
r=(nb1+nb2)%7;
cout<<"\n";
for(i=0;i<5;i++)
{
for(j=0;j<7;j++)
{ if(i==0 && j<r) mat[i][j]=0;
else
{
if (k<nj[mois]+1)
{
mat[i][j]=k;
k++;
}
}
}
}
for(i=0;i<7;i++)
// if (tabjour[i]==0);
// cout<<".";
// else
cout<<tabjour[i]<<"\t";
cout<<"\n"<<"\n";
for(i=0;i<5;i++)
{
for(j=0;j<7;j++)
cout<<mat[i][j]<<"\t";
cout<<"\n";
}
cin>>k;
return 0;
}
[edit]--Message édité par fabd--[/edit]