Releve de paie en pascal.

Bonjour,

je cherche a ecrire un programme pascal qui produira les relevés de paie de 5 employés d’une entreprise et les affichera à l’écran. Le programme devra être construit de façon structurée.

Chaque relevé (modèle libre) contiendra le nom complet, l’adresse et la fonction de l’employé, en plus des informations se rapportant particulièrement au relevé produit, sans les montants cumulatifs se retrouvant habituellement sur un tel type de relevé.

construit comme suit :
Un_Employe = RECORD
No_Employe : Byte ;
Nom_et_Prenom : String;
Fonction : String ;
Salaire_Horaire : Real ;
Code_Impot : Byte ;
No_et_Rue : String ;
Ville_et_Province : String ;
Code_Postal : String ;
END;
VAR
Liste1 : ARRAY[100..109] OF Un_employe;

Le champ Code_Impot peut valoir 1, 2 ou 3, qui signalent respectivement des déductions fiscales de base de 5 000, 7 000 et 10 000 $. Les taux d’impôt appliqués sont :
Revenu annuel ($) de taux d’impôt fédéral taux d’impôt provincial
15 000 et moins 0 % 0 %
15 001 à 30 000 15 % 20 %
30 001 à 50 000 19 % 23 %
50 001 et plus 23 % 27 %
Le revenu annuel imposable est estimé en fonction du salaire d’une période de paie et de la déduction fiscale de base. Il n’y pas d’autres déductions que les impôts provincial et fédéral.

Le programme fonctionnera à partir de la saisie au clavier des numéros d’employés
(compris entre 100 et 119) dont on veut les relevés de salaire, et du nombre d’heures
travaillées (maximum 90) pour une période de deux semaines.

Si quelqu'un a du temps pour jeter un coup d'oeil sur se programme et m'aider, se serais grandement apprecier.
Configuration: Windows XP
Internet Explorer 6.0

12 réponses

  1. J'ai debuter mon programme, mais j'aimerais savoir comment garder mes donnees en memoire pour y avoir acces , au lieu de toujours entrer de nouvelles donnees.

    program EMPLOYE;

    type
    Un_Employe = ^TEmploye;
    TEmploye = record
    No_Employe : Byte ;
    nom_et_prenom: string;
    Fonction : String ;
    Salaire_Horaire : Real ;
    Code_Impot : Byte ;
    No_et_Rue : String ;
    Ville_et_Province : String ;
    Code_Postal : String ;

    end;

    var
    Liste1 : ARRAY[100..119] OF Un_employe ;
    Employes: array[1..20] of Un_Employe;
    i, nombreEmployes: integer;
    No_Employe : Byte ;
    nom_et_prenom: string;
    Fonction : String ;
    Salaire_Horaire : Real ;
    Code_Impot : Byte ;
    No_et_Rue : String ;
    Ville_et_Province : String ;
    Code_Postal : String ;

    begin
    write('Combien d''Employes (Maximum : 20) : ');
    readln(nombreEmployes);
    if nombreEmployes > 20 then
    nombreEmployes := 20;
    for i := 1 to nombreEmployes do

    begin
    new(Employes[i]);
    write(' No_Employe : ');
    readln(No_Employe);
    Employes[i]^.No_Employe := No_Employe;
    write(' nom_et_prenom : ');
    readln(nom_et_prenom);
    Employes[i]^.nom_et_prenom := nom_et_prenom;
    write(' Fonction : ');
    readln(Fonction);
    Employes[i]^.fonction := Fonction;
    write(' Salaire_horaire : ');
    readln(Salaire_horaire);
    Employes[i]^.Salaire_horaire := Salaire_horaire;
    write(' Code_Impot : ');
    readln(Code_Impot);
    Employes[i]^.Code_Impot := Code_Impot;
    write(' No_et_Rue : ');
    readln(No_et_Rue);
    Employes[i]^.No_et_Rue := No_et_Rue;
    write(' Ville_et_Province : ');
    readln(Ville_et_Province);
    Employes[i]^.Ville_et_Province := Ville_et_Province;
    write(' Code_Postal: ');
    readln(Code_Postal);
    Employes[i]^.Code_Postal := Code_Postal;

    end;

    for i := 1 to nombreEmployes do

    writeln( ' No_Employe : ', Employes[i]^.No_Employe);
    writeln (' nom_et_prenom : ', Employes[i]^.nom_et_prenom);
    writeln( ' Salaire_horaire: ', Employes[i]^.Salaire_horaire);
    writeln( ' Code_Impot : ', Employes[i]^.Code_Impot);
    writeln( ' No_et_Rue : ', Employes[i]^.No_et_Rue);
    writeln( ' Ville_et_Province : ', Employes[i]^.Ville_et_Province);
    writeln(' Code_Postal : ', Employes[i]^.Code_Postal);

    for i := 1 to nombreEmployes do
    dispose(Employes[i]);

    readln;

    end.
    0
    1. Modérateur
      Tu peux utiliser un fichier de type file of Un_Employe pour y stocker tes données...
      0
      1. du genre BaseDonnee = file of Un_Employe ? et des procedure comme suit?

        procedure CreerBaseDonnee(CheminAcces:string);
        var b:BaseDonnee;
        begin
        assign(b,CheminAcces);
        rewrite(b);
        close(b);
        end;

        procedure OuvrirBaseDonnee(CheminAcces:string; var b:BaseDonnee);
        begin
        assign(b,CheminAcces);
        reset(b);
        end;

        procedure AjouterDonnee(var b:BaseDonnee;d:Donnee);
        begin
        seek(b,filesize(b));
        write(b,d);
        end;

        procedure AfficherBaseDonnee(var b:BaseDonnee);
        var d:Donnee;
        begin
        seek(b,1);
        while not eof(b) do
        begin
        read(b,d);
        writeln;
        LireDonnee(d);
        readln;
        end;
        0
    2. Modérateur
      Exactement, mais en n'oubliant pas la procédure FermerBaseDonnee...
      PS. il manque un end; à la fin de AfficherBaseDonnee
      0
      1. Peux tu regarder mon programme et me dire si je suis sur le bon chemin, ??

        program Releve_de_paie;

        type

        Un_Employe = ^TEmploye;
        TEmploye = record
        No_Employe : Byte ;
        nom_et_prenom: string;
        Fonction : String ;
        Salaire_Horaire : Real ;
        Code_Impot : Byte ;
        No_et_Rue : String ;
        Ville_et_Province : String ;
        Code_Postal : String ;

        end;

        BaseDonnee = file of Un_Employe;

        procedure CreerBaseDonnee(CheminAcces:string);
        var b:BaseDonnee;
        begin
        assign(b,CheminAcces);
        rewrite(b);
        close(b);
        end;

        procedure OuvrirBaseDonnee(CheminAcces:string; var b:BaseDonnee);
        begin
        assign(b,CheminAcces);
        reset(b);
        end;

        procedure AjouterDonnee(var b:BaseDonnee;d:Un_Employe);
        begin
        seek(b,filesize(b));
        write(b,d);
        end;

        procedure AfficherBaseDonnee(var b:BaseDonnee);
        var d:Un_Employe;
        begin
        seek(b,1);
        while not eof(b) do
        begin
        read(b,d);
        writeln;
        readln;
        end;
        end;

        var
        Liste1 : ARRAY[100..119] OF Un_employe ;
        Employes: array[100..119] of Un_Employe;
        i,nombreEmployes: integer;
        No_Employe : Byte ;
        nom_et_prenom: string;
        Fonction : String ;
        Salaire_Horaire : Real ;
        Code_Impot : Byte ;
        No_et_Rue : String ;
        Ville_et_Province : String ;
        Code_Postal : String ;

        var b:BaseDonnee;
        t, n:integer;
        s:string;
        begin
        writeln('Creer une nouvelle base de donnee, ou utiliser une precedente ?');
        write('1. Nouvelle, 2. Ancienne : '); readln(n); writeln;
        write('Chemin d''acces = '); readln(s); writeln;
        if n=1 then CreerBaseDonnee(s) else
        OuvrirBaseDonnee(s,b);
        readln;

        begin
        write('Combien d''Employes (Maximum : 20) : ');
        readln(nombreEmployes);
        if nombreEmployes > 20 then
        nombreEmployes := 20;
        for i := 1 to nombreEmployes do

        begin

        writeln;
        new(Employes[i]);
        write(' No_Employe : ');
        readln(No_Employe);
        Employes[i]^.No_Employe := No_Employe;
        write(' nom_et_prenom : ');
        readln(nom_et_prenom);
        Employes[i]^.nom_et_prenom := nom_et_prenom;
        write(' Fonction : ');
        readln(Fonction);
        Employes[i]^.fonction := Fonction;
        write(' Salaire_horaire : ');
        readln(Salaire_horaire);
        Employes[i]^.Salaire_horaire := Salaire_horaire;
        write(' Code_Impot : ');
        readln(Code_Impot);
        Employes[i]^.Code_Impot := Code_Impot;
        write(' No_et_Rue : ');
        readln(No_et_Rue);
        Employes[i]^.No_et_Rue := No_et_Rue;
        write(' Ville_et_Province : ');
        readln(Ville_et_Province);
        Employes[i]^.Ville_et_Province := Ville_et_Province;
        write(' Code_Postal: ');
        readln(Code_Postal);
        Employes[i]^.Code_Postal := Code_Postal;
        readln;
        end;

        end;

        end.
        0
    3. Modérateur
      Il est inutile (et faux) d'utiliser des pointeurs dans ton programme...

      En effet il serait inutile de faire un fichier de pointeurs puisqu'à la fin du programme les données visées par ces pointeurs sont "effacées" et donc inutilisables lorsque tu ouvres à nouveau ce fichier !

      Non ce qu'il faut faire c'est un fichier de données, un file of Un_Employe mais avec le type Un_Employe tel que tu le mettais au tout début (je n'avais pas vu la déviance à ton 2è post)

      Autres remarques :
      La position dans le fichier commence à 0, ainsi pour aller au début on fait seek(b,0) et non seek(b,1).
      Il faut absolument penser à fermer ton fichier à la fin du programme !
      Le type byte ne permet d'aller que jusqu'à 255, si tu veux dépasser ce nombre mais un integer.
      J'ai rajouter la procédure EntrerDonnee pour simplifier le programme principal.
      Et corriger la procedure AfficherBaseDonnee en utilsant une procedure auxiliaire AfficherDonnee.

      program Releve_de_paie;
      
      type Un_Employe=record
                      No_Employe : Byte ;
                      nom_et_prenom: string;
                      Fonction : String ;
                      Salaire_Horaire : Real ;
                      Code_Impot : Byte ;
                      No_et_Rue : String ;
                      Ville_et_Province : String ;
                      Code_Postal : String ;
                      end;
      
           BaseDonnee=file of Un_Employe;
      
      procedure CreerBaseDonnee(CheminAcces:string);
      var b:BaseDonnee;
      begin
      assign(b,CheminAcces);
      rewrite(b);
      close(b);
      end;
      
      procedure OuvrirBaseDonnee(CheminAcces:string; var b:BaseDonnee);
      begin
      assign(b,CheminAcces);
      reset(b);
      end;
      
      procedure EntrerDonnee(var d:Un_Employe);
      begin
      with d do
           begin
           write('No Employe        : '); readln(No_Employe);
           write('Nom et Prenom     : '); readln(nom_et_prenom);
           write('Fonction          : '); readln(Fonction);
           write('Salaire horaire   : '); readln(Salaire_Horaire);
           write('Code Impot        : '); readln(Code_Impot);
           write('No et Rue         : '); readln(No_et_Rue);
           write('Ville et Province : '); readln(Ville_et_Province);
           write('Code Postal       : '); readln(Code_Postal);
           end;
      end;
      
      procedure AjouterDonnee(var b:BaseDonnee;d:Un_Employe);
      begin
      seek(b,filesize(b));
      write(b,d);
      end;
      
      procedure AfficherDonnee(d:Un_Employe);
      begin
      with d do
           begin
           writeln('No Employe        : ',No_Employe);
           writeln('Nom et Prenom     : ',nom_et_prenom);
           writeln('Fonction          : ',Fonction);
           writeln('Salaire horaire   : ',Salaire_Horaire:0:2);
           writeln('Code Impot        : ',Code_Impot);
           writeln('No et Rue         : ',No_et_Rue);
           writeln('Ville et Province : ',Ville_et_Province);
           writeln('Code Postal       : ',Code_Postal);
           writeln;
           end;
      end;
      
      procedure AfficherBaseDonnee(var b:BaseDonnee);
      var d:Un_Employe;
      begin
      seek(b,0);
      while not eof(b) do
            begin
            read(b,d);
            AfficherDonnee(d);
            readln;
            end;
      end;
      
      var d:Un_Employe; b:BaseDonnee; i,n:integer; s:string;
      begin
      write('Quelle base de donnee utiliser ?    1. Nouvelle, 2. Ancienne : ');
      readln(n); writeln;
      write('Chemin d''acces : '); readln(s); writeln;
      if n=1 then CreerBaseDonnee(s);
      
      OuvrirBaseDonnee(s,b); // dans tous les cas il faut l'ouvrir !
      
      write(filesize(b),' employes deja fiches, en rajouter combien : '); // aucun maximum avec les fichiers !
      readln(n);
      for i:=1 to n do
          begin
          EntrerDonnee(d);
          AjouterDonnee(b,d);
          end;
      
      write('Voir les ',filesize(b),' employes fiches ?   1. Oui, 2. Non : '); readln(n); writeln;
      if n=1 then AfficherBaseDonnee(b);
      
      close(b); // dans tous les cas il faut fermer à la fin !
      writeln; write('Fin du programme. Appuyer Sur Entree'); readln;
      end.
      --
      La confiance n'exclut pas le contrôle
      0
      1. Modérateur
        Pour diminuer la taille du fichier où tu stocke les données, il est préférable de limiter la taille des string
        Par défaut un string est une chaine de 256 caractères donc ton fichier utilise à chaque string 256 octets alors que tu en utiliseras souvent beaucoup moins, tu pourrais alors modifier le type de départ, en "bloquant" la taille des string.

        Exemple : type Un_Employe=record... Code_Postal:string[10]; end;

        un string[n] ne prendra que n octets dans ton fichier, ça te permettra de gagner de la place !
        0
        1. C'est beaucoups plus clair en effet,

          J'ai introduit des pointeurs pour pouvoir faire l'analyse de la base de donnee

          exemple :

          procedure Analyser(var b:BaseDonnee);
          var
          d:Un_Employe; Heures : real;
          Salaire:real;
          liste1:array[100..119] of Un_Employe; i:integer;

          begin
          writeln('---- RELEVER DE PAIE ---'); writeln;

          for i:=NEmin to NEmax do
          seek(b,1);
          while not eof(b) do
          begin
          read(b,d);

          writeln;
          write(' No_Employe : ');
          readln(No_Employe);
          write(' Heures : ');
          readln(Heures);
          writeln(' Le Salaire est : ');
          salaire := Salaire_horaire * Heures;
          Readln(Salaire);

          Employes[i]^.No_Employe := No_Employe;
          Employes[i]^.nom_et_prenom := nom_et_prenom;
          Employes[i]^.fonction := Fonction;
          Employes[i]^.Salaire_horaire := Salaire_horaire;
          Employes[i]^.Code_Impot := Code_Impot;
          Employes[i]^.No_et_Rue := No_et_Rue;
          Employes[i]^.Ville_et_Province := Ville_et_Province;
          Employes[i]^.Code_postal := Code_Postal;

          end;

          end;
          0
      2. Modérateur
        Je ne vois toujours pas en quoi les pointeurs sont nécessaires...
        procedure Analyser(var b:BaseDonnee);
        var d,Null:Un_Employe;
            Heures,salaire:real;
            liste1:array[NEmin..NEmax] of Un_Employe;
            i,j:integer;
        begin
        writeln('---- RELEVER DE PAIE ---'); writeln;
        seek(b,0); // Attention le début est à 0 !
        i:=NEmin;
        while (not eof(b)) and (i<=NEmax) do
             begin
             read(b,d);
             write('No_Employe : '); readln(d.No_Employe); // à mon avis là y a erreur !
             write('Heures : '); readln(Heures);
             salaire:=d.Salaire_horaire * Heures;
             writeln('Le Salaire est : ',Salaire:0:2);
             writeln;
             liste1[i]:=d;
             i:=i+1;
             end;
        with Null do
             begin
             No_Employe:=0;
             nom_et_prenom:='';
             Fonction:='';
             Salaire_Horaire:=0;
             Code_Impot:=0;
             No_et_Rue:='';
             Ville_et_Province:='';
             Code_Postal:='';
             end;
        for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
             liste1[j]:=Null;
        end;
        L'utilisation de pointeur n'apparaitrait dans ton code UNIQUEMENT si tu souhaitais avoir liste1 qui soit de taille variable (c'est à dire potentiellement très grande, et donc adaptable au contenu du fichier) auquel cas on supprimerai le array.
        Mais si tu as toujours besoin de 20 cases dans ton tableau, il n'y a pas utilité de faire appel aux pointeurs ! Le type array évite de faire de si grande manipulation !
        0
        1. Modérateur
          j'ai oublié : const NEmin=100; NEmax=119;
          0
        2. @KXOk je pense que j'etais un peu trops camper sur les pointeurs, voila le restant de mon analyse, peux tu jeter un coups d'oeil et me dire ce que tu en pense.

          procedure Analyser(var b:BaseDonnee);
          var d,Null:Un_Employe;
          Heures,salaire:real;
          liste1:array[NEmin..NEmax] of Un_Employe;
          i,j:integer;
          begin
          writeln('---- RELEVER DE PAIE ---'); writeln;
          seek(b,0); // Attention le début est à 0 !
          i:=NEmin;
          while (not eof(b)) and (i<=NEmax) do
          begin
          read(b,d);
          write('No_Employe : '); readln(d.No_Employe); // à mon avis là y a erreur !
          write('Heures : '); readln(Heures);
          salaire:=d.Salaire_horaire * Heures;
          writeln('Le Salaire est : ',Salaire:0:2);
          writeln;
          salaire_annuel(B) := d.salaire * 26;
          writeln(‘Le salaire annuel Brut est : ‘,salaire_annuel(B) :0 :2);
          writeln;
          if Code_impot = 1
          salaire_annuel=salaire_annuel(B)-5000 else
          if Code_impot = 2
          salaire_annuel=salaire_annuel(B) – 7000 else
          if Code_impot = 3
          salaire_annuel=salaire_annuel(B) – 10000
          write(‘Le salaire annuel(I) est : ‘,salaire_annuel(I) :0 :2);
          writeln;
          if salaire_annuel(I) <= 15000
          salaire_annuel=salaire_annuel(I) – 0 else
          if 15001 >= salaire_annuel(I) <= 30000
          salaire_annuel = salaire_annuel(I)*35/100 else
          if 30001 >= salaire_annuel(I) <= 50000
          salaire_annuel = salaire_annuel(I)*42/100 else
          if salaire_annuel(I) >= 50001
          salaire_annuel = salaire_annuel(I)*50/100
          write(‘ Le salaire annuel est : ‘,salaire_annuel :0 :2);
          writeln;
          liste1[i]:=d;
          i:=i+1;
          end;
          with Null do
          begin
          No_Employe:=0;
          nom_et_prenom:='';
          Fonction:='';
          Salaire_Horaire:=0;
          Code_Impot:=0;
          No_et_Rue:='';
          Ville_et_Province:='';
          Code_Postal:='';
          end;
          for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
          liste1[j]:=Null;
          end;
          0
      3. Modérateur
        J'attire ton attention sur la ligne
        write('No_Employe : '); readln(d.No_Employe);
        À mon avis le programme ne fais pas ce que tu veux... Ici il MODIFIE le N° de l'employé !
        Si c'est ce que tu veux tant mieux sinon dis-moi ce que cette ligne est censé faire...
        procedure Analyser(var b:BaseDonnee);
        var d,Null:Un_Employe;
            Heures,salaire,salaire_annuel:real;
            liste1:array[NEmin..NEmax] of Un_Employe;
            i,j:integer;
        begin
        writeln('---- RELEVER DE PAIE ---'); writeln;
        seek(b,0); // Attention le début est à 0 !
        i:=NEmin;
        while (not eof(b)) and (i<=NEmax) do
              begin
              read(b,d);
              write('No_Employe : '); readln(d.No_Employe); // à mon avis là y a erreur !
              write('Heures : '); readln(Heures);
              salaire:=d.Salaire_horaire * Heures;
              writeln('Le Salaire est : ',Salaire:0:2);
              writeln;
              salaire_annuel:=salaire*26; // pourquoi 26 et non 12 ?
              writeln('Le salaire annuel Brut est : ',salaire_annuel:0:2);
              writeln;
              case d.Code_impot of
                   1:salaire_annuel:=salaire_annuel-5000;
                   2:salaire_annuel:=salaire_annuel-7000;
                   3:salaire_annuel:=salaire_annuel-10000;
                   end;
             writeln('Le salaire annuel(I) est : ',salaire_annuel:0:2);
             writeln;
             if (salaire_annuel>15000) and (salaire_annuel<=30000)
                                       then salaire_annuel:=salaire_annuel*0.35
        else if (salaire_annuel>30000) and (salaire_annuel<=50000)
                                       then salaire_annuel:=salaire_annuel*0.42
        else if salaire_annuel>50000   then salaire_annuel:=salaire_annuel*0.5;
             writeln('Le salaire annuel est : ',salaire_annuel:0:2);
             writeln;
             liste1[i]:=d;
             i:=i+1;
             end;
        
        with Null do
             begin
             No_Employe:=0;
             nom_et_prenom:='';
             Fonction:='';
             Salaire_Horaire:=0;
             Code_Impot:=0;
             No_et_Rue:='';
             Ville_et_Province:='';
             Code_Postal:='';
             end;
        for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
            liste1[j]:=Null;
        end;
        --
        La confiance n'exclut pas le contrôle 
        0
        1. salaire_annuel:=salaire*26; // pourquoi 26 et non 12 ?

          26 car j'ai calculer que en raison d'une paye toute les deux semaines, alors ca fait 26 paye.
          0
      4. ce que je veux, c'est entrer le numero d'employe, et ce numero doit me renvoyer les donnees de l'employe il est censer appartenir, alors si j'entre un numero d'employe et que je rentre le nombre d'heure travailler, je dois avoir toute les informations qui s'affiche sur cet employe....
        0
        1. Modérateur
          Remarque : je ne vois toujours pas à quoi sert liste1 puisqu'on la remplit mais qu'on ne la lit jamais...
          const NEmin=100; NEmax=119;
          
          function RechercherIndice(var b:BaseDonnee;var numero:byte):integer;
          var d:Un_Employe;
          begin
          seek(b,0);
          while not eof(b) do
                begin
                read(b,d);
                if d.No_Employe=numero then exit(filepos(b)-1); // -1 car déjà décalé
                end;
          result:=-1;
          end;
          
          procedure Analyser(var b:BaseDonnee);
          var d,Null:Un_Employe;
              numero:byte;
              Heures,salaire,salaire_annuel:real;
              liste1:array[NEmin..NEmax] of Un_Employe;
              i,j,n:integer;
          begin
          writeln('---- RELEVER DE PAIE ---'); writeln;
          i:=NEmin;
          while (not eof(b)) and (i<=NEmax) do
                begin
                write('No_Employe : '); readln(numero);
                n:=RechercherIndice(b,numero);
                if n>=0 then begin
                             read(b,d);
                             write('Heures : '); readln(Heures);
                             salaire:=d.Salaire_horaire * Heures;
                             writeln('Le Salaire est : ',Salaire:0:2);
                             writeln;
                             salaire_annuel:=salaire*26;
                             writeln('Le salaire annuel Brut est : ',salaire_annuel:0:2);
                             writeln;
                             case d.Code_impot of
                                  1:salaire_annuel:=salaire_annuel-5000;
                                  2:salaire_annuel:=salaire_annuel-7000;
                                  3:salaire_annuel:=salaire_annuel-10000;
                                  end;
                             writeln('Le salaire annuel(I) est : ',salaire_annuel:0:2);
                             writeln;
               if (salaire_annuel>15000) and (salaire_annuel<=30000)
                                         then salaire_annuel:=salaire_annuel*0.35
          else if (salaire_annuel>30000) and (salaire_annuel<=50000)
                                         then salaire_annuel:=salaire_annuel*0.42
          else if salaire_annuel>50000   then salaire_annuel:=salaire_annuel*0.5;
                             writeln('Le salaire annuel est : ',salaire_annuel:0:2);
                             writeln;
                             liste1[i]:=d;
                             i:=i+1;
                             end
                end;
          
          with Null do
               begin
               No_Employe:=0;
               nom_et_prenom:='';
               Fonction:='';
               Salaire_Horaire:=0;
               Code_Impot:=0;
               No_et_Rue:='';
               Ville_et_Province:='';
               Code_Postal:='';
               end;
          for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
              liste1[j]:=Null;
          end;
          --
          La confiance n'exclut pas le contrôle 
          0
          1. c'est vrais que liste1 ne me sert a rien quand j'essaye de faire fonctionner le programme, ... j'ai toujours un probleme au niveau de l'enregistrement du fichier

            BaseDonnee = file of Un_Employe ; ca me donne comme [Erreur] Project2.dpr(20): E2155 Le type 'Un_Employe' nécessite une finalisation - non autorisé dans le type fichier

            et aussi au niveau de : if d.No_Employe=numero then exit(filepos(b)-1); // -1 car déjà décalé me donne comme erreur [Erreur] Project2.dpr(97): E2066 Opérateur ou point-virgule manquant.
            0
          2. @jeffJe me demandais aussi si la maniere de placer mes procedure et fonction a une grande importance dans le traitement du programme ?
            0
        2. Modérateur
          Project.dpr ... c'est Delphi ça non ?

          Si tu utilises ce qu'on a fait dans un projet Delphi, il faudra que tu passe le code en unité et non en programme !
          De plus effectivement exit(valeur) n'est pas autorisé en Delphi il faut faire begin result:=valeur; exit; end;
          0
          1. Oui, j'avais enlever cette partie et laisser juste le exit, et ca me donne mes resultats, ........mais j'ai toujours une indication d'erreur..........[Avertissement] tentative1.dpr(100): W1035 La valeur de retour de la fonction 'RechercherIndice' peut être indéfinie
            0
        3. Modérateur
          Avec ce code, l'entier renvoie -1 si aucune donnee ne possède No_employe=numero.
          Sinon il renvoie la position du 1ère indice qui coïncide, en aucun cas elle est indéfinie...
          function RechercherIndice(var b:BaseDonnee;var numero:byte):integer;
          var d:Un_Employe;
          begin
          seek(b,0);
          while not eof(b) do
                begin
                read(b,d);
                if d.No_Employe=numero then begin
                                            result:=filepos(b)-1; // -1 car déjà décalé
                                            exit;
                                            end;
                end;
          result:=-1;
          end;
          --
          La confiance n'exclut pas le contrôle 
          0
          1. J'ai remis tout ca en ordre, enfin j'espere.....mais quand je fait fonctionner le programme je n'ai pas totalement ce que je veux, par exemple quand je rentre le numero d'un employe, il me donne les information sur l'employe suivant, j'ai mis un (-1) ici pour corriger

            if d.No_Employe=numero -1

            mais la il ne me donne plus d'information sur l'employe No 100(premier) et aussi le programme me demande de sortir chaque fois que je rentre l'employe no 119 (dernier)
            0
        4. Modérateur
          J'avoue que je n'ai pas fait de test pour vérifier les indices...
          Revoit en amont lors de l'appel de la procédure RechercherIndice s'il n'y a pas d'absurdité...
          Si ça ne marche pas, plutôt que de "jouer" sur le if, essaye plutôt de jouer sur le result:=filepos(b)-1
          Je ne sais pas trop pourquoi mais il est possible qu'enlever le-1 marche...
          0