IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

De la comparaison


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut De la comparaison
    Bonjour à tous(tes), le soucis:
    soit un tableau de valeurs entre 28 et 95 (tableau: z[ ]
    les valeurs ne se suivent pas (paramètres de notes midi)
    un dispositif en extrait 6 aléatoires
    qui sont mises sans un tableau t[ ]
    Soit par ailleurs 7 combinaisons: (1;2;3;4;5;6;7) de valeurs de z[ ]
    nommées: a;b;c;d;e;f pour l'explication ci-dessous
    telles que a:
    a2 =a1+7; a3=a2+7; a4=a3+7; a5=a4+7;a6=a5+7
    b2 =b1+7; b3=b2+7; b4=b3+7; b5=b4+7;b6=b5+7
    c2=.....ext..
    .....g6=g5+7
    je voudrais tester si l'une des valeurs de t[ ] est égale à l'une des valeurs des 7 combinaisons
    Si = Alors mettre le nom (1;2;3;4;5;6;7) de la combinaison dans la variable: r
    Pour faire fonctionner j'ai fait avec du "si alors" par bottes de 7; mais je pressens qu'il doit y avoir moyen de faire ça dans une boucle; pour l'instant rien ne marche je me perd dans le raisonnement, sans parler des soucis de dépassements.
    A l'aide les gros cerveaux please merci.
    Savoir pour comprendre et vice versa.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    ton résonnement est un peu confus
    honnêtement j'ai pas tout compris

    donc tu as un tableau de 67 valeurs différentes [28..95]
    tu as 7 Combinaisons 1..7
    ces combinaison on 7 valeurs a;b;c;d;e;f;g comprise entres [28..95]
    les combinaison sont créer de tels façon que
    a2 = a1+7;
    a3 = a2+7;
    a4 = a3+7;
    a5 = a4+7;
    a6 = a5+7;

    ce qui implique que le choix de la première valeur se réduit a la borne supérieur 95-42 = 53
    => 53+7*6 = 95

    tu doit donc choisir aléatoirement les première valeur entre [28..53]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Pour toutes les combinaison Faire 
      Combinaison[x][1] = Random(28..53)
      Pour Id = 2  jusqu'a 7 Faire 
        Combinaison[x][ID] =   Combinaison[x][ID-1]+7
      FinFaire
    FinFaire
    voila a peu prés ce que j'ai compris
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    J'y suis arrivé en mettant les combinaisons en chaînes puis en tableaux et en traitant les notes dès leur génération
    Chaînes <---> Tableaux, c'est l'arme fatale
    Savoir pour comprendre et vice versa.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Dans tes données, quand tu connais a1, tu connais aussi a2 et les suivants.

    Ici, en testant si modulo(a1-b1,7) = 0, ça fait un seul test, et ça permet presque de savoir si une des valeurs a1,a2...a6 est égale à une des valeurs b1,b2,...b6

    Reste à gérer ce qui se cache derrière le mot "presque". Si modulo(a1-b1,7) = 0, il faut alors tester la différence entre a1 et b1. Si cette différence est supérieure à 35, les 2 séries ne se superposent pas, et si cette différence est inférieure ou égale à 35, les 2 séries ont au moins un nombre en commun
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    si modulo(a1-b1,7) = 0 _et_ abs(a1-b1) <=35 alors 
     premiere_valeur_commune = max(a1,b1) 
    sinon
      ... pas de valeur en commun
    fin
    Reste à boucler pour comparer (a1,c1), (a1,d1) etc etc
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    @: tbc92: Cite: "Dans tes données, quand tu connais a1, tu connais aussi a2 et les suivants."

    Hélas non, car les # et les bémols ne sont pas distribués équitablement.
    Mais en traitant les notes dès la génération j'élimine un tableau
    et ça se réduit à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    pour a=1 to 7 //noms des combinaisons
        pour b=1 to 6 //valeurs
           si note=comb(a,b) alors r=a
       b suivant
    a suivant
    Savoir pour comprendre et vice versa.

  6. #6
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut De la comparaison
    Bonjour,

    Pour autant que j'ai pu comprendre tes précisions, les outils proposés sont-ils appropriés ?

    Le premier tableau mentionné:
    Citation Envoyé par valentin03 Voir le message
    ... soit un tableau de valeurs entre 28 et 95 (tableau: z[ ]
    les valeurs ne se suivent pas (paramètres de notes midi) ...
    fait penser à une mélodie, tandis que les combinaisons qui viennent ensuite:

    Citation Envoyé par valentin03 Voir le message
    ... Soit par ailleurs 7 combinaisons: (1;2;3;4;5;6;7) de valeurs de z[ ]
    nommées: a;b;c;d;e;f pour l'explication ci-dessous
    telles que a:
    a2 =a1+7; a3=a2+7; a4=a3+7; a5=a4+7;a6=a5+7
    b2 =b1+7; b3=b2+7; b4=b3+7; b5=b4+7;b6=b5+7
    c2=.....ext..
    .....g6=g5+7
    je voudrais tester si l'une des valeurs de t[ ] est égale à l'une des valeurs des 7 combinaisons
    Si = Alors mettre le nom (1;2;3;4;5;6;7) de la combinaison dans la variable: r ...
    renvoient aux sept notes de la gamme:
    (La, Si, Do = Ut, Ré, Mi, Fa, Sol) = (A, B, C, D, E, F, G) en notation anglo-saxonne.

    Or une mélodie, même très simple, présente presque toujours des altérations, et le tableau initial de 68 notes (95 - 28 + 1) comporte nécessairement les 12 sons de la gamme tempérée:
    (C, C#, D, Eb, E, F, F#, G, G#, A, Bb, B)
    en raison de son étendue, puisqu'il couvre plus de 5 octaves (68/12).

    J'ai l'impression que tu souhaites faire l'impasse sur les altérations, ce qui constitue une perte essentielle d'information, et surtout complique singulièrement le travail, comme tu l'as toi-même pressenti:
    Citation Envoyé par valentin03 Voir le message
    ... Hélas non, car les # et les bémols ne sont pas distribués équitablement ...[/CODE]
    Des tableaux impliquant une arithmétique modulo 12 ne conduiraient-ile pas à un algorithme plus simple ?

    Ce lien n'est pas sans rapport avec le sujet.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #7
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    @: wiwaxia:
    J'ai volontairement zappés les altérations car le soft à pour but de faire reconnaître des sons et de les désigner sur un clavier 7 notes (blanches)
    Quand on n'a pas l'oreille absolue, c'est tellement difficile que j'ai dû mettre une option qui réduit à l'octave. Au départ, il fallait reconnaître sur les 5 octaves et ça relevait de "mission impossible"
    Si j'ajoute les noires je pourrai faire comme tu dis.
    Savoir pour comprendre et vice versa.

  8. #8
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut De la comparaison
    Si la mélodie consignée dans le tableau Z[ ] ne comporte que des notes blanches, chacune d'entre elles peut être associée à un couple constitué:
    a) du nom de la note de référence, de hauteur minimale dans l'échelle envisagée;
    b) de la distance séparant la note considérée de la précédente, et exprimée en octaves.
    Un symbole tel que La3 désigne sans ambigüité une touche blanche du clavier.

    Les notions suivantes pourraient t'être utiles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CONST Gamme: ARRAY[0..6] OF String = ('Do', 'Ré', 'Mi', 'Fa', 'Sol', 'La', 'Si');
     
    TYPE ListeN1 = ARRAY[1..N] OF ShortInt;
         Note = RECORD  Nom: Char; Delta: ShortInt  END;
         ListeN2 = ARRAY[1..N] OF Note;
     
    VAR Z: ListeN1;
        Partition: ListeN2;
    Le transfert de la première liste à la suivante s'effectuant par les instructions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    PROCEDURE Transf_L1L2(x: ShortInt; VAR N_: Note);
      VAR Rang: ShortInt; No: Note;
      BEGIN
        Rang:= x - X0;         No.Nom:= Gamme(Rang MOD 7);
        No.Delta:= Rang DIV 7; N_:= No
      END;
     
     ...
      Transf(Z[k], Partition[k]);
    La constante (X0) désigne le rang de la première note nommée ('Do') dans l'échelle employée.
    Il faudrait s'assurer que les valeurs négatives de (x - X0) ne jouent pas de mauvais tour. Je les évite dans les calculs modulaires, et m'en méfie un peu.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  9. #9
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    @: wiwaxia: Dans ce soft les sons sont proposés un par un, mais tu me donne l'idée de pouvoir intéroger le suivant pour aider à la reconnaissance.
    Mon premier message prête à confusion avec: "un dispositif en extrait 6 aléatoires" car les six n'en sont qu'une, à savoir la même mais dans 6 octaves; c'est leur mise en tableau qui m'a fait parler de plusieurs notes, car bien qu'étant identiques au sens du solfège, elles n'en sont pas moins différentes au niveau du son; et en fait, je n'ai pas éliminé le tableau, je l'ai mis en deuxième dimension (b) de comb(a,b).
    Merci pour l'inspiration.
    Savoir pour comprendre et vice versa.

Discussions similaires

  1. Data Integrator Table Comparison
    Par Sabine26 dans le forum Alimentation
    Réponses: 4
    Dernier message: 31/03/2010, 08h54
  2. Comparison de chaînes
    Par litle-hacker dans le forum Débuter
    Réponses: 2
    Dernier message: 11/06/2008, 13h45
  3. comparison de tri
    Par space-cowboy dans le forum Mathématiques
    Réponses: 8
    Dernier message: 05/04/2008, 21h48
  4. Réponses: 12
    Dernier message: 22/12/2006, 00h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo