IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

Écriture et lecture d'un fichier d'enregistrements


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mai 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut É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é :

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Salut,

    Commençons par appeler un chat un chat :
    Citation Envoyé par Nebul78 Voir le message
    Je pense ne pas être très loin du but mais je ne comprend pas pourquoi le compilateur me renvoie à chaque exécution la valeur : 0
    Le programme !
    Le compilateur, c'est l'outil qui génère le programme, et c'est l'exécution du programme qui te retourne 0.

    Citation Envoyé par Nebul78 Voir le message
    j'ai beau chercher je ne trouve pas mon erreur.
    Quand c'est comme ça, puisque le programme te retourne une valeur 0 pour ta variable "max", il faut aller voir ce qui se passe là où elle est renseignée.
    Pour ça, tu pourrais blinder ton code de writeln(variable), et tu verras vite où ça coince.

    C'est bien, ça va t'apprendre à déboguer, c'est toujours utile
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par Nebul78 Voir le message
    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.
    Bonjour,

    Tu as effectivement bien avancé, mais ton programme contient une erreur de taille : à aucun moment tu n'enregistres les données saisies . En effet, ta procédure saisie_album lit les données et les écrit à l'écran, mais jamais dans le fichier ouvert... Pour s'en rendre compte, il suffit d'éditer le fichier créé (avec n'importe quel éditeur de texte) : il est vide.

    Pendant que j'y suis, une petite maladresse : la fonction plus_long_album ne devrait que renvoyer la valeur calculée et non pas l'écrire à l'écran. Je supprimerais par conséquent le writeln(Max).
    En revanche, dans le corps principal du programme j'écrirais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    writeln(plus_long_album(nomFichierext));
    On n'a pas à préjuger de ce à quoi servira le résultat d'une fonction : on peut l'afficher, mais aussi s'en servir pour d'autres calculs par exemple (et sans vouloir l'afficher !).

    Bon courage pour la suite.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

Discussions similaires

  1. Enregistrer fichier .xls sans macro ni code vb
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/11/2005, 18h48
  2. Comment empêcher users d'enregistrer fichiers lourds sur bureau
    Par kikica dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 14/10/2005, 16h24
  3. Réponses: 9
    Dernier message: 22/09/2005, 17h34
  4. Enregistrement Fichier
    Par TheGoldViking dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/04/2005, 18h32
  5. Association des programmes aux fichiers: icônes
    Par jamesb dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/01/2005, 20h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo