Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Turbo Pascal
Turbo Pascal Le compilateur de Borland et ses dérivés (Borland Pascal, ...). Avant de poster -> Tout sur Turbo Pascal
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 15/11/2012, 15h27   #1
abdou monta
Nouveau Membre du Club
 
Homme abdou monta
Étudiant
Inscription : mai 2012
Messages : 62
Détails du profil
Informations personnelles :
Nom : Homme abdou monta
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2012
Messages : 62
Points : 29
Points : 29
Envoyer un message via MSN à abdou monta
Par défaut ReadLn et WriteLn sur fichier texte

Bonjour,

l'erreur se produit à l'entrée de la procédure affichage:
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
program test;
uses wincrt;
var
f : text;
choix : byte;
procedure affichage_fichier ( var f : text );
var
ph : string;
begin
while not eof(f) do
	begin
		readln(f, ph);
		writeln(ph);
	end;
end;
procedure remplissage_fichier ( var f : text );
var
c : byte;
ph : string;
begin
{$i-}
reset(f);
{$i+}
if ioresult <> 0 then
	rewrite(f);
append(f);
repeat
	clrscr;
	write('la pharse à saisie');
	readln(ph);
	writeln(f, ph);
	repeat
		write('saisir une autre phrase (1 pour oui et 0 pour non)');
		readln(c);
	until
		c in [0..1];
until
	c = 0;
end;
procedure menu;
begin
writeln('1 : affichage du fichier');
writeln('2 : remplissage de fichier');
writeln('3 : quitter');
end;
procedure boucle ( var choix : byte );
begin
repeat
	clrscr;
	menu;
	repeat
		write('votre choix= ');
		readln(choix);
	until
		choix in [1..3];
	case choix of
		1 : affichage_fichier(f);
		2 : remplissage_fichier(f);
		3 : donewincrt;
	end;
until
	choix = 3;
end;
begin
assign(f, 'D:\f.txt');
boucle(choix);
close(f);
end.
abdou monta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2012, 16h38   #2
M.Dlb
Rédacteur/Modérateur
 
Avatar de M.Dlb
 
Inscription : avril 2002
Messages : 2 274
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2002
Messages : 2 274
Points : 3 381
Points : 3 381
Avec si peu de précisions... Ton fichier n'est pas ouvert, utilise reset ou rewrite.
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal
M.Dlb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 18h12   #3
abdou monta
Nouveau Membre du Club
 
Homme abdou monta
Étudiant
Inscription : mai 2012
Messages : 62
Détails du profil
Informations personnelles :
Nom : Homme abdou monta
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2012
Messages : 62
Points : 29
Points : 29
Envoyer un message via MSN à abdou monta

merci..
abdou monta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 20h45   #4
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 687
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 687
Points : 1 001
Points : 1 001
Bonsoir !

Il serait plus naturel, me semble-t-il, d'ouvrir et de fermer le fichier à l'intérieur de chaque procédure.

Une autre remarque, c'est que la valeur du paramètre f n'est jamais modifiée, donc il ne sert à rien d'ajouter le mot-clé var dans l'en-tête de la fonction. Le contenu du fichier change, mais la valeur de f ne change pas (c'est toujours le même fichier).

En réalité tu n'as même pas besoin de paramètre, puisque tu travailles sur un seul fichier. Tu pourrais donc écrire :

Code :
procedure affichage_fichier;
Ou alors si tu tiens à conserver le paramètre, il faudrait lui donner un nom différent de celui de la variable globale, pour éviter la confusion :

Code :
procedure affichage_fichier ( const pf : text );
__________________
L'Art est long et le Temps est court.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 21h19   #5
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Foe,
Citation:
Envoyé par Roland Chastain Voir le message
En réalité tu n'as même pas besoin de paramètre, puisque tu travailles sur un seul fichier. Tu pourrais donc écrire :

Code :
procedure affichage_fichier;
Ça, c'est à éviter : les variables globales sont à proscrire.

Et pour éviter de les utiliser par erreur, on construit le programme ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
 
program ....
 
..... toutes les fonctions
 
Var
  ...
 
Begin
End.
ce qui fait que toutes les fonctions définies avant les variables ne peuvent pas les utiliser.
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 20h54   #6
abdou monta
Nouveau Membre du Club
 
Homme abdou monta
Étudiant
Inscription : mai 2012
Messages : 62
Détails du profil
Informations personnelles :
Nom : Homme abdou monta
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2012
Messages : 62
Points : 29
Points : 29
Envoyer un message via MSN à abdou monta
Citation:
Envoyé par Roland Chastain Voir le message

Une autre remarque, c'est que la valeur du paramètre f n'est jamais modifiée, donc il ne sert à rien d'ajouter le mot-clé var dans l'en-tête de la fonction. Le contenu du fichier change, mais la valeur de f ne change pas (c'est toujours le même fichier).

En réalité tu n'as même pas besoin de paramètre, puisque tu travailles sur un seul fichier. Tu pourrais donc écrire :

Code :
procedure affichage_fichier;
Ou alors si tu tiens à conserver le paramètre, il faudrait lui donner un nom différent de celui de la variable globale, pour éviter la confusion :

Code :
procedure affichage_fichier ( const pf : text );
On a commencé l'étude des fichiers depuis quelques semaines ; mon professeur nous a dit que chaque procédure ou fonction où le fichier est parmi ses paramètres, doit être déclaré avec une "var".
abdou monta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 21h18   #7
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Beo,
Citation:
Envoyé par abdou monta Voir le message
on a commencé l'étude des fichiers depuis quelques semaines, mon professeur nous a dit que [B]chaque[B] procedure ou fonction où le fichier est parmi ses paramétres, doit être déclarer avec une "var".
Il se trompe :

Var si la procédure/fonction désire modifier le fichier

Const dans le cas contraire.

__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 21h37   #8
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 508
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 508
Points : 39 349
Points : 39 349
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
Bonjour,

Malheureusement, TPW ne connaît pas le mode de transmission de paramètre comme constante. Les deux seuls modes autorisés sont par valeur et par adresse.
L'inconvénient de travailler avec des compilateurs de l'Age de pierre...
__________________
Règles du forum
Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
Mes tutoriels et sources Pascal
FAQ Assembleur

Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 22h04   #9
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Wea,
Citation:
Envoyé par Alcatîz Voir le message
L'inconvénient de travailler avec des compilateurs de l'Age de pierre...
Ça remonte à loin, mais il me semble que TP - encore plus vieux - acceptait const ?

__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 07h30   #10
Alcatîz
Responsable Pascal

 
Avatar de Alcatîz
 
Homme Jean-Luc Gofflot
Ressources humaines
Inscription : mars 2003
Messages : 5 508
Détails du profil
Informations personnelles :
Nom : Homme Jean-Luc Gofflot
Âge : 46
Localisation : Belgique

Informations professionnelles :
Activité : Ressources humaines
Secteur : Service public

Informations forums :
Inscription : mars 2003
Messages : 5 508
Points : 39 349
Points : 39 349
Envoyer un message via ICQ à Alcatîz Envoyer un message via MSN à Alcatîz Envoyer un message via Yahoo à Alcatîz Envoyer un message via Skype™ à Alcatîz
TP n'acceptait pas non plus const.
__________________
Règles du forum
Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
Mes tutoriels et sources Pascal
FAQ Assembleur

Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
Alcatîz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 10h47   #11
Roland Chastain
Membre Expert
 
Homme Roland Chastain
Inscription : décembre 2011
Messages : 687
Détails du profil
Informations personnelles :
Nom : Homme Roland Chastain
Âge : 39
Localisation : Mali

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : décembre 2011
Messages : 687
Points : 1 001
Points : 1 001
Au temps pour moi ! J'ai dit une sottise.

Je viens d'essayer de compiler le code suivant avec FreePascal :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program test_fichier;
 
{$APPTYPE CONSOLE}
 
var
  f: text;
 
procedure modifie_fichier(const aF: text);
begin
  Assign(aF, 'monFichier.txt');
  Rewrite(aF);
  WriteLn(aF, 'essai');
  Close(aF);
end;
 
begin
  modifie_fichier(f);
  ReadLn;
end.
J'ai obtenu un beau message d'erreur :

Citation:
Error: File types must be var parameters
En fait je n'ai pas l'habitude de passer le fichier en paramètre et j'ai parlé sans savoir. Pour ma part j'utilise toujours une variable globale ou une variable locale.
__________________
L'Art est long et le Temps est court.
Roland Chastain est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/11/2012, 14h17   #12
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 414
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 414
Points : 3 769
Points : 3 769
Doa,
Citation:
Envoyé par Alcatîz Voir le message
TP n'acceptait pas non plus const.
Alors je confonds avec MS-PASCAL, que j'utilisais bien avant la sortie du premier TP.

Eh oui, M$ nous avait octroyé un compilateur Pascal, assez performant, sauf côté vitesse de compilation, car il stockait tout sur le disque - pardon, la disquette.

__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h45.


 
 
 
 
Partenaires

Hébergement Web