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
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
A voir également:
- Algorithme de sondage ( en pascal)
- Sondage facebook - Guide
- Turbo pascal download - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Framadate sondage - Guide
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
15 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
16 juin 2008 à 21:19
16 juin 2008 à 21:19
Pour le début je te propose quelques "améliorations" à prendre ou à laisser selon ce que tu veux faire
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)
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)
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
16 juin 2008 à 21:38
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...)
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...)
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
16 juin 2008 à 23:27
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 !
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....
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
17 juin 2008 à 00:28
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)...
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)...
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.
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.
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
17 juin 2008 à 12:11
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 :
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)
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}
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}
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
18 juin 2008 à 00:33
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)
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)
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}
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}
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
18 juin 2008 à 17:56
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
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...
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...
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
18 juin 2008 à 18:02
18 juin 2008 à 18:02
--
La confiance n'exclut pas le contrôle
La confiance n'exclut pas le contrôle
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?
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?
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
19 juin 2008 à 00:24
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 :
(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...)
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...)
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....
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
21 juin 2008 à 00:03
21 juin 2008 à 00:03
Alors bon courage, les pointeurs sont bien plus difficile à comprendre que ce qu'on a fait...
31 juil. 2008 à 15:12