IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Histogramme


Sujet :

Free Pascal

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut Histogramme
    Bonjour à vous tous. Je dois écrire une procédure qui retourne l’histogramme en pourcentages d'un tableau de répartitions t'en n catégories.
    J'ai écris ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    const nmax=1000;
    type tableaunombres=array[1..nmax] of real;
     
     
    procedure entreetableau(var t: tableaunombres; var n:integer);
    var i: integer;
    begin
    write('Entrez le nombre de données : ');
    readln(n);
    for i:=1 to n do
      begin
        write(' La ',i,' ème donnée est: ');
        readln(t[i]);
      end;
    end;
     
     
    procedure normalisepourcentage(var t: tableaunombres; n:integer;var pourcent:tableaunombres);
    var i:integer;c:real;
    begin
    c:=0;
    for i:=1 to n do
        c:=c+t[i];
    for i:=1 to n do
      pourcent[i]:=100*(t[i])/c;
    end;
     
     
    procedure histogramme(s:string;var t,pourcent:tableaunombres; n:integer);
    var i,r,k:integer;w:char;
    begin
    for i:=1 to n do
    t[i]:=pourcent[i];
    for i:=1 to n do
      begin
        r:=trunc(t[i]);
        ord(s[0]):=r;
        for k:=1 to r do
        s[k]:=*;{erreur}
      end;
    end;
     
     
    var t,pourcent:tableaunombres; n,i:integer; c:real; s:string;
    begin
    entreetableau(t,n);
    normalisepourcentage(t,n,pourcent);
    histogramme(s,t,pourcent,n);
    for i:=1 to n do
    writeln(i,' ',s,' ',t[i]:10:1);
    readln;
    end.

    et il me met illegal expression (là ou j'ai écrit en gras rouge) quand je compile.
    Or je croyais qu'on pouvait mettre n'importe quel caractère dans une chaine.
    Donc j'attends vos lumières.
    merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Hoe,
    Citation Envoyé par zymohydrolyse Voir le message
    et il me met illegal expression (là ou j'ai écrit en gras rouge) quand je compile.
    Or je croyais qu'on pouvait mettre n'importe quel caractère dans une chaine.
    Donc j'attends vos lumières.
    merci
    Oui, mais en Pascal, une chaîne ou un caractère s'écrivent entre deux simples quotes:

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut
    Merci ça y est je n'ai plus de problème de compilation mais quand je lance la procédure il m'affiche le numéro de cellule du tableau le pourcentage mais pas la chaine s.
    Des suggestions?

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Bie,

    En gérant ta chaine comme tu le fais (la ligne qui posait problème), le programme ne voit pas que tu ajoutes des caractères à cette chaine (il ne met pas la longueur à jour), et c'est donc comme si tu pissais dans un violon pour en sortir des sons de flûte.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut
    Et donc t'as des suggestions ?
    En fait je pensais que ça allait parce que je donne une longueur r à la chaine et ensuite je remplace les éléments jusqu'à r par * (enfin en tout cas c'est ce que je crois avoir programmé). Partant de là je ne vois pas où ça pèche donc si tu peux m'aider merci d'avance.

  6. #6
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Bonjour

    Ily a quand même un autre truc qui va pas dans ton code:
    Et concernant ce que disait droggo, tu gères mal la chaine qui doit contenir les étoiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    histogramme(s,t,pourcent,n);
    for i:=1 to n do
           writeln(i,' ',s,' ',t[i]:10:1);
    Sachant que ta chaine s n'est traité que localement et tu ne fais pas d'affichage dans la procédure, tu devrais plutôt penser à un tableau de chaines de caractères.

    Cordialement

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Par défaut
    Bonjour
    J'ai modifié la fin du programme mais il m'affiche toujours pas la chaine.
    De plus, maintenant il faut que j'appuie sur entrée après chaque ligne dans le programme pour qu'il m'affiche la suivante : je ne comprends pas pourquoi.
    Enfin, on m'obligé à travailler avec une chaine.
    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    const nmax=1000;
    type tableaunombres=array[1..nmax] of real;
     
     
    procedure entreetableau(var t: tableaunombres; var n:integer);
    var i: integer;
    begin
    write('Entrez le nombre de données : ');
    readln(n);
    for i:=1 to n do
      begin
        write(' La ',i,' ème donnée est: ');
        readln(t[i]);
      end;
    end;
     
     
    procedure normalisepourcentage(var t: tableaunombres; n:integer;var pourcent:tableaunombres);
    var i:integer;c:real;
    begin
    c:=0;
    for i:=1 to n do
        c:=c+t[i];
    for i:=1 to n do
      pourcent[i]:=100*(t[i])/c;
    end;
     
     
    procedure histogramme(s:string;var pourcent:tableaunombres;i:integer);
    var k:integer;
    begin
    ord(s[0]):=trunc(pourcent[i]);
    for k:=1 to ord(s[0]) do
    s[k]:='*';
    end;
     
     
    var t,pourcent:tableaunombres; n,i:integer; c:real; s:string;
    begin
    entreetableau(t,n);
    normalisepourcentage(t,n,pourcent);
    for i:=1 to n do
    begin
    histogramme(s,pourcent,i);
    writeln(i,' ',s,' ',pourcent[i]:10:1);
    readln;
    end;
    end.

  8. #8
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    for i:=1 to n do
    begin
    histogramme(s,pourcent,i);
    writeln(i,' ',s,' ',pourcent[i]:10:1);
    readln;
    end;
    Tu as mis readln dans la boucle 'for', c'est pour ça qu'il faut que tu appuie sur Entrez à chaque fois. Pour retourner à la normale, il te suffit de mettre readln apres la boucle for.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for i:=1 to n do
    begin
    histogramme(s,pourcent,i);
    writeln(i,' ',s,' ',pourcent[i]:10:1);
    end;
    readln;

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/01/2005, 10h53
  2. [CR8.5] Graphique : comment mélanger histogramme et ligne ?
    Par kiki26 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/01/2005, 15h28
  3. TChart et histogramme
    Par coucoucmoi dans le forum Composants VCL
    Réponses: 8
    Dernier message: 30/08/2004, 16h10
  4. Questions sur chartfx (histogramme)
    Par lejert dans le forum C++Builder
    Réponses: 2
    Dernier message: 20/01/2004, 13h54
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo