TPE Labyrinthe

cs_mattwal Messages postés 4 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 5 janvier 2012 - 16 déc. 2011 à 20:01
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 - 6 janv. 2012 à 09:00
Bonsoir,

Je suis actuellement en 1ère S et dans le cadre du TPE j'ai pris comme sujet " Une souris peut elle mémoriser un chemin de labyrinthe ? "

J'ai donc fais un petit algorithme avec le logiciel Algobox ( nous avons commencer à l'utiliser en cours ) mais je rencontre quelques problème car ce logiciel est vraiment très embêtent lorsqu'on veut ajouter une ligne de code entre deux déjà existantes ...

Ce petit programme est un modèle de mon labyrinthe, à chaque intersection le programme choisis aléatoirement un chemin, pour le moment le programme ne revient pas en arrière lorsqu'il est dans un "cul de sac", la prochaine chose que je veux intégrer c'est justement un retour en arrière en cas d'erreur mais comme le logiciel algobox n'est vraiment pas pratique (c'est galère de modifier plusieurs fois le code... )et sans les commentaires je me suis déjà emmêler les pattes.

J'ai donc pour projet de développer ce petit programme en C ou autre langage facilement accessible pour mieux pouvoir toucher au code et même insérer des commentaires.

Le logiciel CodeBlocks peut-il convenir à un débutant comme moi ?

Voici mon code
1   VARIABLES
2     x EST_DU_TYPE NOMBRE
3   DEBUT_ALGORITHME
4     x PREND_LA_VALEUR ALGOBOX_ALEA_ENT(0,1)
5     SI (x==0) ALORS
6       DEBUT_SI
7       x PREND_LA_VALEUR ALGOBOX_ALEA_ENT(2,3)
8       SI (x==2) ALORS
9         DEBUT_SI
10        AFFICHER "Perdu"
11        FIN_SI
12      SI (x==3) ALORS
13        DEBUT_SI
14        AFFICHER "Perdu"
15        FIN_SI
16      FIN_SI
17    SI (x==1) ALORS
18      DEBUT_SI
19      x PREND_LA_VALEUR ALGOBOX_ALEA_ENT(4,5)
20      SI (x==4) ALORS
21        DEBUT_SI
22        AFFICHER "Perdu"
23        FIN_SI
24      SI (x==5) ALORS
25        DEBUT_SI
26        x PREND_LA_VALEUR ALGOBOX_ALEA_ENT(6,7)
27        SI (x==6) ALORS
28          DEBUT_SI
29          AFFICHER "Perdu"
30          FIN_SI
31        SI (x==7) ALORS
32          DEBUT_SI
33          x PREND_LA_VALEUR ALGOBOX_ALEA_ENT(8,9)
34          SI (x==8) ALORS
35            DEBUT_SI
36            AFFICHER "Perdu"
37            FIN_SI
38          SI (x==9) ALORS
39            DEBUT_SI
40            AFFICHER "Gagner"
41            FIN_SI
42          FIN_SI
43        FIN_SI
44      FIN_SI
45  FIN_ALGORITHME


Je suppose que dans le code en C j'aurais des IF,THEN,ELSE etc...

Et si vous avez des tutos à me proposer je suis preneur.

Je vous remercie par avance pour votre aide.

8 réponses

BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
17 déc. 2011 à 13:47
Hello,
Pour faire du C, Code Blocks ou bien Visual Studio feront très bien l'affaire.
Par contre, tu es dans la section C#. Je déplace donc ton message dans la section C/C++.
N'hésites pas à revenir si tu as des questions!

Note: TPE = ?? Travail Personnel Encadré?

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_mattwal Messages postés 4 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 5 janvier 2012
18 déc. 2011 à 12:16
Voila j'ai commencé à écrire mon code :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv)
{
  int x = 0; // Au départ, on part de 0
  const int MAX 1, MIN 0;

  //choix aleatoire entre 0 et 1 ( premiere intersection )
  srand(time(NULL));
  x = (rand() % (MAX - MIN + 1)) + MIN;
  //coté perdu
  if (x == 0)
    int y = 2;
    const int MAX 3, MIN 2;
    srand(time(NULL));
    y = (rand() % (MAX - MIN + 1)) + MIN;
    if (y == 2)
    printf("Perdu !\n");
    if (y == 3)
    printf("Perdu !\n");
  //coté gagnant
  if (x == 1)
  printf("Gagne !\n");
}


Mais à la ligne 14 CodeBlocks me détecte une erreur, je n'arrives pas à trouver quelle est mon erreur.

Si vous avez besoin de mon schéma de mon labyrinthe je le posterais.

Merci pour votre aide

PS : Définition de TPE pour ceux qui ne savent pas ce que c'est( wikipédia ):
Les travaux personnels encadrés (TPE), sont des projets de recherche scolaire par groupe de 2, 3 ou 4 élèves (il se peut malgré tout qu'un élève fasse un TPE seul), sur des domaines ciblés et répondant à une problématique. Ils concernent, aujourd'hui dans les lycées français, les 1res des séries générales (ES, L et S), et font l'objet d'une épreuve anticipée du baccalauréat. Les notes en dessous de la moyenne ne sont pas comptées dans cette épreuve.
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
18 déc. 2011 à 13:21
Yop,
Il manque des accolades à ta condition if
if (condition)
{
// code si vraie
}
else
{
// code si faux
}



@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_mattwal Messages postés 4 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 5 janvier 2012
22 déc. 2011 à 13:36
Merci pour votre aide.

J'ai un peu modifier mon code car j'aimerais que l’action se déroule plusieurs fois, le nombre de fois entrer lorsque le programme le demande.

Mais le programme s'arrête et m'affiche "Vous avez demander X essais", X etant le nombre que j'ai entré juste avant.
Une fois a cette étape le programme ne vas pas plus loin, je ne trouve pas l'erreur mais il me semble que ca doit être une erreur avec les accolades.

Merci

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv)

{
    int y = 0; // le nombre d'essais entré
    puts(" saisir nombre d'essai puis tapez entree ");
    scanf("%d", &y); // Lecture du nombre entier
    printf("Vous avez demander %d essais \n", y);
    return EXIT_SUCCESS;
    {
    int compteur = y;
    while (compteur <= y );
    }
    int x = 0; // on declare la variable X
    const int MAX 1, MIN 0;
    srand(time(NULL));
    x = (rand() % (MAX - MIN + 1)) + MIN; // X prend la valeur 0 ou 1
        if (x == 0)
            {
            int a = 0; //
            int b = 0; // Nombre de fois ou x=0 est sorti
            b = a + 1;  // une sortie de plus
            printf("nombre de réussite %d \n", b);
            }
        if (x == 1)
            {
            int c = 0; //
            int d = 0; // Nombre de fois ou x=1 est sorti
            d = c + 1;  // une sortie de plus
            printf("nombre d'echecs %d \n", d);
            }

    system("PAUSE"); // met le programme en pause
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
22 déc. 2011 à 14:33
Hello,
Mais le programme s'arrête

Bah oui, c'est ce que tu lui demande ici:
printf("Vous avez demander %d essais \n", y);
return EXIT_SUCCESS; // ici, tu quittes la fonction en cours, donc le main dans ton cas, donc ton programme


Autre remarque:
while (compteur <= y );

Cette boucle ne fait rien, sauf boucler indéfiniment...

@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
22 déc. 2011 à 15:19
J'ai traduis ton algo de 2 manières possibles (y'en a d'autres mais ça suffira):
- méthode1: utilisation de switch..case
- méthode2: imbrication 'intelligente' de if

Regarde ce que tu en penses:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int getAleatoire(int min, int max)
{
  int x = (rand() % (max - min + 1)) + min; // X prend la valeur min ou max
  //printf("alea = %d (entre %d et %d)\n", x, min, max);
  return x;
}

void methode1(int nbEssai)
{
  for (int compteur=0; compteur < nbEssai; compteur++)
  {
    int x = getAleatoire(0,1);
    switch(x)
    {
    case 0:
      printf("Perdu!\n");
      break;
    case 1:
      {
        x = getAleatoire(4,5);
        switch(x)
        {
        case 4:
          printf("Perdu!\n");
          break;
        case 5:
          {
            x = getAleatoire(6,7);
            switch(x)
            {
            case 6:
              printf("Perdu!\n");
              break;
            case 7:
              x = getAleatoire(8,9);
              switch(x)
              {
              case 8:
                printf("Perdu\n");
                break;
              case 9:
                printf("Gagne\n");
              }
              break;
            }
            break;
          }
        }
        break;
      }
    }
  }
}

void methode2(int nbEssai)
{
  for (int compteur=0; compteur < nbEssai; compteur++)
  {
    int x = getAleatoire(0,1);
    if (x==1)
    {
      x = getAleatoire(4,5);
      if (x==5)
      {
        x = getAleatoire(6,7);
        if (x==7)
        {
          x = getAleatoire(8,9);
          if (x==9)
          {
            printf("Gagne\n");
            continue; // passer au tour de boucle suivant
          }
        }
      }
    }

    // ici, x vaut 0, 2, 3, 4, 6 ou 8
    printf("Perdu\n");
  }
}

int main(int argc, char *argv)
{
  int nbEssai = 0;    // le nombre d'essais saisi
  srand(time(NULL));  // init aléatoire

  // Récupération du nombre d'essai
  puts("Saisir nombre d'essai puis tapez entree ");
  scanf("%d", &nbEssai); // Lecture du nombre entier
  printf("Vous avez demander %d essais \n", nbEssai);

  //methode1(nbEssai);
  methode2(nbEssai);
}



@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
cs_mattwal Messages postés 4 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 5 janvier 2012
5 janv. 2012 à 21:53
Merci pour votre aide ;)
Le poste peut-il être mis en attente ? Si jamais je rencontre d'autre problème ?
0
BunoCS Messages postés 15330 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 novembre 2022 103
6 janv. 2012 à 09:00
Hello,
Le sujet reste ouvert, pas de souci


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0