Probleme gestion fichier pascal
Fermé
offa
-
17 oct. 2007 à 11:05
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 6 juil. 2008 à 12:46
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 6 juil. 2008 à 12:46
A voir également:
- Probleme gestion fichier pascal
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Turbo pascal download - Télécharger - Édition & Programmation
8 réponses
RenChu
Messages postés
1
Date d'inscription
samedi 24 mai 2008
Statut
Membre
Dernière intervention
24 mai 2008
24 mai 2008 à 18:54
24 mai 2008 à 18:54
salut j'en suis pas si sur mé essaie qd m^ : begin assign (ancien,emplacement); reset(ancien) ; for i:=1 to 3 do begin with elle do begin write('nom='); readln(nom); write('prenom='); readln(prenom); write('moyenne='); readln(moyenne); end; seek(ancien,(filesize(ancien)); write(ancien,elle); end; assign(nouveau,'c:\tp\nouveau.txt'); rewrite(nouveau); while not eof(ancien)do begin read(ancien,eleve); seek(nouveau,(filesize(nouveau)); write(nouveau,eleve); end; close(ancien); close(nouveau); end. je crois avec seek qui pointe a chaque fois l'enregistrement suivant; les nouvelles valeurs n'écrasent pas leurs precedentes BONNE CHANCE ^_^'
salut j'ai un projet en programmation pascal sur les fichiers que je doit rendre le plus vite possible et j'ai besoin de votre aide: GESTIONS DES PRODUITS
- écrire une fonction qui permet de saisir un fichier de produit(code,nom,prix unitaire,quantité)
- écrire une fonction qui permet d'afficher le contenu du fichier
- écrire une fonction qui renvoie le nombre de produit dont la quantité est inférieure à 10
- écrire une fonction qui permet de trier les produits par leur nom(par ordre alphabétique)
- écrire une fonction qui permet d'éclater le fichier en deux.Le premier fichier contient les produits dont le prix unitaire est supérieur à 50 et le deuxième inférieur à 50
- écrire un programme qui permet de tester
Votre aide est vivement souhaité . Merci d'avance
Mon mail est rakhoutall@hotmail.fr
- écrire une fonction qui permet de saisir un fichier de produit(code,nom,prix unitaire,quantité)
- écrire une fonction qui permet d'afficher le contenu du fichier
- écrire une fonction qui renvoie le nombre de produit dont la quantité est inférieure à 10
- écrire une fonction qui permet de trier les produits par leur nom(par ordre alphabétique)
- écrire une fonction qui permet d'éclater le fichier en deux.Le premier fichier contient les produits dont le prix unitaire est supérieur à 50 et le deuxième inférieur à 50
- écrire un programme qui permet de tester
Votre aide est vivement souhaité . Merci d'avance
Mon mail est rakhoutall@hotmail.fr
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 juil. 2008 à 00:29
5 juil. 2008 à 00:29
Commence à faire quelque chose, il y a certains points qui ne devraient pas poser de trop gros problèmes.
Pour le reste on t'aidera à débuger ta version beta...
Allez juste pour s'assurer que tu commences bien :
Pour le reste on t'aidera à débuger ta version beta...
Allez juste pour s'assurer que tu commences bien :
type produit=record code,nom:string; prix:real; nbre:integer; end; fichier=file of produit;
rakhou10
Messages postés
4
Date d'inscription
vendredi 4 juillet 2008
Statut
Membre
Dernière intervention
5 juillet 2008
5 juil. 2008 à 00:36
5 juil. 2008 à 00:36
merci pour ton aide mais mon probleme est que je ne suis pas bien en programmation
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 juil. 2008 à 00:51
5 juil. 2008 à 00:51
Alors vas-voir des discussions ayant déjà traitées ce genre de problèmes (comme ici) tu auras juste à adapter ton exercice sur le code...
Mais au moins ça te permettra de t'améliorer en programmation (plus qu'en attendant qu'on te donne la réponse)
Mais au moins ça te permettra de t'améliorer en programmation (plus qu'en attendant qu'on te donne la réponse)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
rakhou10
Messages postés
4
Date d'inscription
vendredi 4 juillet 2008
Statut
Membre
Dernière intervention
5 juillet 2008
5 juil. 2008 à 00:57
5 juil. 2008 à 00:57
j'ai essayé de le faire mais c'est les fonctions qui me posent problemes
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 juil. 2008 à 01:06
5 juil. 2008 à 01:06
Perso je préfère aider les gens qui font :
function Divise(a,b:integer);
begin
a/b
end;
pourquoi ça marche pas ?
C'est faux mais ça ressemble à quelquechose qui est facile à débuger
Plutôt qu'aider ceux (comme toi) qui arrivent et qui disent "alors voilà il me faut ça, ça et ça" !
Ici on est sur un forum d'entraide et pas dans une classe ! alors je veux bien t'aider mais mets-y un peu du tien
Donne nous ce que tu as fait (même si ça marche pas, ou si c'est incomplet) on va pas te dire que t'es nul, mais on t'expliquera où et pourquoi c'est faux...
function Divise(a,b:integer);
begin
a/b
end;
pourquoi ça marche pas ?
C'est faux mais ça ressemble à quelquechose qui est facile à débuger
Plutôt qu'aider ceux (comme toi) qui arrivent et qui disent "alors voilà il me faut ça, ça et ça" !
Ici on est sur un forum d'entraide et pas dans une classe ! alors je veux bien t'aider mais mets-y un peu du tien
Donne nous ce que tu as fait (même si ça marche pas, ou si c'est incomplet) on va pas te dire que t'es nul, mais on t'expliquera où et pourquoi c'est faux...
rakhou10
Messages postés
4
Date d'inscription
vendredi 4 juillet 2008
Statut
Membre
Dernière intervention
5 juillet 2008
5 juil. 2008 à 01:36
5 juil. 2008 à 01:36
program gestion_produit;
uses crt;
type produit=record
code:integer;
nom:string;
pu:real;
qte:integer;
end;
f:file of produit;
function saisie(var f:produit);
begin
assign(f,'c:\repert.dat');
rewrite(f);
with f do begin
repeat
write('CODE:');
readln(code);
write('NOM:');
readln(nom);
write('PRIX UNITAIRE:');
readln(pu);
write('QUANTITE:');
readln(qte):
if (length(nom) dif 0)then write(f,produit);
until (length(nom)=0);
end;
end;
Begin
clrscr;
saisie(f);
close(f);
readln
end.
j'ai fait ça pour la fonction saisie mais y a une erreur.Merci
uses crt;
type produit=record
code:integer;
nom:string;
pu:real;
qte:integer;
end;
f:file of produit;
function saisie(var f:produit);
begin
assign(f,'c:\repert.dat');
rewrite(f);
with f do begin
repeat
write('CODE:');
readln(code);
write('NOM:');
readln(nom);
write('PRIX UNITAIRE:');
readln(pu);
write('QUANTITE:');
readln(qte):
if (length(nom) dif 0)then write(f,produit);
until (length(nom)=0);
end;
end;
Begin
clrscr;
saisie(f);
close(f);
readln
end.
j'ai fait ça pour la fonction saisie mais y a une erreur.Merci
rakhou10
Messages postés
4
Date d'inscription
vendredi 4 juillet 2008
Statut
Membre
Dernière intervention
5 juillet 2008
5 juil. 2008 à 01:52
5 juil. 2008 à 01:52
merci de ton aide et bonne nuit
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
5 juil. 2008 à 12:48
5 juil. 2008 à 12:48
Tu écris f:file of produit, f a donc un type bien défini, tu ne peux donc pas dire par la suite var f:produit (d'autant qu'il ne s'agit pas vraiment d'un paramètre) déclarons plutôt var p:produit; f:file of produit;
Remarque, ta fonction ne renvoie aucun résultat, il s'agit donc d'une procédure
Pour le reste, rien à dire, j'ai toutefois fais quelques améliorations dans la boucle:
Remarque, ta fonction ne renvoie aucun résultat, il s'agit donc d'une procédure
procedure saisie; var p:produit; f:file of produit; begin end;Ensuite, p étant une variable de type produit, on ne peut accéder à son code, nom, prix unitaire, et quantité, qu'en utilisant p.code, p.nom, p.pu et p.qte
write('CODE : '); readln(p.code); write('NOM : '); readln(p.nom); write('PRIX UNITAIRE : '); readln(p.pu); write('QUANTITE : '); readln(p.qte);En ce qui concerne ta boucle, j'avoue ne pas connaître l' instruction with f repeat until c'est pourquoi je ne l'utiliserai pas, je vais dire qu'au départ p.nom n'est pas vide, et faire une boucle while length(p.nom)>0 do
p.nom:='*'; while length(p.nom)>0 do begin //... if length(p.nom)>0 then write(f,p); end;Etant donné que f n'est plus une variable globale mais locale à la procédure, qu'elle est assigné et ouverte dans la procédure, il vaut mieux la fermer aussi dans cette procédure plutôt que dans ton programme de test.
Pour le reste, rien à dire, j'ai toutefois fais quelques améliorations dans la boucle:
uses crt; type produit=record code:integer; nom:string; pu:real; qte:integer; end; procedure saisie; var p:produit; f:file of produit; begin assign(f,'D:\test_g\repert.dat'); rewrite(f); while true do begin write('NOM : '); // mettre le nom en premier est plus logique readln(p.nom); if p.nom='' then break; // sort de la boucle si pas de nom write('CODE : '); readln(p.code); write('PRIX UNITAIRE : '); readln(p.pu); write('QUANTITE : '); readln(p.qte); writeln; write(f,p); // si on arrive là c'est qu'on peut écrire end; close(f); end; begin clrscr; saisie; writeln('Fin de la saisie'); readln; end.
slt, j'ai tester la procedure saisie ça marche mais le probleme est que on ne peut pas revenir au programme source meme si on saisie la valeur 0 c puor koi j'ai voulu utiliser la boucle repeat. Merci
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
6 juil. 2008 à 12:46
6 juil. 2008 à 12:46
De la façon dont tu avais écrit cette boucle, la condition était length(nom)=0 ce qui est différent de nom=0.
En fait pour revenir au programme (tel que je l'ai écrit avant) il faut taper un nom de taille 0, c'est à dire ne rien écrire, mais appuyer sur entrée quand même.
Si tu veux sortir de la boucle en tapant un nom=0, il faudra tout simplement écrire if p.nom='0' then break;
En fait pour revenir au programme (tel que je l'ai écrit avant) il faut taper un nom de taille 0, c'est à dire ne rien écrire, mais appuyer sur entrée quand même.
Si tu veux sortir de la boucle en tapant un nom=0, il faudra tout simplement écrire if p.nom='0' then break;