Algorithme de sondage ( en pascal)

Fermé
stan - 16 juin 2008 à 00:56
lowpien Messages postés 41 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 22 janvier 2011 - 31 juil. 2008 à 15:12
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.
A voir également:

15 réponses

je vois deja les maux de tete pointer.......
1
lowpien Messages postés 41 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 22 janvier 2011
31 juil. 2008 à 15:12
loll oh que oui.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 juin 2008 à 21:19
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 juin 2008 à 21:38
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 juin 2008 à 23:27
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
17 juin 2008 à 00:28
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
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
17 juin 2008 à 12:11
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
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
18 juin 2008 à 00:33
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
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
18 juin 2008 à 17:56
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
18 juin 2008 à 18:02
--
La confiance n'exclut pas le contrôle
0
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
19 juin 2008 à 00:24
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
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
ouffff je peux me concentrer a apprendre les pointeur......
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 juin 2008 à 00:03
Alors bon courage, les pointeurs sont bien plus difficile à comprendre que ce qu'on a fait...
0