| |||||
| Dernière réponse | |
|---|---|
| Sujet : Encore un probleme en C++ :( Tgrx, come on ;-) | |
| fabd | Ca l'air d'aller :) |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| fabd | Ca l'air d'aller :) |
| fabd |
|
| tgrx | Ah oui, d'ailleurs j'avais corrige l'erreur dans la version que je t'ai envoyee hier.
C'est juste que quand tu debordes au niveau des mois, (m>12), tu fais a=a+1, ce qui est bien, mais ensuite il faut reinitialiser m avec 1, et non pas faire m=m-1 Parce qu'apres decembre, c'est janvier et pas novembre :) |
| fabd | Bon, voila, j'ai suivi tes conseils, j'essaie de nettoyer un peu, et je viens de tomber sur un autre bug ! :(
Quand je met 31/12/2000 et paiement différé, si je met 30 jours, je dois payer le 31/12/2001 et si je met 90... 31/12/2003 :o Le bug est dans la fonction ajout, mais je c pas trop ou : ptre la : while (nbj>nj[m]) { nbj=nbj-nj[m]; m=m+1; if (m>12) { a=a+1; m=m-1; } } HELPPPPP :cry: //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[6] = {"chŠque","traite", "billet … ordre" , "espŠces" , "virement bancaire" , "relev‚ bancaire"}; char* tdelai[4] = {"comptant","dans 30 jours", "dans 60 jours" ,"dans 90 jours"}; char* quantieme[6] = {"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 // tant que choix<>0 a 6 alors afficher menu de type paiement { 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) // on quitte l'application { cout<<"\n\tVous avez choisi de quitter le programme ...."; cout<<"\n\tA bient“t !"; exit(0); }; do //tant que choix2<>0 a 3, afficher menu echéance de paiement { 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 // tant que choix3<> 0 a 5, afficher menu type de quantieme { 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 de l'utilisateur 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)); // copie de la chaine ajout dans resu 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}; //nombre de jours par mois int i, k, m, a, r; //analyse de la chaine de caractere JJ/MM/AA pour retourner le jour 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; //verification année bisextille : fevrier 29 jours if(j>nj[m-1])j=-1; // erreur return 0; } int mois(char*d, int &j) { int i, k; //analyse de la chaine de caractere JJ/MM/AA pour retourner le mois i=d[3]-48; k=d[4]-48; j=i*10 + k; if(j<1||j>12)j=-1; //erreur return 0; } int an(char *d, int &j) { int i, k,l,m; //analyse de la chaine de caractere JJ/MM/AA pour retourner l'année 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; //erreur return 0; } char *ajout(int nbj , char valeur[]) // ajoute le nombre de jour nécessaire { 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) //creation du calendrier { 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"; int debut = ((jour-r)-1)%7 - 6; for(i=0;i<5;i++) { for(j=0;j<7;j++) { if(i==0 && (debut+j<1)) mat[i][j]=0; else { if (k<nj[mois]+1) { mat[i][j]=k; k++; } } } } for(i=0;i<7;i++) 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; } |




