Exercice en Pascal

Résolu
GrandShrek Messages postés 2 Statut Membre -  
GrandShrek Messages postés 2 Statut Membre -
Bonjour,

J'ai essayé de résoudre cet exercice mais je me heurte à de nombreux problèmes. Voici l'énoncé de l'exercice et mon début de programme :

On souhaite mesurer expérimentalement la distribution des scores que l'on obtient en lançant x fois n dés à f faces. Pour cela on va stocker dans un tableau d'entiers le nombre d'occurrences de chaque score obtenu. Le programme devra comporter les sous-programmes suivants :

La procédure initialise qui initialise le tableau des occurrences des scores (chaque valeur à 0) en fonction du nombre n de dés et du nombre f de faces.

Une fonction lancer qui lance les n dés à n faces et retourne le score. On rappelle que la fonction random(a) génère un nombre aléatoire en 0 et a-1.)

Une procédure expérience qui lance x fois n dés à f faces et met à jour chaque lancé du tableau d'occurrence des scores

Une procédure affichage qui affiche les résultats des scores.

voici mon programme

program lancedede;  
   
const LMAX = 100;  
type TabEntiers =  array[1..LMAX] of integer;  
   
procedure initialise( var T : TAbEntiers;n,f:integer);  
var i :  integer;  
   
begin  
   for i:=n to (n*f) do  
      T[i]:=0;  
end; { initialise }  
   
   
function lancer(T : TabEntiers ;n,f :  integer) : integer;  
var c,i,r : integer;  
begin  
   c:=(n*f)-(n-1);  
   r:=random(c)+n;  
   
   for i:=n to (n*f) do  
      T[r]:=T[r]+1;  
end; { lancer }  
   
   
procedure experience(T : TabEntiers;nb,n,f : integer);  
var i : integer;  
begin  
   i:=0;  
   while (i<nb) do  
   begin  
      lancer(T,n,f);  
      T[i]:=T[i]+1;  
      i:=i+1;     
   end;  
end;  
   
var n,f,i,nb : integer;  
   T :  TabEntiers;  
begin  
   randomize();  
   write('Combien de dés :');  
   readln(n);  
   write('Combien de faces : ');  
   readln(f);  
   write('Combien de lancers: ');  
   readln(nb);  
   initialise(T,n,f);  
   lancer(T,n,f);  
   experience(T,nb,n,f);  
   for i:=1 to 12 do  
      write(T[i]);  
   
   
   
end.  


Merci d'avance pour votre aide.

2 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonsoir

    après quelques corrections (en turbo pascal)
    il te faudra écrire la procédure affiche ....

    program lancedede;    
         
    uses crt;  
    
    const LMAX = 100;    
    type TabEntiers =  array[1..LMAX] of integer;    
         
    procedure initialise( var T : TAbEntiers;n,f:integer);    
    var i :  integer;  
    begin    
       for i:=1 to (n*f)-n+1 do  
          T[i]:=0;  
    end; { initialise }    
           
    function lancer(f,n : integer) : integer;  
    var s,i,r : integer;  
    begin    
       s:=0;  
       for i:=1 to n do  
         begin  
           r := random(f)+1;  
           s := s+r;  
         end;  
       lancer := s;  
    end; { lancer }    
         
    procedure experience(var T : TabEntiers;x,n,f : integer);  
    var i,s : integer;  
    begin    
       for i := 1 to x do  
       begin    
          s := lancer(f,n);  
          T[s-n+1]:=T[s-n+1]+1;  
       end;  
    end;  
    
    var n,f,i,x : integer;  
       T :  TabEntiers;    
    begin  
       clrscr;  
       randomize;  
       write('Combien de des : ');  
       readln(n);  
       write('Combien de faces : ');    
       readln(f);  
       write('Combien de lancers: ');    
       readln(x);  
       initialise(T,n,f);    
       experience(T,x,n,f);  
       for i:=1 to n*f-n+1 do  
         begin  
          write(n+i-1:4);  
          writeln(T[i]:4);  
        end;  
    end.


    bonne suite
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      RQ. comme tu n'as que des entiers positifs, à la place du type integer (de -32768 à 32767), il vaudrait mieux utiliser le type word (de 0 à 65535)
      0
  2. GrandShrek Messages postés 2 Statut Membre
     
    Merci beaucoup !
    0