IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Création d'une (pseudo) conversation artificielle


Sujet :

Free Pascal

  1. #41
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 29
    Points : 59
    Points
    59
    Par défaut
    Salut loupsio,

    for i:=0 to Length(Question) do ...

    C'est la traduction de
    Pour (chaque) i de 0 à nombre de lettres dans Question faire ...

    ... bref c'est une boucle, i est incrementé à la fin du "do" et on refait un tour jusqu'à ce que i soit egal à Length(Question)

    ... et Length(Question) cela veut dire longueur, c'est le nombre de caractères de la chaine Question

    chez toi le "i" est une autre variable? alors remplace et écrit
    for idx:= 0 to Length ....
    mick605 a écrit i par habitude, c'est l'usage qui veut que les indexes des boucles soient i, j, k. (rien d'obligatoire là dedans)

    Des noms de variables trop longs à écrire : utilise les touches magiques "Ctrl" et "C" puis "Ctrl" et "V"

    Si tu mets des noms de variables plus longs, c'est plus facile de comprendre plus tard.

    Il me semble avoir vu passer un post récemment sur le forum à propos de bonnes pratiques en Pascal .

  2. #42
    Membre habitué Avatar de Modulpro
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 76
    Points : 175
    Points
    175
    Par défaut
    Bonjour Loupsio,

    Voila un peu plus de précisions :

    - la variable "question" (qui équivaut à "a" dans ton code) est de type string. Elle contient donc une chaîne de caractères (ceux rentrés au clavier par l'utilisateur).
    - la syntaxe "question[n]" ou n est un entier permet d’accéder au n-ieme caractère de la chaîne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Var
    question : string;
    i : integer
     
    begin
    ...
      for i:=1 to Length(Question) do
      begin
        if Question[i] in ['é','è'] then Question[i]:='e';
        ...
      end;
    end.
    Ainsi ce code permet de parcourir tous les caractères de la chaîne Question, du premier au dernier.

    Pour chaque caractère, on teste si le caractère est 'é' ou 'è', et si le teste est concluant, on le remplace par 'e'. Puis la variable i est incrémentée de 1, on teste donc la caractère suivant...on poursuit ainsi jusqu'au dernier caractère de la chaîne.
    Ainsi en sortie de boucle, on obtient la chaîne "question" sans aucun caractère spécial.

    De plus, le TStringList est un type d'objet (une classe) prédéfini qui contient des chaines de caractères. Il est donc semblable (ici) à un et s'utilise de manière quasi identique pour l’accès aux chaines. La différence est que le nombre de chaines qu'il contient n'est pas fixé à la compilation, mais modifiable lors de l’exécution, ce qui est utile ici car ce nombre est déterminé par la question de l'utilisateur. De plus, le TStringList possède les fonctions décrites par mick605.

    J’espère t'avoir aidé.

    PS : pour mick605 : il me semble que le premier caractère d'une chaîne est repéré par 1 et donc que chaine[0] produit une erreur de compilation.

  3. #43
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par Modulpro Voir le message
    Il me semble que le premier caractère d'une chaîne est repéré par 1 et donc que chaine[0] produit une erreur de compilation.
    C'est vrai. La boucle doit commencer a 1.

    Pour en revenir a Loupsio, il faut absolument que tu lises des cours de programmation. Ceci constitue la base de la programmation. Pour remplacer ta variable a par Question, utilise l'outil Remplacer (en général, raccourci Ctrl+R ou Ctrl+F).

  4. #44
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    @labbet : le copier coller habituel ne marche pas sur le logiciel que j'utilise ^^ a la place j'ai "shift+ins" et "ctrl+ins" mais bon ca m'a pris du temps quand même de changer toutes les variables de chaque lignes

    en tout cas merci, j'ai compris le principe et ca marche,
    pour la TStringList, je suppose que "mots" est une variable "string" mais TStringList est a déclarer dans les variables? lors de la compilation il me met "Error : identifier not found 'TStringList' "

    et "Error : illegal qualifier" a propos des 2 "delimiter"
    après je ne sais pas si c'est parce queje les ai mal placés, mon code ressemble a peu près a ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    begin
     while question<>'au revoir' do
       begin
          readln(question);
          for i:=1 to length(question) do
            begin
               if question[i] in ['é','è'] then ....
            end;
         Mots:=TStringList.Create;
          Mots.delimiter:=' ';
          Mots.delimitedtext:=question;
          if ... {differentes possibilités de phrases a comparer}
          else if  ... {differentes possibilités de phrases a comparer}
       Mots.free;
      end;
    end.

  5. #45
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Bon ...

    Ton logiciel permet surement le copier coller. Peut être que le raccourci clavier n'est pas le même, mais ca doit exister. Cherche dans Edition > Copier ... Profites en pour voir si il y a un outil Remplacer.

    Tu confonds variable et type de variable. Dans ton programme, a est ta variable, et string est le type de ta variable a. Tout comme i est ta variable, et integer est le type de ta variable i.
    Donc, dans le code que je t'ai donné, Mots est ta variable, et TStringList est le type de ta variable Mots. Donc Mots n'est pas de type string !! Si tu te trompes de type de variable, tu obtiendra plein d'erreurs.

  6. #46
    Membre habitué Avatar de Modulpro
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 76
    Points : 175
    Points
    175
    Par défaut
    Salut

    Juste une précision Loupsio : Quel compilateur utilise tu ?
    Je te le demande demande car à la vue de :
    "Error : identifier not found 'TStringList' "
    je crois que le type TstringList n'est défini que sous Lazarus (en fait freePascal) ou Delphi (mais je n'ai pas de moyens de vérifier, j'utilise uniquement Lazarus)

  7. #47
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par Modulpro Voir le message
    Salut

    Juste une précision Loupsio : Quel compilateur utilise tu ?
    Je te le demande demande car à la vue de : je crois que le type TstringList n'est défini que sous Lazarus (en fait freePascal) ou Delphi (mais je n'ai pas de moyens de vérifier, j'utilise uniquement Lazarus)
    Sur Delphi aussi. Son erreur peut aussi venir des "uses" manquantes ...

  8. #48
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    j'utilise Free Pascal IDE 2.4.2, (c'est celui avecle logo avec une tête de guepard sur la gauche, les lettres FPC a droite, le tout sur un fond bleu)

    j'ai déjà essayé hier de mettre "TStringList" en type de variables de "Mots" (c'est même a cause de ca que j'en suis venu a la conclusion que mots était du type string car c'est la seule chose pour laquelle la déclaration de variable ne posait pas de problème) mais quand je met "Mots" comme variable et TStringList comme type de variable il me marque exactement:
    "(6,23) Error: Identifier not found "TStringList"
    (6,23) Error: Error in type definition
    (24,21) Error: identifier not found "TStringList"
    (25,9) Error illegal qualifier"
    la ligne 6,23 correspond au point virgule après "Mots : TStringList
    la ligne 24,21 correspond au "." dans TStringList.create
    la ligne 25,9 correspond au "delimiter" de "Mots.delimiter:=' '


    et j'ai bien un "copier coller", je l'ai dit dans le post d'avant c'est ctrl+ins et shift+ins, et ma variable a déja été remplacé par "question"

  9. #49
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    C'est clair qu'il ne trouve pas le type TStringList.

    En tapant FreePascal + TStringList dans google, on tombe sur : http://www.freepascal.org/docs-html/...tringlist.html

    En cherchant un peu, on voit qu'il faut ajouter 'Classes' dans les "uses".

  10. #50
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    euhhh.... j'en fait quoi de tout ca?
    en voyant le "end." a la fin je me suis dit qu'il fallait ecrire ca dans un programme, donc j'en ai ouvert un nouveau ou j'ai ré-écrit tout ca et a la compilation:
    (1,24) identifier not found "class"
    (1,33)identifier not found "TStrings"
    (2,1)Error in type definition
    (2,1)syntax Error, ";" expected but "identifier public" found
    j'ai recopié exactement ce qu'il y avait marqué ... après je sais pas si c'est ce qu'il fallait faire.

  11. #51
    Membre habitué Avatar de Modulpro
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 76
    Points : 175
    Points
    175
    Par défaut
    Non non. Le lien que mick605 te propose fournis la description de l'interface du TstringList, qui est contenue dans l'unité "classe".
    Il ne faut en aucun cas la recopier dans ton programme.

    Si tu regarde juste après le nom de ton programme, tu dois avoir une clause 'Uses' suivie d'une liste d'un certain nombre de noms d’unités, séparées par des virgules et terminée par un point virgule.
    Tu dois juste ajouter une virgule après le dernier nom, puis recopier 'Classes' (sans les guillemets) avant le point virgule.
    (et pense bien à enlever le code que tu a importé du site).
    Voila.

  12. #52
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    il n'y a pas de 'Uses' juste après le nom de mon programme, ca peut dépendre selon les programmes?

  13. #53
    Membre habitué Avatar de Modulpro
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2010
    Messages : 76
    Points : 175
    Points
    175
    Par défaut
    Salut,

    Dans ce cas là, tu n'as qu'a ajouter la ligne entre le nom de ton programme et la définition des types.

  14. #54
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 47
    Points : 17
    Points
    17
    Par défaut
    ok merci =)

Discussions similaires

  1. Réponses: 14
    Dernier message: 09/04/2004, 13h44
  2. [amc designer] création d'une base postgresql
    Par david42 dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 12/03/2004, 11h08
  3. Création d'une base avec IbConsole
    Par Lucien dans le forum Outils
    Réponses: 3
    Dernier message: 02/03/2004, 18h34
  4. création d'une batabse .gdb
    Par jejestyle dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/02/2004, 00h29
  5. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 07h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo