Exercice
Fermé
eleve96
Messages postés
1
Date d'inscription
jeudi 22 août 2013
Statut
Membre
Dernière intervention
22 août 2013
-
22 août 2013 à 19:57
domda91 Messages postés 4 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 7 novembre 2015 - 23 août 2013 à 15:56
domda91 Messages postés 4 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 7 novembre 2015 - 23 août 2013 à 15:56
1 réponse
domda91
Messages postés
4
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
7 novembre 2015
4
Modifié par domda91 le 23/08/2013 à 16:02
Modifié par domda91 le 23/08/2013 à 16:02
Remarque générale, tu gagnerais beaucoup à mieux présenter ton code en utilisant l'indentation et des retour ligne judicieux : le compilateur s'en moque éperdument mais c'est d'une meilleure lisibilité pour toi-même, pour ceux qui acceptent de t'aider et surtout pour tes profs et les examinateurs lors des examens.
Par exemple:
1) Lorsque tu déclare
Pour n = 5, ta déclaration devrait être
2) En ce qui concerne l'approche algorythmique que tu propose, celle-ci me parraît correcte à la base mais peut être améliorée sur certains points:
- Considérant que la longueur de la chaîne résultat (ch) ne pourra en aucun cas
être suppérieure à la plus courte des chaînes saisies il peut être avantageux d'utiliser cette dernière pour initialiser la variable ph au lieu d'utiliser sytématiquement t[1]. Cela économisera de nombreuses itérations inutiles des boucles imbriquées for j, i. La chaîne la plus courte peut être repérée dans la boucle for k.
- Le If à l'intérieur des boucles for j, i peut avantageusement être scindé en deux if imbriqués, le If extérieur testant d'abord length(ph)>length(ch). Cela évite de balayer tout le tableau t lorsque c'est inutile:
Par exemple:
for j:=1 to length (t[1]) do begin for i:=1 to length (t[1]) do begin ph:= copy(t[1],j,i); if (pos(ph,t[2])<>0) and (pos(ph,t[3])<>0) and (pos(ph,t[4])<>0) and (pos(ph,t[5])<>0) and (length(ph)>length(ch)) then ch:=ph; end; end;
1) Lorsque tu déclare
t:array [4..9] of string;cela signifie que tu déclare un tableau contenant exactement 6 chaînes de caractères indexées respectivement par les nombres 4, 5, 6, 7, 8 et 9 (et non un tableau de taille variable pouvant contenir de 4 à 9 chaînes). En conséquence, avec cette déclaration, les expressions telle que t[1], t[2], t[3] référencent des élément qui n'existent pas (index hors limites) de même que
readln(T[k])lorsque k prend les valeurs 1, 2 ou 3.
Pour n = 5, ta déclaration devrait être
t:array [1..5] of string;
2) En ce qui concerne l'approche algorythmique que tu propose, celle-ci me parraît correcte à la base mais peut être améliorée sur certains points:
- Considérant que la longueur de la chaîne résultat (ch) ne pourra en aucun cas
être suppérieure à la plus courte des chaînes saisies il peut être avantageux d'utiliser cette dernière pour initialiser la variable ph au lieu d'utiliser sytématiquement t[1]. Cela économisera de nombreuses itérations inutiles des boucles imbriquées for j, i. La chaîne la plus courte peut être repérée dans la boucle for k.
- Le If à l'intérieur des boucles for j, i peut avantageusement être scindé en deux if imbriqués, le If extérieur testant d'abord length(ph)>length(ch). Cela évite de balayer tout le tableau t lorsque c'est inutile:
if length(ph)>length(ch) then if (pos(ph,t[2])<>0) and (pos(ph,t[3])<>0) and (pos(ph,t[4])<>0) and (pos(ph,t[5])<>0) then ch:=ph;