Algorithme de sondage ( en pascal)

stan -  
lowpien Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -
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. stan
     
    je vois deja les maux de tete pointer.......
    1
    1. lowpien Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
       
      loll oh que oui.
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  4. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. stan
     
    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. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  7. stan
     
    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. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  8. stan
     
    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. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  9. stan
     
    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
  10. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  11. KX Messages postés 19031 Statut Modérateur 3 020
     
    --
    La confiance n'exclut pas le contrôle
    0
  12. stan
     
    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
  13. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  14. stan
     
    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
  15. stan
     
    ouffff je peux me concentrer a apprendre les pointeur......
    0
  16. KX Messages postés 19031 Statut Modérateur 3 020
     
    Alors bon courage, les pointeurs sont bien plus difficile à comprendre que ce qu'on a fait...
    0