Partage

[Exercices] Venez vous entraîner !

Ce mois: Parseur de fonctions mathématiques

27 avril 2008 à 19:38:37

ouf c'est pas encore termine. en cours de route j'ai vu que j'avait des lacunes d'utilisations des classes mais mainteneant sa va. bon je refait le programme...
en esperant qu'il me reste 2 ou 3 jours ^^
27 avril 2008 à 20:20:09

Si tu finis après le premier mai, tu peux toujours confronter ton programme à la solution.
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
28 avril 2008 à 6:15:30

d'accord, mais je le savais :-°
voyons on est le ...28 ><
encore 3 jour, ouf.
30 avril 2008 à 10:51:48

Arg, J'ai pas eu le temps de finir le programme ... :(
30 avril 2008 à 11:19:33

On est le 30avril ou on mon calendrier m'aurait menti? :p
30 avril 2008 à 12:43:59

@ manuman : Dé stress c'est pas un concours :p
T'es pas obligé de le terminer pour la fin du mois tu peux prendre autant de temps que tu veux.
30 avril 2008 à 13:29:16

Mais quand-est ce que la correction sera publiée ?

Parce que vous dites que ça vous prend 40 minutes mais moi je rame :euh: (les chaines de caractères et moi ça fait deux)
J'ai fait un code qui sépare la chaine en mots, puis en lignes, puis revérifie... Mais à la fin je me suis rendu compte que c'était complétement inutile, qu'on pouvait faire plus simple. J'ai donc essayé de faire plus simple, mais ça plantait et maintenant on est le 30 et j'ai au moins dix bugs, donc j'abandonne.

Mais vivement le prochain !
30 avril 2008 à 14:46:58

bon voila moi sa fait la bulle pour une ligne, il me manque l'animal et la separation par ligne.
et il me reste ...
7 H 13 min et 50 sec ^^


edit : animal terminé, separation par ligne = 70 % fini :-°

edit : noon je l'ai fini mais sa s'arrete au demarrage :'( .
et sa ne marche pas avec l'allocation dynamique ><.

re edit : je crois que j'ai trouver, dans un des tutos de nanoc :-°

final => je n'y suis pas arrivé donc je me suis arreté la, reponse envoyé
30 avril 2008 à 19:03:19

@Mafyou : Le nouveau problème sera publié demain et la solution dans les jours qui suivent certainement.

@Gantho: Oui 40min, c'est compter un peu court... Je vais modifier ça. Comme déjà dit le but n'est pas forcément de m'envoyer le code mais surtout de progresser en réalisant des exercices. Si tu penses que ton code est exceptionnel envoies-le moi il pourra servir de correction. Le mieux pour toi serait de le finir sans regarder la solution et après faire la comparaison.

@danman: Ca ne me sert à rien de m'envoyer des codes qui ne marhent pas...

Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
30 avril 2008 à 19:27:53

Citation : Nanoc

Vous aurez alors pendant un mois la possibilité de soumettre vos exercices et la meilleure solution proposée par vous, les zéros, sera donnée comme correction à la fin du mois. Si aucune solution valable n'est proposée, je proposerai un corrigé complet de l'exercice.



Euh... Je ne sais donc pas lire :waw:
30 avril 2008 à 19:33:03

Disons, que j'ai d'autres activités pour remplir mes journées.
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
30 avril 2008 à 20:04:00

:p
Je sais, mais je suis très occupé par la création d'un site que j'ai débuté il y a peu (Allez hop hop hop un peu de publicité :p ) traitant du logiciel Pivot StickFigure Animator.<pub> Je propose :
  • Des tutoriels pour apprendre à s'en servir
  • La possibilitée de poster vos animations
  • Des animations créer par l'AnimStickeur

</pub>
Voilà :-°
30 avril 2008 à 22:51:18

a il marche pas? desoler je regarde sa...

edit : oups, j'ai envoyé la version buggé desoler, je renvoi ...
(tu peut le remarqué car il y a les vecteur ^^)
1 mai 2008 à 8:47:32

Image utilisateur

un petit screen du resultat. j'ai pas envoyé ma solution j'ai changé quelques trucs par rapport a ce qui etait demandé :p (ajout d'une limite reglable de caractere sur une ligne par ex..faute de tps principalement j'ai vu l'exo que en debut de semaine) mais l'esprit y est toujours lol. je ttenais surtt a remercier les auteurs pour les exos. ca permet vraiment d'utiliser la theorie et dc de s'en souvenir bien mieux ^^

vivement le prochain !! :lol:

1 mai 2008 à 11:53:30

Ca devient plus facil à partir du moment où tu récuperes pas les arguments du main imposé, mais ta propre variable crée de tout piece.
1 mai 2008 à 12:59:15

Ben non, si la "variable créée de toutes pièces" est une chaine de caractères, le problème reste entier. C'est pas le problème plus compliqué, et de loin, de récupérer les arguments du main et en faire une chaine de caractère (une bête boucle et c'est fait).
Et puis il a pu aussi vouloir rappeler la phrase donnée en arguments ... on en sait rien :D

J'attends avec impatience le prochain exercice, merci Nanoc (et je suis fan de tes tutoriels, ils m'ont tous beaucoup servi :) ).
1 mai 2008 à 13:55:20

Citation : Xeroth


Et puis il a pu aussi vouloir rappeler la phrase donnée en arguments ... on en sait rien :D



lol mais non en effet j'ai crée une variable directement.en fait je viens de lire le tuto pr récuperer les arguments de main dc je vais tenter comme ca :D
1 mai 2008 à 16:40:54

Exercice du mois de mai 2008



Nom : Le plus grand nombre
Sujet : Classes, surcharge d'opérateurs, tableaux


En C++, comme dans beaucoup de langages, il existe un type permettant de représenter les entiers. Vous l'avez deviné, il s'agit des int. Cependant, ce type est limité en taille. Le plus grand entier que vous pouvez représenter est :
<math>\(2^{32} -1 = 4294967295\)</math>
(En fait ça dépend de votre processeur et de votre OS mais c'est souvent le cas).

Ce nombre est ridiculement petit, il serait donc intéressant de développer une classe permettant de gérer des entiers bien plus grand. C'est ce que je vous propose de faire.

Niveau 1



Le but de cet exercice est de réaliser une classe BigInt qui permet de représenter un nombre entier positif ou négatif de n'importe quelle grandeur. L'idée est de représenter un grand nombre (à l'intérieur de la classe) comme un tableau de short int. Le nombre 12345 sera donc découpé en 5 cases "1","2","3","4" et "5".

Votre classe devra fournir les services suivants:

1) Construction à partir d'un int ou d'une string.

BigInt monEntier("123456789");


2) Surcharge des opérateurs d'addition, soustraction, multiplication, division (entière), modulo, puissance (utilisez l'opérateur ^). Ainsi que les opérateurs ++ et --.

3) Surcharger l'opérateur << pour un affichage en console de votre nombre.

4) Fournir quelques fonctions mathématiques utiles, telles que "valeur absolue" ou "signe"...

5) Fournir des opérateurs de comparaison <,>,<=,>= ,==,!=

Des informations concernant les tableaux dynamiques (si nécessaire) sont disponibles ici.

Pour les différents opérateurs mathématiques, je vous propose d'utiliser les méthodes que vous avez apprises au collège pour faire les calculs à la main.

Niveau 2



Il s'agit exactement du même exercice sauf qu'on utilise les templates pour laisser le choix à l'utilisateur du type dans lequel il veut stocker ses entiers (On impose donc pas short int).

BigInt<int> monEntier("123");
BigInt<short int> monEntier2("456");


Vous avez jusqu'au 31 mai pour soumettre vos réponses à Réponse_Exercices. Si vous faites le niveau 2, merci de l'indiquer dans le titre du MP.

Bonne chance à tous !
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
1 mai 2008 à 16:45:27

cool !!!
allez c'est partie pour coder ^^
mais pouquoi sa serait le 31 mai la fin,alors que la c'etait le 1er mai
sa serai plus logique de mettre le 1 juin ...
1 mai 2008 à 17:09:27

Ah ! Là ça chauffe !
Allez c'est partie pour un codage de folie. (Je vooulais dire aussi que ce TP pourra m'être utile !!!! ) :)

Bonne chance !

A quand le corrigé du premier TP ? :-°
1 mai 2008 à 19:42:41

Petite question: que les entiers naturels, ( > à 0) ou tous les entiers relatifs?)
1 mai 2008 à 19:50:39

S'il demande de fournir des méthodes "valeur absolue" et "signe" c'est qu'il s'agit de relatifs.
1 mai 2008 à 20:38:52

Les entiers positifs et négatifs.
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
1 mai 2008 à 20:59:25

trop simple!

J'avais travaillé sur ca pour la zérolib, il suffit de traffiquer mon code en C89.
1 mai 2008 à 21:11:14

"il suffit de traffiquer mon code en C89"
on ne bricole pas en programmation!
1 mai 2008 à 21:16:08

Pour les opérateurs, le BigInt doit être aditionnable/comparable... avec uniquement d'autre BigInt ou aussi avec des Int,Float,Double ... ?
2 mai 2008 à 0:26:33

oula... mais c'Est un TP universitaire complet sa... enfin tres intéressant par contre... dommage que ma fin de session soit en meme temp que cette exercisse... je le ferai assurément pendant les vaccance d'été :)


Citation : bombadil

Pour les opérateurs, le BigInt doit être aditionnable/comparable... avec uniquement d'autre BigInt ou aussi avec des Int,Float,Double ... ?



ta fonction devra retourner un bigInt alors tu ne peu certainement pas additionner un float ou double... ou alors tu le tronque.... a moin bien sur que tu veuiller aussi créé big float:P et la bonjours la représentation en virgule flotante :p
2 mai 2008 à 0:48:43

Au début tu leur suggères de découper en base 10 (ce qui n'est pas à faire -- découper au niveau des chiffres de la représentation décimale chère à notre civilisation). Mais ensuite, la version template propose le choix.

Je ne suis pas sûr qu'il vont percuter que les nombres doivent être décomposés et stockés en base 2^(8*sizeof(type)).

PS: je doute que la templatisation apporte grand chose. Je soupçonne que "unsigned int" est le meilleur type disponible pour la machine courante.
C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
2 mai 2008 à 8:38:58

Citation : bombadil

Pour les opérateurs, le BigInt doit être aditionnable/comparable... avec uniquement d'autre BigInt ou aussi avec des Int,Float,Double ... ?



Si tu codes un constructeur de BigInt à partir de int, tu n'auras besoin de coder que BigInt == BigInt, puisque la conversion int->BigInt se fera.

@lmghs :

Pour le stockage des nombres, il est clair que ce n'est pas optimal de stocker en base 10 et il est clair également que faire les opérations comme on les fait à la main n'est pas optimal non-plus. J'ai fait ce choix pour ne pas coincer les gens sur l'aspect mathématique. Le template n'apporte pas grand chose (un template "double" avec comme deuxième argument la base dans laquelle découper aurait sûrement été plus intéressant mais aussi bien plus complexe), mais il est là pour ceux qui cherchent à utiliser cet aspect du langage, dans un cas simple.
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.