1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2009
    Messages : 38
    Points : 24
    Points
    24

    Par défaut Nombres aléatoires distincts deux à deux

    écrire en pascal, une procédure qui génère au hasard et successivement, huit entiers naturels distincts deux à deux.chacun des ces nombres est compris entre 1 et 99 au sens large.j'ai une question car j'ai pas compris la syntaxe distincts deux à deux est qu'il veut dire que les deux entier successive seulement doivent etre différents ou bien l'entier ramdomizé doive etre différents de tous les entiers qu'ils précèdent

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 981
    Points : 10 672
    Points
    10 672
    Billets dans le blog
    4

    Par défaut

    Bonjour !

    Ce que je comprends, c'est que chaque paire de nombres doit être formée de deux nombres différents : peu importe si un nombre apparaît dans deux paires différentes.

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 469
    Points : 3 549
    Points
    3 549

    Par défaut

    Citation Envoyé par emna1987 Voir le message
    écrire en pascal, une procédure qui génère au hasard et successivement, huit entiers naturels distincts deux à deux.chacun des ces nombres est compris entre 1 et 99 au sens large.j'ai une question car j'ai pas compris la syntaxe distincts deux à deux est qu'il veut dire que les deux entier successive seulement doivent etre différents ou bien l'entier ramdomizé doive etre différents de tous les entiers qu'ils précèdent
    Différents deux à deux = les 8 entiers sont tous différents, en les comparant l'un avec un autre. On en compare donc deux à chaque fois.

    Tu dois tirer un premier nombre, l'enregistrer par exemple dans un tableau résultat. Tirer le second et vérifier s'il n'est pas déjà tiré (i.e. présent dans le tableau résultat), s'il n'est pas tiré, tu l'enregistres à son tour et tu recommence avec le troisième nombre tiré et ainsi de suite pour les cinq autres.

    Une solution simple consiste à employer un tableau de 99 booléens valant False s'il n'est pas tiré (au départ, toutes les valeurs sont donc à False) et pour chaque tirage réussi, tu affecte True à la cellule du tableau dont l'indice est égale au tirage. Cette solution est efficace car elle consomme peu de ressource (tableau de booléens) et en lisant la valeur de la cellule d'indice, tu sais immédiatement si l'entier a déjà été tiré ou non ; si oui, il faut procéder à un nouveau tirage.

    Pour lire le résultat, il suffit de parcourir le tableau et de récupérer les indices pour lesquels les booléens valent True.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 981
    Points : 10 672
    Points
    10 672
    Billets dans le blog
    4

    Par défaut

    Ah oui, je pense que c'est e-ric qui a raison : je retire ma première réponse. J'aime bien l'idée du tableau de booléens.

  5. #5
    Membre à l'essai
    Étudiant
    Inscrit en
    novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2009
    Messages : 38
    Points : 24
    Points
    24

    Par défaut

    bonjour
    oui moi aussi merci beaucoup e-ric pour cette solution.
    et j'ai une autre question moi j'utilise comme compilateur free pascal et il me génère une erreur pour ce syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var 
    tmp:integer
    begin 
    tmp:=random(99)+1;
    lors de compilation une erreur sur cette ligne qui est la suivante:random.pas(8,10) Error:Illegal qualifier:syntax error, "." "xpected but "(" found.
    mais je connais que c'est la syntaxe d'une fonction random j'ai chercheé beaucoup sur google j'ai pas trouvé comme j'écris la fonction random sous free pascal!!??

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 981
    Points : 10 672
    Points
    10 672
    Billets dans le blog
    4

    Par défaut

    @emna1987

    Il manque un point-virgule après "integer".

  7. #7
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 469
    Points : 3 549
    Points
    3 549

    Par défaut

    Salut

    Je ne peux pas regarder cela en cours de journée (pas de Pascal au boulot ) donc au mieux, je peux regarder cela ce soir.
    @Emna: peux-tu confirmer à Roland si sa solution convient et dans le cas contraire, peux-tu nous montrer l'intégralité de ton code ?

    cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  8. #8
    Membre à l'essai
    Étudiant
    Inscrit en
    novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2009
    Messages : 38
    Points : 24
    Points
    24

    Par défaut

    c'est le code que j'ai essayer de l'écrire:
    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
    program random;
    var
    tmp,i,j:integer;
    
    tab:arrray[1..8] of integer;
    trouve:boolean;
    begin
    randomize;
    tmp:=random(99)+1;{il veut un nombre aléatoire ente 1 et 99}
    tab[1]:=tmp;
    for i:=2 to 8 do
    begin
    repeat 
    trouve:=false;
    tmp:=random(99)+1;
    j:=i;
    while(j>=1) do
    begin
    if(tab[j-1]=tmp) then
    trouve:=true;
    else
    j:=j-1;
    end;
    until(trouve=false);
    tab[i]:=tmp;
    end;
    for i:=1 to 8 do
    writeln(tab[i]);
    readln;
    end.
    lors de compilation il me génère une erreur sur la ligne colorée en rouge qui est la suivante:
    Ftal:syntax error, "." expected but "(" found vue que j'etulise free pascal comme compilateur

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    2 981
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 2 981
    Points : 10 672
    Points
    10 672
    Billets dans le blog
    4

    Par défaut

    @emna1987

    Change le nom de ton programme ! Il y a conflit avec le nom de la fonction Random.

  10. #10
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Traqueur de tritons et autres bestioles
    Inscrit en
    mars 2002
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Traqueur de tritons et autres bestioles

    Informations forums :
    Inscription : mars 2002
    Messages : 1 469
    Points : 3 549
    Points
    3 549

    Par défaut

    Hi,

    J'ai dégagé un petit créneau sur mon temps de midi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    program TestRandom;
     
    {$mode objfpc}{$H+}
     
    var
      Tirage : integer;
    begin 
      Randomize; <- au début du programme
      Tirage := Random(99);
      WriteLn( 'Tirage=', Tirage);
    end.
    Il faut employer Randomize avant d'employer Random sinon la série de nombres (pseudo-)aléatoires est toujours la même, c'est ballot ! Randomize initialise la "graine" i.e. une valeur initiale pour le générateur de nombres aléatoires (variable RandomSeed de l'unité) avec l'horloge ; en enchaînant les tests rapidement; j'obtiens malgré tout des valeurs identiques, ce qui me laisse penser que la précision retenue pour l'horloge est la seconde. Reprendre une valeur à plus haute fréquence de changement serait sans doute plus pertinent mais pour un exercice, cela n'a pas d'importance. Il faudrait fouiller dans les sources pour vérifier cela peut être améliorer.

    +2 pour les observations de Roland.

    Perso, quand je fais des tests à l'arrache, j'utilise InstantFPC (traduit par mes soins, soit dit au passage), c'est un outil qui rend de bons services, et je n'ai plus besoin de préciser le nom du programme (qui est plus cosmétique que réellement utile dans la pratique), ça donne cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/instantfpc
    // sous linux....
    {$mode objfpc}{$H+}
     
    var
      i : integer;
    begin 
      Randomize;
      i := Random(99);
      WriteLn( 'Tirage=', i);
    end.
    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 8.x 64bit, Lazarus 1.6 (FPC 3.0), Python 3

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  11. #11
    Membre à l'essai
    Étudiant
    Inscrit en
    novembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2009
    Messages : 38
    Points : 24
    Points
    24

    Par défaut

    merci beaucoup
    j'ai changé le nom de programme et ca bien marché

Discussions similaires

  1. [FAQ] Comment tirer un nombre au hasard ?
    Par SylvainPV dans le forum Contributions JavaScript / AJAX
    Réponses: 1
    Dernier message: 18/11/2014, 12h53
  2. Générer n nombres au hasard avec random
    Par fredericbdr dans le forum Débuter
    Réponses: 3
    Dernier message: 05/12/2009, 19h37
  3. [Débutant] Fonction de choix d'un nombre au hasard
    Par tickerdu22 dans le forum Langage
    Réponses: 7
    Dernier message: 15/01/2008, 18h44
  4. les nombres au hasard en java
    Par jm49 dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2007, 16h58
  5. [Conception] nombre au hasard un peu special
    Par .:dev:. dans le forum PHP & SGBD
    Réponses: 3
    Dernier message: 21/01/2006, 21h07

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