Comme tout instrument, un violon permet de jouer un nombre limité de notes. On appelle cet intervalle la tessiture. La note la plus grave qu'il peut jouer est le SOL2 (fréquence: 196.00 hz), et la note la plus aigüe qu'il peut jouer (hors exceptions) est le FA5 (1396.91 hz). Deux notes qui se suivent forme un mouvement mélodique, soit ascendant (si les fréquences successives augmentent) soit descendant (si les fréquences successives diminuent). On appelle ça le "sens" du mouvement mélodique.
Ainsi, dans la suite de fréquences suivantes:
440 231 134 182 143
, on a un mouvement mélodique descendant (440 231 134
), puis un mouvement mélodique ascendant (134 182
) puis un descendant à nouveau (182 143
).
Remplacez les TODO du programme ci-dessous afin qu'il reçoive en entrée chaque fréquence de note jouée par un utilisateur ainsi que la durée (en milisecondes) de cette note et qui détermine:
- la note qui a été jouée le plus longtemps (attention, pas dont la somme des durées est la plus longue !)
- le nombre de changements de sens du mouvement mélodique.
Évidemment, ne prenez en compte que les fréquences qui se trouvent dans la tessiture du violon !
440 231 231 231 134 186
, il n'y a qu'un seul changement mélodique, qui a lieu entre 134
et 186
!Déterminez l’invariant avant d’écrire la boucle !
Faites en sorte que cet invariant soit correct et complet.
Votre boucle doit respecter votre invariant.
Exemple
Voici quelques exemples d'exécution du programme.
3 Entrez successivement la fréquence et la durée de chaque note : 450 200 460 300 470 200 Changements de sens: 0 La note la plus longue est 460.00 et a été jouée pendant 300 ms.
3 Entrez successivement la fréquence et la durée de chaque note : 450 300 445 200 440 200 Changements de sens: 0 La note la plus longue est 450.00 et a été jouée pendant 300 ms.
5 Entrez successivement la fréquence et la durée de chaque note : 450 200 460 200 460 200 470 300 470 200 Changements de sens: 0 La note la plus longue est 470.00 et a été jouée pendant 300 ms.
5 Entrez successivement la fréquence et la durée de chaque note : 450 200 445 200 445 200 440 200 440 300 Changements de sens: 0 La note la plus longue est 440.00 et a été jouée pendant 300 ms.
3 Entrez successivement la fréquence et la durée de chaque note : 450 200 460 300 450 200 Changements de sens: 1 La note la plus longue est 460.00 et a été jouée pendant 300 ms.
3 Entrez successivement la fréquence et la durée de chaque note : 450 200 440 200 450 300 Changements de sens: 1 La note la plus longue est 450.00 et a été jouée pendant 300 ms.
4 Entrez successivement la fréquence et la durée de chaque note : 440 200 450 200 450 400 440 200 Changements de sens: 1 La note la plus longue est 450.00 et a été jouée pendant 400 ms.
4 Entrez successivement la fréquence et la durée de chaque note : 460 200 450 200 450 400 460 200 Changements de sens: 1 La note la plus longue est 450.00 et a été jouée pendant 400 ms.
6 Entrez successivement la fréquence et la durée de chaque note : 440 200 450 200 450 400 460 200 470 200 460 300 Changements de sens: 1 La note la plus longue est 450.00 et a été jouée pendant 400 ms.
5 Entrez successivement la fréquence et la durée de chaque note : 460 200 450 200 450 400 440 200 450 200 Changements de sens: 1 La note la plus longue est 450.00 et a été jouée pendant 400 ms.
5 Entrez successivement la fréquence et la durée de chaque note : 460 200 450 200 440 400 450 200 440 200 Changements de sens: 2 La note la plus longue est 440.00 et a été jouée pendant 400 ms.
Autoévaluation
Une fois votre programme écrit, vérifiez et corrigez les points suivants:
- Chaque instruction se termine-t-elle bien par un point virgule ?
- La séquence d'instruction après l'accolade ouvrante est-elle alignée mais légèrement décalée vers la droite par rapport à "
main
" ? - Chaque variable est-elle déclarée ? C'est-à-dire, avez vous déterminé le type de chacune de vos variables ?
- Avez-vous utilisé la fonction de lecture qui correspond au type de la variable dont vous voulez obtenir la valeur ? Par exemple, si vous voulez obtenir un int, avez-vous bien utilisé "
scanf("%d", &votre_variable)
" ?
Une fois votre programme corrigé, exécutez-le ! Si tout semble correct, postez votre réponse sur Webcampus !