Informations

Auteur(s) Berg Lucas
Date limite Pas de date limite
Limite de soumission Pas de limite

Se connecter

[4.5] Les sanglots longs

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 !

Cas particulier
Une séquence de notes identiques n'est jamais constituée comme un changement de mouvement mélodique. Ainsi, dans la suite: 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 !


Le code