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
16527
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 mai 2022
124
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
244
Date d'inscription
lundi 22 avril 2013
Statut
Non membre
Dernière intervention
28 mars 2022
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
17333
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
18 mai 2022
596
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