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 |
0 | 996 | 723 | 890 | 1286 | 305 | 564 | 245 | 1026 | 884 |
0 | 750 | 104 | 286 | 711 | 576 | 747 | 505 | 543 | |
0 | 668 | 979 | 593 | 224 | 515 | 524 | 905 | ||
0 | 316 | 607 | 472 | 645 | 434 | 467 | |||
0 | 890 | 769 | 938 | 750 | 400 | ||||
0 | 386 | 106 | 832 | 559 | |||||
0 | 348 | 447 | 681 | ||||||
0 | 799 | 665 | |||||||
0 | 901 | ||||||||
0 |
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.
Les deux tableaux sont normalement à coter sur la feuille de l'énoncé. Mais là je n'ai pas pu les mettre cote à cote.
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 ]
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.
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.
Bonjour
je n'ai pas l'impression que ton algorithme tienne compte de ces deux consignes :
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 .
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 ]
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)
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
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 .
du coup quel est l'intérêt d'avoir le tableau des villes, si on l'affiche à chaque fois sans utiliser ledit tableau ?
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" ?
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
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
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
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
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 )
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 .
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 ?
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)
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 ?
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
Je ne comprend pas pourquoi il faut tester si villedépart est inférieur à villearrivée ...
Et aussi pourquoi les échanger ?
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
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?
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
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.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :