Algorithme de sondage ( en pascal)

Bonjour,

j'essaye d'ecrire un programme, qui demande des information:
le niveau d'etude(primaire-secondaire-collegial-universitaire), la residence(ville ou campagne), l'annee de naissance et le revenu,

ensuite le programme dois analyser tout ca et

afficher le niveau d'etude pour les citadin qui gagne 40 000 par an,
afficher la proportion de citadin et de ruraux de plus de 30 ans qui ont finit au moin des etudes collegial
afficher le salaire annuel moyen des citadins qui un un diplome universitaire
afficher le nombre de personne qui ont fait l'universitee et qui gagne plus de 60 000.

J'ai debuter mon programme, mais je suis coincer, alors si quelqu'un peut m'aider en me donnant des indice, se sera apprecier.

Merci

uses
forms;
type
fich = record
end;

var
fiche:fich;
nombres,saisie, diplome, residence, annee, revenu: integer ;

begin
saisie:=1;
diplome:=0;
residence:=0;
while saisie=1 do
begin

writeln;
writeln;
writeln (' saisie de donnees');
writeln;
writeln;
writeln (' De quel niveau est votre diplome ? ');
writeln;
writeln (' 1:primaire, 2:secondaire');
write (' 3:collegial, 4:universitaire : ');
readln(diplome);
if diplome <> 0 then
begin
writeln;
writeln;
writeln (' Residez vous a la ville ou a la campagne ? ');
writeln;
write(' 1:ville, 2:campagne : ');
readln(residence);

writeln;
writeln;
write (' En quel annee etes vous nee ? : ');
readln(annee);

writeln;
writeln;
write (' quel est votre revenu anuel ? : ');
readln(revenu);
end
else
saisie:=0; {Fin de la boucle si la reponse est 0}

end;
writeln;
if revenu > 40000 then
if residence = 1 then
begin
write('le niveau d''etude est : ');
writeln(diplome);
write('l''annee de naissance est : ');
writeln(annee);
writeln;
end
else
if diplome = diplome then
begin
writeln(residence/100);
writeln(residence/100);
end
else
if annee > 1978 then
if residence = 2 then
if diplome >= 3 then
begin
writeln(revenu);

end
else
if residence = 1 then
if diplome = 4 then
begin
writeln(revenu);
end
else
if diplome = 4 then
if revenu > 60000 then
begin
writeln(nombres);
end;
readln;

end.
Configuration: Windows XP
Firefox 2.0.0.14

15 réponses

  1. Modérateur
    Pour le début je te propose quelques "améliorations" à prendre ou à laisser selon ce que tu veux faire
    program SansNom;
    
    var nombres, diplome, residence, annee, revenu: integer ;
        saisie:boolean;
    
    procedure writeln2(s:string);
    begin
    writeln; writeln(s);
    end;
    
    procedure writeln3(s:string);
    begin
    writeln; writeln2(s);
    end;
    
    begin
    diplome:=0;
    residence:=0;
    saisie:=false; // on a pas saisi les bonnes infos
    while not saisie do
          begin
          writeln3(' SAISIE DE DONNEES');
          writeln3(' De quel niveau est votre diplome ?');
          writeln2(' 1(primaire), 2(secondaire), 3(collegial) ou 4(universitaire) ?');
          write(' Choix : '); readln(diplome);
          saisie:=(diplome>0); {on boucle si réponse incorrecte}
          end;
    writeln3(' Residez vous a la ville (1) ou a la campagne (2) ?');
    write(' Choix : '); readln(residence);
    writeln3(' En quelle annee etes vous nee ? (format 19xx)');
    readln(annee);
    writeln3(' Quel est votre revenu annuel ?');
    readln(revenu);
    writeln;
    Après ça devient très confus, voici ce que comprend le compilateur :
    if revenu>40000 then
          if residence=1
          then begin
               writeln(' Le niveau d''etude est : ',diplome);
               writeln(' L''annee de naissance est : ',annee);
               writeln;
               end
          else if diplome = diplome // condition absurde !
               then begin
                    writeln(residence/100); // residence vaut 1 ou 2 !
                    writeln(residence/100); // voir ma remarque en bas
                    end
               else if annee > 1978
                    then
                        if residence=2 // impossible car résidence =1
                        then
                            if diplome>=3
                            then begin
                                 writeln(revenu);
                                 end
                            else if residence=1
                                 then if diplome=4
                                      then begin
                                           writeln(revenu);
                                           end
                                      else if diplome = 4
                                           then if revenu > 60000
                                                then begin
                                                     writeln(nombres); // jamais assigné
                                                     end;
    readln;
    end.
    Clarifie tes conditions, je pense qu'il vaut mieux dans un premier temps mettre des begin end à tous des then et else, plutôt que de placer un else if à la suite d'une instruction qui ne le concerne pas...

    Concernant le "residence/100", residence est un entier qui vaut 1 ou 2, si tu veux obtenir 0.01 et 0.02 tu dois écrire "real(residence)/100" ou sinon "residence div 100" qui donnera 0 dans les deux cas.

    Pour l'exemple 5.0/2.0=2.5 et 5 div 2 = 2 (il reste 1 = 5 mod 2)
    0
    1. Modérateur
      J'ai compris ce que tu voulais afficher comme résultats !

      Mais c'est infaisable en l'état, il faut te constituer une base de donnée rigoureuse (que tu n'as pas dans le code)
      Puis une fois constituée, la parcourir (de préférence le moins de fois possible) pour faire tes stats dessus !

      Je te conseille de faire une base de données en fichier, ça me parait le plus simple étant donné ton problème, en essayant de limiter un maximum la place prise par les données (préférer des types bytes au type integer qui prennet huit fois moins de places...)
      0
      1. Modérateur
        Regarde bien stan, tu vas voir j'ai été particulièrement zélé et je t'ai quasiment tout fait (y avait rien à la télé)
        program Statistiques;
        
        type Donnee=record
             age,niveau:byte; // le type byte va de 0 à 255
             citadin:boolean; // false si rural
             revenu:longint;  // longint atteinds les +/- 2^31 (seulement +/- 2^16 pour integer)
             end;
        
             BaseDonnee=file of Donnee;
        
        procedure LireDonnee(d:Donnee);
        begin
        if d.citadin then write('Citadin')
                     else write('Rural  ');
        write(' de ',d.age:3,' ans de niveau ');
        case d.niveau of
             1:write('primaire     ');
             2:write('secondaire   ');
             3:write('collegial    ');
             4:write('universitaire');
             end;
        writeln(' touchant ',d.revenu:10,' euros annuels');
        end;
        
        function SaisieDonnee:Donnee;
        var b:byte;
        begin
        writeln; writeln('---- SAISIE DES DONNEES ----'); writeln;
        b:=0;
        while (b=0) or (b>2) do
              begin
              writeln('Vivez-vous en ville (1) ou a la campagne (2) ?');
              write('Reponse : '); readln(b);
              end;
              result.niveau:=0;
        result.citadin:=(b=1);
        writeln; writeln('Quel est votre age ?');
        write('Reponse : '); readln(result.age); writeln;
        while (result.niveau=0) or (result.niveau>4) do
              begin
              writeln('De quel niveau est votre diplome ?');
              writeln('       Primaire (1), Secondaire (2), Collegial (3) ou Universitaire (4)');
              write('Reponse : '); readln(result.niveau);
              end;
        writeln; writeln('Quel est votre revenu annuel ?');
        write('Reponse : '); readln(result.revenu);
        writeln;
        end;
        
        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;
        end;
        
        procedure Analyser(var b:BaseDonnee);
        var d:Donnee; n1,n2,n3,n4,n5,n6,n7:longint; r1,r2,r3:real;
        begin
        writeln('---- ANALYSE DE LA BASE DE DONNEE ---'); writeln;
        n1:=0; n2:=0; n3:=0; n4:=0; n5:=0; n6:=0; n7:=0;
        seek(b,1);
        while not eof(b) do
              begin
              read(b,d);
              if d.citadin then begin
                                inc(n1);
                                if d.revenu>40000 then begin
                                                       inc(n2);
                                                       n3:=n3+d.niveau;
                                                       end;
                                if d.niveau=4 then n4:=n4+d.revenu;
                                end;
              if d.age>30 then  begin
                                inc(n5);
                                if d.niveau>=3 then inc(n6);
                                end;
              if (d.niveau=4) and (d.revenu>60000) then inc(n7);
              end;
        if n2>0 then begin
                      writeln('Niveau d''etude moyen des citadins gagnant plus de 40000 euros par an :');
                      r1:=real(n3)/real(n2); writeln('       ',r1:0:4);
                      writeln;
                      end;
        if n5>0 then begin
                     writeln('Pourcentage des plus de 30 ans de niveau d''etude collegial ou universitaire :');
                     r2:=100*real(n6)/real(n5); writeln('       ',r2:0:2);
                     writeln;
                     end;
        if n1>0 then begin
                     writeln('Salaire annuel moyen des citadins de niveau universitaire :');
                     r3:=real(n4)/real(n1); writeln('       ',r3:0:2);
                     writeln;
                     end;
        writeln('Nombre d''universitaires gagnant plus de 60000 euros mensuels :');
        writeln('       ',n7);
        end;
        
        var b:BaseDonnee;
            i,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);
        OuvrirBaseDonnee(s,b);
        write('Ajouter combien de donnees a la base ? '); readln(n); writeln;
        for i:=1 to n do
            AjouterDonnee(b,SaisieDonnee);
        Analyser(b);
        writeln; writeln('Fin du programme. Appuyer sur Entree'); readln;
        end.
        Si bien sûr tu avais des questions... je t'expliquerais ce que j'ai fait !
        0
        1. J'ai eut ton premier message, et j'essayais de reecrire mon programme en introduisant une fiche ou un tableau, j'aime bien la correction que tu as fait, ca facilite la comprehenssion, pour ce qui est du deuxieme programme que tu as ecrit je suis encore en train de le lire, et j'avoue que il m'a l'air pas mal difficile a comprendre, il y'a plusieur expression que je ne connais pas encore....
          0
          1. Modérateur
            L'important dans un premier temps est de savoir si ce programme correspond à ce que tu voulais faire...

            Si tu ne comprends pas des lignes de codes en particulier je pourrais te les expliquer si tu le souhaites.
            Toutefois il n'est pas si difficile que ça (il y a des choses bien plus pointues), ça correspond à un petit niveau bac+1 de licence informatique (mon niveau en fait)...
            0
        2. loll moi je ne fais que debuter en programmation, et je le fais par simple interet .......

          Disons que je ne suis pas encore a travailler avec les procedures, il y'a beaucoups de terme que je ne comprend pas encore, mais j'avoue que c'est fantastique, de pouvoir creer une base de donnee et y avoir acces, ......j'ai essayer de faire fonctionner ton programme, j'ai du effacer toute les lignes ou il y'avait marquer real (ex; r1:=real(n3)/real(n2); writeln(' ',r1:0:4);)

          J'arrive a rentrer les donnees, mais au niveau de l'analyse, ce n'est pas exactement ce j'essaye d'avooir.

          moi j'essaye :

          afficher le niveau d'etude et l'annee de naissance pour les citadin qui gagneplus de 40 000 par an,
          afficher la proportion de citadin et de ruraux de plus de 30 ans qui ont finit au moin des etudes collegial
          afficher le salaire annuel moyen des citadins qui un un diplome universitaire
          afficher le nombre de personne qui ont fait l'universitee et qui gagne plus de 60 000.
          0
          1. Modérateur
            Les lignes de type r1:=real(n3)/real(n2); writeln(' ',r1:0:4); sont les plus importantes car ce sont elles qui affichent les résultats des calculs tels que tu les avait décris dans ton premier message (ici n2=nombre de personne touchant plus de 40000, n3=la somme de leurs niveau, r1 correspond donc au niveau d'etude moyen des plus de 40000)

            Si tu as du effacer ces lignes à cause d'un plantage voici comment améliorer un peu :
            procedure Analyser(var b:BaseDonnee);
            var d:Donnee; n1,n2,n3,n4,n5,n6,n7,r1,r2,r3:real;
            begin
            writeln('---- ANALYSE DE LA BASE DE DONNEE ---'); writeln;
            n1:=0; n2:=0; n3:=0; n4:=0; n5:=0; n6:=0; n7:=0;
            seek(b,1);
            while not eof(b) do
                  begin
                  read(b,d);
                  if d.citadin then begin
                                    n1:=n1+1;
                                    if d.revenu>40000 then begin
                                                           n2:=n2+1;
                                                           n3:=n3+d.niveau;
                                                           end;
                                    if d.niveau=4 then n4:=n4+d.revenu;
                                    end;
                  if d.age>30 then  begin
                                    n5:=n5+1;
                                    if d.niveau>=3 then n6:=n6+1;
                                    end;
                  if (d.niveau=4) and (d.revenu>60000) then n7:=n7+1;
                  end;
            if n2>0 then begin
                          writeln('Niveau d''etude moyen des citadins gagnant plus de 40000 euros par an :');
                          r1:=n3/n2; writeln('       ',r1:0:4);
                          writeln;
                          end;
            if n5>0 then begin
                         writeln('Pourcentage des plus de 30 ans de niveau d''etude collegial ou universitaire :');
                         r2:=100*n6/n5; writeln('       ',r2:0:2);
                         writeln;
                         end;
            if n1>0 then begin
                         writeln('Salaire annuel moyen des citadins de niveau universitaire :');
                         r3:=n4/n1; writeln('       ',r3:0:2);
                         writeln;
                         end;
            writeln('Nombre d''universitaires gagnant plus de 60000 euros mensuels :');
            writeln('       ',n7:0:0);
            end;
            Si ce n'est toujours pas ça, dis moi où est-ce que ça ne te donne pas ce que tu veux (c'est peut-être juste un problème de mauvaise interprétation de l'énoncé de ma part)
            0
        3. ok, la ca fonctionne, que signifie les n1 a n7 et r1,r2,r3, les resultat ne sont pas exactement ce a quoi je m'attendait,

          writeln; writeln('Quel est votre age ?'); {ici, c'est l'annee de naissance que je veux entrer.}

          writeln('Niveau d''etude moyen des citadins gagnant plus de 40000 euros par an : ' ) {ici, c'est l'annee de naissance et le niveau d'etude qui dois etre doit etre donnee apres analyse}

          { donnez la proportion de citadin et de ruraux par niveau d'etude}

          writeln('Pourcentage des plus de 30 ans de niveau d''etude collegial ou universitaire :');{ ici, c'est le salaire annuel moyen des ruraux de plus de 30 ans de niveau d''etude collegial ou universitaire}
          0
          1. Modérateur
            les n1 à n7 sont des compteurs que j'ai placé au cours de la lecture pour pouvoir permettre de calculer les statistiques que tu cherches à avoir, et qui sont elles r1,r2, et r3 (r comme réponse)

            en ce qui concerne l'age, j'avais trouvé ça plus pratique que l'année (utilisé u byte plutôt qu'un integer) mais si tu y tiens on remet l'année (au format 19xx ?)

            writeln('Niveau d''etude moyen des citadins gagnant plus de 40000 euros par an : ' ) {ici, c'est l'annee de naissance et le niveau d'etude qui dois etre doit etre donnee apres analyse}
            Est-ce que ça veut dire que tu veux afficher toutes les années ? ou faire une année moyenne ? un tableau de statistique sur les années ? même questions pour le niveau d'étude...

            writeln('Pourcentage des plus de 30 ans de niveau d''etude collegial ou universitaire :');{ ici, c'est le salaire annuel moyen des ruraux de plus de 30 ans de niveau d''etude collegial ou universitaire}
            comme ça avait été dit auparavant je croyais que c'était un pourcentage que tu voulais... ça aussi on peut facilement le modifier...

            ps : en modifiant ces calculs, les n1... et r1... vont êtres (encore) modifiés, ils apparaissent dans le calcul mais leurs nom importe peu du moment qu'on les utilise correctement, de plus en modifiant le type de Donnee (pour que ce soit l'année et non l'age qui apparaisse) il y aura surement des modifications à faire dans certaines procedures

            réponds moi sur cette imprécision concernant le writeln('Niveau d''etude moyen des citadins gagnant plus de 40000 euros par an : ' ) {ici, c'est l'annee de naissance et le niveau d'etude qui dois etre doit etre donnee apres analyse} et je me penche sur tout ça demain (après une bonne nuit de sommeil)
            0
        4. Merci pour se complement d'information....

          writeln('Niveau d''etude moyen des citadins gagnant plus de 40000 euros par an : ' ) {ici, c'est l'annee de naissance et le niveau d'etude qui dois etre doit etre donnee apres analyse}
          Est-ce que ça veut dire que tu veux afficher toutes les années ? ou faire une année moyenne ? un tableau de statistique sur les années ? même questions pour le niveau d'étude...

          { ici, c'est toutes les annees, et niveau d'etude qui y corespond qui vont etres afficher}

          writeln('Pourcentage des plus de 30 ans de niveau d''etude collegial ou universitaire :');{ ici, c'est le salaire annuel moyen des ruraux de plus de 30 ans de niveau d''etude collegial ou universitaire}
          comme ça avait été dit auparavant je croyais que c'était un pourcentage que tu voulais... ça aussi on peut facilement le modifier...

          { oui c'est en pourcentage, mais du salaire annuel moyen des ruraux de plus de 30 ans de niveau d''etude collegial ou universitaire}
          0
          1. Modérateur
            J'ai opéré à quelques modifications dans quasiment toutes les procédures, donc j'ai remis tout le code...
            Voir mes notes liées aux const en tout début de code, et celles liées aux n1...n6 juste après le code
            program stan;
            
            const AEC=2008; // Année En Cours
                  ALI=1900; // Année Limite Inférieure (une année de naissance inférieure fera planter le programme)
                  ALS=2000; // Année Limite Supérieure (une année de naissance supérieure fera planter le programme)
            
            type Donnee=record
                 annee:integer;
                 niveau:byte; // le type byte va de 0 à 255
                 citadin:boolean; // false si rural
                 revenu:longint;  // longint atteinds les +/- 2^31 (seulement +/- 2^16 pour integer)
                 end;
            
                 BaseDonnee=file of Donnee;
            
            procedure LireDonnee(d:Donnee);
            begin
            if d.citadin then write('Citadin')
                         else write('Rural  ');
            write(' de ',d.annee,' de niveau ');
            case d.niveau of
                 1:write('primaire     ');
                 2:write('secondaire   ');
                 3:write('collegial    ');
                 4:write('universitaire');
                 end;
            writeln(' touchant ',d.revenu:10,' euros annuels');
            end;
            
            function SaisieDonnee:Donnee;
            var b:byte;
            begin
            writeln; writeln('---- SAISIE DES DONNEES ----'); writeln;
            b:=0;
            while (b=0) or (b>2) do
                  begin
                  writeln('Vivez-vous en ville (1) ou a la campagne (2) ?');
                  write('Reponse : '); readln(b);
                  end;
                  result.niveau:=0;
            result.citadin:=(b=1);
            writeln; writeln('Quel est votre annee de naissance ?');
            write('Reponse : '); readln(result.annee); writeln;
            while (result.niveau=0) or (result.niveau>4) do
                  begin
                  writeln('De quel niveau est votre diplome ?');
                  writeln('       Primaire (1), Secondaire (2), Collegial (3) ou Universitaire (4)');
                  write('Reponse : '); readln(result.niveau);
                  end;
            writeln; writeln('Quel est votre revenu annuel ?');
            write('Reponse : '); readln(result.revenu);
            writeln;
            end;
            
            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;
            end;
            
            procedure Analyser(var b:BaseDonnee);
            var d:Donnee; n1,n2,n3,n4,n5,n6:real;
                t:array[ALI..ALS,1..4] of real; i,j:integer;
            begin
            writeln('---- ANALYSE DE LA BASE DE DONNEE ---'); writeln;
            n1:=0; n2:=0; n3:=0; n4:=0; n5:=0; n6:=0;
            for i:=ALI to ALS do
                for j:=1 to 4 do
                    t[i,j]:=0;
            seek(b,1);
            while not eof(b) do
                  begin
                  read(b,d);
                  n1:=n1+d.revenu;
                  if d.citadin then begin
                                    if d.revenu>40000 then t[d.annee,d.niveau]:=t[d.annee,d.niveau]+1;
                                    if d.niveau=4 then begin
                                                       n2:=n2+1;
                                                       n3:=n3+d.revenu;
                                                       end;
                                    end;
                  if (AEC-d.annee>30) and (d.niveau>=3) then n4:=n4+d.revenu;
                  if (d.niveau=4) and (d.revenu>60000) then n5:=n5+1;
                  end;
            writeln('Niveau d''etude moyen des citadins gagnant plus de 40000 euros par an :');
            for i:=ALI to ALS do
                begin
                n6:=t[i,1]+t[i,2]+t[i,3]+t[i,4];
                if n6>0 then writeln('       Natifs de ',i,' : ',(t[i,1]+2*t[i,2]+3*t[i,3]+4*t[i,4])/n6:0:4);
                end;
            writeln;
            if n1>0 then begin
                         writeln('Revenus des plus de 30 ans de niveau d''etude collegial ou universitaire :');
                         writeln('       ',100*n4/n1:0:2,' % du total des revenus');
                         writeln;
                         end;
            if n2>0 then begin
                         writeln('Salaire annuel moyen des citadins de niveau universitaire :');
                         writeln('       ',n3/n2:0:2);
                         writeln;
                         end;
            writeln('Nombre d''universitaires gagnant plus de 60000 euros mensuels :');
            writeln('       ',n5:0:0);
            end;
            
            var b:BaseDonnee;
                i,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);
            OuvrirBaseDonnee(s,b);
            write('Ajouter combien de donnees a la base ? '); readln(n); writeln;
            for i:=1 to n do
                AjouterDonnee(b,SaisieDonnee);
            Analyser(b);
            writeln; writeln('Fin du programme. Appuyer sur Entree'); readln;
            end.
            Dans Analyser, j'ai supprimé les r1,r2,r3 et je vais donner un nom à chaque n1...n6 :

            n1 : somme des revenus annuels de toutes les personnes sondées
            n2 : nombre de citadins ayant un niveau universitaire
            n3 : somme des revenus des citadins ayant un niveau universitaire
            n4 : somme des revenus des plus de 30 ans ayant un niveau collégial ou universitaire
            n5 : nombre d'universitaire touchant plus de 60000 annuel
            n6 : nombre de citadins touchant plus de 40000 annuel (pour une année fixée)

            t est un tableau qui contient dans chaque case t[i,j] le nombre de citadins touchant plus de 40000 qui sont nés l'année i et qui ont un niveau j...
            0
            1. Modérateur
              --
              La confiance n'exclut pas le contrôle
              0
              1. J'ai toujours de la misere avec les (n), j'ai l'impression qu'ils sont sorties de nulle part, comment est ce que tu attribut que par exemple (n1 : somme des revenus annuels de toutes les personnes sondées ....etc....).

                par exemple disont que je veux :

                la somme des revenus: des ruraux de plus de 30ans ayant terminer des etude collegiale et universitaire
                nombres: des ruraux de plus de 30 ans ayant terminer des etudes collegiale et universitaire.
                en ajoutant des (n)?

                et si je veux calculer la proportion de citadins par niveaux d'etude?
                et la proportion de ruraux par niveau d'etude?
                0
                1. Modérateur
                  En effet, les n que j'ai mis sont des compteurs qui permettent de "tracer" un caractère spécifiques dans les données, à la fin ces données permettent d'effectuer les calculs nécessaires à ce que tu souhaite faire apparaitre...

                  Par exemple avec
                  n2 : nombre de citadins ayant un niveau universitaire
                  n3 : somme des revenus des citadins ayant un niveau universitaire
                  On obtient en faisant n2/n3, le revenu moyen d'un citadin de niveau universitaire.

                  Pour calculer la somme des revenus: des ruraux de plus de 30ans ayant terminer des etude collegiale et universitaire, dans l'algorithme tu rajoute un n7 (par exemple), que tu place dans le code :
                        if (AEC-d.annee>30) and (d.niveau>=3) then begin
                                                                   n4:=n4+d.revenu;
                                                                   if not d.citadin then n7:=n7+d.revenu;
                                                                   end;
                  Par contre pour calculer "par niveau d'étude", on a le choix de différencier "à la main" (c'est à dire avec des n) chacun des 4 cas, ou alors de le faire avec un tableau comme je l'ai fait pour différencier les années
                  (il faut dire que j'avais pas envie de faire à la main les 101 années * 4 niveaux d'etudes=404 n différents ! lol)

                  Toute la technique réside à placer les compteurs au bon endroit... Dans le cas contraire on obtiendra pas le résultat attendu (il faut aussi se méfier de la division par 0 qui est mortelle pour le programme...)
                  0
                  1. ouff je vais me concentrer sur tout ca demain soir, mais je vais ajouter -la proportion de citadin et de ruraux, en incluant un tableau [1..2,1..4], je comprend beaucoups mieux l'utulisation des (n)......merci....
                    0
                    1. ouffff je peux me concentrer a apprendre les pointeur......
                      0
                      1. Modérateur
                        Alors bon courage, les pointeurs sont bien plus difficile à comprendre que ce qu'on a fait...
                        0
                        1. je vois deja les maux de tete pointer.......
                          1
                          1. loll oh que oui.
                            0