1. Livres & vidéos
  2. Algorithmique
  3. Énoncé 1 : Variables, boucles et instructions de test
Extrait - Algorithmique Entraînez-vous et améliorez votre pratique de la programmation (exemples en Java et Python) (2e édition)
Extraits du livre
Algorithmique Entraînez-vous et améliorez votre pratique de la programmation (exemples en Java et Python) (2e édition) Revenir à la page d'achat du livre

Énoncé 1 : Variables, boucles et instructions de test

Introduction

Durée

7 heures 40

Mots-clés

variable, type, déclaration, affectation, utilisation, expression, constante, transtypage, lecture, affichage, boucle, instruction de test

Objectif

Dans ce chapitre, vous apprendrez à :

  • déclarer, affecter et utiliser les variables et les constantes  ;

  • écrire une expression  ;

  • lire une variable et afficher la valeur d’une expression ;

  • programmer une boucle  ;

  • mettre en œuvre une instruction de test.

Prérequis

Pour valider les prérequis nécessaires avant d’aborder le TP, répondez aux questions ci-après.

1. Questions générales

1.

Indiquez parmi les choix suivants les caractéristiques que possède une variable :

a.

un nom ;

b.

un calcul mathématique ;

c.

une valeur.

2.

Comment la valeur d’une variable peut-elle changer pendant l’exécution du programme ?

3.

Le type d’une variable :

a.

est l’ensemble des valeurs que peut prendre la variable.

b.

est le format d’affichage d’une variable.

c.

est la longueur maximale de son nom.

4.

Quelle est la différence entre une variable et une constante ?

5.

Quelle est l’utilité d’une constante ?

6.

Indiquez parmi les choix suivants les éléments qui peuvent figurer dans une expression :

a.

les variables ;

b.

les opérateurs ;

c.

les boucles ;

d.

les parenthèses ;

e.

les déclarations de variables ;

f.

les constantes.

7.

À quoi sert une affectation ?

8.

Quels sont les opérateurs qui peuvent être appliqués à une variable qui a été déclarée, comme il se doit, avec un type précis ?

2. Questions Java

9.

Déclarez en Java la variable longueur de type int.

10.

Déclarez en Java la constante nombreJours de type int avec la valeur 30.

11.

Quelle est l’utilité du transtypage en Java ?

12.

Y a-t-il une différence de calcul entre les trois lignes suivantes ?

longueur++;

longueur = longueur...

Énoncé 1.1 : Affichage de 4/3

Durée estimative : 10 minutes

Écrivez le programme Java/Python qui affiche la valeur réelle de 4/3.

Indice

Le transtypage peut être utilisé pour afficher la valeur réelle de 4/3, mais ce n’est pas une obligation.

Énoncé 1.2 : Conversion de degrés en radians et vice versa

Durée estimative : 15 minutes

Écrivez le programme Java/Python qui lit une valeur d’angle en degrés, la convertit en radians et affiche le résultat.

Écrivez également le programme qui lit une valeur d’angle en radians, la convertit en degrés et affiche le résultat.

Indices

La conversion de degrés en radians s’effectue en divisant par 180 et en multipliant par π.

La conversion de radians en degrés s’effectue en divisant par π et en multipliant par 180.

En Java, la valeur de π est fournie par Math.PI. La lecture d’un nombre réel de type double peut être réalisée en utilisant Scanner comme l’illustre le programme suivant qui lit un réel puis imprime sa valeur.

import java.util.Scanner; 
  
public class Lecture { 
   public static void main(String[] args) {  
      Scanner reader =        new Scanner(System.in); 
      System.out.println("Entrez un nombre réel : ");  
      double x = reader.nextDouble();  
      System.out.println("Votre nombre est : " + x); 
   } 
} 

En Python, la valeur de π est donnée par la constante math.pi. La lecture d’un...

Énoncé 1.3 : Calcul de la moyenne de quatre nombres entiers

Durée estimative : 20 minutes

Écrivez le programme Java/Python qui calcule la moyenne de quatre nombres entiers. Chaque nombre doit être demandé à l’utilisateur et lu au clavier.

Indices

La moyenne n’est pas un nombre entier.

En Java, un nombre entier peut être lu au clavier de la même façon qu’un nombre réel. Il convient d’utiliser nextint() à la place de nextDouble().

En Python, la lecture d’un nombre entier s’effectue avec la fonction input() comme un nombre réel mais en changeant la conversion float() en int().

Énoncé 1.4 : Somme des n premiers nombres entiers pairs

Durée estimative : 30 minutes

Écrivez l’algorithme qui demande à l’utilisateur la valeur de la variable n puis qui calcule la somme des n premiers nombres entiers pairs en commençant par deux. À partir de cet algorithme, écrivez le programme Java/Python correspondant.

Énoncé 1.5 : Livret d’épargne

Durée estimative : 35 minutes

Écrivez l’algorithme qui, à partir d’un montant à épargner et d’un taux d’intérêt annuel, calcule le montant augmenté des intérêts pour les n prochaines années. Le programme doit demander à l’utilisateur la valeur du montant initial, du taux d’intérêt (exprimé en pour cent) et de la variable n.

Écrivez ensuite le programme Java/Python correspondant à cet algorithme.

Indices

Pour simplifier, nous faisons l’hypothèse que les intérêts sont toujours calculés pour des années entières.

Le calcul du montant épargné au bout d’un an s’effectue par la formule (la valeur de l’intérêt est divisée par 100 car il est exprimé en pour cent) :

montantEpargné = montantInitial * (1 + intérêt/100)

Énoncé 1.6 : Année bissextile

Durée estimative : 45 minutes

Une année bissextile comporte un 29 février. Les années divisibles par 4 sont bissextiles. Il existe une exception : les années divisibles par 100 ne sont pas bissextiles sauf si elles sont aussi divisibles par 400.

Écrivez l’algorithme qui détermine si une année est bissextile ou non en lisant la valeur au clavier. Proposez deux solutions :

  • l’une en imbriquant les tests successifs sur l’année ;

  • l’autre en utilisant un seul test.

Écrivez ensuite, pour chaque solution, le programme Java/Python correspondant.

Indice

Si un nombre est divisible par un autre nombre, le modulo (reste de la division entière) du premier nombre et du second nombre est nul. La syntaxe de l’opérateur modulo est %, à la fois en langage algorithmique, en Java et en Python.

Énoncé 1.7 : Calcul de l’impôt sur le bénéfice des sociétés luxembourgeoises

Durée estimative : 60 minutes

L’impôt sur le bénéfice des sociétés est calculé par tranche :

  • 20 % sur la tranche de bénéfice de 0 € à 10 000 €  ;

  • 26 % sur la tranche de bénéfice de 10 001 € à 15 000 €  ;

  • 22 % sur la tranche de bénéfice à partir de 15 001 €.

Par exemple, une société qui a un bénéfice de 20 000 € sera imposée comme suit :

  • 2 000 € pour la tranche de 0 € à 10 000 €  ;

  • 1 300 € pour la tranche de 10 001 € à 15 000 €  ;

  • 1 100 € pour la tranche au-delà de 15 001 €. Soit un impôt total de 4 400 €.

Le bénéfice est une variable de type entier tandis que le montant de l’impôt est stocké dans une variable de type réel.

Écrivez l’algorithme qui calcule l’impôt sur le bénéfice d’une société, le montant du bénéfice étant demandé à l’utilisateur....

Énoncé 1.8 : Produit des n premiers nombres entiers impairs

Durée estimative : 60 minutes

Le but est d’écrire l’algorithme qui calcule le produit des n premiers nombres entiers impairs en commençant à un. La valeur de la variable n est demandée à l’utilisateur.

Écrivez trois variantes de cet algorithme :

  • une avec une boucle Tant Que  ;

  • une avec une boucle Répéter  ;

  • et la dernière avec une boucle Pour.

À partir de ces trois algorithmes, écrivez les programmes Java/Python correspondants en utilisant respectivement :

  • la boucle while ;

  • la boucle do while (cette forme de boucle ne s’applique pas à Python) ;

  • la boucle for.

Énoncé 1.9 : Calcul de la moyenne de n nombres entiers

Durée estimative : 40 minutes

L’objectif est d’écrire l’algorithme qui calcule la moyenne de n nombres entiers saisis par l’utilisateur. Écrivez deux variantes de cet algorithme :

  • Dans la première, l’utilisateur saisit d’abord la valeur de la variable n.

  • Dans la seconde, l’utilisateur introduit un zéro pour indiquer qu’il a saisi tous les nombres.

Écrivez ensuite, pour chaque algorithme, le programme Java/Python correspondant.

Indice

L’algorithme ne doit pas gérer le cas où n vaut 0.

Énoncé 1.10 : Suite de Fibonacci

Durée estimative : 30 minutes

Écrivez l’algorithme qui calcule le énième terme de la suite de Fibonacci, qui est définie comme suit :

  • U1 = 1

  • U2 = 1

  • Un = Un-1 + Un-2 pour n>2

La valeur de n est lue au clavier.

Écrivez ensuite le programme Java/Python correspondant. Le programme doit vérifier que la valeur de n est supérieure ou égale à un.

Indice

Utilisez la structure Selon que en algorithmique.

Dans le programme Java, la structure switch est à utiliser.

Dans le programme Python, la structure à utiliser est une séquence de if-elif si la version est inférieure à 3.10 ou la structure match-case pour une version égale ou supérieure.

Pour écrire l’algorithme, il ne faut pas utiliser de tableau.

Énoncé 1.11 : L’utilisateur devine un nombre pair

Durée estimative : 40 minutes

Écrivez l’algorithme qui calcule un nombre entier pair aléatoire compris entre 0 et 100 et qui demande ensuite à l’utilisateur de le deviner. À chaque tentative de l’utilisateur, l’algorithme doit indiquer si le nombre fourni par l’utilisateur est plus grand, plus petit ou égal au nombre choisi. Dans le dernier cas, l’utilisateur a trouvé et l’algorithme s’arrête. Le nombre de tentatives de l’utilisateur pour deviner le nombre doit également être affiché.

La génération du nombre aléatoire ne fait pas partie de l’algorithme. Vous pouvez appeler la fonction nombrePairAléatoire avec 0 comme premier paramètre et 100 comme second paramètre. Elle se charge de générer un nombre entier pair aléatoire compris entre 0 et 100 sans en donner l’algorithme.

Écrivez ensuite le programme Java/Python correspondant.

Indice

En Java, pour obtenir le nombre pair compris entre 0 et 100, il convient d’utiliser la fonction Math.random() qui renvoie un nombre de type double compris dans l’intervalle allant de 0 (borne incluse) à 1 (borne exclue).

En Python, la fonction randint() du paquetage random peut être utilisée pour obtenir...

Énoncé 1.12 : L’ordinateur devine un nombre pair

Durée estimative : 50 minutes

L’utilisateur imagine un nombre entier pair compris entre 0 et 100 et l’algorithme que vous allez écrire doit le deviner. À chaque tentative, l’utilisateur répond par 1 si le nombre proposé par l’ordinateur est trop grand, -1 s’il est trop petit et 0 s’il est égal.

Une fois trouvé, le nombre de tentatives qu’il a fallu à l’algorithme pour retrouver le nombre de l’utilisateur est affiché.

Écrivez ensuite le programme Java/Python correspondant.

Indice

La méthode consiste à travailler par dichotomie. L’algorithme recherche le nombre dans un intervalle donné. Il propose à l’utilisateur la valeur qui se trouve ou milieu de l’intervalle puis en fonction de la réponse ajuste son nouvel intervalle. Attention, chaque proposition doit être un nombre pair.

Énoncé 1.13 : Calcul du PGCD de deux nombres entiers positifs

Durée estimative : 25 minutes

Le but de l’exercice est de calculer le PGCD (plus grand commun diviseur) de deux nombres entiers positifs non nuls a et b.

Nous nous basons sur le fait que PGCD(a,0) = a et que PGCD(a,b) = PGCD (b, a mod b) où « a mod b » désigne le reste de la division entière de a par b.

Ce calcul se fait en développant la suite :

  • U1 = a 

  • U2 = b 

  • U3 = U1 mod U2

  • Un = Un-2 mod Un-1

Il faut développer la suite jusqu’à ce que Un vaille 0. Le PGCD est donné par Un-1 (c’est-à-dire le dernier terme non nul de la suite).

Écrivez un algorithme calculant le PGCD de deux nombres entiers positifs et non nuls préalablement saisis au clavier.

Écrivez ensuite le programme Java/Python correspondant.

Indice

Pour écrire un tel algorithme, comme pour celui de la suite de Fibonacci, il ne faut pas utiliser de tableau.