Besoin d'aide pour creer un programme

Besoin d'aide pour creer un programme - C++ - Programmation

Marsh Posté le 28-11-2013 à 23:11:26    

Bonsoir,
Si quelqu'un peut m'aider je le remercie d'avance.
Cordialement LepetitNoob


Message édité par noobofc++ le 03-12-2013 à 13:13:40
Reply

Marsh Posté le 28-11-2013 à 23:11:26   

Reply

Marsh Posté le 29-11-2013 à 17:32:06    

Post un bout de code/d'algorithme qui prouve que tu as "essayé" quelque chose et que tu as un "problème" particulier, et on sera ravi de t'aider à améliorer/régler le pb...
 
Pour l'instant, ça ressemble plus a un exo donné en TP il y a 2 semaines que tu dois rendre pour demain

Reply

Marsh Posté le 01-12-2013 à 15:06:15    

cout << "bonjour";


Message édité par noobofc++ le 03-12-2013 à 13:14:22
Reply

Marsh Posté le 01-12-2013 à 21:55:29    

oulà, y a beaucoup de pbs...
 
ça ne doit pas compiler (souschaine n'est pas déclarée par exemple)...
 
La récursivité est une bonne idée pour résoudre ton pb, mais elle est mal maitrisée : il faut une condition d'arrêt et surtout les entrées doivent changer entre chaque appel, sinon, c'est la boucle infinie assurée (enfin ça va corer avant avec un stack overflow)... A mon avis, tu oublie de refaire un cin>> [xxx] dans la fonction construire...
 
Une chaine de caractère c'est "[xxxx]" et non '[xxxx]'...
Pour comparer une chaine avec plusieurs valeurs, il ne faut surtout pas faire  

Code :
  1. souschaine == "exp" || "ln" /// faux !!!!
  2. (souschaine == "exp" ) || (souschaine == "ln" ) ///ok


 
C'est dommage de faire du C++ et de faire un Struct, mais bon faut bien démarrer par qq chose.
 
cin éclate par caractère espace, donc la virgule est inutile ou doit être supprimée ou ignorée (supprimée) lors du parsing...


Message édité par dreameddeath le 01-12-2013 à 21:59:08
Reply

Marsh Posté le 01-12-2013 à 22:19:52    

Pour faire un parseur, on gère en général 2 étapes :
- le tokenizer : c'est ce qui "lit" la prochaine entrée (ici un "mot" sans espace) et fait une première analyse pour déterminer le "type" de mot (nombre, un des noms de fonction autorisée, etc...). Le tokenizer généralement renvoie deux choses : le type + la valeur convertie
- un parseur : il demande au tokenizer le prochain "token" et décide de la marche à suivre (construire un arbre)
 
Donc on peut imaginer :

Code :
  1. Token* getNextToken(){
  2.      string nextWord;
  3.      Token* nextToken=new Token();
  4.      cin >> nextWord;
  5.      if(nextWord == "fct1" ){
  6.            nextToken->setType(FCT1);
  7.            nextToken->setRawValue(nextWord);
  8.      }
  9.      else if( .... ){
  10.            ...
  11.      }
  12.      ...
  13.      else{
  14.           delete nextToken; //Liberation memoire
  15.            throw [Parse Error]; // Cas d'erreur (exemple mot inconnu)
  16.      }
  17.      return nextToken;
  18. }
  19. Arbre* Parse(){
  20.     Arbre *parsedArbre= new Arbre();
  21.     Token *nextToken = getNextToken();
  22.     switch(nextToken->getType()){
  23.         case FCT1:
  24.              fctArbre->setFct(FCT1);
  25.              fctArbre->addParam(Parse()); // appel recursif pour lire le 1ère paramètre de la fonction
  26.              ...   //
  27.              break;
  28.         case ...:
  29.               ....
  30.               break;
  31.         ...
  32.         default:
  33.               delete parsedArbre; //liberation mémoire avant exception
  34.               delete nextToken;
  35.               throw [unexpected Token]; 
  36.     }
  37.     return parsedArbre;
  38. }


 
Bien évidemment, il y a plein de trous, j'ai pas compilé et donc y peut être une ou deux accolades en moins, mais c'est plus pour illustrer l'architecture habituelle de parseurs


Message édité par dreameddeath le 01-12-2013 à 22:24:33
Reply

Marsh Posté le 01-12-2013 à 23:50:54    

On a pas fait les parseurs dans le cours, on a juste fait les structures et les listes même pas les classes

Reply

Marsh Posté le 02-12-2013 à 00:19:38    

souschaine n'est pas déclaré dans "struct" ?
 
j'ai beaucoup de mal avec la création de l'arbre et la récursivité.
 
j'ai pas trop compris le probléme avec le cin ?

Reply

Marsh Posté le 02-12-2013 à 09:47:43    

donc tu as fait du C et non du C++...
 
Pour le coup de souschaine, le truc qui pose pb c'est  

Code :
  1. ...
  2.          cin >> Arbre->souschaine;
  3.         if([b]souschaine[b] != 'F')
  4. ...


 
Arbre est un type et non une variable, le deuxième "souschaine" n'est pas déclaré...
 
Bref, tu veux faire trop compliqué, trop vite... Écris moins de code et compile/teste au fur et à mesure...
 
Le "cin >>" renvoie le prochain mot (s'arrête au premier "blanc" ), la virgule est donc "incluse" si elle existe et donc la string ne contient pas toute la chaine jusqu'au retour chariot.
 
La récursivité est LE concept fondamental en algorithmie (qu'on le fasse à la "main" via une pile - stack - ou via appel récursif d'une fonction). Tu as du voir ça en cours, mais sinon va voir sur google, je suis sûr qu'il existe des tutos "visuels" pour ça (vidéo, flash, ...). La recherche google ça fait partie de l'apprentissage aussi
 
En informatique/développement, il s'agit surtout d'un art "d'assemblage", d'où mon idée de te soumettre une "architecture" assez proche de ton code mais surtout plus "formalisée". Approprie la toi (quitte à la réécrire à ta sauce)
 
Cdlt

Reply

Marsh Posté le 02-12-2013 à 13:01:35    

Connaissez vous un bon livre (le meilleur) pour apprendre le C++ (tout en étant un débutant en programmation) ?

Reply

Marsh Posté le 03-12-2013 à 23:46:07    

Vu ton cas, je dirais le site du zero.

Reply

Sujets relatifs:

Leave a Replay

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