Besoin de vous avis sur un devoir de simulation(enfin de programmation surtout)

a marqué ce sujet comme résolu.

Bonjour. Comme dit dans le titre j’aurais besoin de vos avis sur un devoir que j’ai composé. Les codes sont en Scilab et en C mais bon…

1) Ecrire un programme scilab permettant de simuler la loi exponentielle de paramètre lambda

1
2
3
4
5
6
function[Y] loi_expo(lambda)
     rand('uniform')
     Y = -log(rand(1 , 1)) / lambda
endfunction

loi_expo(0.5)

2.1) Ecrire un programme scilab permettant de générer n variables aléatoires suivant une loi uniforma sur [a,b]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function[] aleatoires(n , a , b)
    k = 1
    rand('seed' , getdate('s'))
    while(k <= n)
        rand(1 , 1) * (b - a) + a
        k = k + 1;
    end
endfunction

aleatoires(10 , 1 , 2)

2.2) Réécrire le programme en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
void aleatoires(int n , int a , int b)
{
    int i = 1;
    while(i <= n)
    {
        printf("%f" , (rand() / RAND_MAX) * (b - a) + a);
        i++;
    }
}


int main(void)
{
    srand(time(NULL));
    aleatoires(10 , 1 , 2);
    return 0;
}

3) Écrire une fonction permettant de simuler une variable aléatoire de loi binomiale…

Là j’ai foutu n’importe quoi!

Je me rends maintenant compte que j’ai oublié quelque trucs(genre caster le retour de time en double). Mais qu’en pensez vous? Le raisonnement est-il le bon?

Salut !

Ouais ça a l’air pas mal. Quelques remarques :

  • Caster le retour de time rand, tu veux dire ? Effectivement ça me paraît être le problème principal.
  • C’est pour vérifier tes réponses à l’écrit que tu fais ça ? T’as pas de compilateur pour tester ?
  • Dans ta version en C (je connais pas trop Scilab), tu pourrais séparer les trucs par un retour à la ligne.
  • Tu pourrais utiliser la boucle for.

Pour la question 3 est-ce que t’as essayé déjà de faire avec une loi de Bernoulli (une binomiale pour $n=1$, quoi) ?

Merci pour té réponse Lucas-84.Et oui, je voulais dire "caster le retour de rand".

  • C’est pour vérifier tes réponses à l’écrit que tu fais ça ? T’as pas de compilateur pour tester ?
Lucas-84

En fait c’est un peu plus compliqué que ça. A part les petites coquilles que j’ai vues(je les ai bien sûr corrigées avant de tester) tout à l’air de fonctionner correctement. Le problème c’est que j’ai eu la désagréable surprise de recevoir la note de … [ROULEMENT DE TAMBOURS] 3/20(0.5 pour la 1ere question et 1,5 pour le 2.2) o_O

Pas de commentaires ni de correction du coup j’aimerais savoir où j’ai gaffé(à ce point) car je ne vois pas.

Non, pas de barème. Le sujet comportait juste 3 exercices et vu la "difficulté" des uns par rapport aux autres je pense que les points ont été divisés par 3(7,6,6). La meilleure note était 7. Le pire c’est qu’à cause de cette note je ne valide pas mon semestre.

Peut être que quelqu’un connaissant mieux scilab pourra me répondre sur cette partie! Merci

Au niveau du retour de ta fonction, je suis pas sûr que l’affichage soit vraiment intéressant.

  • En C, j’aurais plus vu un tableau de taille ’n’ passé en paramètre, rempli suivant la loi uniforme.
  • Il n’est spécifié nul part que $a$ et $b$ sont des int.
  • Les noms de variables / fonctions pourraient être meilleur
  • Il aurait pu y avoir des commentaires
  • Un boucle for aurait vraiment permis de gagner en lisibilité

Bon après, on peut toujours faire mieux …

+0 -0

@ache: il s’agit d’un devoir sur table(pour les commentaires)

L’énoncé demandait juste de générer des nombres "aléatoires", il n’a pas préciser ce qu’on devait en faire, cependant je suis d’accord avec toi que j’aurais pu mieux faire. Par contre j’ai beau retourner le problème dans tous les sens je ne trouve pas d’explication valable à cette note minable. Je n’ai plus qu’à attendre l’année prochaine. Merci à vous.

Par contre j’ai beau retourner le problème dans tous les sens je ne trouve pas d’explication valable à cette note minable.

Ça va être difficile de pouvoir dire mieux que "il devait y avoir des coquilles dans ce que tu as écris à la main". Il est probable que la notation prenait en compte la validité du programme écrit, si tu as écrit un truc qui compile même pas, la note devait automatiquement être en dessous de la moyenne.

+0 -0

Il est probable que la notation prenait en compte la validité du programme écrit, si tu as écrit un truc qui compile même pas, la note devait automatiquement être en dessous de la moyenne. Source:adri1

Je comprends. Mais je trouve injuste de tenir ma solution comme fausse juste à cause d’un "=", d’un ";" ou d’un "#include" oublié. C’est comme ça en France :D?

N’hésite pas non plus à spammer envoyer un mail au prof/correcteur. Et à le faire au nom de la promo (après en avoir discuter avec d’autres évidemment). Les examens il y a certes une note, mais c’est aussi l’occasion d’apprendre des choses (surtout si c’est les mêmes questions d’année en année…) !

PS : et s’il/elle n’est pas capable d’expliquer pourquoi tu as faux, c’est un⋅e mauvais⋅e prof :-° .

+2 -0

Je comprends. Mais je trouve injuste de tenir ma solution comme fausse juste à cause d’un "=", d’un ";" ou d’un "#include" oublié. C’est comme ça en France :D?

kulturm@n

Ça c’est pas à moi qu’il faut le dire, c’est à ton prof (même si pour le coup, mon avis perso est que c’est parfaitement juste, c’est pareil dans les autres disciplines, si tu écris un truc qui n’a pas de sens eg en physique, tu te fais rammasser aussi). J’ai déjà noté des programmes (sauf que c’était le vrai programme, pas un truc écrit), et effectivement si ça compilait pas, on met une sale note. Je peux comprendre que la situation est un peu différente quand tu dois écrire le programme sans compilo pour te dire qu’il y a un problème…

+0 -0

L’oublie d’un ’;’ ou d’un include, à la limite m’enfin d’un = ça semble un peu moins justifiable ^^"

+0 -0

PS : et s’il/elle n’est pas capable d’expliquer pourquoi tu as faux, c’est un⋅e mauvais⋅e prof :-° .

Gwend@l

Je le pense aussi, d’ailleurs son support de cours est constitué à 100%(oui) de captures d’écran. Ce que je trouve mal c’est qu’il prétende en être l’auteur.

Je lui ai déjà envoyé deux mails, je viens d’en envoyer un autre où je lui souligne clairement que je continuerai jusqu’à obtenir une réponse :lol:.

@ache: le "=" c’est dans l’entête de la fonction scilab en fait ;)

+0 -0

Je lui ai déjà envoyé deux mails, je viens d’en envoyer un autre où je lui souligne clairement que je continuerai jusqu’à obtenir une réponse :lol:.

kulturm@n

Perso, je reçois un message comme ça, je mets dans Spam directe même si c’est légitime …

+0 -0

Moi je tique sur le fait que tu fasses un print dans la fonction, particulièrement pour l’exercice 2.

Pour moi, la fonction de l’exercice 2 doit renvoyer un tableau. Et dans le programme appelant, tu fais 2 choses, tu appelles cette fonction, et tu print le résultat.

En faisant le print dans ta fonction, tu dévalues le concept de ’fonction’. Si par exemple, je veux une liste de 10 valeurs aléatoires, et je veux les trier… ta fonction ne me sert à rien.

Ce point là me paraît important. Le correcteur peut se dire : l’élève n’a pas compris le concept de fonction.

Ca fait très très longtemps que je n’ai plus touché à Scilab / Matlab, mais j’avais un prof qui mettait 0 quand le programme (sauf cas vraiment exceptionnels) comprenait une boucle (for, while, etc.) et le justifiait en expliquant qu’on ne fait pas de programmation impérative dans ces langages, mais qu’on doit systématiquement utiliser des vecteurs et des matrices.

Je ne connais plus du tout les fonctions rand mais est-ce-que tu n’aurais pas pu générer un vecteurs de dimension k et travailler dessus par la suite ?

Peut-être était-ce la réponse attendue ?

+0 -0

Pour ce qui est du printf dans la fonction je sais bien que c’est discutable (et dans du "vrai" code je n’aurais pas procédé ainsi) mais l’énoncé ne demande même pas explicitement d’écrire une fonction. Ma fonction génère bien les nombres aléatoires, ce qu’elle en fait ne devrait vraiment pas compter à ce point.

@Javier: je ne sais vraiment pas, il n’a pas de donné de corrigé, ni rien.

Edit: Bah ici c’est comme ça, les profs font ce qu’ils veulent et prennent les étudiants pour des cons. J’ai "débattu" avec plusieurs profs concernant le C.

  • l’un a dit qu’on pouvait créer en C un tableau qui ne contenait rien en faisant int tab[5];
  • un autre disait qu’un pointeur non initialisé valait NULL
  • et le dernier disait qu’il fallait caster le retour de malloc (il a d’ailleurs failli expulser un étudiant pour la même chose une année avant moi :lol:).
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte