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

Free Pascal Discussion :

Fichiers et tableaux [Free Pascal]


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Par défaut Fichiers et tableaux
    Bonjour,

    J'étudie, cette année, une unité d'analyse numérique. Cependant, je suis ce cursus par correspondance et n'ai donc pas de TP sur ordinateur à mon programme.

    Je souhaite ainsi faire moi-même ces TP et programmer des algorithmes de résolution de systèmes linéaires. J'ai choisi de le faire en Pascal car j'ai un peu utilisé ce langage il y a quelques années.

    Cependant, j'ai oublié pas mal de choses et je voudrais vous demander des indications concernant deux manipulations :

    1° Supposons que je dispose de trois fichiers A, B, C :
    • A := coefficients_matrice.dat
    • B := second membre.dat
    • C := solution.dat

    Dans chacun des fichiers sont stockés des nombres (réels) séparés par un espace.

    -> Quelle est la syntaxe Pascal pour :
    • lire les données des fichiers A et B
    • écrire des données dans le fichier C

    2°) Je veux stocker les données des fichiers A et B dans, respectivement :
    • un tableau T[i,j] (i et j variant de 1 à n)
    • un tableau B[i] (i variant de 1 à n)

    Comment faire pour :
    • déclarer ces tableaux (de réels)
    • écrire dans ces tableaux ?

    Merci d'avance pour vos réponses.

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 051
    Billets dans le blog
    2
    Par défaut
    Bonjour !
    Citation Envoyé par Bruno0693 Voir le message
    Dans chacun des fichiers sont stockés des nombres (réels) séparés par un espace.
    S'agit-il d'une obligation ? Si tu as le choix, le mieux est de créer des fichiers de réels. La lecture et l'écriture seront simplifiés par rapport à un fichier texte contenant des nombres avec séparateur. Exemple de lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Var A : File of Real;
        Buffer : Real;
     
    Begin
      Assign(A,'coefficients_matrice.dat');
      Reset(A);
      while not EOF(A) do
        Read(A,Buffer);
      Close(A);
    End.
    Si le contenu du fichier doit être chargé dans un tableau, il suffit d'incrémenter l'indice dans le tableau à chaque itération de la boucle de lecture :

    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
    Const n = 100;   (* Nombre d'éléments du tableau *)
     
    Var A : File of Real;
        B : Array [1..n] of Real;
        i : Integer;
     
    Begin
      i := 1;   (* Initialisation du compteur *)
      Assign(A,'coefficients_matrice.dat');
      Reset(A);
      while not EOF(A) do
        begin
          Read(A,B[i]);
          Inc(i);   (* Incrémentation du compteur *)
        end;
      Close(A);
    End.
    Pour écrire dans un fichier, c'est aussi simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Const n = 100;   (* Nombre d'éléments du tableau *)
     
    Var C : File of Real;
        B : Array [1..n] of Real;
        i : Integer;
     
    Begin
      Assign(C,'solution.dat');
      Rewrite(C);
      for i := 1 to n do
        Write(C,B[i]);
      Close(C);
    End.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    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]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Par défaut
    Bonjour,

    Merci beaucoup pour cette réponse détaillée.

    J'aurais quelques questions supplémentaires :

    • A propos des fichiers contenant les coefficients réels


    Je parlais, dans mon premier post, d'un fichier dans lequel les nombres (réels) seraient séparés par un espace.

    Citation Envoyé par Alcatîz Voir le message

    S'agit-il d'une obligation ? Si tu as le choix, le mieux est de créer des fichiers de réels. La lecture et l'écriture seront simplifiés par rapport à un fichier texte contenant des nombres avec séparateur.
    Qu'entends-tu par "fichier de réels" ?

    Je voyais un fichier Coeff.dat, que j'aurais tout bêtement créé à partir d'un fichier .txt et qui aurait cette allure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    1.5000 2.003 8.4563 9.356 etc.
    Est-ce que les espaces sont vraiment gênants ?

    Sinon, je pourrais l'écrire en sautant à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    1.5000 
    2.003 
    8.4563 
    9.356 
    etc.
    et là, si mes souvenirs sont bons et d'après ce que tu m'as écrit, je devrais utiliser la commande "readln".

    Enfin bon, tu me diras ce que tu veux dire par "fichier de réel", je ne suis pas trop sûr de comprendre ce dont il s'agit.



    • A propos de l'écriture dans un tableau.



    Si le contenu du fichier doit être chargé dans un tableau, il suffit d'incrémenter l'indice dans le tableau à chaque itération de la boucle de lecture :

    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
    Const n = 100;   (* Nombre d'éléments du tableau *)
     
    Var A : File of Real;
        B : Array [1..n] of Real;
        i : Integer;
     
    Begin
      i := 1;   (* Initialisation du compteur *)
      Assign(A,'coefficients_matrice.dat');
      Reset(A);
      while not EOF(A) do
        begin
          Read(A,B[i]);
          Inc(i);   (* Incrémentation du compteur *)
        end;
      Close(A);
    End.
    Là, si je comprends bien, tu m'as écrit la procédure à effectuer pour remplir un tableau à une dimension (le vecteur B). Mais comment faire pour un tableau à deux dimensions (qui doit contenir les coefficients d'une matrice n x n) ?

    Pour cela j'ai besoin d'un tableau à deux variables T[i,j]. Comment déclare-t-on un tel tableau ?



    A+

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 051
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Bruno0693 Voir le message
    Je parlais, dans mon premier post, d'un fichier dans lequel les nombres (réels) seraient séparés par un espace.

    Qu'entends-tu par "fichier de réels" ?

    Je voyais un fichier Coeff.dat, que j'aurais tout bêtement créé à partir d'un fichier .txt et qui aurait cette allure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    1.5000 2.003 8.4563 9.356 etc.
    Est-ce que les espaces sont vraiment gênants ?

    Sinon, je pourrais l'écrire en sautant à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    1.5000 
    2.003 
    8.4563 
    9.356 
    etc.
    et là, si mes souvenirs sont bons et d'après ce que tu m'as écrit, je devrais utiliser la commande "readln".

    Enfin bon, tu me diras ce que tu veux dire par "fichier de réel", je ne suis pas trop sûr de comprendre ce dont il s'agit.
    La différence entre un fichier texte avec séparateurs, dans lequel les nombres réels sont stockés sous forme de chaînes de caractères, et un fichier de réels, dans lequel ceux-ci sont stockés directement sous forme binaire, tient dans le fait qu'une conversion est effectuée par la procédure read(ln), dans le 1er cas, et non dans le second.

    Un fichier texte avec un nombre par ligne est déjà une amélioration par rapport au fichier texte avec séparateurs : une boucle avec simplement la fonction readln lira (et convertira) chaque nombre, tandis qu'avec les séparateurs, chaque itération de la boucle devra lire alternativement un nombre puis un séparateur, soit deux lectures par nombre (j'espère être assez clair, je suis très fatigué).

    Citation Envoyé par Bruno0693 Voir le message
    Mais comment faire pour un tableau à deux dimensions (qui doit contenir les coefficients d'une matrice n x n) ?

    Pour cela j'ai besoin d'un tableau à deux variables T[i,j]. Comment déclare-t-on un tel tableau ?
    On déclare un tableau à deux dimensions comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var T : Array [1..n,1..n] of Real;
    La lecture du contenu de la matrice dans le fichier se fait avec deux indices. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    i := 1;
    j := 1;
    while not EOF(A) do
      begin
        Read(A,B[i,j]);
        if j = n
           then   (* On entame une nouvelle ligne de la matrice *)
             begin
               j := 1;
               Inc(i);
    	 end
           else   (* Colonne suivante *)
             Inc(j);
      end;
    Tu peux trouver de plus amples explications dans un de nos tutoriels :
    http://pascal.developpez.com/cours/

    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    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]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Par défaut
    Bonjour,

    Merci beaucoup pour tes réponses, Alcatîz. Cela va m'être très utile.

    J'ai regardé le tutoriel que tu m'indiques. Il est très intéressant.

    Sinon, une dernière question à propos des fichiers de réels : j'ai bien compris la différence entre fichier texte (converti ensuite en binaire) et fichier de réels. Cependant, comment fait-on pour créer un fichier de réels (déjà codé en binaire donc) ?

    A+,
    Bruno.

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 051
    Billets dans le blog
    2
    Par défaut
    Pour créer un fichier de réels à partir de rien, tu peux réaliser en vitesse un petit programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Program FichReel;
     
    Var fReels : File of Real;
        r : Real;
     
    Begin
      Assign(fReels,'A.dat');
      Rewrite(fReels);
      r := 1.234567; Write(fReels,r);
      r := 3.456789; Write(fReels,r);
      { ... etc ... }
      Close(fReels);
    End.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    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]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD16] Importation d'un fichier .TXT (tableaux) dans une table
    Par moimoi78 dans le forum WinDev
    Réponses: 4
    Dernier message: 11/04/2011, 18h28
  2. Réponses: 0
    Dernier message: 11/11/2010, 08h30
  3. Fichier et tableaux
    Par tranenengel dans le forum Débuter
    Réponses: 7
    Dernier message: 26/05/2010, 10h03
  4. Fichier et Tableaux
    Par axelfelix dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 17/05/2010, 14h36
  5. Réponses: 4
    Dernier message: 24/11/2007, 09h12

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