Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau à double entrée

Sujet résolu
    1 mai 2007 à 16:41:02

    Bonjour,

    C'est un nouveau problème auquel je me confronte, celui de la valorisation et de l'affichage d'un tableau à double entrée. J'ai eu beau chercher dans les cours (qui ne traite apparemment pas cet aspect) et dans le forum (qui ne m'a pas fourni de réponse satisfaisante), je reste "planter" au même point. En parlant de "planter", c'est justement ce qui m'arrive lorsque j'exécute mon programme et c'est ici que je requiert votre aide.

    L'exercice que je souhaite réaliser est la valorisation d'un tableau de villes (organisées une fois en largeur et une fois en hauteur) afin d'y répertorier la distance qui les séparent.

    Voici le source que j'ai commencé à réaliser :
    #include <stdio.h>
    #include <stdlib.h>

    main()

    {
          int i,j,k,l;
          char ville[100];
          int dist[100][100];

          // Valorisation des villes
          i = 1;
          printf("Entrez le nom de la ville %d : ",i);
          scanf("%s",&ville[i]);
          while (ville[i] != 'x')
          {
                i++;
                printf("Entrez le nom de la ville %d : ",i);
                scanf("%s",&ville[i]);
          }
         
          // Valorisation des distances
          i --;
          j = i;
          k = 1;
          l = 1;
          while (k <= i)
          {
              k++;
              while (l <= j)
              {
                    l++;
                    if (k != l)
                    {
                       printf("nEntrez la distance entre %s et %sn",ville[k],ville[l]);
                       scanf("%d",&dist[k][l]);
                    }
              }
          }
         
          // Affichage de la distance entre 2 villes
          printf("Entrez les villes dont vous voulez la distance");
          char vil1,vil2;
          scanf("%s",&vil1);
          scanf("%s",&vil2);
          k = 1;
          int rg1,rg2;
          rg1 = 0;
          rg2 = 0;
          for ( k = 1 ; k <= i ; k++ )
          {
              if (vil1 = ville[k])
              {
                   rg1 = k;
              }
          }     
          for ( k = 1 ; k <= i ; k++ )
          {
              if (vil2 = ville[k])
              {
                   rg2 = k;
              }
          }     
          printf("La distance entre %s et %s est de %dkm", vil1, vil2, dist[rg1][rg2]);
          getchar();
          return 0;
    }


    Merci d'avance pour votre aide qui m'est à chaque fois précieuse :)

    PS : Y'a-t-il une différence en C entre "chaine" et "caractère" en algorithmique ?
    • Partager sur Facebook
    • Partager sur Twitter
      1 mai 2007 à 16:50:06

      Tu as remarqué que tes while n'empêche pas d'entrer plus de 100 distances??? :euh: Je sais bien que tu t'amuseras pas à aller si loin mais il faut obligatoirement mettre comme condition de sortie PRINCIPALE d'un tableau "i
      • Partager sur Facebook
      • Partager sur Twitter
        1 mai 2007 à 18:59:01

        Pb 1 :

        Citation : psychoh13

        Tu as remarqué que tes while n'empêche pas d'entrer plus de 100 distances??? :euh: Je sais bien que tu t'amuseras pas à aller si loin mais il faut obligatoirement mettre comme condition de sortie PRINCIPALE d'un tableau "i < tailleTableau".

        Oui tu as raison je vais changer ça tout de suite.

        Citation : psychoh13

        Une chaîne de caractères est un tableau de caractères terminé par '?' (caractère NULL), et dans ton cas tu veux plusieurs chaîne de caractères... Donc il te faut un tableau de chaînes de caractères donc un tableau de tableaux de caractères, donc un tableau de char à deux dimensions.


        Je comprend à peu près ce que tu veux dire mais je ne cerne pas comment déclarer et valoriser mon tableau à double entrée. Voici une photo du tableau que je souhaiterai valoriser via le programme (même si on ne voit pas le contenu, on voit au moins sa forme ^^) :
        Image utilisateur

        Pb 2 :
        Lorsque j'essaye de valoriser un tableau simple, le programme marche avec des entiers mais pas avec des caractères. Voici le source :
        #include <stdio.h>
        #include <stdlib.h>

        main()

        {
              int i,j;
              const int tailleTableau = 100;
              char ville[tailleTableau];

              // Valorisation des villes
              i = 1;
              printf("Entrez le nom de la ville %d : ",i);
              scanf("%s",&ville[i]);
              while (ville[i] != 'x' && i < tailleTableau)
              {
                    i++;
                    printf("Entrez le nom de la ville %d : ",i);
                    scanf("%s",&ville[i]);
              };
              for ( j = 1 ; j < i ; j++ )
              {
                  printf("Ville n %d : %s\n",j,ville[j]);
              }
              system("pause");
              return 0;
        }
        • Partager sur Facebook
        • Partager sur Twitter
          1 mai 2007 à 19:13:36

          Oui j'ai bien compris ce que tu voulais faire... Mais qu'entends-tu par "valoriser"??? :D
          • Partager sur Facebook
          • Partager sur Twitter
            1 mai 2007 à 19:18:01

            Dans mon tableau est associée une valeur à la distance entre A et B, A et C, A et D, etc... puis B et C, B et D, etc ... puis C et D, etc ... Il faut que rentre cette valeur en mémoire afin d'avoir le tableau en mémoire, puis il faut que je le stock dans un fichier que je pourrais réutiliser plus tard.
            • Partager sur Facebook
            • Partager sur Twitter
              1 mai 2007 à 19:31:20

              Arf pour ton problème 2 il faut que tu révises les tableaux !
              Je t'ai dit qu'une chaîne de caractères est un tableau de caractères terminé par un '\0'.
              C'est-à-dire que :
              char ville[50]; // C'est une chaîne
              for(int i = 0; i<50;i++)
              {
                   ville[i] = 0; // ville[i] c'est UN caractère de la chaîne
              }


              Donc quand tu fais ça :
              &ville[i]

              Tu envoies l'adresse du caractère à la position i du tableau. Et ton scanf va tenter d'écrire une cha^ine à partir de cette position !
              • Partager sur Facebook
              • Partager sur Twitter

              Tableau à double entrée

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown