|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 1 ![]() |
Bonjour,
Je suis novice dans la manipulation de Smalltalk et je viens demander votre aide. J'ai une chronique de chiffre qui s'étend sur 20 000 valeurs environ. Mon but est de programmer une sonde qui observerait la moyenne de ces valeurs à une date t souhaitée. Par exemple, je fais tourner le programme sur 10 ans donc 3650 step, et il me sort la somme de ces 3650 divisée par 3650. Merci de votre aide par avance. Cordialement Julien |
|
|
00
|
|
|
#2 | ||
|
Nouveau Membre du Club
![]() Inscription : août 2009 Messages : 35 ![]() |
Pour le langage lui même :
- le livre gratuit Pharo by Exemple (en cours de traduction), sinon son petit frère déjà traduit - les tutoriels, en particulier sur ce site - le cheat sheet sur la langage avec les commandes principales - le code existant pour repiquer des idées Pour ton programme, le mieux, sous Smalltalk, enfin Pharo, c'est de commencer par écrire les tests, sous forme de tests unitaires. Avant même d'écrire tes classes, tu crées un test qui ca mettre en oeuvre une fonction de ta classe (qui n'existe pas). Tu lances le test, ça ne marche pas forcement et là Pharo te propose de créer la classe et les méthodes pas à pas. Reste à remplir le fond. Ecrire le code par les tests, ça fixe les idées sur ce que tu veux ou ce dont tu as besoin. Dans ton cas, tu imagines que tu as une classe qui contient des valeurs, disons 10 valeurs fixées toutes à 5 et que tu veux récupérer la moyenne de3 valeurs à partir du 6ième élément. Ca donne en gros: Code :
a+ Vicnet |
||
|
|
10
|
|
|
#3 |
|
Membre éclairé
![]() ![]() Ingénieur développement logiciels Inscription : mai 2008 Messages : 204 ![]() |
C'est pour quel Smalltalk exactement ?
Sinon ce que tu demandes n'est pas super clair... C'est quoi une chronique sur 20 000 valeurs ? Pourquoi avoir besoin de calculer la moyenne à une date t alors que tu as déjà tes 20 000 valeurs ? (je suis pas bien sûr de comprendre le terme "chronique"...). Pour avoir besoin de calculer une moyenne à une date t, il faut que les valeurs arrivent progressivement au cours du temps. Au niveau algorithmie (rien à voir avec Smalltalk en fait...), il s'agirait d'obtenir une valeur, de la stocker, et ainsi de suite au cours du temps, puis à un moment choisi t + t1 on demande au programme de calculer la moyenne, ce qu'il ferait en sommant toutes les valeurs récupérées jusqu'ici et en divisant par le nombre de valeurs reçues pendant t1 - t ? Est-ce que c'est ça ? Une fois que ça sera plus clair on pourra voir pour du Smalltalk (en ce qui me concerne en tous cas).
__________________
[|] |
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Inscription : septembre 2009 Messages : 56 ![]() |
bonjour,
en fait j'ai une chronique de valeurs c'est a dire que j'ai un fichier qui contient 20000 pas de temps auquel correspond une valeur. Ce que je voudrai, c'est lorsque je lance mon programme (visualworks), je puisse obtenir la moyenne de ces valeurs à un temps souhaité. Par exemple je decide de le faire tourner sur 365 jours, et j'obtiens la moyenne à cette date... Est ce plus clair? merci encore |
|
|
00
|
|
|
#5 | ||
|
Membre éclairé
![]() ![]() Ingénieur développement logiciels Inscription : mai 2008 Messages : 204 ![]() |
Bonjour,
Je ne comprend pas l'histoire des jours. Le jour est l'échelle du pas de temps ? Est-ce que ça veut dire que les 20 000 valeurs sont déjà présentes dans le fichier ou bien elles vont y être inscrites progressivement ? Si les 20 000 valeurs y sont déjà, et que l'utilisateur doit juste choisir combien de pas il veut lire (à supposer que un pas = un jour), il s'agit de lire le fichier sur N pas, et de faire la moyenne des valeurs. Dans Visual Works - dans un workspace ça ferait l'affaire pour tester : Code :
- ça fait quelques temps que je n'ai pas touché Visual Works, mais ça doit être à peu près ça (au pire ça s'en rapproche, il suffirait de tester rapidement pour corriger ce que je ne peux pas faire sur ma machine lors de la rédaction de ce post). - encore une fois j'ai supposé beaucoup de choses sur ce qui était demandé... Après en terme de Smalltalk, je pense que tu as là tout ce qui est nécessaire : lecture d'un fichier, faire une boucle simple, utiliser le workspace... Après le mieux est, dans le cas d'un programme plus complexe qu'un simple "script", de s'attaquer à la création de classes, et peut-être faire comme Vicnet le suggère. Juste pour info, la doc de Cincom sur Visual Works est juste énorme pour prendre en main Smalltalk et VW. On la trouve en général à la racine de l'installation de VW dans le répertoire "Doc".
__________________
[|] |
||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : septembre 2009 Messages : 56 ![]() |
merci je vais essayer...
En fait mon fichier .txt dont se sert le programme est fait comme ceci : 1 23 2 25 3 56 .. ... 20000 48 de 1 à 20000 sont des jours(pas de temps en journalier). Ce que je voudrais est le moyenne de la seconde colonne au pas de temps souhaité, par exmeple moyenne à pas de temps 12000... en tout cas merci de votre aide, je vous tiendrez informé du résultat |
|
|
00
|
|
|
#7 | ||
|
Membre éclairé
![]() ![]() Ingénieur développement logiciels Inscription : mai 2008 Messages : 204 ![]() |
Ok, donc en fait le code que j'ai écrit est valable, à un détail près.
Il faut lire la deuxième valeur de la colonne, c'est à dire remplacer : Code :
valeur := (aReadStream upTo: Character cr) asNumber. Code :
Petite erreur cependant, il faut bien évidemment faire, juste après la déclaration de variables (en reprenant l'exemple du post précédent - c'est à dire lire le fichier jusqu'au pas 12000 pour en faire la moyenne): Note sur le message upTo: aCharacter : Lorsqu'on l'envoie à un stream, il se sert du caractère "aCharacter" pour savoir où s'arrêter dans la lecture du stream. une fois arrivé à ce caractère, il renvoie (sous forme d'une string je crois bien) tout ce qu'il y avait avant. Lorsque l'on reprend la lecture, il recommence à lire après ce caractère. Si lors du premier parsing, ce caractère n'a pas été trouvé, le contenu du stream est renvoyé du point courant jusqu'à la fin de celui-ci.
__________________
[|] |
||
|
|
10
|
|
|
#8 | ||
|
Membre éclairé
![]() ![]() Ingénieur développement logiciels Inscription : mai 2008 Messages : 204 ![]() |
C'est à cause du "CR" qui est situé hors du commentaire.
Autre souci, une erreur de typo sur un nom de variable (aFilename au lieu de aFileName) et l'initialisation de la variable de somme. Mis à jour - et testé, ça marche. Après j'imagine que sur un fichier de plusieurs milliers de lignes ça peut mettre quelques secondes. Code :
__________________
[|] |
||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com