Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1558 connectés 

  FORUM HardWare.fr
  Programmation

  C++ : Trouver le Bug ! Un cado a gagner !!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ : Trouver le Bug ! Un cado a gagner !!

n°39136
fabd
Posté le 12-06-2001 à 16:53:53  profilanswer
 

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]

mood
Publicité
Posté le 12-06-2001 à 16:53:53  profilanswer
 

n°39141
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:03:20  profilanswer
 

J'ai pas trouve le bug, mais deja dans ta fonction ajout, tu renvoies l'adresse d'une variable locale 'resu'... tres mauvais.

n°39142
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:06:11  profilanswer
 

donc remplacer

Code :
  1. char resu[20];


par

Code :
  1. char* resu= new char[20];

n°39144
BENB
100% Lux.
Posté le 12-06-2001 à 17:07:34  profilanswer
 

tgrx a écrit a écrit :

donc remplacer

Code :
  1. char resu[20];


par

Code :
  1. char* resu= new char[20];






 
et penser au delete...
 
Par contre sais tu que on peut mettre des commentaires pour aider a la relecture :D

n°39145
fabd
Posté le 12-06-2001 à 17:14:02  profilanswer
 

Ti voudrai pas me traduire au passage ? :D

n°39146
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:23:12  profilanswer
 

Pfffou.... c'est pas pour etre mechant mais... c'est super mal ecrit, quasi impossible a relire... :sweat:

n°39147
archangel
Un homme Une vision
Posté le 12-06-2001 à 17:24:09  profilanswer
 

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.


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
n°39148
fabd
Posté le 12-06-2001 à 17:31:56  profilanswer
 

J'appel la banque si ca marche

n°39149
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:34:43  profilanswer
 

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...

n°39150
fabd
Posté le 12-06-2001 à 17:35:46  profilanswer
 

Non, ce n'est pas ca.
 
 
Merci tgrx :jap:

mood
Publicité
Posté le 12-06-2001 à 17:35:46  profilanswer
 

n°39151
archangel
Un homme Une vision
Posté le 12-06-2001 à 17:37:24  profilanswer
 

Adieu gentil million  :cry:


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
n°39156
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:45:43  profilanswer
 

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 :
  1. int debut = ((jour-r)-1)%7 - 6;
  2.   for(i=0;i<5;i++)
  3.     {
  4.       for(j=0;j<7;j++)
  5. { if(i==0 && (debut+j<1)) mat[i][j]=0;
  6. else
  7.   {
  8.     if (k<nj[mois]+1)
  9.       {
  10.  mat[i][j]=k;
  11.  k++;
  12.       }
  13.   }
  14. }
  15.     }


 
 
Et maintenant, je veux le cadeau :D

n°39157
fabd
Posté le 12-06-2001 à 17:49:46  profilanswer
 

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 :D

n°39158
archangel
Un homme Une vision
Posté le 12-06-2001 à 17:50:12  profilanswer
 

Dit tgrx tu veux pas partager le million :love:


---------------
J'suis timide - Prêt à mourir, mais pas à vivre - Je suis vraiement très fatigué ... - more than meets the eye
n°39159
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:52:27  profilanswer
 

archangel> euh... NAN :p
 
fabd>
 

Code :
  1. int cal(int jour,int mois,int annee)
  2. {
  3.   int mat[5][7];
  4.   int r,nb1,nb2,j,i,k=1;
  5.   int nj[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  6.   char* tabjour[7]={"D","L","M","M","J","V","S"};
  7.   int t[]={0,0,31,59,90,120,151,181,212,243,273,304,334,365};
  8.  
  9.   nb1=(annee-1)*365+(annee-1)/4-(annee-1)/100+(annee-1)/400;
  10.   nb2=t[mois]+jour;
  11.   for(i=0;i<5;i++)
  12.     {
  13.       for(j=0;j<7;j++)
  14. mat[i][j]=0;
  15.     }     
  16.  
  17.  
  18.   if(mois>2)
  19.     {
  20.       r=annee%4;
  21.       if(r==0) nb2=nb2+1;
  22.     };
  23.   r=(nb1+nb2)%7;
  24.   cout<<"\n";
  25.  
  26.   int debut = ((jour-r)-1)%7 - 6;
  27.   for(i=0;i<5;i++)
  28.     {
  29.       for(j=0;j<7;j++)
  30. { if(i==0 && (debut+j<1)) mat[i][j]=0;
  31. else
  32.   {
  33.     if (k<nj[mois]+1)
  34.       {
  35.  mat[i][j]=k;
  36.  k++;
  37.       }
  38.   }
  39. }
  40.     }
  41.  
  42.   for(i=0;i<7;i++)
  43.     // if (tabjour[i]==0);  
  44.     //  cout<<".";  
  45.     // else  
  46.     cout<<tabjour[i]<<"\t";
  47.   cout<<"\n"<<"\n";
  48.   for(i=0;i<5;i++)
  49.     {
  50.       for(j=0;j<7;j++)
  51. cout<<mat[i][j]<<"\t";
  52.       cout<<"\n";
  53.     }
  54.   cin >> k;
  55.   return 0;
  56. }

n°39160
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:53:36  profilanswer
 

fabd > a propos, "APPLICATION PROFESSIONEL", ca prend 2 n, 2 l et un e... :D

n°39162
fabd
Posté le 12-06-2001 à 17:54:43  profilanswer
 

Trgx, je t :love:  
 
Attends, je relance un coup pour voir si g pas rever :D

n°39164
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:55:56  profilanswer
 

fabd> c'est tgrx, pas trgx :benetton:

n°39165
fabd
Posté le 12-06-2001 à 17:56:14  profilanswer
 

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 :D
 
Dernier essai :)

n°39166
fabd
Posté le 12-06-2001 à 17:57:26  profilanswer
 

tgrx a écrit a écrit :

fabd> c'est tgrx, pas trgx :benetton:




 
 
 :love:  :love:  :love:  :love:  
 
Bon, keske je peux t'offrir ? :hello:  
(le million, c si g 20/20 a l'oral :D)

n°39167
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 17:58:53  profilanswer
 

Chaipo, de toute facon je suis pas en France en ce moment... ca va etre dur :D
 
Pour ton oral, ils s'appellent comment tes profs (pour que tu puisses avoir un 20/20... :p) ??

n°39168
fabd
Posté le 12-06-2001 à 18:00:43  profilanswer
 

Ben chai po, c mon oral de BTS :p

n°39169
tgrx
My heart is pumping for love
Posté le 12-06-2001 à 18:03:27  profilanswer
 

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...

n°39170
fabd
Posté le 12-06-2001 à 18:04:54  profilanswer
 

C clair, c ce ke je comptai faire une foi ce probleme résolu.
encore merci :hello:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  C++ : Trouver le Bug ! Un cado a gagner !!

 

Sujets relatifs
Trouver login + mot de passe: php3[javascript] trouver un tutoriel..
Ou trouver un bon site qui cree les sondages + votes sans pub?[WebMaster] ou trouver des Gifs Animés et autres libre de droits ?
[CGI] où trouver de la doc pour en faire en C ?[POSTSCRIPT] Commen trouver le bas de pag ?
ou puis-je trouver visual studio pro 6.00 ???[VB] Trouver un répertoire/fichier sur le disque ? facile ?
petit prog en batch pour gagner de l'espace diskou trouver os2
Plus de sujets relatifs à : C++ : Trouver le Bug ! Un cado a gagner !!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR