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

 C Discussion :

Racine douzième de deux


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut Racine douzième de deux
    Bonjour à toutes et à tous,

    Il me semble avoir bien cherché sur le net et sur le forum mais je n ai rien trouvé. Si le sujet existe déjà, je m en excuse.

    Je cherche avec la librairie math.h et sa fonction "sqrt" pouvoir coder ceci:

    " racine douzième de deux".

    Est-ce possible ou bien dois-je m y prendre autrement?
    Merci par avance de vos réponses.

    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Salut,

    Tu doit t'y prendre autrement AMHA :

    Racine douzième d'un nombre c'est l'élèver à la puissance (1/12). Après tu peut coder ta propre fonction.

    Bonne chance.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonjour ok.Idriss,

    D accord. Alors j ai compris.
    Je te remercis pour ton aide.

    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    De rien, parfois faut se servir des maths pour résoudre son problème ... met en résolu si tu n'a plus de problème.

    Bonne fin de journée.

    P.S : pas mal la signature sauf que c'est un manchot et non un pingouin.

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par shazad Voir le message
    Je cherche avec la librairie math.h et sa fonction "sqrt" pouvoir coder ceci: " racine douzième de deux".
    Toi, tu veux trouver les fréquences des notes de musique, n'est-ce pas ?

    Ça couplé à la directive BEEP des HP48, ça nous a fait passer de bons moments dans les années 1990 ... :-)

    À bientôt.

  6. #6
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bon allez j avoue tout, je cherche à faire un petit programme qui me permet de calculer la position des frettes d un instrument de musique.
    Je sais qu il en existe des tas sur le net, mais je voulais me remettre au C un petit peu.
    Mais j ai quand même encore un problême car j ai transfomé mon racine douzième de 2 en 2 puissance 1/12. J utilise la fonction pow.

    J ai codé comme cela:

    650 / pow(2, 1/12);

    Mais ca ne fonctionne pas. je pense que je ne peux pas passer le 1/12 parce que ca fonctionne quand je le remplace par 0.8333333333. Je vais encore chercher avant de crier au secours.

    Ca marche, je remplace par monchot.

    Shaz
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par shazad Voir le message
    J ai codé comme cela:
    650 / pow(2, 1/12);

    Mais ca ne fonctionne pas. je pense que je ne peux pas passer le 1/12 parce que ca fonctionne quand je le remplace par 0.8333333333. Je vais encore chercher avant de crier au secours.
    C'est parce que le C considère tes nombres comme des entiers et reste sur ce format quand il fait ses calculs. Essaie :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    650.0 / pow (2, 1.0/12);

    ... par exemple.

  8. #8
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup Obsidian, c est ce qu il fallait faire car même mon histoire de 0.83333333 n était pas bonne.

    C est triste d etre nul en math et en C. mdr
    En tous les cas ca faisait un moment que je n etait pas venus et je vois que les personnes de ce forum sont toujours aussi aimable et prêtes à aider.
    Un grand merci. J aurais surement d autres questions à poser en rapport avec ce petit projet

    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    À ton service, mais n'oublie pas !

  10. #10
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Oups, pardon!

    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Je n'avais pas vu :

    Citation Envoyé par shazad Voir le message
    Merci beaucoup Obsidian, c est ce qu il fallait faire car même mon histoire de 0.83333333 n était pas bonne.

    C est triste d etre nul en math et en C. mdr
    C'est parce que tu as oublié un zéro :

    1 ÷ 12 = 0,0833333...

    Zou.

  12. #12
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonsoir à toutes et à tous,

    Voilà je reviens plus vite que prévu avec mon petit problême.
    Et voilà ce que j ai écrit pour l instant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
     double calculPositionsDesFrettes(longueurDuManche)
     {
         return longueurDuManche/pow(2,1.0/12);
     }
    int main(int argc, char *argv[])
    {
      double longueurDuManche;
     
      printf("Entrez la longueur de votre manche:");
      scanf("%ld", &longueurDuManche);
     
      longueurDuManche = calculPositionsDesFrettes(longueurDuManche);
      printf("La premiere position est: %lf\n", longueurDuManche);
     
     
      return 0;
    }
    Mais si je veus qu il me donne les 24 résultat suivants par exemple et bien je ne peus plus faire avec la même variable "longueurDuManche", car si je fais une boucle for comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i = 1; i != 25; i++)
    {
    longueurDuManche = calculPositionsDesFrettes(longueurDuManche);
      printf("La premiere position est: %lf\n", longueurDuManche);
    }
    au second passage il ne garde pas le premier résultat. Et donc tout est faux
    J avais pensé faire avec un tableau. Qu en pensez vous ?

    Merci Obsidian de m avoir montré mon erreur avec le 0.08333333.

    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  13. #13
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salkut,

    J'ai retrouvé un de mes vieux bouts de sources qui pourrait faire ton bonheur. Livré AsIs, avec le méchant scanf et tout.

    A+

    Pfeuh

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
     
    #define ROOT12 1.059463
     
    int main(void)
    {
        double diapason = 100.0;    // longueur du manche
        int last_fret = 24;         // nombre de frettes
        int fret_num = 0;
     
        printf("longueur du manche : ");
        scanf("%lf",&diapason);
        while(fret_num <= last_fret)
        {
            printf("frette %2d : %.01lf\n",fret_num,diapason);
            diapason /= ROOT12;
            fret_num++;
        }
        return 0;
    }

  14. #14
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonjour pfeuh,

    Merci beaucoup pour ton aide.
    Si je comprends bien il y a un problême avec le fait que j envois ma variable dans une fonction. Elle est détruite après son passage et donc tout est faux dans mon exeple
    Est-ce cela ?

    Shaz
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  15. #15
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Alors j ai essayer de faire ceci en m aidant de ton exemple et ca ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
     
    int main(int argc, char *argv[])
    {
      double longueurDuManche;
      int i = 1;
     
      printf("Entrez la longueur de votre manche:");
      scanf("%lf",&longueurDuManche);
     
      while( i != 25)
     {
      printf("La premiere position est: %lf\n", longueurDuManche);
      longueurDuManche / pow(2,1.0/12);
      i++;
     
     }
     
      return 0;
    }
    Et si je fais ceci qui est complètement inspiré de ton exemple et alors ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    #define DIVISEUR pow(2.0,1.0/12.0)
    int main(int argc, char *argv[])
    {
      double longueurDuManche;
      int i = 1;
     
      printf("Entrez la longueur de votre manche:");
      scanf("%lf",&longueurDuManche);
     
      while( i != 25)
     {
      printf("La premiere position est: %lf\n", longueurDuManche);
      longueurDuManche /= DIVISEUR;
      i++;
     
     }
     
      return 0;
    }
    J ai un peu de mal à comprendre. Pourriez vous éclairer ma lanterne ?
    Pourquoi suis-je absolument obligé de mettre ce #define pour calculer?

    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  16. #16
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     longueurDuManche / pow(2,1.0/12);
    Tu as oublié le "égal",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     longueurDuManche /= pow(2,1.0/12);
    ce qui fait que le calcul est fait mais le résultat n'est pas stocké dans longueurDuManche.

    Citation Envoyé par shazad Voir le message
    Pourquoi suis-je absolument obligé de mettre ce #define pour calculer?
    Rien ne t'y oblige, c'est juste une question de lisibilité.

  17. #17
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonsoir pfeuh,

    Bon et bien il faut que je rende à l évidence que j aurais du potasser un peu de théorie avant de m y remettre.
    Encore merci pour tout.
    Voilà le sujet est enfin résolu.

    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

  18. #18
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Encore un détail : les fréquences des notes de musique sont une progression géométrique. Si un octave contient douze notes (avec les demi-tons) et que chaque fois que l'on monte d'un octave, on multiplie la fréquence par deux, alors on passe à la note suivante en multipliant sa fréquence par 2^(1/12), soit racine douzième de deux. Ça, c'est que tu exposes depuis le début.

    Par conséquent, pour trouver la fréquence de n'importe quelle note, il faut placer le début de la série sur une note choisie, à priori le LA, défini à 440 Hz tout pile par convention, et de la numéroter « 0 ».

    De là, la fréquence de n'importe quelle note n est égale à :

    440 × 2 ^ (n ÷ 12)

    Maintenant, je ne joue pas de guitare, mais j'imagine que tu auras besoin d'une inverse car plus ton manche est long, plus graves sont les notes qu'il permet de restituer.

  19. #19
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    j'imagine que tu auras besoin d'une inverse car plus ton manche est long, plus graves sont les notes qu'il permet de restituer.
    Oui, mais à tension égale, plus la longueur de la corde est petite, plus la fréquence est élevée. Comme on part d'une longueur maximum (celle du manche), la distance chevalet-frette (que veut calculer le PO) sera forcément plus petite.

  20. #20
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 160
    Points : 47
    Points
    47
    Par défaut
    Bonjour à tous,

    Merci pour ce détail très important Obsidian. Mais dans mon petit programme je ne cherches pas à calculer la fréquence de chaque notes. Je veus juste caculer l emplacement des frettes qui délimite donc les cases du manche de la guitare.

    J ai à nouveau un petit problême car j ai donc fait pour l instant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    longueurDuMAnche /= pow(2, 1.0/12);
    Cela me donne donc pour le premier résultat, et si je prends 650 pour "longueurDuManche": 613.5183032. Ce résultat est donc la distance depuis le sillet du chevalet jusqu à la première frette.

    Je voudrais pouvoir afficher le résultat maintement depuis le sillet de tête jusqu à la première frette, ce qui me donnerais :36.4816968. C est à dire 650- 613.5183032.
    Pourquoi : car quand on trace la position des frettes sur la touche, le zéro du reglet est appuyé contre le sillet de tête.

    La formule pour cela est :
    650( 1 - 1/2^n/12)
    ou bien 650(1 - 0.943874^n).
    n : est la position de chaque frettes.
    Le problême c est que je n arrive pas à faire varier "n" dans la formule.
    J ai bien essayer cela mais ca ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    longueurDuManche *= (1 - (0.943874 * positionPremiereFrette));
    J avais bien pensé aussi au moment du scanf, quand je demande de rentrer la longueur du manche de remplir 2 variables. Une qui resterais avec la longueur initiale et l autre qui pourrait partir dans le calcul. Il ne m aurait plus resté qu'à diviser mon résultat par la longueur initiale. Mais j ai un peu rêvé.

    Dois-je trouver une autre formule avec seulement la longueur initiale et le 2^1/12 ?

    Voilà pour l instant où j en suis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
     
    int main(int argc, char *argv[])
    {
      double longueurDuManche;
      long positionPremiereFrette = 0;
      long positionDerniereFrettes = 24;
      int i;
     
      printf("Longueur du diapason :");
      scanf("%lf",&longueurDuManche);
     
      do
     {
      for( i = 1; i <= 24; i++)
      {
      //printf("La position de la frette %ld par rapport au sillet de chevalet est: %lf\n",positionPremiereFrette,longueurDuManche);
      longueurDuManche *= (1 - (0.943874 * i));
      positionPremiereFrette++;
      printf("La position de la frette %ld par rapport au sillet de tete est: %lf\n",positionPremiereFrette,longueurDuManche);
     
      }
     
     }while (positionPremiereFrette <= positionDerniereFrettes);
     
       return 0;
    }
    Shazad
    Hier un manchot a frappé a ma fenêtre, il a frappé si fort qui il l'a cassée; et alors la je me suis senti libre.....

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/07/2007, 01h21
  2. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57
  3. Racine carrée
    Par SteelBox dans le forum Mathématiques
    Réponses: 5
    Dernier message: 23/11/2002, 17h15
  4. [VB6] Racine carrée + arrondi
    Par Krys29 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/10/2002, 13h19
  5. soustraire deux dates ?
    Par joejoe dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2002, 15h53

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