Écriture et lecture d'un fichier d'enregistrements
Bonjour à tous,
Dans le cadre d'un devoir pour mon école, j'ai un programme à coder. Je pense ne pas être très loin du but mais je ne comprend pas pourquoi le compilateur me renvoie à chaque execution la valeur : 0, j'ai beau chercher je ne trouve pas mon erreur.
Merci par avance à ceux qui se donneront la peine de jeter à un oeil.
Voici l'énoncé :
Citation:
On se propose d’écrire un programme permettant de gérer des albums musicaux, c’est-à-dire : saisir l’ensemble des albums, faire la sauvegarde dans un fichier, lire un fichier existant et déterminer l’album qui dure le plus longtemps.
1) Définition des types
- Déclarer une constante MAX_CHANSON à 30 (nombre maximum de chansons par album) et une constante MAX_ALBUM à 20 (nombre maximum d’albums dans le fichier).
- Définir un type enregistrement T_chanson comprenant les champs titre (une chaîne de 63 caractères au plus) et duree (un entier exprimant la durée en secondes).
- Définir un type enregistrement T_album comprenant les champs liste (un tableau de T_chanson indicé de 1 à MAX_CHANSON), nb_chansons et annee (des entiers), titre et artiste (des chaînes de 63 caractères au plus).
2) Saisie et sauvegarde des albums
- Définir un type fichier F_albums permettant de sauvegarder des éléments du type T_album.
- Ecrire une procédure saisie_album(nom_fichier :string) permettant de saisir les informations de chacun des albums et de les sauvegarder dans le fichier nom_fichier. Le fichier doit être fermé à la fin de la procédure.
3) Lecture du fichier et détermination de l’album de plus long durée
- Ecrire une fonction duree_totale(a : T_album) qui renvoie la durée totale en secondes de l’album a.
- Ecrire une fonction plus_long_album(nom_fichier :string) qui ouvre le fichier nom_fichier créé par saisie_albums, lit les enregistrements de ce fichier et renvoie la durée de l’album le plus long en secondes.
4) Programme principal
Ecrire le programme principal faisant appel aux différentes fonctions et procédures."
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| program EXO;
const
MAX_CHANSON = 30;
MAX_ALBUM = 20;
type
T_Chanson = record
titre : string[63];
duree : integer;
end;
T_album = record
liste : array [1..MAX_CHANSON] of T_Chanson;
nb_chansons, annee : integer;
titre, artiste : string[63];
end;
F_albums = file of T_album;
var
nomFichierext:string;
procedure saisie_album(nom_fichier : string);
var
na ,nc ,i ,j : integer;
f : F_albums;
album : T_album;
begin
repeat
writeln('combien d albums voulez vous sauvegarder ?');
readln(na);
until na<MAX_ALBUM;
assign(f,nom_fichier);
rewrite(f);
for i:=1 to na do
begin
with album do
begin
writeln (i,'eme album: ');
write('Entrez le nombre de chanson'); readln(nc);
for j:=1 to nc do
begin
write('Titre chanson: '); readln(liste[j].titre);
write('duree de la chanson: '); readln(liste[j].duree);
end;
nb_chansons := nc;
write('l annee de l album ',i,': '); readln(annee);
write('titre de l album ',i,': '); readln(titre);
write('artiste de l album ',i,': '); readln(artiste);
end;
end;
close(f);
end;
function dureetotale(a : T_album): integer;
var
i, dt : integer;
begin
dt:=0;
for i:=1 to a.nb_chansons do
dt:= dt + a.liste[i].duree;
dureetotale:=dt;
end;
function plus_long_album(nom_fichier :string): integer;
var
a : T_album;
max : integer;
f : F_albums;
begin
max:=0;
assign(f,nom_fichier);
reset(f);
while not eof(f) do begin
read(f,a);
with a do begin
if (dureetotale(a)> max) then
max:=dureetotale(a);
end;
end;
close(f);
plus_long_album:=max;
writeln(max);
end;
begin
writeln('entrez nom fichier');
readln(nomFichierext);
saisie_album(nomFichierext);
plus_long_album(nomFichierext);
readln();
end. |