vinez voir mon projet + aide pour optimiser si possible =)

vinez voir mon projet + aide pour optimiser si possible =) - C++ - Programmation

Marsh Posté le 28-11-2002 à 07:30:47    

genre si le gas s amuse a rentrer un nombre a virgule ou une lettre aulieu d un chiifre entier..
comment verifier sa??
merci


Message édité par COULIX le 29-11-2002 à 09:24:18

---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 28-11-2002 à 07:30:47   

Reply

Marsh Posté le 28-11-2002 à 07:34:30    

Tu fais ta conversion, et si il y a une couille, une erreur est generee ( lance ton prog en faisant une couille en entrant le nombre si tu veux le nom de l'exception).
 
Ensuite, tu l'attrappes, tu dis "spabiengmongars", et tu lui laisse une seconde chance...
 
Va sur google et cherche des documents sur les traitements d'exception... tu devrais trouver ton bonheur.


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
Reply

Marsh Posté le 28-11-2002 à 07:57:24    

je sui sentrain d eprogrammer un chti truc que en fonction de ta date de naissance te donn ela date d elanniversaire de tes 10000 jours =)
c pour un assignements d info en c++ (je sui sen australie)
et comme j eveus pas faire les choses a moitier j echeck toute les conneries que le mec peu faire.
genre entre 31 pour le jour de naissance alors qu il avit auperevent entrer 2 pour le mois =)
ou bien si justement ce payday tape un chiffre un virgule ou un caractere.


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 28-11-2002 à 07:58:51    

Eh ben tu fais ce que j'ai dit au dessus, tu attrappes l'erreur de conversion et tu files une seconde chance au mec :D


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
Reply

Marsh Posté le 28-11-2002 à 08:18:35    

 
voila le debut du code, ce sont les function qui permette de chercker et enregistrer le jour mois date de naissance.
 
le premiere deconne ct just un test
if(inta = false) sa marche pas du tout..
je voudrai qu il check que a soit 1) entier 2) non char.
la fonction 3 j ai un pb, je voulias qu ilk check que si c<0 (c = jours d enaissance) ou c>28 quand b=2 (le mois) il renvoie  sur un ereur "fevrier n a que 28 jours"
 
mai sle pb c que apperement sa narche pas pour lui b n eat pas declarer alors qu il a etait enregistrer dans la fonction avant..
dans le main y a pas de pb mais pas dans les fonction annexes..
snif comment faire ?  
 
 

Code :
  1. int year (int a)
  2.      {
  3.      cout <<"Enter your YEAR of birth [digits]. \n";
  4.      cin >> a;
  5.          if (int a=false)
  6.             { cout <<"ERROR try again  :p \n" <<endl;
  7.            year (a); }
  8.          else
  9.      return a;
  10.      }
  11. int month (int b)
  12.     {
  13.      cout <<"Enter your MONTH of birth [digits]. \n";
  14.      cin >> b;
  15.          if (b<0,b>12)
  16.             { cout <<"ERROR try again  :p \n" <<endl;
  17.             month (b); }
  18.          else
  19.      return b;
  20.      }
  21. int day (int c)
  22.     {
  23.      cout <<"Enter your DAY of birth [digits]. \n";
  24.      cin >> c;
  25.          if (c<0,c>28)
  26.             { cout <<"ERROR February have only 28 days :p \n" <<endl;
  27.             day (c); }
  28.          else if  (c<0,c>31)
  29.             { cout <<"ERROR try again :p \n" <<endl;
  30.             day (c); }
  31.      return c;
  32.      }

  :cry:


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 28-11-2002 à 08:22:42    

j ai rechercher sur google la gestion des exeptions sa utilise des class (j ai jamias utiliser sa cquoi comment sa marche ?)
la y a un exemple  
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. class erreur 
  4.              
  5. {
  6. public:
  7.     int cause; 
  8.     erreur(int c) : cause(c) {}
  9.     erreur(const erreur &source) : cause(source.cause) {}
  10. };
  11. class other {};
  12. int main(void)
  13. {
  14.     int i;           
  15.     cout << "Tapez 0 pour générer une exception Erreur, "
  16.         "1 pour une Entière :";
  17.     cin >> i;                           /
  18.     cout << endl;
  19.     try         
  20.     {
  21.         switch (i)
  22.         {
  23.         case 0:
  24.             {
  25.                 erreur a(0);
  26.                 throw (a); 
  27.             }
  28.         case 1:
  29.             {
  30.                 int a=1;
  31.                 throw (a); 
  32.             }
  33.         default
  34.             {
  35.                 other c;   
  36.                 throw (c); 
  37.             }
  38.         }
  39.     }             
  40.     catch (erreur &tmp)
  41.     {             
  42.         cout << "Erreur erreur ! (cause " << tmp.cause << " )" << endl;
  43.     }
  44.     catch (int tmp)
  45.     {
  46.         cout << "Erreur int ! (cause " << tmp << " )" << endl;
  47.     }
  48.     catch (...)     
  49.     {               
  50.         cout << "Exception inattendue !" << endl;
  51.     }
  52.     return 0;
  53. }

 
mais heu je commprend rien


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 28-11-2002 à 08:58:08    

coulix a écrit a écrit :

 
voila le debut du code, ce sont les function qui permette de chercker et enregistrer le jour mois date de naissance.
 
le premiere deconne ct just un test
if(inta = false) sa marche pas du tout..
je voudrai qu il check que a soit 1) entier 2) non char.
la fonction 3 j ai un pb, je voulias qu ilk check que si c<0 (c = jours d enaissance) ou c>28 quand b=2 (le mois) il renvoie  sur un ereur "fevrier n a que 28 jours"
 
mai sle pb c que apperement sa narche pas pour lui b n eat pas declarer alors qu il a etait enregistrer dans la fonction avant..
dans le main y a pas de pb mais pas dans les fonction annexes..
snif comment faire ?  
 
 

Code :
  1. int year (int a)
  2.      {
  3.      cout <<"Enter your YEAR of birth [digits]. \n";
  4.      cin >> a;
  5.          if (int a=false)
  6.             { cout <<"ERROR try again  :p \n" <<endl;
  7.            year (a); }
  8.          else
  9.      return a;
  10.      }
  11. int month (int b)
  12.     {
  13.      cout <<"Enter your MONTH of birth [digits]. \n";
  14.      cin >> b;
  15.          if (b<0,b>12)
  16.             { cout <<"ERROR try again  :p \n" <<endl;
  17.             month (b); }
  18.          else
  19.      return b;
  20.      }
  21. int day (int c)
  22.     {
  23.      cout <<"Enter your DAY of birth [digits]. \n";
  24.      cin >> c;
  25.          if (c<0,c>28)
  26.             { cout <<"ERROR February have only 28 days :p \n" <<endl;
  27.             day (c); }
  28.          else if  (c<0,c>31)
  29.             { cout <<"ERROR try again :p \n" <<endl;
  30.             day (c); }
  31.      return c;
  32.      }

  :cry:  




 
1° Défois y'a 29 jours le mois de février :D
2° Pourquoi tu testes les nombres entre 0 et fin_du_mois :??:


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
Reply

Marsh Posté le 28-11-2002 à 11:01:27    

DarkOli a écrit a écrit :

 
 
1° Défois y'a 29 jours le mois de février :D
2° Pourquoi tu testes les nombres entre 0 et fin_du_mois :??:



ah oui merdee j ai oublie les annes bisaikstil :lol:  :sweat:


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 29-11-2002 à 06:39:04    

voila la nouvell eversion le check des erreur numerik sa marche nickel, en regardant le mois si lanne est bissextile ect.
par contre j ereflechier toujouts comment calculer la datte du 10000 jours a partir des donnes entree :sweat:  :sweat:  
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. int main()
  4.     {
  5.      int a,c,d;
  6.      bool p=false;
  7.      int i=1;
  8.      int l=10;
  9.      int x=1;
  10.      int b=0;
  11.      string t;
  12.      t = "n";
  13. while (t=="n" )
  14.          {
  15. cout <<"                                    \n";
  16. cout << "               ///\\               \n";
  17. cout << "             (@ @)                 \n";
  18. cout << "   +---oOO----(_)---Ooo-----+      \n";
  19. cout << "   |        TAGMC21 ©       I      \n";
  20. cout << "   I     Sibt dec 2002      |      \n";
  21. cout << "   +------------------------+      \n";
  22. cout << "            |__|__|                \n";
  23. cout << "              || ||                \n";
  24. cout << "             ooO Ooo               \n";
  25. cout <<"                                    \n";
  26. cout <<"ASSIGNEMENT 2 : § 10 Killer days § \n";
  27. cout <<" \n"<<endl;;
  28.      // year
  29.      cout <<"Enter your YEAR of birth [digits]. \n";
  30.      cin >> a;
  31.          do
  32.          { i=i+4;  }
  33.          while (i<a);
  34.           if (a%i==0)
  35.           p=true;
  36.           else p=false;
  37.      cout << a <<" OK.\n";
  38.      if (p==false) cout <<"NON BISEXTILE year, february : 28 days \n"<< endl;
  39.      else  cout <<"BISEXTILE year, february : 29 days\n"<< endl;
  40.      // month
  41.      cout << "Enter your MONTH of birth [digits]. \n";
  42.      cin >> b;
  43.          do
  44.          {
  45.           if ((b<1)|| (b>12))
  46.            { cout <<"ERROR try again  :p \n" <<endl;
  47.              cout <<"Enter your MONTH of birth [digits]. \n";
  48.              cin >> b;   }
  49.           else continue;
  50.          }
  51.      while (b<1 || b>12);
  52.      cout << b <<" OK.\n"<< endl;
  53.      // days
  54.      cout <<"Enter your DAY of birth [digits]. \n";
  55.      cin >> c;
  56.         do
  57.         {
  58.          if (c<=1 || c>31)
  59.             { cout <<"ERROR try again  :p \n" <<endl;
  60.             cout <<"Enter your DAY of birth [digits]. \n";
  61.             cin >> c;   }
  62.          else if (c<=1 || (c>30 && b==4) ||(c>30 && b==6)|| (c>30 && b==7)
  63.          ||(c>30 && b==9)||(c>30 && b==11))
  64.             { cout <<"ERROR ,month number "<< b <<" , have only 30 days  :p \n" <<endl;
  65.             cout <<"Enter your DAY of birth [digits]. \n";
  66.             cin >> c;   }
  67.          else if (c<=1 || c>28 && b==2 && p==false)
  68.             { cout <<"ERROR february " << a << " have only 28 days :p \n"<<endl;
  69.             cout <<"Enter your DAY of birth [digits]. \n";
  70.             cin >> c;   }
  71.          else if (c<=1 || c>29 && b==2 && p==true)
  72.             { cout <<"ERROR february " << a << " have only 29 days :p \n"<<endl;
  73.             cout <<"Enter your DAY of birth [digits]. \n";
  74.             cin >> c;   }
  75.          else continue;
  76.           }
  77.      while ((c<=1) || (c>29 && b==2 && p==true) || (c>28 && b==2 && p==false)
  78.       || (c>31 && b != 2 ));
  79.      cout << c <<" OK.\n"<<endl;
  80.      // processing of the 10000 days anniversary date

 


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 29-11-2002 à 06:50:56    

premier truc qui me viens a l'esprit ( Conditionne par des annes de prog surement).
 
-D'abord trouver la bonne annee. Prendre 10000 et retirer 365, puis 365, puis 365, puis 364, puis 365 etc ( en faisant bien gaffe a l'annee de depart pour savoir laquelle est bissextile) jusqu'a ce que le nombre de jours soit < 366 (si annee suivante pas bissextile ) ou < 365 (annee bissextile).
-Retirer ensuite 31, puis 28 ( si bissex) etc, jusqu'a ce que tu aie le mois.
-Le nb restant est le nombre de jours.
 


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
Reply

Marsh Posté le 29-11-2002 à 06:50:56   

Reply

Marsh Posté le 29-11-2002 à 06:57:07    

Tetedeiench a écrit a écrit :

premier truc qui me viens a l'esprit ( Conditionne par des annes de prog surement).
 
-D'abord trouver la bonne annee. Prendre 10000 et retirer 365, puis 365, puis 365, puis 364, puis 365 etc ( en faisant bien gaffe a l'annee de depart pour savoir laquelle est bissextile) jusqu'a ce que le nombre de jours soit < 366 (si annee suivante pas bissextile ) ou < 365 (annee bissextile).
-Retirer ensuite 31, puis 28 ( si bissex) etc, jusqu'a ce que tu aie le mois.
-Le nb restant est le nombre de jours.
 
 




we c ce que je pensasi au debut j etais partie en denmarant sur les jour smain non , j enverai la suite des que j etrouve. mais j adore ca c notre assignement pour le 18 decemnbre mais une fois que j ai commencer je marrete plus, cett enuit je me suis reveiller en trouvant la solution pour les annees bissextile grave .....  :D


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 29-11-2002 à 06:59:03    

coulix a écrit a écrit :

 
we c ce que je pensasi au debut j etais partie en denmarant sur les jour smain non , j enverai la suite des que j etrouve. mais j adore ca c notre assignement pour le 18 decemnbre mais une fois que j ai commencer je marrete plus, cett enuit je me suis reveiller en trouvant la solution pour les annees bissextile grave .....  :D  




 
Bah.
 
Ensuite je suis desole mais cette phrase la :
 
-j etais partie en denmarant sur les jour smain non , j enverai la suite des que j etrouve.
 
Bah je la comprends pas.


Message édité par Tetedeiench le 29-11-2002 à 06:59:14

---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
Reply

Marsh Posté le 29-11-2002 à 08:58:59    

puf sa marche pour les annes, mais j ai chiez pour trouver le problem en fait je me plantais dans le == et =
== c pour une comparaison et  = c pour assugher non ??
il doit y avoir plus simple...  
 

Code :
  1. // processing of the 10000 days anniversary date
  2.      do
  3.      {
  4.      do
  5.       { k=k+4;
  6.        }
  7.       while (k<a);
  8.      if (a%k==0)
  9.       {
  10.       y=true;
  11.       l=l-365;
  12.       a=a+1;
  13.       k=0; }
  14.      else
  15.       {
  16.       y =false;
  17.       l=l-364;
  18.       a=a+1;
  19.       k=0;
  20.           }
  21.       }
  22.      while ((l>=365 && y==true) || (l>=364 && y==false));


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 29-11-2002 à 09:08:26    

:cry: je viens de rentre une annee a 11 chiffre (j ai changer a en long integer), mon amd 1000@1500 mets au moins 10 seconde pour mafficher le resultat   :lol:  
sa doit etre la boucle pour savoir si l anne est bissextile ...
 [:yaisse1]


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 29-11-2002 à 09:25:50    

y apas un truc qui permet de racourcir ceci :
((b==1) || (b==3)|| ( b==5)|| (b==8) || (b==10)  || (b==12))
par exemple if b= [1,3,5,8,10,12] sa existe pas ?


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 29-11-2002 à 12:09:55    

coulix a écrit a écrit :

y apas un truc qui permet de racourcir ceci :
((b==1) || (b==3)|| ( b==5)|| (b==8) || (b==10)  || (b==12))
par exemple if b= [1,3,5,8,10,12] sa existe pas ?




 

Code :
  1. switch (b)
  2.   {
  3.    case 1:
  4.    case 3:
  5.    case 5:
  6.    case 8:
  7.    case 10:
  8.    case 12:
  9.     fait ton truc;
  10.     break;
  11.    default:
  12.    sinon fait ca:
  13.   }

 
 
c'est pas vraiment plus court mais je trouve ca plus lisible

Reply

Marsh Posté le 29-11-2002 à 12:33:04    

coulix a écrit a écrit :

 :cry: je viens de rentre une annee a 11 chiffre (j ai changer a en long integer), mon amd 1000@1500 mets au moins 10 seconde pour mafficher le resultat   :lol:  
sa doit etre la boucle pour savoir si l anne est bissextile ...
 [:yaisse1]  



:lol:  :lol:  :lol:  
Utilise plutôt ça :

Code :
  1. if((annee % 4 == 0) && ((annee % 100 != 0) || (annee % 400 == 0))){
  2.   // C'est une année bissextile
  3. }


C'est un peu plus rapide :D ;)

Reply

Marsh Posté le 29-11-2002 à 17:39:39    

:lol: :lol:
 
:lol:
 
Ca me fait bizarre car j'avais les memes problemes au debut quand je demarrais la prog.


---------------
L'ingénieur chipset nortiaux : Une iFricandelle svp ! "Spa du pâté, hin!" ©®Janfynette | "La plus grosse collec vivante de bans abusifs sur pattes" | OCCT v12 OUT !
Reply

Marsh Posté le 29-11-2002 à 23:34:23    

*syl* a écrit a écrit :

 :lol:  :lol:  :lol:  
Utilise plutôt ça :

Code :
  1. if((annee % 4 == 0) && ((annee % 100 != 0) || (annee % 400 == 0))){
  2.   // C'est une année bissextile
  3. }


C'est un peu plus rapide :D ;)




ca c sympa merchi  :jap:  :D


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 30-11-2002 à 01:28:35    

Il y a des gros problèmes d'indentation !
 
Les accolades se mettent plutôt seules sur une ligne ou en fin de ligne précédente.
 

Code :
  1. t="n",
  2. while (t=="n" ){
  3. //question
  4. }
  5. //Pourquoi pas:
  6. do{
  7. //question
  8. }while(t=="n" );


 
a,b,c,d,i,l,x,p,t ?
Un minimum de signification des noms please.
 

Code :
  1. if (a%i==0)
  2. p=true;
  3. else p=false;
  4. //on peut simplifier:
  5. p= a%i==0;


 

Code :
  1. // month
  2. cout << "Enter your MONTH of birth [digits]. \n";
  3. cin >> b;
  4. do
  5. {
  6. if ((b<1)|| (b>12))
  7. { cout <<"ERROR try again  :p  \n" <<endl;
  8.  cout <<"Enter your MONTH of birth [digits]. \n";
  9.  cin >> b;   }
  10. else continue;
  11. }
  12. while (b<1 || b>12);
  13. //double répétition et imbrication combo, ouch...
  14. //comme ça ?
  15. cout << "Enter your MONTH of birth [digits]." << endl;
  16. for(;;){
  17. cin >> b;
  18. if ((b<1)|| (b>12)){
  19.  cout << "Invalid month, try again  :p" << endl;
  20.  continue;
  21. }
  22. }


Pareil pour //day, simplifiable...
 
Et pour finir, c'est peut-être plus simple de calculer un n° de série de jour, ajouter 10000, puis en extraire la date an/mois/jour.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 30-11-2002 à 03:04:18    

Musaran a écrit a écrit :

Il y a des gros problèmes d'indentation !
 
Les accolades se mettent plutôt seules sur une ligne ou en fin de ligne précédente.
 

Code :
  1. t="n",
  2. while (t=="n" ){
  3. //question
  4. }
  5. //Pourquoi pas:
  6. do{
  7. //question
  8. }while(t=="n" );


 
a,b,c,d,i,l,x,p,t ?
Un minimum de signification des noms please.
 

Code :
  1. if (a%i==0)
  2. p=true;
  3. else p=false;
  4. //on peut simplifier:
  5. p= a%i==0;


 

Code :
  1. // month
  2. cout << "Enter your MONTH of birth [digits]. \n";
  3. cin >> b;
  4. do
  5. {
  6. if ((b<1)|| (b>12))
  7. { cout <<"ERROR try again  :p  \n" <<endl;
  8.  cout <<"Enter your MONTH of birth [digits]. \n";
  9.  cin >> b;   }
  10. else continue;
  11. }
  12. while (b<1 || b>12);
  13. //double répétition et imbrication combo, ouch...
  14. //comme ça ?
  15. cout << "Enter your MONTH of birth [digits]." << endl;
  16. for(;;){
  17. cin >> b;
  18. if ((b<1)|| (b>12)){
  19.  cout << "Invalid month, try again  :p" << endl;
  20.  continue;
  21. }
  22. }


Pareil pour //day, simplifiable...
 
Et pour finir, c'est peut-être plus simple de calculer un n° de série de jour, ajouter 10000, puis en extraire la date an/mois/jour.




 
 
 //double répétition et imbrication combo, ouch...  
ouai la je sentais que ct pas trop ca ..  :D  
merci beaucoup  :jap:


---------------
.... et dans les tenebres les lier
Reply

Marsh Posté le 01-12-2002 à 02:43:18    

Sauf que je me suis bien gouré de sens...

Code :
  1. for(;;) {
  2. cin >> b;
  3. if (b>=1 && b<=12) break; //valeur ok
  4. cout << "Invalid month, try again  :p " << endl;
  5. }


Et voilà, c'est de plus en plus propre !
 
J'ai oublié de critiquer ça: t=="n";
Ça teste une égalité d'identité de chaîne, pas une similitude de contenu.
Et comme les compilateurs sont libres de confondre ou pas des chaîne sidentiques, le résultat est indéfini.
Il suffit de prendre un caractères seul:

Code :
  1. chat t;
  2. ...
  3. if(t=='n') ...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 23-07-2003 à 15:17:44    

et tu tiens compte des années juliennes/grégoriennes ?
et du ralentissement de la rotation de la terre ?

Reply

Marsh Posté le 23-07-2003 à 17:05:39    

C'est marrant, c'est la première fois que je vois ça :

Code :
  1. if (c<0,c>28)


 
Et c'est probablement complètement faux car c'est équivalent à :

Code :
  1. if (c>28)


et en plus, on ne teste pas si "c<0" mais si "c<1" ;)
 
Version corrigée pour un février a 28 jours :

Code :
  1. if (c<1 || c>28)


Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed