Envoyé par
bluestorm
Il faut donc plutôt utiliser du code comme :
let ersatz nom = Scanf.sscanf nom "objet_%d" (fun i -> tableau_objets.(i))
Si tu as des choses plus sophistiquées (par exemple une liste d'objets avec nom dans un jeu ou quoi), fais-toi une structure de données où tu stockes le nom de chaque objet avec ses caractéristiques, et utilise ensuite une table associative (par exemple une table de hachage) nom->objet.
Ah, merci beaucoup ! Je pense que c'est ça qu'il me faut (seulement je ne connais pas les fonctions que tu utilise : je connais seulement les fonctions de bases qui servent à mettre en place de petits algorithmes [et non à faire de vrai programmes, on a même jamais prononcé le mot "compilation"] qu'on voit en prépa).
Sinon mes objets sont déjà stockés dans un tableau. En gros à l'heure actuelle ils ressemblent à ça :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| let Unexistant = {indice = 0; nom = ""; voisins = []; ligne = ""} and
Les_Courtilles = {indice = 1; nom = "Les Courtilles"; voisins = [2]; ligne = "la ligne 13"} and
Les_Agnettes = {indice = 2; nom = "Les Agnettes"; voisins = [1;9]; ligne = "la ligne 13"} and
Carrefour_Pleyel = {indice = 3; nom = "Carrefour Pleyel"; voisins = [4;22]; ligne = "la ligne 13"} and
St_Denis_Porte_de_Paris = {indice = 4; nom = "Saint-Denis - Porte de Paris"; voisins = [5;3]; ligne = "la ligne 13"} and
Basilique_de_St_Denis = {indice = 5; nom = "Basilique de St-Denis"; voisins = [4;6]; ligne = "la ligne 13"} and
St_Denis_Universite = {indice = 6; nom = "St-Denis - Université"; voisins = [5]; ligne = "la ligne 13"} and
Pont_de_Levallois_Becon = {indice = 7; nom = "Pont de Levallois Bécon"; voisins = [8]; ligne = "la ligne 3"} and
Anatole_France = {indice = 8; nom = "Anatole France"; voisins = [7;20]; ligne = "la ligne 3"} and
Gabriel_Peri = {indice = 9; nom = "Gabriel Péri"; voisins = [2;10]; ligne = "la ligne 13"} and
Mairie_de_Clichy = {indice = 10; nom = "Mairie de Clichy"; voisins = [9;11]; ligne = "la ligne 13"} and
G11 = {indice = 11; nom = ""; voisins = [10;21;14]; ligne = "la ligne 13"} and
W12 = {indice = 12; nom = ""; voisins = [65;17]; ligne = "walk"} and
Porte_de_Champerret = {indice = 13; nom = "Porte de Champerret"; voisins = [20;19]; ligne = "la ligne 3"} and
Porte_de_Clichy = {indice = 14; nom = "Porte de Clichy"; voisins = [11;16]; ligne = "changement"} and
G15 = {indice = 15; nom = ""; voisins = [606;16]; ligne = "le RER C"} and
G16 = {indice = 16; nom = ""; voisins = [15;14]; ligne = ""} and
W17 = {indice = 17; nom = ""; voisins = [12;18]; ligne = "walk"} and
W18 = {indice = 18; nom = ""; voisins = [17;34]; ligne = "walk"} and
(...) |
et j'en ai 620 que je stocke dans un gros tableau (via deux gros tableaux que je fusionne en un seul, parce que mon implémentation de Caml Light ne me permet pas de définir un tableau à l'aide de plus de 4082 caractères, or comme mes noms sont bêtement lourds, ça monte vite ). Ca donne un truc du genre :
let Paris = [|Unexistant; Les_Courtilles; Les_Agnettes; Carrefour_Pleyel; St_Denis_Porte_de_Paris; Basilique_de_St_Denis; (...)
Je ne sais pas si ce stockage des données est optimal mais aux vues des objets qui m'ont étés présentés en cours, ça m'a semblé être le cas. (Pour le nom des objets, je reconnais qu'il est bêtement compliqué et je pense que je vais le simplifier)
Je pourrais faire une fonction qui balaie le tableau à la recherche d'un élément dont le nom serait identique (c'est d'ailleurs comme ça que j'avais fait au début - pour l'indice aussi d'ailleurs : je balayais le tableau en incrémentant un compteur jusqu'à ce que je tombe sur la bonne station - seulement je me suis dit que c'était pas top pour la complexité, et c'est pour ça que je vous posais la question. Ceci dit si je devais faire comme ça ça serait pas un vrai problème puisque je ne dois le faire qu'une fois au début de l'algorithme (ensuite je ne travaille qu'avec les indices des stations - d'où la nécessité de passer de l'indice d'une station à la liste de ces voisins et inversement en temps unitaire)
utilise ensuite une table associative (par exemple une table de hachage) nom->objet.
Est-ce que tu pourrais développer un peu ? Je suis débutant et on m'a jamais parlé de ça. Il y a un bon nombre des termes que tu utilise dont j'ai jamais entendu parler en cours d'info (table associative, table de hachage...)
En tous cas encore merci pour vos réponses rapides les gars, c'est super sympa et en plus ça fait plaisir de voir qu'on peut se faire aider en Caml ! (je pensais que c'était pas utilisé du tout et que j'arriverais jamais à trouver des gens voulant bien m'aider)
Partager