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

 C Discussion :

[Le C en 20 heures]Exercice : morpion


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Pâtissier
    Inscrit en
    Avril 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Pâtissier

    Informations forums :
    Inscription : Avril 2014
    Messages : 32
    Par défaut [Le C en 20 heures]Exercice : morpion
    Bonjour, bonsoir
    Je viens vous demandez de l'aide pour l'exercice du cour "Le C en 20 heures", le morpion .
    http://c.developpez.com/tutoriels/20.../?page=page_17

    Voici mon code :
    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
    #include <stdio.h>
    #include <unistd.h>
     
    void game() ;
    void afficher(char *tab1, char *tab2, char *tab3) ;
     
    int	main(int argc, char *argv[])
    {
    	game();
    	return (0) ;
    }
     
    void game()
    {
    	//Initialization
    	char line1[] = {'.', '.' , '.'} ;
    	char line2[] = {'.', '.' , '.'} ;
    	char line3[] = {'.', '.' , '.'} ;
     
    	int positionX  = 0 ;
    	int positionY  = 0 ;
     
    	//Afficher tab
    	afficher(line1, line2, line3) ;
     
    	do
    	{	
    		if(positionX > 2){printf("L'ordonnée depace la carte. Recommencez\n");}
    		if(positionX < 0){printf("L'ordonnée depace la carte. Recommencez\n");}
    		if(positionY < 0){printf("L'abscisse depace la carte. Recommencez\n");}
    		if(positionY > 2){printf("L'abscisse depace la carte. Recommencez\n");}
    		printf("Ou voulez vous jouez ?\n") ;
    		printf("Abscisse : ") ;
    		scanf("%d", &positionX) ;
    		printf("Ordonnée : ") ;
    		scanf("%d", &positionY) ;
    	}while(positionX > 2 && positionY > 2 && positionX < 0 && positionY < 0) ;
     
    	switch(positionY)
    	{
    		case 0:
    			if(positionX = 0)
    				{line1[0] = '1' ;}
    			if (positionX = 1)
    				{line1[1] = '1' ;}
    			if (positionX = 2)
    				{line1[2] = '1' ;}
    			break ;
    		case 1:
    			if(positionX = 0)
    				{line2[0] = '1' ;}
    			else if (positionX = 1)
    				{line2[1] = '1' ;}
    			else if (positionX = 2)
    				{line2[2] = '1' ;}
    			break ;
    		case 2:
    			if(positionX = 0)
    				{line3[0] = '1' ;}
    			else if (positionX = 1)
    				{line3[1] = '1' ;}
    			else if (positionX = 2)
    				{line3[2] = '1' ;}
    			break ;
    	}
     
    	afficher(line1, line2, line3) ;
     
     
    }
     
    void afficher(char *tab1, char *tab2, char *tab3)
    {
    	int i = 0 ;
    	int j = 0 ;
    	int k = 0 ;
     
    	while(i < 3)
    	{printf("%c", tab1[i]) ; i++ ;}
    	printf("\n") ;
    	while(j < 3)
    	{printf("%c", tab2[j]) ; j++ ;}
    	printf("\n") ;
    	while(k < 3)
    	{printf("%c", tab3[k]) ; k++ ; }
     
    	printf("\n") ;
    }
    Donc voila le probleme est que ce code ne fonctionne pas comme je le voudrai et je ne comprend pas pourquoi --"
    Peut importe le resultat
    ...
    .1.
    .1.


    J'aimerai bien quelque conseille, comprendre d'ou vient mon erreur et si vous aurez des optimisation pour le code déjà écrit ou autre conseille je ne dirai pas non
    Merci de votre lecture/réponse, excuser mon orthographe.
    littlesamurai

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 869
    Par défaut
    Pour commencer, une chaine de caractere s'affiche de cette facon en utilisant printf :

    Ensuite, quel est le probleme au juste ?

  3. #3
    Membre averti
    Homme Profil pro
    Pâtissier
    Inscrit en
    Avril 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Pâtissier

    Informations forums :
    Inscription : Avril 2014
    Messages : 32
    Par défaut
    Je ne cherche pas a affiché une chaîne de char, mais bien un char un a un.
    Mon problème vient du fait que je pensait que mon programme faisait a abscisse 0 et ordonnée 0, en haut a gauche afficher un '0'.
    Et ce programme ne le fait pas, j'aimerai savoir ou je me suis plantée =)

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Moi je me demande pourquoi tu as ton jeu défini sur 3 variables line1, line2 et line3. Quand tu vas devoir vérifier s'il y a une ligne verticale ou diagonale tu vas galérer un max (tu vas perdre l'avantage d'avoir un tableau manipulable par une boucle !!!)
    Pourquoi ne pas définir ton jeu ainsi
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char jeu[3][3]={
    	{'.', '.', '.'},
    	{'.', '.', '.'},
    	{'.', '.', '.'},
    };

    Ce qui te permettrait d'alléger un max ta fonction "afficher"
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void afficher(char jeu[3][3])
    {
    	size_t i = 0 ;
    	size_t j = 0 ;
     
    	for (i=0; i < 3; i++)
    	{
    		for (j=0; j < 3; j++)
    			fputc(jeu[i][j], stdout);
    		fputc('\n', stdout);
    	}
    }

    Ainsi d'ailleurs que toutes les autres. Tiens, rien que les 24 lignes de ton switch deviendraient simplement jeu[positionY][positionX]='1' (déjà que t'aurais pu éviter ces if en rafale en écrivant simplement line1[positionX]='1'...)

    PS: c'est dommage pour l'orthographe, tu sais écrire parfaitement "abscisse" mais tu ne sais pas écrire le verbe "dépasser"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Homme Profil pro
    Pâtissier
    Inscrit en
    Avril 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Pâtissier

    Informations forums :
    Inscription : Avril 2014
    Messages : 32
    Par défaut
    Merci beaucoup !
    Je ne connaissez pas le principe des tableaux multidimensionnel, ni la fonction "fputc" et encore moins les "unsigned int" .
    Mon programme était effectivement très mal pensée ...
    Vous m'avez appris beaucoup, merci.
    Et pour le mot abscisse, j'ai utilisée google.
    Je fait des efforts pour apprendre à bien écrire mais comme vous le voyiez, j'ai beaucoup de lacune

    je met mon code avec les corrections :
    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
    #include <stdio.h>
    #include <unistd.h>
     
    void game() ;
    void afficher(char game[3][3]) ;
     
    int	main(int argc, char *argv[])
    {
    	game();
    	return (0) ;
    }
     
    void game()
    {
    	//Initialization
    	char game[3][3] = {	
    						{'.', '.' , '.'} ,
    						{'.', '.' , '.'} ,
    						{'.', '.' , '.'} ,
    					  } ;
     
    	int positionX  = 0 ;
    	int positionY  = 0 ;
     
    	//Afficher tab
    	afficher(game) ;
     
    	do
    	{	
    		if(positionX > 2){printf("L'ordonnée dépasse la carte. Recommencez\n");}
    		if(positionX < 0){printf("L'ordonnée dépasse la carte. Recommencez\n");}
    		if(positionY < 0){printf("L'abscisse dépasse la carte. Recommencez\n");}
    		if(positionY > 2){printf("L'abscisse dépasse la carte. Recommencez\n");}
    		printf("Ou voulez vous jouez ?\n") ;
    		printf("Abscisse : ") ;
    		scanf("%d", &positionX) ;
    		printf("Ordonnée : ") ;
    		scanf("%d", &positionY) ;
    	}while(positionX > 2 && positionY > 2 && positionX < 0 && positionY < 0) ;
     
    	game[positionY][positionX] = '1' ;
    	afficher(game) ;
     
    }
     
    void afficher(char game[3][3])
    {
    	size_t i = 0 ;
    	size_t j = 0 ;
     
    	for (i = 0; i < 3; i++)
    	{
    		for (j=0; j < 3; j++)
    			fputc(game[i][j], stdout);
    		fputc('\n', stdout);
    	}
    }
    Encore merci !!!
    Littlesamurai =)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exercice conversion (Minute en heure)
    Par Maeva2 dans le forum C++
    Réponses: 1
    Dernier message: 22/04/2013, 11h41
  2. Pouvez vous m'aider a resoudres ces 3 exercices
    Par algorithmique dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 09/08/2002, 17h26
  3. Réponses: 11
    Dernier message: 23/07/2002, 14h33

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