// Calcul de probabilités de jets de dés par dénombrement
function [frequences]=tirages(nb_d, nb_faces)
// calcule les fréquences de nb_d tirage de dés par dénombrement
// entrées : nb_d : nombre de tirages (entier)
// nb_faces : nombre de faces du dé
// sorties : frequences : matrice de fréquences (réels)
N = nb_faces^nb_d; // nombre de valeurs possibles
resultats = zeros(N, nb_d); // initialisation : résultats des tirages
for i = 1:nb_d // n° de colonne
k = nb_faces^(nb_d - i); //à la colonne i,
// on alterne k valeurs 0 et k valeurs 1
for j=0:nb_faces^(i - 1) - 1
for jj = 1:nb_faces
resultats((nb_faces*j + jj - 1)*k + 1:(nb_faces*j + jj)*k, i)...
= jj;
end
end
end
//disp(resultats);
somme = sum(resultats, "c");
frequences_non_triees = tabul(somme);
frequences = gsort(frequences_non_triees, "lr", "i");
frequences(:,2) = 100*frequences(:,2)/N; // normalisation des fréquences
endfunction
// génération des valeurs
freq_1d20 = tirages(1, 20);
freq_2d10 = tirages(2, 10);
freq_3d6 = tirages(3, 6);
freq_cumul_1d20 = freq_1d20;
freq_cumul_1d20(:, 2) = cumsum(freq_1d20(:, 2))
freq_cumul_2d10 = freq_2d10;
freq_cumul_2d10(:, 2) = cumsum(freq_2d10(:, 2))
freq_cumul_3d6 = freq_3d6;
freq_cumul_3d6(:, 2) = cumsum(freq_3d6(:, 2))
// Tracé
scf(0);
clf;
subplot(2, 1, 1)
plot(freq_1d20(:, 1), freq_1d20(:, 2), "d-b")
plot(freq_2d10(:, 1), freq_2d10(:, 2), "s-m")
plot(freq_3d6(:, 1), freq_3d6(:, 2), "^-r")
xtitle("Fréquences (probabilité d''avoir une valeur)",...
"résultat des dés", "probabilité (%)")
legend("1d20", "2d10", "3d6")
subplot(2, 1, 2)
plot(freq_cumul_1d20(:, 1), freq_cumul_1d20(:, 2), "d-b")
plot(freq_cumul_2d10(:, 1), freq_cumul_2d10(:, 2), "s-m")
plot(freq_cumul_3d6(:, 1), freq_cumul_3d6(:, 2), "^-r")
xtitle("Fréquences cumulées (probabilité de faire moins qu''une valeur)",...
"résultat des dés", "probabilité (%)")
legend("1d20", "2d10", "3d6", pos = 4)