Inscription / Connexion Nouveau Sujet
Niveau BTS
Partager :

Instanciation d'un tableau à deux dimensions (matrice)

Posté par
Shuuki
29-04-17 à 16:09

Bonjour,

Je suis vraiment bloqué pour un devoir maison et j'ai donc besoin de votre aide:

Enoncé:

Vous disposez des tableaux suivants:

Ville

Brest
Grenoble
Lille
Lyon
Marseille
Nantes
Paris
Rennes
Strasbourg
Toulouse
099672389012863055642451026884
0750104286711576747505543
0668979593224515524905
0316607472645434467
0890769938750400
0386106832559
0348447681
0799665
0901
0



Ces deux tableaux doivent être créés et remplis de façon automatique avant l'utilisation du programme par l'utilisateur. On suppose que le tableau ville est trié selon l'ordre alphabétique.

L'utilisateur saisit la ville de départ et la ville d'arrivé. On retourne comme résultat la distance qui sépare la ville de départ de la ville d'arrivée.

Exemple: Ville de départ= Brest   Ville d'arrivée=Rennes    Distance=245kms


Travail à faire:

a) Ecrire l'algorithme qui correspond à ce traitement. Il doit permettre à l'utilisateur de recommencer autant de fois qu'il le souhaite. L'utilisateur ne peut saisir que les villes existantes.

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 17:06

Bonjour ,

qu'est-ce qui te bloque ?  En quoi peut-on t'aider ? Qu'as-tu fait ?

Cordialement

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 17:21

Et bien je cherche une façon de raccourcir ce que j'ai déjà fait ! Je le trouve un peu trop long. Il doit y avoir surement une façon plus courte. Regardez ce que j'ai fait:

Algorithme ?distance inter-villes?
Variables en chaîne de caractère : villedépart, villedarrivée
Variables indicées : Tab [0,9] de type chaîne de caractères
                 Mat[9,9] de type numérique
Début

Remplissage du 1er tableau :
Tab [0]??Brest?
Tab [1]??Grenoble?
Tab [2]??Lille?
Tab [3]??Lyon?
Tab [4]??Marseille?
Tab [5]??Nantes?
Tab [6]??Paris?
Tab [7]??Rennes?
Tab [8]??Strasbourg?
Tab [9]??Toulouse?

Remplissage du 2ème tableau :
Mat[0,0]?0        Mat[1,0]?        Mat[2,0]?        Mat[3,0]?        
Mat[0,1]?996        Mat[1,1]?0        Mat[2,1]?        Mat[3,1]?
Mat[0,2]?723        Mat[1,2]?750        Mat[2,2]?0        Mat[3,2]?
Mat[0,3]?890        Mat[1,3]?104        Mat[2,3]?668        Mat[3,3]?0
Mat[0,4]?1286    Mat[1,4]?286        Mat[2,4]?979        Mat[3,4]?316
Mat[0,5]?305        Mat[1,5]?711        Mat[2,5]?593        Mat[3,5]?607
Mat[0,6]?564        Mat[1,6]?576        Mat[2,6]?224        Mat[3,6]?472
Mat[0,7]?245        Mat[1,7]?747        Mat[2,7]?515        Mat[3,7]?645
Mat[0,8]?1026    Mat[1,8]?505        Mat[2,8]?524        Mat[3,8]?434
Mat[0,9]?884        Mat[1,9]?543        Mat[2,9]?905        Mat[3,9]?467

Mat[4,0]?        Mat[5,0]?        Mat[6,0]?        Mat[7,0]?
Mat[4,1]?        Mat[5,1]?        Mat[6,1]?        Mat[7,1]?
Mat[4,2]?        Mat[5,2]?        Mat[6,2]?        Mat[7,2]?
Mat[4,3]?        Mat[5,3]?        Mat[6,3]?        Mat[7,3]?
Mat[4,4]?0        Mat[5,4]?        Mat[6,4]?        Mat[7,4]?
Mat[4,5]?890        Mat[5,5]?0        Mat[6,5]?        Mat[7,5]?
Mat[4,6]?769        Mat[5,6]?386        Mat[6,6]?0        Mat[7,6]?
Mat[4,7]?938        Mat[5,7]?106        Mat[6,7]?348        Mat[7,7]?0
Mat[4,8]?750        Mat[5,8]?832        Mat[6,8]?447        Mat[7,8]?799
Mat[4,9]?400        Mat[5,9]?559        Mat[6,9]?681        Mat[7,9]?665


Mat[8,0]?        Mat[9,0]?
Mat[8,1]?        Mat[9,1]?
Mat[8,2]?        Mat[9,2]?
Mat[8,3]?        Mat[9,3]?
Mat[8,4]?        Mat[9,4]?
Mat[8,5]?        Mat[9,5]?
Mat[8,6]?        Mat[9,6]?
Mat[8,7]?        Mat[9,7]?
Mat[8,8]?0        Mat[9,8]?
Mat[8,9]?901        Mat[9,9]?0

Affichage du premier tableau:
Afficher ?Voici le tableau?                    
Afficher Mat[9,9]

Afficher?Veuillez saisir la ville de départ svp?
Saisir villedépart
Afficher?Veuillez saisir la ville d?arrivée svp?
Saisir villedarrivée

Si villedépart = ?Brest? et  villedarrivée =?Grenoble? alors afficher Vect[1,1]
    sinon si villedépart = ?Brest? et  villedarrivée =?Lille? alors afficher Vect[1,2]
        sinon si villedépart = ?Brest? et  villedarrivée =?Lyon? alors afficher Vect[1,3]
            sinon si villedépart = ?Brest? et  villedarrivée =?Marseille? alors
  afficher Vect[1,4]
                sinon si villedépart = ?Brest? et  villedarrivée =?Nantes? alors
   afficher Vect[1,5]
                    sinon si villedépart = ?Brest? et  villedarrivée =?Paris?
   alors afficher Vect[1,6]
                        sinon si villedépart = ?Brest? et  villedarrivée =
  ?Rennes? alors afficher Vect[1,7]
sinon si villedépart = ?Brest? et  
                               villedarrivée =?Strasbourg? alors
     afficher Vect[1,8]
sinon si villedépart = ?Brest? et  
                                     villedarrivée =?Toulouse?
   alors  afficher Vect[1,9]
    Fsi
Fsi
                        Fsi
                    Fsi
                Fsi
            Fsi
        Fsi
    Fsi
Fsi


Désolé pour la mise en page.

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 17:27

Les deux tableaux sont normalement à coter sur la feuille de l'énoncé. Mais là je n'ai pas pu les mettre cote à cote.

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 17:42

Ton algorithme est peut-être un peu long mais il a l'énorme avantage d'être clair .

Pour le raccourcir , on peut envisager plusieurs piste :

Initialisations des tableaux :
    liste_villes = ("Brest" , "Grenoble" , "Lille" , .....)
    tab_distances = [[0 , 996 , 723 , 890 , 1286 , 305 , 564 , 245 , 1026 , 884]
                                           [- , 750 , 104 , 286 , 711 , 576 , 747 , 505 , 543]
                                           ....
                                           .... ]

Saisies :

Afficher ”Ville de départ  (0 pour Brest , 1 pour Grenoble , 2 pour Lille .....  : ”
Saisir villedépart
Afficher ”Ville d'arrivée  (0 pour Brest , 1 pour Grenoble , 2 pour Lille .....  : ”
Saisir villedarrivée

Traitements :

si   (0 <= Villedépart   <= 9)  et     (0 <= villedarrivée <= 9)

        afficher tab_distances[Villedépart    , villedarrivée ]

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:14

fm_31

D'accord je vois ! Mais comment il faudra que je créer la liste en Java ?
Tu pourrais m'expliquer l'utilité des listes ? Je pense avoir à peu près compris l'idée mais je préfère qu'on me redonne une explication à propos des listes.

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:20

Ha pardon ! J'ai mal lu ta réponse !  J'ai cru que liste_villes était une 'liste' puisque je l'ai un peu vu en mathématiques. Mais c'est en fait un tableau.
L'initialisation des tableaux c'est donc le remplissage ? La création du tableau c'est sa ? Juste pour être sur.

Posté par
lafol Moderateur
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:25

Bonjour
je n'ai pas l'impression que ton algorithme tienne compte de ces deux consignes :

Citation :
Il doit permettre à l'utilisateur de recommencer autant de fois qu'il le souhaite. L'utilisateur ne peut saisir que les villes existantes.

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:25

Ici , la liste n'a aucun intérêt puisqu'elle est uniquement utilisée comme un tableau .
Les listes sont intéressantes quand on n'a pas idée de la taille finale au départ .

En java , les listes sont assez largement documentées .

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:28

fm_31

D'accord, merci

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:30

lafol

Oui ! je viens de le voir. Il faut que j'ajoute un : "sinon afficher "Veuillez recommencer" Mais je ne sais pas où le placer. En prenant appuie sur le nouvel algorithme celui ci :
Initialisations des tableaux :
    liste_villes = ("Brest" , "Grenoble" , "Lille" , .....)
    tab_distances = [[0 , 996 , 723 , 890 , 1286 , 305 , 564 , 245 , 1026 , 884]
                                           [- , 750 , 104 , 286 , 711 , 576 , 747 , 505 , 543]
                                           ....
                                           .... ]

Saisies :

Afficher ”Ville de départ  (0 pour Brest , 1 pour Grenoble , 2 pour Lille .....  : ”
Saisir villedépart
Afficher ”Ville d'arrivée  (0 pour Brest , 1 pour Grenoble , 2 pour Lille .....  : ”
Saisir villedarrivée

Traitements :

si   (0 <= Villedépart   <= 9)  et     (0 <= villedarrivée <= 9)

        afficher tab_distances[Villedépart    , villedarrivée ]

Posté par
lafol Moderateur
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:34

Tu peux peut-être aussi demander les villes en clair, et aller chercher leur rang dans le tableau, non ? (et renvoyer un message d'erreur quand la ville ne figure pas dans la liste)

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:37

Il faut rajouter une boucle englobant ton algo du style :

continuer prend la valeur  "oui"
tant que continuer = "oui"
      ...
      ...
      ...
      afficher "voulez-vous continuer (oui , non) : "
      saisir continuer
fin tantque

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:42

l'intérêt de saisir des chiffres plutôt que des noms de ville est que ça simplifie l'algo  mais surtout la saisies des villes  (1 caractère  à saisir au lieu de 4 à 10) et donc moins de risques d'erreurs de frappe et plus grand confort pour l'utilisateur .

Posté par
lafol Moderateur
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:46

du coup quel est l'intérêt d'avoir le tableau des villes, si on l'affiche à chaque fois sans utiliser ledit tableau ?

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:49

lafol

D'accord, j'y avais pensé mais le problème est que je ne sais pas comment se déplacer dans une matrice.

fm_31

Donc cette partie sera après avoir afficher le résultat ? Du coup il faudra faire la même chose pour le "non" et l'initialiser avant la boucle comme pour le "oui" ?

Posté par
lafol Moderateur
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 18:52

Mais non ! cette partie est "autour" du reste
tu mets "oui" au début pour que ça fasse le truc au moins une fois, et ensuite c'est l'utilisateur qui en saisissant autre chose que "oui" provoquera l'arrêt

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 19:02

lafol
Donc cette boucle commencera  au debut de la saisie pour pouvoir répéter ce processus tant que l'utilisateur continuera avec le "oui". Et la fin de la boucle sera à l'affichage du résultat ?

continuer prend la valeur  "oui"
tant que continuer = "oui"
      ...
      ... ICI il y aura le processus à partir de la saisie jusqu' à l'affichage du resultat
      ...
      afficher "voulez-vous continuer (oui , non) : "  Et ici sa sera à la fin du processus de saisie et d'affichage ?
      saisir continuer
fin tantque

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 29-04-17 à 19:34

Citation :
du coup quel est l'intérêt d'avoir le tableau des villes

Pour l'affichage final du type  "la distance entre" , liste_villes [villedépart] , "et" , liste_villes [villedarrivée] , "est : "   ....  

Posté par
carpediem
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 09:39

salut

vraiment c'est d'un compliqué et si peu méthodique ...

on dispose des deux tableaux que je note ville et distance

ainsi ville [4] = Lyon et distance [5, 9] = 750

ainsi je numérote à partir de 1 les tableaux (certains langages commencent à 0 et il suffit d'adapter l'algo ...)

j'appelle rang la fonction retournant la valeur du rang de la ville dans le tableau ville

ainsi rang  (Lyon) = 4

si le tableau ville est une liste la fonction doit directement exister dans les langage de dernière génération sinon il est facile de la programmer

réponse = oui
While réponse = "oui"
    Input "quelle est votre ville de départ ?", départ
    Input "quelle est votre ville d'arrivée ?, arrivée
    i = Min (rang (départ), rang (arrivée))
    j = Max (rang (départ), rang (arrivée))
    Write "la distance entre", départ, "et", "arrivée, "est", distance (i, j)
    Input "voulez-vous continuer (oui/non) ?", réponse


PS : je n'ai pas fait de test sur le fait que les villes appartiennent au tableau ville ... à toi de fignoler les détails ...

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 09:53

Bonjour  carpediem ,

ça ressemble pas mal à ce que j'ai proposé avec une saisie moins confortable pour l'utilisateur .
Pour une application réelle , il vaudrait mieux passer en programmation évènementielle avec le choix des villes de départ et d'arrivée dans des listes à cocher ou équivalent .

Cordialement

Posté par
carpediem
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 10:31

je ne vois pas en quoi la saisie est moins confortable ...

on peut par contre faire afficher le tableau des villes pour savoir quels sont les choix de villes (et ne pas (ou moins) se tromper dans leur orthographe )

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 10:55

Ne saisir qu'un caractère par ville au lieu de 4 à 10  me parait plus confortable et diminue d'autant les possibilités d'erreurs de frappe .

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 12:11

carpediem Merci pour ta réponse mais je pense appliquer la méthode de fm_31 qui je comprend un peu mieux.

Sinon, voici ce que j'ai écrit pour l'exo en appliquant tout ce que vous m'avez dit :

Initialisations des tableaux :
    liste_villes = ("Brest" , "Grenoble" , "Lille" , .....)
    tab_distances = [[0 , 996 , 723 , 890 , 1286 , 305 , 564 , 245 , 1026 , 884]
                                           [- , 750 , 104    , 286 , 711    , 576 , 747 , 505 , 543]
                                           ....
                                           .... ]
continuer prend la valeur  "oui"
tant que continuer = "oui"

Saisies :

Afficher ”Ville de départ  (0 pour Brest , 1 pour Grenoble , 2 pour Lille .....  : ”
Saisir villedépart
Afficher ”Ville d'arrivée  (0 pour Brest , 1 pour Grenoble , 2 pour Lille .....  : ”
Saisir villedarrivée

Traitements :

si   (0 <= Villedépart   <= 9)  et     (0 <= villedarrivée <= 9)

        afficher tab_distances[Villedépart    , villedarrivée ]
Fsi
afficher "voulez-vous continuer (oui , non) :
Saisir continuer
fin tantque


Qu'en pensez vous ?
J'ai une question par rapport à l'initialisation des tableaux,  comment je fais pour les cases vides  en java ?

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 12:21

Pour initialiser le tableau , on peut mettre  0  dans les cases non utilisées mais dans ce cas , il faut ajouter du code pour avoir destination > départ  
Sinon on peut remplir le tableau de telle sorte que toutes les cases soient représentatives  d'une distance . (valeurs symétriques)

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 12:26

Donc pour l'algo je pense qu'il est bon. Merci.

Est-ce qu'on peut mettre des 0 dans toutes les cases vides afin d'éviter les erreurs ?

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 12:32

Le code qu'on devra ajouter pour les 0 devra resembler à quoi ?

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 13:39

Pour faire avec les  0  dans le tableau , on peut par exemple rajouter un test type

si  villedépart < villearrivée  
     échanger  villedépart et villearrivée
fin si

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 14:20

Je ne comprend pas pourquoi il faut tester si  villedépart est inférieur à villearrivée ...
Et aussi pourquoi les échanger ?

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 14:53

villedépart  correspond au n° de ligne du tableau  des distances et  villearrivée   au n° de colonne . Si on ne veut pas se retrouver sur une case où il y a un zéro (par exemple  case [5 , 2]) ,  il suffit d'aller voir en case [2 ,5]  qui est renseignée . Car la distance Nantes - Grenoble est la même que la distance  Grenoble - Nantes .
D'où le test (à corriger :   si  villedépart > villearrivée  ...)    pour savoir s'il faut échanger ligne et colonne

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 15:25

Désolé le tableau est assez compliqué à lire, j'ai encore quelque difficultés à le comprendre.  Le  5 c'est  Nantes et le 2 c'est Grenoble ? Puis pour voir la distance il faut se placer au niveau de la ville de départ (ligne) et ensuite compter le nombre de colonnes ici 2 donc on avance de 2 cases pour pouvoir voir la distance?

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 15:30

Ce n'est pas grave pour l'instant je vais essayer de coder l'algo sans le test pour pouvoir bien commencer et voir s'il y a déjà des erreurs.
Je vais faire les chose au fur et à mesure

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 15:32

Oui , c'est en général comme cela qu'on utilise les tableaux .

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 15:34

Es-tu obligé de coder en  java ?  Sinon pour débuter , je conseille plutôt  python .

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 15:37

Oui, puisque je code en java depuis le début de l'année scolaire, j'ai beaucoup plus de mal avec les algorithmes c'est pour sa que j'ai demandé de l'aide.

Posté par
Shuuki
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 18:01

Merci beaucoup pour votre aide j'ai réussi à faire fonctionner mon programme

Posté par
fm_31
re : Instanciation d'un tableau à deux dimensions (matrice) 30-04-17 à 19:56

Bravo et bonne continuation .



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1741 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !