Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Langage
Langage Tout ce qui concerne le langage (POO, syntaxe, message d'erreur...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 10/12/2012, 19h01   #1
Linpow
 
Homme
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2012
Messages : 4
Points : -2
Points : -2
Par défaut Fonction COPY dans un vecteur

Bonjour à tous,

Je souhaite faire une procédure qui permet de chercher (en tapant le debut d'un mot) tous les mots commençant par ce que j'ai rentré auparavant.

Je pense donc à la fonction COPY mais je ne sais pas comment l'utiliser dans un vecteur.

Voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
procedure AjouterDefinition (var Lexique : TabElement; var Nbmots : Integer);
Var
vrep : char;
 
begin
   vrep := 'o';
   While (vrep = 'o') and (Nbmots < 100) DO
   begin
      Writeln('Indiquez le terme a definir : ');
      Readln(Lexique[Nbmots + 1].terme);
      Writeln('Indiquez la definition de ce terme : ');
      Readln(Lexique[Nbmots + 1].definition);
      Nbmots := Nbmots + 1;
      SauvegarderLexique (Lexique, NbMots);
      Writeln('');
      Writeln('');
      Writeln('Voulez vous saisir un autre terme ainsi que sa definiton ? o/n ');
      Readln(vrep);
   end;
end;
 
 
 
 
procedure Listedefinition (const Lexique : TabElement; const Nbmots : Integer);
Var
   vi : integer;
 
begin
   vi := 1;
   While vi <= Nbmots DO
   begin
      Writeln(Lexique[vi].terme,'    --->   ' ,     Lexique[vi].definition);
      Writeln('');
      Writeln('');
      vi := vi + 1;
   end;
end;
 
 
procedure RechercheDefinition (const Lexique : TabElement; const Nbmots : Integer; const libterme : mot20);
Var
   vi : integer;
begin
   vi :=1;
   While vi <= Nbmots DO
   begin
      If (libterme = Lexique[vi].terme) Then
      begin
         Writeln(Lexique[vi].definition);
      end;
      vi := vi+1;
   end;
end;
 
procedure RechercheMot (const Lexique : TabElement; const Nbmots : Integer; const motRecherche : mot20);
var
  vi : Integer;
  vlex : elementstd;
  vt : Integer;
begin
    vi := 1;
    while vi <= Nbmots do
    begin
      vlex := Lexique[vi];
      vt := Pos(AnsiLowerCase(motRecherche), AnsiLowerCase(vlex.definition));
      if vt <> 0 then
      begin
      Writeln(vlex.terme, '    --->   ' , vlex.definition);
      end;
      vi := vi + 1;
    end;
end;
 
 
 
 
 
 
Procedure DebutMot (const Lexique : TabElement; const Nbmots : Integer; const motRecherche : mot20);
 
begin
 
 
 
end;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//-------------------------- Début du programme principal ----------------------//
begin
   ChargerLexique(Lexique, NbMots);
   Vchoix := 0;
   While Vchoix <> 5 DO
   begin
      Writeln('');
      Writeln('            Bienvenue dans le lexique ');
      Writeln('-----------------------------------------------');
      Writeln('');
      Writeln('1) Saisie d"une nouvelle definition dans le lexique ' );
      Writeln('2) Liste de toutes les définitions enregistrées' );
      Writeln('3) Rechercher dans les noms des éléments du lexique');
      Writeln('4) Rechercher dans les définitions des éléments du lexique');
      Writeln('');
      Writeln('Indiquez votre choix :');
      Readln(Vchoix);
      Writeln('');
 
      case Vchoix of
        1: begin
          AjouterDefinition(Lexique, Nbmots);
        end;
        2: begin
          Listedefinition(Lexique, Nbmots);
        end;
        3: begin
           Writeln('Veuillez saisir un terme dont vous ne connaissez pas la definition');
           Readln(libterme);
           Writeln('');
           RechercheDefinition(Lexique, Nbmots, libterme);
        end;
        4: begin
           Writeln('Veuillez saisir un mot contenu dans la definition recherchée');
           Readln(libterme);
           Writeln('');
           RechercheMot(Lexique, Nbmots, libterme);
        end;
         5: begin
           Writeln('Veuillez saisir les premières lettres d"un mot recherché');
           Readln(libterme);
           Writeln('');
           DebutMot(Lexique, Nbmots, libterme);
      end;
 
 
   end;
   Readln;
end.
C'est donc la dans la procedure DebutMot que je compte inserer la fonction COPY. Merci d'avance tout le monde !!
Linpow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2012, 21h38   #2
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 026
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 026
Points : 2 651
Points : 2 651
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
Je pense que vous pouvez vous passer de la fonction Copy.
Si la fonction Pos renvoie 1, cela commence par le mot cherché.
Si la fonction Pos renvoie une valeur > 0, cela contient le mot cherché.


Après, vous pouvez remplacer la boucle while... par une boucle for..., plus rapide.
Code :
for vi := 1 to Nbmots do //...
et transformer une fois pour toute le mot cherche en minuscule plutôt que de le faire à chaque itération...
__________________
Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2012, 21h13   #3
Linpow
 
Homme
Inscription : décembre 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2012
Messages : 4
Points : -2
Points : -2
Oublions la fonction COPY et Pos, je n'arrive pas à les utiliser.
J'ai finis mon programme, mais j'ai une erreur à la fin du programme je ne sais pas à quoi elle correspond je m'arrache les cheveux je dois le rendre demain ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
program pjLexiqueDUMAST;
// ------------------------------------------------------------------------------//
// Cette application permet de gérer un lexique de termes.                       //
// Il est souhaitable de trouver un thème. Exemple : Informatique ou  Médical    //
// On travaille avec un vecteur en mémoire centrale et pour assurer la pérénité  //
// des données, on les enregistre dans un fichier lorsqu'on quitte l'application.//
//-------------------------------------------------------------------------------//
 
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
Const
  cheminFichier = 'FichierLexique.dta';
 
TYPE
  mot20 = string[20];
  mot255 = String[255];
  Elementstd = record
                 terme : mot20;
                 definition : mot255;
               End;
  TabElement = array[1..100] of Elementstd;
  FichierElement = file of Elementstd;
 
var
  Lexique : TabElement;
  FileLexique : FichierElement;
  NbMots : integer;
  vchoix : integer;
  libterme : mot20;
 
 
//Cette procédure permet de générer le vecteur à partir du fichier de sauvegarde
Procedure ChargerLexique(out Lexique : TabElement; out NbMots : integer);
Var
   vinterm : Elementstd;
   i : integer;
begin
   AssignFile(FileLexique, cheminFichier);	  //assignation de la variable au fichier physique
 	 {$I-}			           //directive de compilation pour intercepter une erreur d'entrée sortie
   Reset(FileLexique);			   //ouverture du fichier en lecture-écriture
   {$I+}
   if IOResult = 0 then	 //test de la variable système IOResult (Input Output Result)
      begin
        writeln('Le fichier lexique a été ouvert avec succès !!');
        		        //le fichier est ouvert en lecture-écriture. (on est placé au début du fichier)
        I := 0;
        While (not eof(FileLexique)) AND (I < 100) do	 //boucle de parcours du fichier jusqu'à la fin du fichier
               	                                       //on s'assure dans la condition qu'on ne dépasse pas la capacité du vecteur.
            begin
               Read(FileLexique,vinterm);	        //on prend l'enregistrement qu'on recopie dans la variable intermédiaire.
               i := i + 1;
               Lexique[i] := vinterm;	        //on met la variable intermédiaire dans le tableau
            end;
        Nbmots := i;
      end
   else
      begin
        writeln('Le fichier lexique n''existe pas ! Le lexique sera vide');
       //Puisque le fichier n'existe pas on le crée avec Rewrite.
       //Il sera créé avec aucun enregistrement pour l'instant
        Rewrite(FileLexique);
        Nbmots := 0;
      end;
end;
 
// Cette procédure sauvegarde le vecteur Lexique dans le fichier
procedure SauvegarderLexique (const Lexique : TabElement; const NbMots : integer);
Var
   i : integer;
   vinterm : elementstd;
begin
  REWRITE(FileLexique);	     //ouverture du fichier en écriture. Attention! Danger! On recrée le fichier.
                             //Donc s'il contenait des informations, elles sont  détruites.
  I := 1;
  While I <= Nbmots Do	     //boucle pour traiter tous les enregistrements du vecteur.
    begin
      vinterm := Lexique[I];	        //copie de la cellule dans la variable intermédiaire
      write(FileLexique, vinterm);	  //copie de la variable intermédiaire dans le fichier
      I := I + 1;
    end;
end;
 
 
 
 
 
 
 
procedure AjouterDefinition (var Lexique : TabElement; var Nbmots : Integer);
Var
vrep : char;
 
begin
   vrep := 'o';
   While (vrep = 'o') and (Nbmots < 100) DO
   begin
      Writeln('Indiquez le terme a definir : ');
      Readln(Lexique[Nbmots + 1].terme);
      Writeln('Indiquez la definition de ce terme : ');
      Readln(Lexique[Nbmots + 1].definition);
      Nbmots := Nbmots + 1;
      SauvegarderLexique (Lexique, NbMots);
      Writeln('');
      Writeln('');
      Writeln('Voulez vous saisir un autre terme ainsi que sa definiton ? o/n ');
      Readln(vrep);
   end;
end;
 
 
 
 
procedure Listedefinition (const Lexique : TabElement; const Nbmots : Integer);
Var
   vi : integer;
 
begin
   vi := 1;
   While vi <= Nbmots DO
   begin
      Writeln(Lexique[vi].terme,'    --->   ' ,     Lexique[vi].definition);
      Writeln('');
      Writeln('');
      vi := vi + 1;
   end;
end;
 
 
procedure RechercheDefinition (const Lexique : TabElement; const Nbmots : Integer; const libterme : mot20);
Var
   vi : integer;
begin
   vi :=1;
   While vi <= Nbmots DO
   begin
      If (libterme = Lexique[vi].terme) Then
      begin
         Writeln(Lexique[vi].definition);
      end;
      vi := vi+1;
   end;
end;
 
procedure RechercheMot (const Lexique : TabElement; const Nbmots : Integer; const motRecherche : mot20);
var
  vi : Integer;
  vlex : elementstd;
  vt : Integer;
begin
    vi := 1;
    while vi <= Nbmots do
    begin
      vlex := Lexique[vi];
      vt := Pos(AnsiLowerCase(motRecherche), AnsiLowerCase(vlex.definition));
      if vt <> 0 then
      begin
      Writeln(vlex.terme, '    --->   ' , vlex.definition);
      end;
      vi := vi + 1;
    end;
end;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
//-------------------------- Début du programme principal ----------------------//
begin
   ChargerLexique(Lexique, NbMots);
   Vchoix := 0;
   While Vchoix <> 5 DO
   begin
      Writeln('');
      Writeln('            Bienvenue dans le lexique ');
      Writeln('-----------------------------------------------');
      Writeln('');
      Writeln('1) Saisie d"une nouvelle definition dans le lexique ' );
      Writeln('2) Liste de toutes les définitions enregistrées' );
      Writeln('3) Rechercher dans les noms des éléments du lexique');
      Writeln('4) Rechercher dans les définitions des éléments du lexique');
      Writeln('');
      Writeln('Indiquez votre choix :');
      Readln(Vchoix);
      Writeln('');
 
      case Vchoix of
        1: begin
          AjouterDefinition(Lexique, Nbmots);
        end;
        2: begin
          Listedefinition(Lexique, Nbmots);
        end;
        3: begin
           Writeln('Veuillez saisir un terme dont vous ne connaissez pas la definition');
           Readln(libterme);
           Writeln('');
           RechercheDefinition(Lexique, Nbmots, libterme);
        end;
        4: begin
           Writeln('Veuillez saisir un mot contenu dans la definition recherchée');
           Readln(libterme);
           Writeln('');
           RechercheMot(Lexique, Nbmots, libterme);
        end;
 
 
   end;
   Readln;
end.
Linpow est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h18.


 
 
 
 
Partenaires

Hébergement Web