AP1 CPU - TP2

Règle des douzièmes

Le but de l’exercice est de compléter le programme pour qu’il affiche la hauteur d’eau à Perros-Guirec le 12 octobre 2023.

Voici le résultat exact, tiré du site suivant

Le dessin avec turtle que vous voyez correspond au tracé d’un axe horizontal, numéroté en heures et d’un axe vertical, numéroté en m. Le repère est choisi de telle façon que le point de coordonnées \((x,y)\) correspond à la \(x\)ème minute du jour, et à la hauteur \(y\) exprimée en cm Par exemple le point \((60,200)\) signifie qu’il est 1h du matin et que la hauteur de l’eau est de 2m

  • En utilisant une boucle for, modifiez le programme pour qu’il affiche toutes les heures de 1 à 24 horizontalement.

En première approximation, la hauteur de la mer peut être calculé de la façon suivante, partant de la marée basse.

  • On commence par noter le marnage, qui est la différence de hauteur entre la maée haute et la marée basse. Ici, le marnage vaut 5.76m

  • On note ensuite la hauteur à la marée basse, qui est ici de 2.58m.

  • A minuit, le niveau de la mer est de 2.58m

  • A 1h du matin , le niveau de la mer a monté d’1/12e de marnage, donc de 5.76/12m = 48cm. Il est donc de 3.06m

  • A 2h du matin, le niveau de la mer a monté en une heure de 2/12e de marnage, donc de 96cm. Il est donc maintenant de 4.02m Il a donc augmenté en deux heures de 1+2=3/12e.

  • A 3h du matin, le niveau de la mer a monté en une heure de 3/12e de marnage

  • A 4h du matin, le niveau de la mer a monté en une heure de 3/12e de marnage

  • A 5h du matin, le niveau de la mer a monté en une heure de 2/12e de marnage

  • A 6h du matin, le niveau de la mer a monté en une heure de 1/12e de marnage

  • Pour les 6 heures suivantes, c’est pareil mais dans l’autre sens (le niveau de la mer diminue)

  • etc.

En fait, il s’agit d’une approximation d’une sinusoide.

  • Ecrire une fonction qui, étant donné une heure h, renvoie de combien de douzième le niveau de la mer a monté entre l’heure h-1 et l’heure h. Par exemple:
    • pour h = 1, il faut répondre 1
    • pour h = 2, il faut répondre 2
    • pour h = 3, il faut répondre 3
    • pour h = 4, il faut répondre 3
    • pour h = 7, il faut répondre -1

Pour vous aider, la formule suivante résout le problème quand h est compris entre 1 et 6:

\[ 3.5 - \left| h - 3.5 \right| \]

  • Utilisez la règle des douzièmes pour dessiner le niveau de la mer. Attention, pour coller le plus possible à la réalité, utilisez des marnages différents pour chacune des périodes de 6h.

Heures

  • Écrire un programme heure.py qui demande de saisir trois entiers représentant une heure (sous la forme h, m, s) et qui :

    • dit si l’heure est bien valide
    • affiche l’heure qu’il sera une seconde plus tard.
  • Essayez de tester tous les cas. Pour chaque cas testé, copiez-collez dans votre fichier le résultat.

  • Vérifiez avec le prof que vous avez bien traité tous les cas.

  • Essayez d’ajouter une boucle while pour afficher l’heure en continu.

Distributeur

Pas besoin de boucle while dans cet exercice.

Un distributeur de confiseries propose divers produits. Il accepte les pièces de vingt, dix, cinq et un centimes.

Au départ, il y a 3 pièces de vingt centimes, 3 pièces de dix centimes, 3 pièces de cinq centimes, et 3 pièces d’un centime dans le distributeur

  • Dans cette première question, le distributeur ne rend pas la monnaie. Ecrivez un programme monnaie.py qui

    • demande le coût de la friandise
    • demande combien de pièces de 20, 10, 5 et 1 centimes la personne a introduite
    • dit s’il y a assez d’argent, et combien il faudrait rendre (sans faire le rendu pour l’instant)
    • dit combien de pièces de 20, 10, 5 et 1 centimes sont maintenant dans la machine
  • Complétez le programme pour qu’il calcule et affiche le nombre de pièces de 20 à rendre, et la somme restant à rendre après. Attention! On ne peut pas rendre plus de pièces de 20 qu’il n’y en a dans la machine.

  • Faites la même chose pour les pièces de 10, 5 et 1.

  • Donnez un exemple où il n’est pas possible de rendre la monnaie. Traitez ce cas dans le programme.