Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercices] Venez vous entraîner !

Ce mois: Parseur de fonctions mathématiques

Anonyme
12 mai 2008 à 15:07:31

Hiura , deuxième de gymnase.

Mais on s'en fiche :p .

@Nanoc : oui, oui, ... Mais je suis qqn de compliqué. :-°
  • Partager sur Facebook
  • Partager sur Twitter
12 mai 2008 à 15:10:27

deuxième de gymnase? j'ai pas compris :(
sinon a 18ans, on a quand meme des regles de maths assez solide(pour cet exercice ;) )
  • Partager sur Facebook
  • Partager sur Twitter
12 mai 2008 à 17:13:30

Je pensais connaitre un peu la suisse pour y aller régulièrement, mais je connaissais pas le "gymnase" :o
En France ça correspond au deuxième cycle secondaire (le lycée quoi). Merci wikipedia ;)
  • Partager sur Facebook
  • Partager sur Twitter
Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
12 mai 2008 à 22:57:28

le hors sujet! total chaos si tu veux poser des questions personnelles, la mesagerie privée est là pour ça!

Personnellement j'ai essayé de créer un tableau de unsigned int (vector) et d'imaginer un moyen d'utiliser la puissance de calcul du processeur.

Je me suis buté à un problème majeur : comment prévoir le débordement d'un unsigned int. 0xFFFFFFFF + 0x00000001 = 0x00000000... m'euh. Alors que moi je veux avoir 0x00000001|0x00000000. (2 unsigned int dans un tableau. Il faut de l'imagination)

Alors j'imagine qu'il serait possible et plus optimisé de lire et de calculer 3 octets à la fois :

Ansi la valeur maximale serait 0x00FFFFFF + 0x00FFFFFF = 0x01FFFFFE pas de débordement a première vue.

donc si j'ai 2 BigInt de valeur

BigInt a {0xFFFFFFFF, 0xFFFFFFFF}
BigInt b {0xFFFFFFFF, 0xFFFFFFFF}

BigInt c = a + b;


donc logiquement je dois calculer par tranche de 3 octets


+                  |----|
a {0xFFFFFFFF, 0xFFFFFFFF}
b {0xFFFFFFFF, 0xFFFFFFFF}
c {          , 0x00000000}


0x00FFFFFF + 0x00FFFFFF = 0x01FFFFFE

+        |---....-|
a {0xFFFFFFFF, 0xFFFFFFFF}
b {0xFFFFFFFF, 0xFFFFFFFF}
c {          , 0x01FFFFFE}


Ici je ne dois pas oublier la retenue!

0x00FFFFFF + 0x00FFFFFF + 0x000001 = 0x01FFFFFF

+    |--|
a {0xFFFFFFFF, 0xFFFFFFFF}
b {0xFFFFFFFF, 0xFFFFFFFF}
c {0x0001FFFF, 0xFFFFFFFE}


0x0000FFFF + 0x0000FFFF + 0x00000001 = 0x0001FFFF

a {0xFFFFFFFF, 0xFFFFFFFF}
b {0xFFFFFFFF, 0xFFFFFFFF}
c {0x00000001, 0xFFFFFFFF, 0xFFFFFFFE}


Parcontre je n'ai pas de solution pour la multiplication... Je sais qu'il s'agit d'un déplacement en mémoire (bit) de multiplicateur - 1 vers la "gauche". Mais devrais-je le caculer moi-même à coups de << et de >>. Où y a-t-il une meilleure technique? Et encore je ne me souviens pas si je peux "déplacer ma valeur de quelques bits ou seulement par octet.

Pour la soustraction ça va... j'ai juste à inverser l'opérande de droite de l'addition. Et la division ma mémoire me fait défaut alors je vais aller chercher sur le net pour connaitre l'opération à effectuer.
  • Partager sur Facebook
  • Partager sur Twitter
13 mai 2008 à 0:37:04

[EDIT, je suis désolé de venir polluer votre fil, l'exo de mai est un classique dont on ne se lasse pas. Mais les propos que tient Jaloyan dans ce fil m'ont particulièrement exaspéré.]

Citation : Jaloyan1


J'ai aussi le produit


Non mais qu'est-ce qu'il faut pas entendre ! T'as rien du tout, le code du produit de deux grands entiers qui est dans ton zéromachin est MON code, je l'ai posté dans ce fil et je ne t'autorise pas à l'utiliser ni à t'en prévaloir (j'ai modifié le fichier en conséquence). C'est moi qui avais posé la question comme exercice dans le fil que je viens de citer. Pour résoudre cet exercice et un exercice encore plus facile, Jaloyan n'a été capable que de sortir des inepties, comme ici ou encore .
Et le fil que tu avais ouvert ici sur cette question prouve que, comme d'habitude, tu n'avais rien compris au problème et que tu étais complètement à côté de la plaque alors que je t'avais donné de copieuses indications. Non mais ton toupet est incommensurable !

Citation : Jaloyan1


Tu n'aurais pas piqué mon idée?



L'usurpateur usurpé ! Et parano en plus.

EDIT orthographe
  • Partager sur Facebook
  • Partager sur Twitter
13 mai 2008 à 15:48:42

@candide : Je sais que s'est frustrant de se faire plagier sans être cité mais ce n'est pas ici que tu dois réglé le cas.

1) Tu dois communiquer Jaloyan1 par MP (Ce que tu as fait si je comprend bien)

2) Avertis les modos. C'est eux qui pourront, si nécessité il-y-a, faire comprendre à Jaloyan1 que le plagiat est fortement mal vu sur le SdZ.

3) Tu te calme, des scripts kiddies* y'en a sur tout les forums... et ce n'est qu'un forum.

* Je ne sais pas si Jaloyan1 est effectivement un script kiddy. Je n'ai n'y le droit de le juger, n'y l'intérêt d'aller lire ce qu'il s'est dit précédemment. C'est le rôle des modos. Si, par contre, c'est le cas, je suggère fortement à Jaloyan1 de s'excuser [PAR MP] et d'apprendre à citer ses sources.
  • Partager sur Facebook
  • Partager sur Twitter
13 mai 2008 à 18:17:10

et on verra, c'est vrai que j'ai utilisé ta correction pour m'en aider mais je n'ai pas totalement pris la meme chose, et comme je l'ai dit : je ne répondrais pas a cet exo(faute de temps)
J'ai déjà la fonction qui permet de convertir gdentier -> chaine.




Si il y a une chsoe qui m'étonne c'est qu'il m'accuse de triche, alors qu'il n'a aucun droit(il a pas de brevet pour quelque chose qu'il a réinventé pour la dizième fois)
Et il ne sait meme pas ce que j'ai dans mon code source.

C'est comme mettre le code source d'un système d'exploitation et dire dès qu'il y a un projet qui se forme(qui n'est qu'a 1% a peine) dire que il a copié mon code.
Sans savoir rien du tout de mon code.

faut réfléchir petit -1
(c'est meme pas zéro)

C'est pas parce que tu as posté ton code quelque part qu'il faut dire que tous les nouveaux projet qui prévoient un truc comme l'idée que t'a rééééééeu(et qui n'a pas encore fait ceci) ont pris ton code.

Bon j'en ai marre d'écrire pour quelqu'un qui ne mérite pas une explication logique car il est sans doute incapable a réfléchir correctement)

A+ tout le monde et bonne soirée.



EDIT(tiens il y a ed dans ce mot(j'en vois partout ces temps ci)) : pour le t'aurais pas piqué mon idée, faut savoir comprendre aussi les phrases cette idée je ne l'ai pas eu en premier, c'est juste un truc pour le titiller. Cette idée existait surement lors de la création des variables et de leurs limites.
J'ai fixé les points sur les i avec candide qui me semble un peu trop agressif avec les membres du forums, il accuse pour quelque chose qui n'est rien de concret.
Sans me vanter, c'est plutôt a lui de me dire ses excuses.

Faudrait qu'il se calme.

Et si je ne disais pas la vérité? Si je n'avais rien, comme tu ne sais rien sur rien, donc tes accusations sont déplacées.

  • Partager sur Facebook
  • Partager sur Twitter
13 mai 2008 à 18:57:57

Merci d'aller laver votre linge sale ailleurs. Ca m'embêterai qu'un modérateur vienne fermer le topic.

Et si je revois encore ce genre de "bagarres", ça risque bien de démotiver et me pousser à arrêter le concept. Aucun de vous deux n'est à l'origine de la découverte du siècle en matière d'analyse numérique. Ce genre de classes existait déjà avant votre naissance... alors arrêter vos guerres de paternité stupides...
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
13 mai 2008 à 19:29:00

Citation : Nanoc

Merci d'aller laver votre linge sale ailleurs. Ca m'embêterai qu'un modérateur vienne fermer le topic.

Et si je revois encore ce genre de "bagarres", ça risque bien de démotiver et me pousser à arrêter le concept. Aucun de vous deux n'est à l'origine de la découverte du siècle en matière d'analyse numérique. Ce genre de classes existait déjà avant votre naissance... alors arrêter vos guerres de paternité stupides...



je suis totalement d'accord avec toi, ce concept existait dès la création des variables et de leurs limites.

Donc je prie de ne plus faire de remarques désagréables(sauf par mp)

J'ai pris d'ailleurs en compte sur ce topic en gardant des propos qui me sont passés par la tete.

Je crois que l'on va oublier ceci et résoudre le reste par mp.

Merci de calmer le jeu, je n'oublierais pas ce geste.
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2008 à 22:08:50

Je trouve l'exercice trop dur :'(
Je vois même pas comment gérer le dépassement... Ouinnn
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
16 mai 2008 à 22:24:14

tu fait un vector de chifre, est tu met un chiffre par 'case'
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2008 à 22:43:34

Au CP/CE1, il y a retenue à quel moment ?

EDIT: en français, c'est mieux.
  • Partager sur Facebook
  • Partager sur Twitter
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
16 mai 2008 à 22:50:23

pourquoi tu dis ca?
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2008 à 23:50:00

Parce que, ce que Nanoc attends de toi, c'est exactement la même chose.
  • Partager sur Facebook
  • Partager sur Twitter
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.
16 mai 2008 à 23:55:49

Citation

tu fait un vector de chifre, est tu met un chiffre par 'case'


Mais lorsque que mon vector de chiffre est dépassé... Chiffre halucinant de n'importe quoi lol
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 0:15:41

Citation : Mafyou

Citation

tu fait un vector de chifre, est tu met un chiffre par 'case'


Mais lorsque que mon vector de chiffre est dépassé... Chiffre halucinant de n'importe quoi lol



a ce moment tu te heurte a un probleme matériel... ajoute 1 Go de RAM et tu devrai être bon pour un bon bout :p ... enfin le but de l'exercisse est principalement d'etre capable de stocker un nombre plus grand qu'un long mais de la a vouloir entrer un nombre plus grand que ta RAM j'ai des doute...
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 4:33:39

Lol ;) C'est claire que 2x1024Go de GSkill Pc8500 ça va être dure =)
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 7:36:58

1024GO, tu trouves ou tes terra octets?
Moi ca dépasse pas les 756 Mo.
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 11:44:15

L'idée est effectivement de réaliser un tableau dynamique en mettant dans chaque "case" du tableau un chiffre entre 0 et 9 (compris) exactement comme quant tu écris un nombre à la main en fait.

Pour l'addition et la multiplication il te suffit d'appliquer la méthode apprise au collège avec les retenues et tout ça.

Il est clair que tableaux ont une limite maximale, mais c'est le cas qvec nimporte quelle type de manière de stocker les nombres.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
Anonyme
17 mai 2008 à 12:21:31

ok je me lance un peu tard dans l'exo du moi :D
ma plus grande crainte : la division. Il faut deja savoir la faire à la main :-°
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 17:35:55

moi j'ai une autre méthode toute simple
un malloc de 1048576 bytes

ca promet pour les nombres.

On peut en stocker de très très grand



bref ca fait :

MIN = 28388608 / 2
MAX = 28388608 / 2 -1

C'est pas grand comme nombre? :-°
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 17:41:33

... Ce n'est pas comme l'allocation était le point le plus difficile.
  • Partager sur Facebook
  • Partager sur Twitter
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
17 mai 2008 à 17:42:54

Donc tu alloues [ à la C ] 1 Go. Et si je veux utiliser ton programme sur un PC qui n'a pas 1 Go? C'est pas terrible comme technique. [ Et je ne vois pas le lien entre l'allocation et l'utilisation. ]
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 18:13:08

Quel intéret d'allouer toujours 1Mo, si par exemple tu veux stocker juste le nombre "2" ?
-> Ta solution n'est pas optimale.

D'autre part, tu t'es planté dans tes calculs, car un byte permet de stocker les nombres de 0 à 255, tu pourrais donc théoriquement stocker des nombres encore plus grand que ce que tu as écrit.

P.S.: <math>\(2^{8388608} / 2 = 2^{8388607}\)</math>
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
17 mai 2008 à 19:10:41

oui mais le /2 c'est bien pour montrer la moitié en positif, la moité en négatif.

et en positif il y a le zéro donc c'est le -1

Il faut multiplier par 8 pour connaitre le nombre de bits possibles.

2 exposant le nombre de bits.

Ce qui fait bel et bien le nombre super grand.
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 19:30:41

...
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
17 mai 2008 à 19:33:33

euh je reposte ici pour dire que ca serait mieux si il y avait un exo toutes les 2 semaines avec 1 mois de possibilité de réponse.

Comme ca plus de diversité et on pourrait faire plus d'exos que l'on pourrait faire.
Et tu peux baisser légèrement le niveau?

Car la il y en a pas beaucoup qui peuvent le faire, moi je ne pourrai pas sans aide.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
17 mai 2008 à 20:26:55

En ce jour, les exos tombèrent du ciel. o_O

[ Google ]
  • Partager sur Facebook
  • Partager sur Twitter
17 mai 2008 à 21:00:57

Les prochains exercices seront en effet plus faciles.
  • Partager sur Facebook
  • Partager sur Twitter
Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
17 mai 2008 à 21:37:14

ouf peut etre que je réussirai les prochains exos.
Mais faut avoir une sacré logique avec les algos dans tes exos. Mais j'adore, je les fais mentalement en essayant de trouver mais je sais que je n'aurais pas le temps vu le niveau de difficulté.
C'est pas des heures de travail c'est des jours qu'il faut.
  • Partager sur Facebook
  • Partager sur Twitter