PASCAL : Tester l’existence ou non d’un mot donné

Résolu
IAML_Coding Messages postés 3 Date d'inscription dimanche 18 février 2018 Statut Membre Dernière intervention 18 février 2018 - Modifié le 18 févr. 2018 à 09:12
IAML_Coding Messages postés 3 Date d'inscription dimanche 18 février 2018 Statut Membre Dernière intervention 18 février 2018 - 18 févr. 2018 à 15:18
Bonjour, j'ai besoin d'aide s'il vous plaît, il n'affiche pas le resultat.. j'ai rencontré une erreur de compilation de ma code, mais cette erreur c'est une ( runtime error 3 )
Correspond : ----> PATH NOT FOUND !
Mais le chemin est totalement vrai !!! :(

Runtime error 3 at $00401672
$00401672
$0040185A
$00407261



------------------
(program exited with code: 3)



-- ÉNONCÉS :
Etant donné un fichier de texte contenant un ensemble de lignes. Il est demandé de chercher
pour chaque ligne, l’existence ou non d’un mot donné et d’afficher suivant le cas l'un des
messages suivants :
Le mot (mot) existe dans ligne (i) ou le mot (mot) n’existe pas dans ligne (i)


PROGRAM ex1 ;
USES WinCrt ;

VAR ft : text ; 
mot :  string ;
i : integer ;

FUNCTION CHERCHE(VAR ft : text ; ch : STRING) : BOOLEAN ;
VAR p : integer ; 
mot2, ligne : string ;
OK : Boolean ;
BEGIN
 Assign(ft,'C:\Users\mongi\Desktop\Enoncés (training pascal)\paragraphe.txt') ;
 Reset(ft) ;
  OK := false ;
  WHILE NOT(OK) AND NOT eof(ft) DO
  BEGIN
   Readln(ft,Ligne) ;
   p := pos(' ',Ligne) ;
   mot2 := copy(Ligne, 1, p-1) ;
   Delete(Ligne, 1, p+1) ;
   OK := (ch = mot2) ;   
  END;
  CHERCHE := OK ;
END;

{-------------------------------------------------------------} 

FUNCTION verif_mot( ch : string) : boolean ;
VAR OK : boolean;
k : integer; 
BEGIN
OK := FALSE ;
 FOR k := 1 TO length(ch) DO
 OK := ch[k] in ['A'..'Z' , 'a'..'z'] ;
 
VERIF_MOT := OK ;
END;

{-------------------------------------------------------------} 

BEGIN
 REPEAT
  Writeln('Tapez un mot : ') ;
  Readln(mot) ;
 UNTIL VERIF_MOT(mot) = TRUE ;
 
 i := 0;
 IF CHERCHE(ft,mot) THEN
 BEGIN
  i := i+1 ;
  Writeln('Le mot ',mot,' existe dans ligne ',i )
 END
  ELSE
   Writeln('Le mot ',mot,' n’existe pas dans ce fichier !! ') ;
END.

2 réponses

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 125
18 févr. 2018 à 09:21
Bonjour,

"une erreur de compilation de ma code, mais cette erreur c'est une ( runtime error 3 )"
Si c'est une erreur de compilation ce n'est pas une erreur de runtime ! Ou alors c'est ton compilateur qui a planté, indépendamment du code qu'il compile...

En partant de l'hypothèse que c'est effectivement une erreur d'exécution lié à ton nom de fichier, essayes ceci :
  • renommes ton fichier, en enlevant l'accent 'é' de 'Enoncés'
  • remplaces les \ par des /
1
IAML_Coding Messages postés 3 Date d'inscription dimanche 18 février 2018 Statut Membre Dernière intervention 18 février 2018
Modifié le 18 févr. 2018 à 16:40
Merci beaucoup pour votre aide.. D'après quelques modification le problème est résolu et mon code est marche bien maintenant ! :)

PROGRAM ex1 ;
USES WinCrt ;

VAR ft : text ; 
mot :  string ;

{-------------------------------------------------------------} 

PROCEDURE affiche(VAR ft: text ; mot : string) ;
VAR i : integer ;
Ligne : string ;
BEGIN
Assign(ft,'C:\Users\mongi\Desktop\Enonces (training pascal)\paragraphe.txt') ;
Reset(ft) ;
i := 0;
 WHILE NOT eof(ft) DO
 BEGIN
 Readln(ft,Ligne) ;
 i := i+1 ;
  IF POS(mot,Ligne)<>0 THEN
   Writeln('Le mot ',mot,' existe dans ligne ',i )
   ELSE   Writeln('Le mot ',mot,' n’existe pas dans ce fichier !! ') ;
 END;
END;

{-------------------------------------------------------------}
FUNCTION verif_mot( ch : string) : boolean ;
VAR OK : boolean;
k : integer; 
BEGIN
OK := FALSE ;
 FOR k := 1 TO length(ch) DO
 BEGIN
 OK := ch[k] in ['A'..'Z' , 'a'..'z'] ;
 END;
VERIF_MOT := OK ;
END;

{-------------------------------------------------------------} 

BEGIN
 REPEAT
  Writeln('Tapez un mot : ') ;
  Readln(mot) ;
 UNTIL VERIF_MOT(mot) = TRUE ;
 
 AFFICHE(ft,mot) ;
END.
0
denisbertin Messages postés 247 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 13 janvier 2023 1
Modifié le 18 févr. 2018 à 11:42
Une petite modification, en effet comme tu procède tu ne trouveras qu'une seule occurrence du mot recherché. et non pas une suite de ligne qui devrait être affichées. la variable i sera soit égale à zéro ou à un mais jamais deux.
1
Whismeril Messages postés 18285 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 21 mars 2023 621
18 févr. 2018 à 12:00
Bonjour, je me suis permis de déplacer ton message, en effet il me semble que ça n'était pas adressé à KX....
0
IAML_Coding Messages postés 3 Date d'inscription dimanche 18 février 2018 Statut Membre Dernière intervention 18 février 2018
18 févr. 2018 à 15:18
Merci beaucoup à tous.. :)
0
Rejoignez-nous