IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ada Discussion :

Statistique de Loto


Sujet :

Ada

  1. #1
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut Statistique de Loto
    Salut à tous,

    Je suis en train de faire un étude sur le Hasard avec pour exemple le Loto.

    Mon programme est presque terminer, mais je bloque au niveau des statistiques.

    Par où dois-je mis prendre ?

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    --------------------------------------------------------------------------------
    --  *  Prog name loto.adb
    --  *  Project name loto
    --  *
    --  *  Version 1.0
    --  *  Last update 23/05/07
    --  *
    --  *  Created by kOrt3x on 23/05/07.
    --  *  Copyright (c) 2007 kOrt3x.
    --  *  All rights reserved.
    --  *    or (keep only one line or write your own)
    --  *  GNAT modified GNU General Public License
    --  *
    --------------------------------------------------------------------------------
    With Ada.Text_Io, Ada.Integer_Text_Io, Ada.Numerics.Discrete_Random;
    Use Ada.Text_Io, Ada.Integer_Text_Io;
     
    Procedure Loto Is	-- Debut du programme Loto
     
       Subtype Numeros Is Integer Range 1..49;
     
       Package Tirage_Loto Is
          New
          Ada.Numerics.Discrete_Random(Numeros);
       Use Tirage_Loto;
     
       Trouver : Boolean:= True;
       G : Integer; -- le nombre de grille a generer
     
       Procedure Tir_Grille Is		-- Debut de Tir_Grille
          Tir: Generator; -- numératation
          N1,N2,N3,N4,N5,N6,N7 : Integer;
     
       Begin
          delay 0.05; -- le deal avant prochaine grille
          Reset(Tir); -- mise a zero du compteur
          N1 := Random(Tir);
     
          N2 := Random(Tir);
          While(N2 = N1) Loop N2 := Random(Tir); End Loop;
          N3 := Random(Tir);
          While(N3 = N1 OR N3=N2) Loop N3 := Random(Tir); End Loop;
     
          N4 := Random(Tir);
          While(N4 = N1 OR N4=N2 OR N4=N3) Loop N4 := Random(Tir); End Loop;
     
          N5 := Random(Tir);
          While(N5 = N1 OR N5=N2 OR N5=N3 OR N5=N4) Loop N5 := Random(Tir); End Loop;
     
          N6 := Random(Tir);
          While(N6 = N1 OR N6=N2 OR N6=N3 OR N6=N4 OR N6=N5) Loop N6 := Random(Tir); End Loop;
     
    		N7:=Random(Tir);
    		while (N7 = N1 or N7 = N2 or N7=N3 or N7 = N4 or N7=N5 or N7= N6) loop N7:=Random(Tir);
    		end loop;
          Put(N1,4);
          Put(N2,4);
          Put(N3,4);
          Put(N4,4);
          Put(N5,4);
          Put(N6,4);
    	put(" .");
    	put(N7,4);
     
       End Tir_Grille;		-- Fin de Tir_Grille
     
    Begin
    Put("*****************************************************************"
          );
       New_Line(2);
       Put("    ***           *********     *********     *********");
       New_Line;
       Put("    ***           *********     *********     *********");
       New_Line;
       Put("    ***           ***   ***        ***        ***   ***");
       New_Line;
       Put("    ***           ***   ***        ***        ***   ***");
       New_Line;
       Put("    ***           ***   ***        ***        ***   ***");
       New_Line;
       Put("    ***           ***   ***        ***        ***   ***");
       New_Line;
       Put("    *********     *********        ***        *********");
       New_Line;
       Put("    *********     *********        ***        *********");
       New_Line(2);
       Put("*****************************************************************"
          );
       New_Line(2);
     
       Put("Combien de Grille voulez vous generer : ");
       Get(G); -- saisie du nombre de grille a g?©n?©rer
     
       For I In 1 .. G Loop  -- debut de la boucle du nombre de grille
     
          Put("Grille numero  ");
          Put(I,4);
          Put(" : ");
          Tir_Grille;
          New_Line;
       End Loop;		-- Fin de la boucle Tir_Grille
       --Stats; -- Affichage des Stats
    End Loto;	-- Fin du programme Loto
    Comment faire ?

    Merci.
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

  2. #2
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    T'aurais pas une question plus précise ?

    Comment faire des stats ? Ça dépend de quelles stats tu veux.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  3. #3
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut
    Bah du lance un tir de par exemple de 1000, et faire des stats des nombres sortis dans c'est 1000 tir, qui sont compris entre 1 et 49.

    C'est pour clair ?
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

  4. #4
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Je pense que pour la procedure Tir_Grille tu devrais plutôt utiliser un tableau, ça serait à mon avis un peu plus propre.
    De plus à mon avis c'est la procédure principale qui devrait réaliser l'affichage. Donc Tir_Grille devrait renvoyer d'une manière ou d'une autre un tableau contenant les nombres tirés.

    Ensuite, pour faire les statistiques, tu peux soit enregistrer tous les tirages effectués, soit calculer les stats à la volée (possible ici car le cas est simple).

    Pour faire les stats c'est simple, comme Tir_Grille renvoie le tableau des nombres tirés, tu peux facilement avoir un tableau de 49 cases qui compte le nombre de fois qu'un certain nombre est sorti.

    Mais bon, si tu fais un assez grand nombre de tirage, tu vas trouver que chaque nombre est sorti environ n/7 fois (avec n le nombre de tirages) si la fonction random renvoie des nombres bien répartis.
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  5. #5
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut
    humm... ok, mais sinon au niveau du code, ça peut donner quoi ?
    J'ai vraiment du mal avec les tableaux.
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

  6. #6
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    Bon, avant de commencer je vais faire quelques petites remarques sur ton code.

    Les mots réservés se mettent de préférence entièrement en minuscule, et les identifiers (noms de variable, fonctions, etc) se mettent de préférence avec un '_' entre chaque mot et une majuscule à chaque mot.

    Si tu n'as pas besoin que ta procédure Tir_Grille accède à G ou à Trouver, il vaut mieux les déclarer après les fonctions.

    Pour les tirages aléatoires, il vaut mieux que le générateur soit déclaré en dehors de la fonction qui l'utilise, et tu n'as pas besoin de le reset entre chaque tirage.
    Il y a une procédure Put_Line qui est équivalente à un Put suivi d'un New_Line.

    Sinon, voilà ton code qui fait des stats avec utilisation des tableaux.
    Code Ada : 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Numerics.Discrete_Random;
    use Ada.Text_IO, Ada.Integer_Text_IO;
     
    procedure Loto is
     
    	subtype Numeros is Integer range 1..49;
    	type T_Grille is array (Integer range 1..7) of Numeros;
     
    	package Tirage_Loto is new Ada.Numerics.Discrete_Random(Numeros);
    	use Tirage_Loto;
     
    	function Tir_Grille (Tir : Generator) return T_Grille is
    		Tirage : T_Grille;
    		Trouve : Boolean;
    	begin
     
    		for I in Tirage'Range loop
    			loop
    				--  On tire un nombre
    				Tirage(I) := Random(Tir);
     
    				--  On chercher si le nombre n'est pas déjà tombé
    				Trouve := false;
    				--  On chercher dans l'ensemble des nombres déjà tirés
    				for J in Tirage'First..I-1 loop
    					if Tirage(J) = Tirage(I) then
    						Trouve := true; --  Si on l'a trouvé on dit qu'on l'a toruvé
    					end if;
    				end loop;
     
    				--  Si le nombre n'a pas été trouvé, on arrête la boucle, sinon on re-tire un nombre
    				exit when not Trouve;
    			end loop;
    		end loop;
     
    		return Tirage;
    	end Tir_Grille;
     
     
     
    	G : Generator;
    	Nb : Integer;
    	Grille : T_Grille;
    	Stats : array (Numeros) of Natural := (others => 0);
     
    begin
    	Put_Line("*****************************************************************");
    	New_Line;
    	Put_Line("    ***            *******      *********      *******           ");
    	Put_Line("    ***           *********     *********     *********          ");
    	Put_Line("    ***           ***   ***        ***        ***   ***          ");
    	Put_Line("    ***           ***   ***        ***        ***   ***          ");
    	Put_Line("    ***           ***   ***        ***        ***   ***          ");
    	Put_Line("    ***           ***   ***        ***        ***   ***          ");
    	Put_Line("    *********     *********        ***        *********          ");
    	Put_Line("    *********      *******         ***         *******           ");
    	New_Line;
    	Put_Line("*****************************************************************");
    	New_Line;
     
    	Put("Combien de grilles voulez-vous générer : ");
    	Get(Nb);
     
    	--  On reset le générateur
    	Reset(G);
     
    	for I in 1..Nb loop
     
    		Put("Grille numero ");
    		Put(I, 4);
    		Put(" : ");
    		Grille := Tir_Grille(G);
    		for J in Grille'Range loop
    			Put(Grille(J), 4);
    			Stats(Grille(J)) := Stats(Grille(J)) + 1;
    		end loop;
    		New_Line;
    	end loop;
     
    	for I in Stats'Range loop
    		Put_Line("Statistiques :");
    		Put("Le nombre ");
    		Put(I, 2);
    		Put(" est tombé ");
    		Put(Stats(I), 4);
    		Put(" fois");
    		New_Line;
    	end loop;
    end Loto;
    Les tableaux c'est pas vraiment compliqué, c'est juste un ensemble ordonné de données de même type.
    Dans ce code tu as deux exemples d'utilisation des tableaux, une en déclarant un type de tableau, et l'autre en utilisant un tableau directement.
    Il faut savoir que utiliser directement un tableau sans passer par un type limite son utilisation, par exemple on ne peut pas le passer en paramètre à une fonction ou procédure, ni faire une affectation "brutale" du genre "A := B" (avec A et B des tableaux "directs").
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  7. #7
    Modérateur

    Avatar de kOrt3x
    Homme Profil pro
    Technicien Informatique/Webmaster
    Inscrit en
    Septembre 2006
    Messages
    3 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien Informatique/Webmaster
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 650
    Points : 15 771
    Points
    15 771
    Par défaut
    AH super, comment tu remercier, ça marche super.

    Je vais juste modifier un peu la mise en page, et voir pour rajouter un calcul en pourcentage.

    MERCI.
    La rubrique Mac
    Les cours & tutoriels Mac
    Critiques de Livres Mac & iOS
    FAQ Mac & iOS

    ________________________________________________________________________
    QuickEvent : Prise de rendez-vous rapide pour iPhone/iPad et iPod Touch (AppStore)
    Mon Livre sur AppleScript : AppleScript: L'essentiel du langage et de ses applications

Discussions similaires

  1. Opérateur de statistique
    Par Phil951 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 26/01/2004, 15h12
  2. Analyseur de code (statistique)
    Par Boons dans le forum Choisir un environnement de développement
    Réponses: 9
    Dernier message: 13/08/2003, 12h22

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