Exercice en Pascal

Résolu/Fermé
GrandShrek Messages postés 2 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 17 novembre 2011 - Modifié par GrandShrek le 17/11/2011 à 13:59
GrandShrek Messages postés 2 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 17 novembre 2011 - 17 nov. 2011 à 23:52
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.
A voir également:

2 réponses

ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 429
Modifié par ccm81 le 17/11/2011 à 18:44
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
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 429
Modifié par ccm81 le 17/11/2011 à 20:57
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
GrandShrek Messages postés 2 Date d'inscription jeudi 17 novembre 2011 Statut Membre Dernière intervention 17 novembre 2011
17 nov. 2011 à 23:52
Merci beaucoup !
0