[scheme] Renom: Ajouter une ligne à une matrice

Renom: Ajouter une ligne à une matrice [scheme] - Divers - Programmation

Marsh Posté le 20-01-2005 à 22:37:44    

Bonsoir,
 
  Voilà, je me décide enfin à ouvrir un sujet en espérant que quelqu'un puisse m'éclairer. Tout d'abord, je débute en programmation (niveau éstimé "grosse tanche" ), mais j'essaye de le faire pour le plaisir.
 
 Voici mon projet de départ: travaillant dans des écoles avec des enfants en difficulté, je voulais me faire un logiciel me permettant d'organiser les informations (nom, âge, tests passés,...) relatives à chaque enfant. Après maintes reflexions, j'ai opté pour organiser ces données en..."matrice". C'est à dire que le fichier de départ ressemble à ça:

Code :
  1. #(#("Nom1" "Prénom1" "Age1" )
  2.          #("Nom2" "Prénom2" Age2" )
  3.        )


ouups erreur de commande désolé  :D  
 
J'ai réussi tant bien que mal à à pouvoir afficher les donnée dans une interface graphique en donnant le nom de la personne. Si vous voulez un aperçu de mon niveau prog voilà mon "algo":

Code :
  1. ; je mets a en définition pour pouvoir le réutiliser lors de l'ecriture
  2. (define a
  3.   (send choix_ecole get-string-selection))
  4. (define database
  5. ;(begin (let((a(send choix_ecole get-string-selection)))
  6.           (call-with-input-file (build-path "/home/gilles/programme_ecole/données/"a )
  7.   read)
  8.          );))
  9. (send intro show #f)
  10. ;recherche de la liste des noms
  11. (define (liste-noms)
  12.   (do((i 0(+ 1 i)))
  13.     ((= i (vector-length database)))
  14.     (printf "~s "(vector-ref(vector-ref database i)0))))
  15. ; recherche de toutes les infos
  16. (define x 0)
  17. (define y 0);pour utiliser lorsque je devrai sauvegarder la ligne puisque je remets x à 0
  18. (define(recherche)
  19.   (let((a (send nom-enfant get-value)))
  20.     (if(equal? a (vector-ref(vector-ref database x)0))
  21.        (begin(send prénom-enfant set-value (vector-ref(vector-ref database x)1))
  22.              (send naissance set-value(vector-ref(vector-ref database x)2))
  23.              (set! y x)
  24.              (set! x 0))
  25.        (if(eq? x (-(vector-length database) 1))
  26.                (begin(send nom-enfant set-value "inexistant" )
  27.                      (set! x 0))
  28.                (begin(set! x (+ 1 x))
  29.                      (recherche))))))


 
Le problème est que je n'arrive pas à enregistrer une nouvelle entrée. J'ai lu toutes les docs, faits moults essais, essayé de "piquer" du code,rien n'y fait, ça veut pas, je ne comprends pas. Quelqu'un peut-il m'aiguiller ?


Message édité par le_courtois le 20-02-2005 à 20:56:47
Reply

Marsh Posté le 20-01-2005 à 22:37:44   

Reply

Marsh Posté le 20-01-2005 à 23:46:51    

Salut, je comprends pas tres bien ton probleme, tu veux enregistrer un nouvel "enfant" dans ce cas la il faut utiliser (send enfant set-value "valeur" ), c'est ca qui marche pas ?
 
Et puis c'est quoi au juste un enfant ? une classe ?  
 
Autre chose, si tu veux faire des tableaux de pointeurs sur objets (à la C++), à ta place je choisirai plutot des structs (define-struct), la couche objet de Scheme est lente et tres foireuse ... tandis que les structs sont plus rapides et moins lourds dans la syntaxe.
 
Et aussi :

Code :
  1. (define database
  2. (begin (let((a(send choix_ecole get-string-selection)))
  3. (call-with-input-file (build-path "/home/gilles/programme_ecole/données/"a )
  4. read)
  5. ) ...


 
Ici le begin ne sert à rien, fait une fonction plutot (define (set-database data ...) corps), et surtout ton (begin(let ....)) il est censé renvoyé quelle valeur à database?
           
 

Reply

Marsh Posté le 20-01-2005 à 23:52:34    

Exemple pour ecrire dans un fichier les 7 premieres lettres:
 

Code :
  1. (define (ecrit name)
  2.    (call-with-output-file name
  3.       (lambda (p-out)
  4.         (for-each (lambda (i) (fprintf p-out "~a" i))
  5.             '(a b c d e f)))
  6.    'replace)) ; ou 'append pour rajouter

Reply

Marsh Posté le 21-01-2005 à 00:08:58    

Merci,
 Je vais tenter de te répondre au mieux.
-> Les structure, j'y ai pensé, mais le même problème s'est présenté et surtout je n'ai jamais réussi à les intégrer dans mon interface graphique.
-> Un enfant, oui peut être une classe (au sens objet du terme ). Euh la prog objet,...un jour.
-> le (begin(let...)): en fait pour ne pas trop surcharger d'enregistrements mes fichiers, sachant que j'ai 12 écoles, j'ai fait une première page me permettant de selectionner dans quelle école je cherche mon gamin. Une fois cliqué dans ma liste, j'envoie la fenêtre principale qui me "prend" le choix de l'école et ouvre le fichier correspondant : la valur de a. C'est ma version de "l'adressage dispersé".
-> Ok pour le begin en trop je vais tâcher de faire plus propre.
-> En fait ce que pensais faire c'est, en cas de création de nouvel élève, de passer en revue tous mes champs (par un get-value), créer un vecteur et surtout l'enregister sur mon dique dur dans mon fichier en y rajoutant une ligne. C'est au niveau de l'écriture que je coince. Le (send enfant set-value "valeur" ) va-t-il écrire automatiquement dans mon fichier (on va dire texte) ? Ne me dis pas oui, des heures de galères perdues.  
Voilà ai-je été clair ?
 
Edit: tu es plus rapide que moi. Je viens de tenter ton code. Dans ma console, me prend bien le premier champ, me le met entre guillemets, mais m'insulte en me disant "call-with-output-file: except type<procedure (arity 1)>as 2nd argument: given #<void>; other arguments where /home/....". C'est ça que j'arrive pas à régler, je suis sûr que ça peut te paraître simple, mais j'ai du bloquer.


Message édité par le_courtois le 21-01-2005 à 00:23:17
Reply

Marsh Posté le 21-01-2005 à 00:47:05    

Oui ca va :)  
Pour l'ecriture evidement non. Mais tu pourrais tres bien faire une fonction qui le fait (genre store-enfant qui, une fois l'enfant crée met sa description dans un fichier).
 
Je verrai bien la chose comme ca : une A-liste (exemple '((1.x)(2.y)(3.z)) ) qui represente toutes les écoles ou chaque cdr d'un element renvoi un vector (representant une ecole) puis chaque element du vector sera un enfant (une liste ou bien un objet enfant) ... Pour mettre tout ca dans un fichier il suffira de choisir une école avec un parcours de liste puis donner l'indice de l'enfant et balancer se vector-ref en tant qu'argument d'une fonction qui ecris dans un fichier ... enfin bon c'est à froid :)
 
 
Je ne veux surtout pas remettre en cause la structure de ton prog, c'est juste un avis. Mais je comprend pas tres bien les vector de vector ...  
 
Le probleme sera de garder une coherence entre ton fichier et les données dans ton prog pour cela il faudra melanger un peu les fonctions de lecture (genre trouver la string "Nom" )
puis d'ecriture.  
 
Si tu veux des ecoles au capacités infinies regarde du coté des (make-hash-table) :)


Message édité par Chronoklazm le 21-01-2005 à 00:51:35
Reply

Marsh Posté le 21-01-2005 à 00:52:26    

Ton a renvoi #void, l'arité d'une fonction et son nombre d'arguments ...


Message édité par Chronoklazm le 21-01-2005 à 00:53:17
Reply

Marsh Posté le 21-01-2005 à 01:15:58    

Vraiment merci,
 J'ai un peu tardé à te répondre, mais j'expérimentait ta fonction (ecris name). Je progresse.  
 
Si j'ai bien compris, tu me propose de faire une liste de vecteur plutôt qu'un vecteur de vecteur ? Le problème, c'est que je crois que mes structures mentales m'interdisent les listes et encore plus les a-list, mais pourquoi pas retenter.L'histoire, c'est que je suis tombé sur un livre "Programmez avec scheme de J. Chazarin" avec un paragraphe sur les matrices. Là tout c'est éclairé et j'ai cru comprendre qq chose. Je me suis dit qu'avec cette technique, si j'arrivais à fixer un x (les colonnes) je pouvais faire ce que je voulais sur les y (les lignes).
 
  En fait, je fais comme je peux et tente de faire au fur et à mesure que je comprends certaines choses. C'est mon deuxième programme, le premier était un "casse-brique" en mode texte sur...Oric 1. Donc concernant la structure de mon programme, si, si, tu peux ! Sinon je ne posterai pas. Cependant, je ne suis pas certain de pouvoir te suivre.
 
  Tu m'es quand même plus utile que je l'ai été pour toi. Au fait t'en es où ?
  Bon je vais tester un peu tout ça, il me faut du temps pour que les infos trouvent un neurone valide.
Je viens de comprendre ce que tu me proposais dans le deuxième paragraphe de ton dernier post. Excellent, vraiment intéressant. Mais toujours le même problème de compétence  :sweat: .


Message édité par le_courtois le 21-01-2005 à 01:22:26
Reply

Marsh Posté le 21-01-2005 à 18:19:04    

Bein j'ai rendu mon projet le lundi dernier, on verra ce que ca donne ... http://corbieres.unice.fr/~bodnart [...] _FINAL.zip
Si veux te faire un petit prog en basic pour te detendre :)
Pour les frames j'ai lassé tomber, ca devenait trop gore (le text% était en fait en meme temps un dc, un canvas et un objet color de la framework.ss). Je me suis plus concentré sur le coloriage de la syntaxe et l'implementation du vrai SUB en basic (donc fallait faire un vrai "return" en Scheme) ... ahh si seulement j'avait eut deux trois jours de plus :(
 
Au fait tu l'a chopé ou le Chazarain ? Moi j'ai le Abelson&Sussman qui est pas mal mais il est en english et il y a pas mal de blabla (et surtout il refont pas Scheme en Scheme dedans).
 
EDIT: Ah mehde le lien marche po! Ho ce root, mais ce root c'est vraiment un ... root! :fou:


Message édité par Chronoklazm le 21-01-2005 à 18:22:28
Reply

Marsh Posté le 21-01-2005 à 19:10:02    

Bonsoir,
 Effectivement, ton root m'interdit l'accès. Flûte, dommage pour le basic. Je déconne, pourquoi par quand ton root sera prêt. Désolé de ne pas t'avoir été d'un grand secours pour ton sujet.
 
 Le Chazarin je l'ai eu à la BU de Reims. Voilà les coordonnées si tu veux leur soumettre l'achat à  la tienne de BU: "Programmer avec scheme  de la pratique à la théorie  International Thomson Publishing France N°ISBN: 2-84180-131-?". J'ai l'impression que la source n'est pas très loin de chez toi. J'ai celui-ci aussi "Initiation à la programmation avec Sheme  de L.BLOCH Editions Technip ISBN: 2-7108-0795-5". Il est pas trop mal (enfin, je crois).
 
  Sinon, je continue, j'avance, mais j'ai toujours ce problème d'arité avec ma commande, ce coup-ci j'en ai 0 au lieu de 2. Je cherche encore, je vais y arriver, je me motive. C'est vrai, ma technique n'est pas la bonne, mais en regardant le fichier de la base de donnée de Magic-card dispo sur le site de PLT, j'ai cru que c'était une bonne idée: ils ont aussi fait une matrice. Enfin, bon..."Patience et longueur de temps font plus que force et que rage".
 
Edit: Ca y est! j'ai reussi à écrire qq chose dans mon fichier, plus de problème d'arité Youpi !!. Enfin c'est pas gagné, reste à formater le texte.


Message édité par le_courtois le 21-01-2005 à 20:47:28
Reply

Marsh Posté le 29-01-2005 à 00:17:44    

Bonsoir tout le monde,
  Ceci n'est pas un up, juste pour dire que je continue et toujours pas de résultat. Je vous tiendrai au courant, Voilà, Merci.

Reply

Marsh Posté le 29-01-2005 à 00:17:44   

Reply

Marsh Posté le 29-01-2005 à 00:26:04    

Courage !!! C'est pour quand la version beta ? :D


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 29-01-2005 à 20:45:36    

Salut,
  La version bêta (ou bétin?) se porte bien, merci  :kaola: .Patience et longueur de temps font plus que force et que rage. Ca commence à me gonfler quand même. Au fait, ils éteignent leurs serveurs le week-end à la fac de nice ? J'ai toujours pas ton projet.
Bientôt un [résolu] va pointer son nez dans le titre  :)

Reply

Marsh Posté le 29-01-2005 à 21:55:50    

Oui apparament, quand le root est en week-end il n'est plus root. C'est sympa ... plus de responsabilités, plus de questions qui le gonfle, plus de problemes de comptes à regler mais plus de serveur aussi. Et le mec se tappe entre 3500 et 4000 euros par moi. Bref ca c'est du metier !
 
La vie, c'est comme ca !  


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 10-02-2005 à 22:54:36    

Salut,
Ca y est, ton root donne maintenant l'accès à n'importe qui, la preuve j'ai pu télécharger. Mais euh....un joli "reference to undefined identifier : sqr" me bloque. Je vais chercher un peu quand j'aurai du temps.
 
  Autre question stupide, mais qui me turlupine. Je pense à ton post réclamant un topic scheme, lisp et Cie. C'est vrai que peu de personnes s'intéressent à scheme. Pourtant à bien y regarder, il y en a partout mais,...personne ne le connait. Lorsque l'on regarde les livres dédiés, c'est toujours la même progression: exercice1 : tapez (+ 1 2); exercice2: résoudre Finobacci par récurrence; exercice 3: alogo pour résoudre une intégrale triple selon la méthode de la culbute inverse par passage rétrograde. Palpitant !
   Ne pourrait-on pas proposer un projet histoire de montrer que l'on peut faire beaucoup de choses en Scheme ? Celui-ci serait didactique et pédagogique. Comme exemple, on pourrait proposer la réalisation d'un répertoire téléphonique (je sais il y en a 25 mille, mais pour un débutant c'est le top). Ou bien la réalisation d'un logiciel de statistiques basé sur le modèle de GIMP, dans lequel chaque utilisateur pourrait écrire son algo si celui-ci n'existe pas déjà. En plus, je crois que cela pourrait être utile aux étudiants qui pourraient l'utiliser ou rentrer dans la conception,ce qui leur ferait une base pour leur projet.
 
   Alors, proposition stupide ou pourquoi pas ? Je me tiens à votre disposition pour de plus amples développements concernant cette question. Bonne nuit à tous.

Reply

Marsh Posté le 14-02-2005 à 15:04:07    

Salut, je trouve que ta proposition est loin d'être stupide :)  
 
  Je suis absolument sûr que la plus part des gens ici considere Scheme comme un langage de debutants (qui n'est pas performant et devient tres compliqué dés que l'on veut faire autre chose qu'une boucle et blabla ...) ce qui est vrai en partie.
 
  Ce qui ma le plus frappé dans l'enseignement de ce language sur la plus part des sites (et dans ma fac) c'est qu'on commence toujours par une petite introduction historique fort interessante sur la naissance du FORTAN(1955) et du LISP(1958), mais avant qu'on se tappe la progression comme tu l'a sité dans ton post, on nous balance quelque trucs forts envoutants qui motivent la plus part des gens a poursuivre (prog symbolique, i.a, prog non-deterministe ...) mais qui representent un boulot considerable et sont peu traités (si ils sont traités tout court) . Ces choses sont parfois tres difficiles et ne servent pas tellement dans le monde professionnel.
 
La majorité des progs fait en Scheme peuvent être réalisé (et bien plus performants) en C ou autre langage strictement imperatif, ce qui n'est pas le cas du Scheme d'un point de vue fonctionnel; impossibilité de realiser un automate fini, pas de gestion explicite de la memoire ... .
 
Le probleme du Scheme c'est qu'il n'est pas tres intuitif :
 

Citation :


Scheme m'a permis de faire sur ma cervelle une expérience intéressante et de prendre une leçon d'humilité :
1) je lis le cours sur la récursion. Cela me paraît difficile mais en m'appliquant je comprends.
2) je programme ma première récursion. Rien ne marche.
3) je relis le cours. Ma récursion devrait marcher.
4) je regarde le corrigé de l'exercice. Ce qui est écrit me semble faux. Je copie tel quel : ça marche.
5) je transcris sur papier, pas à pas, le fonctionnement du programme. Je vois à la fois mon erreur, et pourquoi le programme du corrigé fonctionne.
6) je "réalise" que j'avais compris la récursion - ligne (1) ci-dessus - mais que, lorsqu'il s'est agi de la mettre en oeuvre, l'instinct m'avait orienté vers une fausse piste.
 
Comme disent Abelson et Sussman, l'informatique est la science du "how to", du "comment faire", alors que notre intelligence fonctionne sur le mode "what is" de la définition.


 
Un repertoire telephonique ou autre serait un bon exemple pour les debutants, avaler 3 pages de code pas forcement difficile à comprendre serait peut etre bien plus productif que de ce tapper une dizaine de TP. Et surtout il faudrait donner quelques exemples appliqués de programmation de l'i.a qui, à mon avis reste, la seule chose pouvant motiver les gens a s'interresser a ce language. (l'i.a de HALO a été écrite en LISP)
 
Je suis bien motivé pour faire un truc ensemble, montrer que Scheme c'est pas seulement un truc de neuneu :) peut etre ca attireras plus de gens. Je vais mettre en ligne ma simulation d'une corde elastique (3D OpenGL) en skim.
 
PS: Pour mon projet j'ai verifier et ca marche impec, j'ai la version 208p1.


Message édité par Chronoklazm le 14-02-2005 à 15:05:50

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 14-02-2005 à 19:27:25    

Salut,
  Merci de ton soutien. Donc, je crois que je vais ouvrir un nouveau topic du style "créons un répertoire téléphonique" puisqu'à l'unanimité c'est ce projet qui est retenu. Le temps de mettre à plat les règles du topic. En effet, il serait intéressant que nous puissions mettre différentes approches du problème. Par exemple, pour les données, certains préfèreront les n-listes, d'autres les structures,...Pour un débutant, pouvoir choisir en fonction de l'approche qu'il "sent" le plus me semble  pédagogique. De plus, tout le monde n'est pas sous drScheme, alors l'interfaçage graphique risque d'être un peu plus compliqué.
 
  Par contre, comme tu as pu le constater, mon niveau programmation vole plutôt bas et j'ai peur de ne pas être à la hauteur de ce nous allons lancer. Tu peux toujours reflechir  :) . C'est peut-être un peu égoïste de ma part, mais je compte aussi apprendre beaucoup de ce projet. Mais bon, donc on se lance.
 Et après, on travaille sur les langages applicatifs et les langues naturelles via le scheme. On ressort les cours sur la curryfication  :D .
 
  Je mets à jour mon drScheme et je reteste (pourtant c'est une 208). A bientôt.
 

Reply

Marsh Posté le 16-02-2005 à 22:42:10    

Bon pour l'annuaire on a le choix entre une hash-table (ou un vector tout con), un ABC (arbre binaire de consulation), ou une A-liste. Les elements seront des structures (evitons la couche objet de scheme) avec un nom, un numero et eventuellement d'autres champs style rendez-vous communs, photo, infos supplementaires etc ...
Pour l'interface graphique, un affichage general triable par noms, numeros (genre 04, 01 etc ...) un bouton "infos" qui donne les infos d'un numero selectionné (par l'ouverture d'une nouvelle fenetre) et des boutons du meme genre; "nouveau", "supprimer", "editer" ...
Pour l'interface mreddesigner sera parfait : http://mreddesigner.lozi.org


Message édité par Chronoklazm le 16-02-2005 à 22:43:11

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
Reply

Marsh Posté le 18-02-2005 à 01:11:29    

A y est, topic crée. N'hésite pas à faire des remarques.
http://forum.hardware.fr/hardwaref [...] 4619-1.htm
 
A +

Reply

Sujets relatifs:

Leave a Replay

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