begin process at 2012 05 27 16:12:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > EXPERIENCES ALEATOIRES

EXPERIENCES ALEATOIRES


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :aleatoire, cartes, jeu, dés, pièces Niveau :Débutant Date de création :12/06/2011 Date de mise à jour :22/06/2011 19:11:35 Vu / téléchargé :2 561 / 46

Auteur : cczerty

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Ce petit programme que j'ai commencé a mes heures perdues génère des nombres pseudo aléatoires avec la fonction rand du C (je n'avais pas trop envie de me casser la tête a coder ma propre fonction car ce n'est pas le but que je recherche) et applique les resultats a plusieurs jeux tels que (pour l'instant) lancer de pièces (avec calcul de la fréquence), lancer de dés (calcul aussi la fréquence) ou tirage de cartes dans un jeu de 52 cartes (sans doublons)

Source

  • /*Copyright (C) 2011 TOUSSAINT Arthur
  • This program is free software; you can redistribute it and/or modify
  • it under the terms of the GNU General Public License as published by
  • the Free Software Foundation; either version 2 of the License, or
  • (at your option) any later version.
  • This program is distributed in the hope that it will be useful,
  • but WITHOUT ANY WARRANTY; without even the implied warranty of
  • MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  • GNU General Public License for more details.
  • You should have received a copy of the GNU General Public License along
  • with this program; if not, write to the Free Software Foundation, Inc.,
  • 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.*/
  • #include <stdlib.h>
  • #include <stdio.h>
  • #include <string.h>
  • #include <time.h>
  • int main (){
  • int nombre_de_lancers = 0, tableau = 0, i = 0, affichage = 0, continuer = 0, choix_menu, doublons[52], carte = 0;
  • double freq_face = 0, freq_lancer[6] = {0, 0, 0, 0, 0, 0};
  • const char *personnage[13] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valet", "Reine", "Roi"};
  • const char *couleur[4] = {"Coeur", "Carreau", "Pique", "Trefle"};
  • srand(time(NULL));
  • memset(doublons, 0, 52);
  • do {
  • system("cls");
  • printf("Experiences aleatoires V1.0.1\n\n1. Lancer de pieces\n2. Lancer de des\n3. Tirage de cartes\n\nVotre choix : ");
  • scanf("%d", &choix_menu);
  • switch(choix_menu){
  • case 1 :
  • printf("Combien de lancers voulez vous : ");
  • scanf("%d", &nombre_de_lancers);
  • printf("Voulez vous afficher le resultat de chaque lancer (cela rend le rogramme plus long pour un très grand nombre de lancers)\n1. Afficher\n2. Ne pas afficher\nVotre choix : ");
  • scanf("%d", &affichage);
  • if (affichage != 1)
  • printf("\nGeneration des nombres en cours\n\n");
  • for (i = 0 ; i < nombre_de_lancers ; i++){
  • tableau = rand() % 2;
  • freq_face += tableau;
  • if (affichage == 1){
  • switch (tableau){
  • case 0 :
  • printf("Pile\n");
  • break;
  • case 1 :
  • printf("Face\n");
  • break;
  • }
  • }
  • }
  • freq_face /= nombre_de_lancers;
  • printf("La frequence de l'evenement tomber sur face est de %f ; La frequence de l'evenement tomber sur pile est donc de %f\n\n", freq_face, 1-freq_face);
  • break;
  • case 2 :
  • printf("combien de lancers voulez vous : ");
  • scanf("%d", &nombre_de_lancers);
  • printf("\nVoulez vous afficher le resultat de chaque lancer (cela rend le rogramme plus long pour un très grand nombre de lancers)\n\n1. Afficher\n2. Ne pas afficher\nVotre choix : ");
  • scanf("%d", &affichage);
  • if (affichage != 1)
  • printf("\nGeneration des nombres en cours\n\n");
  • for(i = 0 ; i < nombre_de_lancers ; i++){
  • tableau = (rand() % 6);
  • freq_lancer[tableau]++;
  • if (affichage == 1) {
  • printf("Le de indique %d\n", tableau + 1);
  • }
  • }
  • for(i = 0 ; i < 6 ; i++){
  • freq_lancer[i] /= nombre_de_lancers;
  • printf("\nLa frequence de %d est de %f\n", i + 1, freq_lancer[i]);
  • }
  • break;
  • case 3 :
  • puts("52 cartes vont etre tirees");
  • for (i = 0 ; i < 52 ; i++){
  • while (doublons[carte = rand() % 52] == 1);
  • doublons[carte] = 1;
  • printf("%s de %s\n", personnage[(int)carte/4], couleur[(int)carte%4]);
  • }
  • for (i = 0 ; i < 52 ; i++){
  • if (doublons[i] == 0){
  • puts("toutes les cartes n'ont pas ete tirees");
  • break;
  • }
  • }
  • break;
  • }
  • printf("Voulez vous :\n1. Simuler a nouveau des lancers\n2. Quitter le programme\nVotre choix : ");
  • scanf("%d", &continuer);
  • } while (continuer == 1);
  • return 0;
  • }
/*Copyright (C) 2011 TOUSSAINT Arthur

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.*/


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

int main (){
	int nombre_de_lancers = 0, tableau = 0, i = 0, affichage = 0, continuer = 0, choix_menu, doublons[52], carte = 0;
	double freq_face = 0, freq_lancer[6] = {0, 0, 0, 0, 0, 0};
	const char *personnage[13] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Valet", "Reine", "Roi"};
	const char *couleur[4] = {"Coeur", "Carreau", "Pique", "Trefle"};
	srand(time(NULL));
	memset(doublons, 0, 52);
	do {
		system("cls");
		printf("Experiences aleatoires V1.0.1\n\n1. Lancer de pieces\n2. Lancer de des\n3. Tirage de cartes\n\nVotre choix : ");
		scanf("%d", &choix_menu);
		switch(choix_menu){
            case 1 :
                printf("Combien de lancers voulez vous : ");

                scanf("%d", &nombre_de_lancers);
                printf("Voulez vous afficher le resultat de chaque lancer (cela rend le rogramme plus long pour un très grand nombre de lancers)\n1. Afficher\n2. Ne pas afficher\nVotre choix : ");
                scanf("%d", &affichage);
                if (affichage != 1)
					printf("\nGeneration des nombres en cours\n\n");

				for (i = 0 ; i < nombre_de_lancers ; i++){
                    tableau = rand() % 2;
                    freq_face += tableau;
                    if (affichage == 1){
                        switch (tableau){
                            case 0 :
                                printf("Pile\n");
                            break;
                            case 1 :
                                printf("Face\n");
                            break;
                        }
					}
				}
                freq_face  /= nombre_de_lancers;
                printf("La frequence de l'evenement tomber sur face est de %f ; La frequence de l'evenement tomber sur pile est donc de %f\n\n", freq_face, 1-freq_face);
            break;
            case 2 :
                printf("combien de lancers voulez vous : ");
                scanf("%d", &nombre_de_lancers);
                printf("\nVoulez vous afficher le resultat de chaque lancer (cela rend le rogramme plus long pour un très grand nombre de lancers)\n\n1. Afficher\n2. Ne pas afficher\nVotre choix : ");
                scanf("%d", &affichage);
				if (affichage != 1)
					printf("\nGeneration des nombres en cours\n\n");
                for(i = 0 ; i < nombre_de_lancers ; i++){
					tableau = (rand() % 6);
					freq_lancer[tableau]++;
					if (affichage == 1) {
						printf("Le de indique %d\n", tableau + 1);
					}
				}
				for(i = 0 ; i < 6 ; i++){
					freq_lancer[i] /= nombre_de_lancers;
					printf("\nLa frequence de %d est de %f\n", i + 1, freq_lancer[i]);
				}
            break;
			case 3 :
				puts("52 cartes vont etre tirees");
				for (i = 0 ; i < 52 ; i++){
					while (doublons[carte = rand() % 52] == 1);
					doublons[carte] = 1;
					printf("%s de %s\n", personnage[(int)carte/4], couleur[(int)carte%4]);
				}
				for (i = 0 ; i < 52 ; i++){
					if (doublons[i] == 0){
						puts("toutes les cartes n'ont pas ete tirees");
						break;
					}
				}
			break;
		}
		printf("Voulez vous :\n1. Simuler a nouveau des lancers\n2. Quitter le programme\nVotre choix : ");
		scanf("%d", &continuer);
	} while (continuer == 1);
return 0;
}


 Conclusion

Améliorations possibles :
      - Commenter et nettoyer le code (actuellement tout est dans le main)
      - Ajouter de nouveaux jeux
      - Utiliser une fonction aléatoire "faite maison"
      - Etendre le tirage de cartes aux jeux de 54, 32 et 72 cartes

Vous pouvez retrouver mes autres programmes a l'adresse suivante : http://cczerty.kegtux.org/

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

22 juin 2011 19:11:35 :
Ajout d'un lien vers le site contenant mes autres programmes

 Sources du même auteur

Source avec Zip COPIE DE FICHIERS PAR RESEAU LOCAL

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture SOKOBAN EN C POUR DÉBUTANT (VERSION AMÉLIORÉE BASÉE SUR LE T... par eustatika
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33
Source avec Zip 421 VERSION 2 par ndubien
Source avec Zip 421 par ndubien

Commentaires et avis

Commentaire de jedinos le 20/06/2011 18:09:03 8/10

Salut !

C'est pas mal mais j'ai plusieurs remarques à faire, dont quelques une sont assez pertinentes, à mon avis :
- Des tabulations de 8 espaces, c'est une peu abusé et assez méchant pour ceux qui ont des petits écrans (ex : mes parents);
- Les fonctions, ça existe, pour un petit programme comme celui-là, ça va, et encore; prends l'habitude des fonctions (voir http://www.siteduzero.com/membres-294-214198.html#bio );
- Il y a trop de variables (leur nombre serait acceptable si tout ceci était enfermé dans des fonctions), certaines sont initialisées, d'autres non. En passant, mettre "int freq_lancer[6] = {0}" suffit ;) ;
- Tu aurais pu remplacer les tableaux par des liste chaînées (voir http://www.siteduzero.com/tutoriel-3-36245-les-listes-chainees.html , http://www.siteduzero.com/tutoriel-3-66283-les-listes-doublement-chainees-en-langage-c.html et http://www.siteduzero.com/tutoriel-3-69466-notions-de-structures-de-donnees-tableaux-et-listes-chainees.html#ss_part_4 ).

Dans l'ensemble, c'est quand même bien.

Commentaire de cczerty le 21/06/2011 08:37:43

Bonjour,
- pour les tabulations, ça doit être l'espacement d'origine dans visual C++, après c'est sur que mon indentation n'arrange pas grand chose. Et d'ailleurs, j'ai un grose erreur d'indentation au switch, les case son en recul et plein d'autres choses, c'est certainement du à la copie car je n'ai pas ça sur mon code.

- J'ai codé ce programme un peu à l'arrache, au départ il ne devait comporter que le lancer de pile ou face, puis quand j'avais un peu de temps je l'améliorais un peu. D'ailleurs j'ai vraiment hésité a publier ce code sur CodeS-SourceS.

- Pour les variables, effectivement je ne les ai pas toutes initialisées, d'ailleurs, j'initialise la variable doublons en début de programme, mais pas à sa déclaration, je ne sais pas ce qui m'est passé par le tête à ce moment la.

- Quel tableau devrai-je mettre en liste chainées ?? Ceux avec le nom des cartes, je le garderais en tableau car j'accède directement a une case qui n'est pas forcément la première. Même chose pour celui des doublons, ça m'obligerais à faire un while en plus.

Merci de tes remarques qui étaient effectivement pertinentes.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Le jeu du menteur en langage C... [ par Mr Will ] Salut,je cherche depuis plusieurs jours un programme simple, en LANGAGE C, r&#233;alisant ce jeu. J'ai cherch&#233; en vain sur le moteur de recherche probleme pour créer une gestion aleatoire [ par crawhawks21 ] Bonsoir, je viens par ce message demander de l'aide, voilà je crée un petit jeu actuellement sans aucune prétention, le jeu est basé sur l'indix (jeu Jeu de Mémoire [ par lacousine ] Bonjour,je suis sur la conception d'un jeu de mémoire, qui consiste à trouver 2 cartes pareilles. Mon programme affiche 16 cartes, dont 8 trouvées au Faire des cartes pour jeu [ par gimli123 ] Salut tout le monde BONNE ANNEE !!!!Bon alors heu voila ma question ^_^Par quel procédé on fait pour faire des petites cartes pour des niveaux dans un creation d'un uno en C/C++....grand besoin d'aide...merci d'avance [ par celine11 ] Au secours!!!Je souhaite créer un uno en langage C mais à chaque creation de nouvelles fonctions, rien ne marche, je commence à saturer. Voici la desc Besoin d'aide pour un programme [ par milka77 ] Bonjour,je joue actuellement a un jeu nommé "Dofus", où des montres apparaissent sur différentes cartes du jeu.Mais j'aimerais savoir si il serait pos comment fair (bataille naval) [ par nangette ] bonjour tout le monde s'il vous plait j'ai une demande , j'ai un mini projet a fair qui consiste a fair un jeu de bataille naval avec turbo C et j'ar jeu casse_briques [ par ghounaya ] je veut obtenir le code sources et la simulation du jeu casse_briques en langage c++...merci programme de classification avec les cartes de Kohonen (SOM) en C++ [ par malikach ] Salut,je cherche le code du programme de classification avec les cartes de Kohonen en C++, est ce que vous pouvez m'aider?merci infiniment jeu d'echec [ par morpilo ] Salut à tous.Voila je suis etudiant et j'ai a devellopé un jeu d'echec tout simpleen C ou C++J'aimerais savoir si quelqu'un a deja devellopé un jeu d'


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales