Partage

[Exercices] Venez vous entraîner !

Ce mois: Parseur de fonctions mathématiques

22 mai 2008 à 21:39:18

moi je dirai que tu ferai mieux d'abandonner ! XD

non on peut faire plein de truc avec un minimum de logique en informatique mais je dirais qu'une certaine envie d'aller plus loin en maths pour faire quelque chose de bien c'est pas facultatif (du genre un bon mandelbrot c'est joli mais sans les maths c'est un peu impossible)

mais c'est facile de faire un petit jeu à ton niveau (seconde)
22 mai 2008 à 21:48:04

...
Dois-je abandonner ?
J'ai genre 7- 8 de moyenne...
Je suis surtout nul en géométrie et moyennement nul en calcul.
22 mai 2008 à 22:11:16

Citation : Jaloyan1

Lecureuil : justement si t'est nul en math , je te conseille de faire de la programmation ! C'est idéal, car tu verras au début ca sera un peu plus dur que pour un génie des maths mais après tu augmentera ton niveau de logique et donc +de logique = + d'aisance en maths.



+1
Je suis actuellement en 3e, l'année dernière j'avais dans les 15 en géométrie, et les démonstrations j'aimais pas trop ^^ .
Depuis que je fais de la programmation, je trouve la manière d'y arriver bien plus facilement, et j'ai (presque :-° ) toujours dans les 18-19 en géométrie (désolé si tu as l'impression que je me vante :euh: , c'est pour te montrer à quel point faire de la programmation c'est utile :) ).

Et surtout n'abandonne pas la programmation si tu est nul en maths :colere2: .
T'en a pas forcément besoin, juste de la logique.

Et le plus important : il faut PRATIQUER, PRATIQUER, PRATIQUER, et encore PRATIQUER ! (me suis-je bien fait comprendre :D )
22 mai 2008 à 22:19:01

ben la programmation est basée sur la pratique.
Après il y a certaines méthodes sur le site du zéro qui sont contestées mais bon je trouve que le cours du site du zéro est très bien approché pour un débutant qui ne savait rien a l'informatique.
Ca prends juste beaucoup de temps sur les cours.
Avant je programmais que pendant les vacances, mais j'ai tellement progressé en création d'algorithme(logique quoi) j'ai commencé a faire les maths plus vite qu'avant, avant pour résoudre une équation(j'était en 6e quoi) il me fallait 2 minutes.
Maintenant (4e) je le fais en 5 secondes et quelques(1 inconnu évidemment pour 2 inconus ca sera 13(environ évidemment) secondes.).

La programmation est que de la pratique.
Au fait, généralement dans ton apprentissage, ca comence souvent ainsi, on commence on aodre! ensuite on s'emmerde et on laisse la programmaiton pendant quelques semaines ou mois et ensuite on revient et on ne se pose pas la question de si ca me plait ou non, on le fait sans réfléchir comme se brosser les dents par exemple. Je pense qu'il n'y a pas que moi qui a eu des pics et des creux.
La programmation, le plus chiant c'est sa syntaxe, tu dois apprendre plein de nouveaux trucs(c'est moins dur qu'une langue étrangère mais quand meme, c'est pas comme apprendre a compter) Tu dois apprendre plein de trucs et des fois tu as l'impression que ton cerveau va exploser tellement que tu sauras des trucs.
22 mai 2008 à 22:32:45

En effet j'ai eu un "trou" d'un an sa m'avait soolé mais la j'ai de nouveau envie !! j'attends les vacances !
Merci beaucoup pour vos conseils !!
23 mai 2008 à 8:37:54

Citation : Jaloyan1

TiPouss : il faut compter 2 ans(pour certains ca peut aller plus vite) de formation pour assez bien maitriser le C.
Je te conseille de pratiquer pour gagner de l'experience et devenir plus fort(a force de trainer sur les fofo sur sdz, je commence a comprendre certains points encore mystérieux du C)



... C'est pas sur le SdZ (malgrè tous les aspects positifs de ce site) que tu vas "maîtriser" complètement le C. Le tutoriel officiel ainsi que tous les tutoriels des membres sont très loin de présenter tout le C. De même pour le C++. Comment peux-tu dire qu'il faut 2 ans pour connaître le C ? Tu n'en as apparement aucune idée.

Par contre, je te rejoins sur la deuxième partie de ton intervention. Pratiquer est la seule bonne manière de progresser.

@TiPouss:
Je ne sais pas combien d'année il faut pour bien programmer, ça dépend énormément du temps consacré, de ton niveau en informatique avant, de ton niveau mathématique...
En ce qui concerne les exercices que je propose ici, tu devrais y arriver sans problème, si ta formation est sérieuse. En tout cas, il y a tout sur ce site pour pouvoir s'en sortir.

@Lecureuil:
Les maths sont un aspect important de la programmation. Cependant, ce n'est pas forcément les maths appris au collège (équations, fonctions, ...) mais plutôt de la logique et de la géométrie si tu veux faire de la 2D ou 3D. Cependant, cela peut être une motivationn pour progresser en maths.
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
23 mai 2008 à 17:13:21

Tout d'abord,merci à tous pour vos réponses.

Ca encourage à persévérer...

Mon niveau en Maths est Terminale S Spécialité Maths.J'adore les Maths en particulier le coté calcul,algorithme,fonctions...J'ai aussi une passion pour la logique (j'adore m'en servir,mais je la pousse tellement que parfois on ne me comprend plus ! )

Rappel : je suis dans la vie active depuis bientôt 8ans et à dire vrai,les maths me manquaient tellement que j'avais envie de les lier avec mes aptitudes en logique,ce qui m'a poussé vers cette formation en Analyse et Prog en C++.

Niveau formation,je ne l'ai pas trouvé vraiment axée sur le C++.
J'ai appris à créer des bases de données,à analyser un sujet avant de programmer (décomposition des étapes à suivre) puis la base du langage C++ et eu 2 - 3 applications a faire,le reste ne concernait que l'environnement de l'ordinateur (Matériel et Logiciels).

Je vais déjà m'essayer à ces exercices (merci d'ailleurs à Nanoc pour cette fabuleuse initiative) et voir ce que je suis capable de faire.Ensuite,travailler plus sur l'apprentissage du langage et de son utilisation pour progresser.

Merci encore pour vos réponses ;)
23 mai 2008 à 17:22:46

Citation : TiPouss

Niveau formation,je ne l'ai pas trouvé vraiment axée sur le C++.
J'ai appris à créer des bases de données,à analyser un sujet avant de programmer (décomposition des étapes à suivre) puis la base du langage C++ et eu 2 - 3 applications a faire,le reste ne concernait que l'environnement de l'ordinateur (Matériel et Logiciels).



Normal le C++ est un outil pour développer un logiciel. Un logiciel c'est une solution à des demandes, besoins, problèmes. La programmation n'est que la phase finale d'un long processus. On a tendance à l'oublier. Les programmeurs sont des secrétaires d'analystes qui produisent le code demandé.

[EDIT] Oups, j'ai oublié que j'étais dans le sujet des Exercices. Désolé pour cette réponse hors sujet. Je suggère de déplacer la discussion sur un autre sujet[/EDIT]
23 mai 2008 à 18:38:43

Donc en gros moi c'est mort, je n'aime pas la géométrie et je suis pas fort dedans...
23 mai 2008 à 19:00:08

ben ca va venir justement, car c'est la manière de pratiquer les maths sans t'en rendre compte!

Moi aussi je déteste la géométrie, et pourtant j'adore la programmation, essaie d'abord et ensuite tu peux juger.
23 mai 2008 à 19:32:11

Ok, merci, tu es bien le seul à me rassurer...
23 mai 2008 à 19:53:54

MOi je crois juste qu'il faut arreter d'être insécure....c'est sur que comparer un programme windows, le petit texte dans la console est décourageant.
Mais fais les exercices, tu seras plus aptes a juger par après si tu veux continuer ou pas. Sache que la programation n,est pas seuleument un travail de secrétaire, mais aussi un outil créatif (ouioui :p ), tu peux par exemple,creer des périhpériques, creer jeux, où juste des trucs loufoques....
C'est juste l'insécurité qui me bloque pour avancer.
(a merde, faire une classe comme ca, qui ferais sa sa serait vraiment trop long, j'ai pas les compétences, j'abandone, je passe à une autre classe)
Je suis comme ca moi.
23 mai 2008 à 20:35:32

@Lecureuil :
Je fais te faire un petit résumé de mon message du dessus :

La programmation va BEAUCOUP t'aider en géométrie au niveau du raisonnement et de la logique.

N'abandonne pas la programmation parce que tu es nul en maths, tu n'en a pas besoin obligatoirement, sauf si tu fais des programmes complexes avec des collisions en 3D, des chutes, et autres programmes ultra-complexes :D (et en plus de ça il existe des librairies qui font tout à ta place :) !)...

Et il faut pratiquer en programmation, c'est de là que viennent les progrès. Fais des tests, des exercices (c'est d'ailleurs pour cela que Nanoc a créé ce topic ;) ).
23 mai 2008 à 20:42:12

Ok merci, et pour bien me faire progresser dans les maths, il faut donc plutôt que je fasse des trucs en 3D ?
23 mai 2008 à 20:52:08

Non pas forcément.
Je te dis juste que la programmation améliore le raisonnement et la logique.

Cela ne pourra pas t'aider à comprendre les théorèmes et tout ça (c'est le boulot de ton prof de maths :lol: ), mais si tu as compris ces théorèmes tu reconnaîtras bien plus facilement une situation où tu peux appliquer un théorème particulier pendant une démonstration (tu me suis là :D ?) .
A force de faire de la programmation, tu ne te rendras même plus compte de tes progrès et ça viendra naturellemennt ;) .
23 mai 2008 à 20:57:28

La 3D c'est impossible à faire quand tu débute en C/C++ !
Commence, fais le mario sokoban proposé par matéo, puis un petit pendu et continu en utilisant la SDL :-)
23 mai 2008 à 21:26:16

Je commence direct par le C++ avec un livre.
Sinon pour info et c'est véridique : depuis la 4ième (inclut) j'ai les plus nuls profs de math (4ieme et 3ième la même puis 2nde de nouveau la plus nulle).

Sinon si vous pouvez jeter un coup d'œil sur le sommaire du livre pour voir si il a l'air bien fait^^

Et encore une fois, merci pour tout !
23 mai 2008 à 21:30:49

<HS pourNanoc="désolé">
Le rapport avec la géométrie, ce n'est éventuellement que pour des domaines très précis de rendu graphique de scènes 3D et autres jeux.

Le rapport aux maths, c'est la logique. Et ça c'est impératif pour un développeur.

Il y a bien longtemps, je profitais du BASIC pour tracer des courbes (et autres surfaces) mathématiques. Et sorti de ce genre de choses, je vois difficilement de rapport direct entre les maths et le développement. Aujourd'hui, il ne reste que l'esprit analytique, de construction (qui relèvent de la logique) à avoir un profond rapport.

@Lecureuil: bof pour le sommaire. Les pointeurs sont vus trop tôt pour un ouvrage de C++.
/me qui préfère toujours Accelerated C++, et qui a un bon a priori sur le livre de Michel Michaud.
</HS>
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.
Anonyme
23 mai 2008 à 22:39:37

Le langage C++ de Bjarne Stoustrup^^
23 mai 2008 à 23:05:54

Moi perso je pratique plus le C car il y a des programmeurs que j'apprécie plus et la langue je l'ai déjà apprise, pour éviter qu'elle s'efface a cause des cours, j'ai décidé de faire qu'un seul langage au collège et peut etre un 2e au lycée.
Mais bon entre le C89 et le C++ il y a pas grand chsoe de nouveau, juste la syntaxe change, quelques principes et c'est tout, tu as quand meme des notions de C qui s'appliquent dedans, moi la seule source que j'ai c'est le tuto de mateo et des programmeurs du site du zéro avec leurs site qui me permettent d'approfondir et des projets qui me permettent d'avoir une expérience(clin d'œil a ed et a mon équipe géniale qui m'apprend plein de choses).

Bref l'important c'est aimer la pratique, avoir de la curiosité(contrairement a ce que l'on dit, ce n'est pas du tout un vilain défaut, mais au contraire, c'est la vertu qui ouvre la porte de l'intelligence)
23 mai 2008 à 23:20:23

Citation : Jaloyan1

Mais bon entre le C89 et le C++ il y a pas grand chose de nouveau


Pas vraiment non.
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.
24 mai 2008 à 0:56:53

Citation : lmghs

Citation : Jaloyan1

Mais bon entre le C89 et le C++ il y a pas grand chose de nouveau


Pas vraiment non.

on n'arrete pas de deconner là :waw: !
joylane, tu dis du n'importe quoi, reseigne toi toujours avant de dire des betise du genre: programmer en C++ differe completement de la programmation en langage imperatif comme le C( bienqu'on puisse faire de l'objet en C, c'est pas vraiment la classe <joli le jeu de mot ^^ >)
24 mai 2008 à 7:34:34

Euh total chaos, je ne classifie pas sur la syntaxe, ni si la différence entre printf et votre printf(qui est totalement différent)
Mais je juge sur les principes de bases, créer des fonctions(qui est quand meme la base du C et du C++), des variables de types int short char, long ,float,double.
Chez vous il y a le bool qui s'ajoute(que l'on pourrait représenter par un int).
Il y a plein de principes pareils, boucles, conditions, booléens.


Moi quand je compare les langages, je les compare sur leurs principes, pas sur leurs syntaxe.
24 mai 2008 à 9:46:42

Citation : Jayolan1

Mais je juge sur les principes de bases, créer des fonctions(qui est quand meme la base du C et du C++), des variables de types int short char, long ,float,double.



Citation : Jayolan1

Il y a plein de principes pareils, boucles, conditions, booléens.



J'aurais envie de dire que ça ne vaut pas la peine de s'enfoncer dans le HS pour raconter ce genre de conneries. Jaloyan1, si on écoute ce que tu dis tous les langages de programmation sont très proches les uns des autres (Basic, Pascal, Delphi, C, C++, Python et j'en passe..)
Même si globalement il est vrai que l'on dispose de structures de contrôle proches dans tous ces langages (tests, boucles..), ils n'en restent pas moins totalement différents. Dire que le C89 c'est à peu près pareil que du C++ c'est à mon avis ignorer 95% de ce qu'est réellement le C++. A mon avis tu ne connais pas suffisamment ces langages pour émettre une opinion.
Je propose que le troll s'arrête ici.. Si vous voulez continuer de batailler sur ce sujet, créez un nouveau sujet ou faites ça par MP... Il faut arrêter de pourrir ce sujet avant qu'un modérateur ne passe par ici.. s'il vous plait !
Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
24 mai 2008 à 13:36:00

Merci Inakoll

Après cette parenthèse,je propose de nous recadrer sur le sujet d'origine : les exercices...

Faisons honneur à Nanoc qui attend des réponses concernant l'exercice en cours...
30 mai 2008 à 19:48:21

Au vu du plus petit nombre de réponse ce mois, les exercices suivants seront plus courts et moins axés sur les mathématiques. Il faut encore que j'ajuste un peu le niveau.

Comme pour moi c'est les vacances qui commencent, je pense que je vais proposer un exercice chaque milieu du mois également, tout en laissant le délai de réponse à un mois.
L'exercice du milieu du mois sera certainement plus technique que cexu des débuts de mois, qui devraient être des "classiqies" de la programmation.

A bientôt ! (Demain en fait...)
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
30 mai 2008 à 19:53:05

ok j'attends le suivant, j'espère un truc légèrement plus simple.
30 mai 2008 à 20:33:31

Ouai, un truc plus simple =)
31 mai 2008 à 18:47:25

moi je veux bien un truc assez simple aussi packe je débute vraiement en C++ donc voila ^^
1 juin 2008 à 10:59:08

Exercice du mois de juin 2008



Nom : Compression RLE
Sujet : Fichiers, chaînes de caractères


Introduction



Dans le monde de l'informatique, une partie de la recherche est consacrée à la compression des données pour minimiser l'espace disque nécessaire. Vous connaissez très certainement les formats zip, rar ou autres tar.gz .
Ce que je vous propose ce mois, est de créer un algorithme de compression de fichiers textes en utilisant l'algorithme de compression RLE (Run-length-encoding). Cet algorithme est généralement utilisé pour compresser les images, par exemple les .bmp ou les .pcx utilisent parfois cet algorithme.
La gestion d'image étant souvent complexe est difficilement faisable de manière standard, je vous propose plutôt de vous attaquer au fichiers textes.

Présentation de l'algorithme



Imaginons que nous ayons la chaîne de caractère suivante :

CCCCCCBBBCCU333ZZZZ@YYYYYYYYYYYYY


Elle prend beaucoup de places et on remarque que certains caractères se répétent, on pourrait donc gagner de la place en indiquant chaque fois le nombre de caractères qui se répétent. Cela donnerait (les espaces sont juste là pour rendre le découpage plus clair) :

6C 3B 2C 1U 33 4Z 1@ 13Y


On a gangé de la place, mais on est face à un problème, comment savoir ou découper la chaine pour la décompresser. Le problème se pose avec la présence des chiffres. Pour cela, on va choisir un caractère spécial, le flag, généralement un caractère que l'on trouve rarement dans un texte, par exemple @. Et on va chaque fois écrire :

nombre_de_fois_que_le_char_apparait @ le_char

ce qui donne :

6@C 3@B 2@C 1@U 3@3 4@Z 1@@ 13@Y


Et on est face à un nouveau problème, comment gérer les cas ou le flag apparait quand même dans le texte à compresser. Dans ce cas particulier, on choisit la syntaxe spéciale "flag flag":

@ @

Ce qui donne :

6@C 3@B 2@C 1@U 3@3 4@Z @@ 13@Y


Vous remarquerez également que dans le cas où il n'y a que 1 ou 2 caractères, la compression n'apporte rien, elle agrandi même la longueur de la chaîne. Donc dans le cas où un caractère ne se répète pas ou seulement une fois, on ne le transforme pas :

6@C 3@B CC U 3@3 4@Z @@ 13@Y


Et onn arrive façe au dernier problème, comment savoir que le dernier "13@y" est un bloc et pas deux blocs "1" et "3@y". Pour cela, on choisit de ne compresser que les suites de 9 caractères en une seule fois et de compresser le reste en un deuxième bloc.

6@C 3@B CC U 3@3 4@Z @@ 9@Y 4@Y


6@C3@BCCU3@34@Z@@9@Y4@Y


La chaîne est ainsi beaucoup plus courte qu'au départ et on a perdu aucune information. Pour la décompression, cela se passe exactement de la même manière.

Votre programme



Le programme que vous devez réaliser devra donc permettre de compresser et décompresser un fichier texte en utilisant l'algorithme proposé ci-dessus. En utilisant, par exemple les paramètres du main.

monProgramme -c monFichier.txt
Compression en cours...
Compression terminée sans erreur.


et pour la décompression :

monProgramme -d monFichier.txt
Décompression en cours...
Décompression terminée sans erreur.


Vous pouvez également laisser le choix du flag à l'utilisateur.

Je vous conseille de commencer par essayer de compresser une string, celle de la présentation par exemple, puis ensuite de vous attaquer à un fichier en le compressant ligne par ligne. Pour les fichier, je vous invite à (re-)lire le tutoriel de Xavinou.

Bonus 1: Indiquez le taux de compression (ou décompression du fichier).

monProgramme -c monFichier.txt
Compression en cours...
Compression terminée sans erreur. Le fichier fait 43% de sa taille originale.


Bonus 2: Pourquoi ne pas utiliser les exceptions pour gérer le cas des fichiers qui sont mal formatés (qui contiennent des erreurs).


N'hésitez pas à poser des questions si la description de l'algorithme n'est pas suffisament claire !

Vous avez jusqu'au 30 juin pour soumettre vos réponses à Réponse_Exercices.

Bonne chance à tous !

EDIT : Modification de la syntaxe de l'encodage du flag.
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.