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 :

Puissance 4 en C.


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 109
    Par défaut Puissance 4 en C.
    Bonjour, suite au tutoriel sur le C, j'ai essayé de faire le puissance 4 mais j'ai un soucis.

    Voilà le code des fonctions :

    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
     
     
     
    int Puiss4_indice(Puiss4 A, int nb_case)
    {
      int current_indice = 0;
      int j;
      for(j = 0 ; j < A->lignes ; j++)
      {
          if((A->data[j][nb_case - 1] == 'x') || (A->data[j][nb_case - 1] == 'o'))
          {
            current_indice = j;
            printf("Current_indice : %d\n", current_indice);
            return current_indice;
          }
     
      }
    }
    int Puiss4_parcours_vertical(Puiss4 A, int nb_case)
    {
      int j;
      int compteur = 1;
      for(j = 0 ; j < A->lignes - 1 ; j++)
      {
        if(A->data[j][nb_case - 1] == A->data[j + 1][nb_case - 1])
        {
          compteur++;
        }
        else
          compteur = 1;
     
      }
      return compteur;
    }
     
    /*void Puiss4_parcours_diagonal(Puiss4 A)
    {
     
    }*/
    int Puiss4_parcours_horizontal(Puiss4 A, int nb_case)
    {
      int i;
      int compteur = 1;
      printf("Compteur : %d\n", compteur);
      int current_indice = Puiss4_indice(A, nb_case);
      for(i = 0 ; i < A->colonnes - 1 ;i++)
      {
        if(A->data[current_indice - 1][i] == A->data[current_indice - 1][i + 1])
        {
          compteur++;
          printf("%c = %c \n", A->data[current_indice - 1][i],A->data[current_indice - 1][i + 1]);
          printf("Compteur : %d\n", compteur);
        }
        else
          compteur = 1;
      }
      return compteur;
    }
    Le main :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "puiss4Proto.h"
    #define sortie 4
     
     
    int main(int argc, char** argv)
    {
      int indice = 0;
      int nb_case = 0;
      int compteur;
      int compteur2;
      /*int sortie = 4;*/
     
      Puiss4 A = Puiss4_create(6, 7, ' ');
      printf("Bienvenue sur le jeu du Puissance 4 !\n");
      printf("Joueur 1 : x\n");
      printf("Joueur 2 : o\n");
     
     
      while(compteur != sortie)
      {
      Puiss4_print(A);
      printf("\n");
      indice = Puiss4_indice(A, nb_case);
      printf("\n");
      printf("Joueur 1 : ");
      scanf("%d", &nb_case);
      Puiss4_add(A, nb_case, 'x');
      Puiss4_print(A);
      printf("\n");
      compteur = Puiss4_parcours_vertical(A, nb_case);
      printf("Puiss4_parcours_vertical : Compteur | Sortie = %d | %d \n", compteur, sortie);
      printf("\n");
      /*compteur2 = Puiss4_parcours_horizontal(A, nb_case);
      printf("Puiss4_parcours_horizontal : Compteur | Sortie = %d | %d \n", compteur2, sortie);
      printf("\n");*/
      indice = Puiss4_indice(A, nb_case);
      printf("\n");
      printf("Joueur 2 : ");
      scanf("%d", &nb_case);
      Puiss4_add(A, nb_case, 'o');
      printf("\n");
      Puiss4_print(A);
      printf("\n");
      compteur = Puiss4_parcours_vertical(A, nb_case);
      printf("Puiss4_parcours_vertical : Compteur | sortie = %d | %d\n", compteur, sortie);
      printf("\n");
      /*compteur2 = Puiss4_parcours_horizontal(A, nb_case);
      printf("Puiss4_parcours_horizontal : Compteur | Sortie = %d | %d \n", compteur2, sortie);
      printf("\n");*/
      indice = Puiss4_indice(A, nb_case);
      printf("\n");
      }
     
      Puiss4_destroy(A, 6, 7);
      printf("Vous avez gagné !\n");
     
      return EXIT_SUCCESS;
    }
    voilà les problèmes :

    - se situe au niveau de la fonction Puiss4_parcours_horizontal, dès le premier caractère saisi, compteur est égal à 7 alors qu'il devrait être égal à 1;


    -La fonction qui parcours le tableau de façon verticale marche par contre lorsque j'ai 4 jetons empilé o ça quitte bien la boucle mais lorsque c'est 4 jetons x ça ne quitte pas la boucle alors que compteur est bien égal à 4 et la variable sortie l'est également;

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Voici quelques remarques qui pourront je l'espère t'aider à obtenir plus de réponses :

    • ton problème est trop général. Voilà un wall of code, bam ! Corrigez-moi ça. Ce n'est peut-être pas ce que tu as voulu faire passer mais c'est l'impression que ça me donne.
    • Nettoie (retire le code commenté), élague (cf. point suivant), indente, aère ton code. Nous ne sommes pas des robots et sommes plus enclins à étudier un code clair et concis (de plus cela t'oriente vers de bonnes habitudes de programmation).
    • Isole le morceau de code qui ne fonctionne pas comme il devrait et décris-nous clairement :
      • ce qu'il est sensé faire (rappelle-toi que nous ne connaissons pas ton projet !) ;
      • ce qui se passe en pratique.
    • Quitte à poster tout un programme, poste un code qui compile. En l'occurrence il manque quelques types et fonctions. On peut ainsi le tester sur nos machines et t'aiguiller parfois plus aisément vers la solution du problème.
    • Personnellement, je suis partisan d'un fil par erreur rencontrée, pas d'un par programme / projet. N'expose donc qu'un seul problème à la fois, les autres sont peut-être d'ailleurs la conséquence du premier.



    Quel est donc le rôle de Puiss4_parcours_horizontal ? Comment doit-on l'utiliser ? Que devrait-il se passer et qu'arrive-t-il lors de tes tests ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 109
    Par défaut
    D'accord désolé

  4. #4
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Ne sois pas désolé. Je n'essaie surtout pas de te dissuader de demander de l'aide, ce sont simplement quelques conseils de présentation.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par drakop Voir le message
    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
    int Puiss4_indice(Puiss4 A, int nb_case)
    {
      int current_indice = 0;
      int j;
      for(j = 0 ; j < A->lignes ; j++)
      {
          if((A->data[j][nb_case - 1] == 'x') || (A->data[j][nb_case - 1] == 'o'))
          {
            current_indice = j;
            printf("Current_indice : %d\n", current_indice);
            return current_indice;
          }
     
      }
    }
    Bonjour

    Moi j'ai un souci avec cette fonction. Tout d'abord parce qu'elle initie une boucle mais elle quitte dès qu'elle a trouvé un élément répondant à la condition (donc la boucle ne se fera probablement pas) et d'autre part parce que si la boucle se termine sans avoir trouvé de condition vraie, elle ne retourne alors rien (ou plutôt elle retourne par défaut une valeur aléatoire).
    Or cette fonction est au coeur des autres et bien évidemment de "Puiss4_parcours_horizontal" qui ne fonctionne pas...

    Donc si tu écris une fonction, ce serait bien que tu décrives aussi en commentaire ce qu'elle est sensée faire pour qu'on puisse alors voir si l'algo écrit correspond au résultat prévu.

    Exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Fonction qui retourne le premier indice d'une case ayant bidule et chose à vrai
    int Puiss4_indice(Puiss4 A, int nb_case)
    {
        ...
    }
    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]

  6. #6
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 768
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    si la boucle se termine sans avoir trouvé de condition vraie, elle ne retourne alors rien (ou plutôt elle retourne par défaut une valeur aléatoire).
    Le compilateur doit te sortir un "warning" : "not all code paths return a value"

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

Discussions similaires

  1. Entre technologie et puissance: duel 6800Ultra & X850xt
    Par DarkOcean dans le forum Composants
    Réponses: 5
    Dernier message: 03/02/2005, 17h11
  2. [LG]Puissance et Indice
    Par luno2545 dans le forum Langage
    Réponses: 2
    Dernier message: 08/05/2004, 10h01
  3. [LG]fonction puissance en pascal
    Par le 27 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 23h21
  4. x² et puissance de x par récurrence
    Par olivieram dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 15/12/2002, 23h59
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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