Voici une ébauche en francais. L'algo ne prend pas en compte le niveau et les préférences de chacun, ne fonctionne que sur les Ière et IIIème positions.
La liste obtenue en résultat doit encore être travaillée pour un affichage à l'écran, ainsi que la saisie de données
Il reste encore beaucoupr de boulot pour prendre en compte toutes les notes, toutes les préférences de chacun, les harmoniques...
Mais je ne vais pas m'y aventurer, des programmes font déja ca très bien. c'est juste pour avoir un ordre d'idée de la complexité des choses.
Code : Tout sélectionner
Algorithme : tablature violon
: liste_notes : liste de x listes --liste qui contient les notes entrées par l’utilisateur, [(note1, octave1), (note2, octave2), ...]
: liste_result : liste de x listes --liste qui contiendra les positions finales {[(case1, corde1), position1], [(case2, corde2), position2], ...}
longueur_liste : entier -- variable qui contient la longueur de la liste à analyser
: a : entier --la position en cours d’analyse
: n : entier --curseur
: note_actu : liste de deux chaînes de caractères --la note en cours d’analyse (note, octave)
: coo : liste deux entiers --les coordonnées trouvées
:
: DEBUT
: liste_notes <- [(note1, octave1), (note2, octave2), ...]
: longueur_liste <- longueur(liste_notes)
: A <- 1
:
: Pour n allant de 1 à longueur_liste –On refait la boucle autant de fois qu’il y a de notes à analyser
: note_actu <- liste_notes(n)
: coo <- po(a, note_actu) –On appelle la fonction po avec la position et la note et elle retourne (case, corde) ou (0, 0) si rien n’est trouvé dans la position donnée
: Si coo = (0, 0) alors –Si po n’a rien trouvé, on change de position puis on relance po
: Si a = 1 alors
: a <- 3
: Sinon
: a <- 1
: Fin Si
: coo <- po(a, note_actu)
: Fin Si
: liste_result(n) <- (coo, a) –Pour finir on enregistre le résultat [(case, corde), position] dans la liste résultat
: Fin Pour
: FIN
:
: Fonction po(position : entier, note : liste de deux chaînes de caractères) –po est une fonction à deux paramètres : la position étudiée et la note à analyser
: e : liste de deux entiers –e, variable locale qui contiendra la coordonnée trouvée
: c, i : curseurs --curseurs
:
: DEBUT
: Si position = 1 alors –si on essaye en première position
: Pour c allant de 1 à 4 –les quatre cordes
: Pour i allant de 0 à 6 –les sept possibilités par corde
: Si T1[i, c] = note alors –si la note du tableau 1 correspond à la note analysée
: e <- (i, c) –on enregistre les coordonnées dans e
: retourner e –et po renvoie e
: Fin Si
: Fin Pour
: Fin Pour
: retourner e
: Sinon –même opération si on est en troisième position
: Pour c allant de 1 à 4
: Pour i allant de 1 à 7 –mais sans le 0, il n’y a plus les cordes à vide, et en ajoutant le 7, le quatrième doigt
: Si T3[i, c] = note alors –dans le tableau 3 cette fois-ci
: e <- (i, c)
: retourner e
: Fin Si
: Fin Pour
: Fin Pour
: retourner e
: Fin Si
: FIN
Et T1 est le tableau de listes :
___0_____1_____2_____3___4____5____6
1 (Sol,3) (S#,3) (La,3) (L#,3) (Si,3) (Do,4) (D#,4)
2 (Ré,4) (R#,4) (Mi,4) (Fa,4) (F#,4) (Sol,4) (S#, 4)
3 (La,4) (L#,4) (Si,4) (Do,5) (D#,5) (Ré,5) (R#,5)
4 (Mi,5) (Fa,5) (F#,5) (Sol,5) (S#,5) (La,5) (L#,5)
Et T3 est le tableau de listes :
___1_____2_____3____4____5____6____7
1 (Do,4) (D#,4) (Ré,4) (R#,4) (Mi,4) (Fa,4) (F#4)
2 (Sol,4) (S#,4) (La,4) (L#,4) (Si,4) (Do,5) (D#,5)
3 (Ré,5) (R#,5) (Mi,5) (Fa,5) (F#,5) (Sol,5) (S#,5)
4 (La,5) (L#,5) (Si,5) (Do,6) (D#6) (Ré,6) (Ré#6)
Exemple :
L’utilisateur entre [(Do,5), (Mi,5), (Do,6), (Do,5), (Sol,3)]
L’algorithme retourne {[(3, 3),1], [(0, 4), 1], [(4, 4), 3], [(6, 2), 3], [(0, 1), 1]}