Choisissez votre style : colorisé, impression

Correction 2
Premiers pas en programmation


Les solutions suivantes ne sont pas évidemment uniques. Si vous en trouvez de meilleures, faites-le savoir !
Par ailleurs, les solutions proposées correspondent à l'état de vos connaissances au moment où la série est abordée. D'autres solutions pourront être envisagées une fois de nouveaux concepts acquis.
Exercice 1 Exercice 2 Exercice 3 Exercice 4

Exercice 1 : Variables (niveau 1)

Voici une solution :

#include <iostream>
using namespace std;
 
int main()
{
  constexpr int ANNEE_COURANTE(2025);
  cout << "Entrez votre âge :" << endl; // Affichage de la question
  int age(0);                           // Déclaration de variable pour stocker l'âge
  cin >> age;                           // Lecture de la réponse
 
  // Déclaration et initialisation de la variable pour stocker l'année de naissance
  int annee(ANNEE_COURANTE - age);
 
  // Affichage de l'année de naissance (stockée en mémoire)
  cout << "Vous êtes né(e) vers l'année " << annee
       << endl;
 
  return 0;
}

Il y a cependant de multiples manières de manipuler ces variables. Elles peuvent par exemple être déclarées plus tôt (mais je vous conseille plutôt de toujours déclarer vos variables au plus près de leur utilisation et aussi de toujours les initialiser, ce qui n'est pas le cas ci-dessous) :

/* Solution possible mais déconseillée */
#include <iostream>
using namespace std;
 
int main()
{
  // Déclarations
  constexpr int ANNEE_COURANTE(2025);
  int age;  // n'applique pas le principe: «déclarer au plus près de l'utilisation»
  int annee;
 
  cout << "Entrez votre âge :" << endl; // Affichage de la question
  cin >> age;                           // Lecture de la réponse
  annee = ANNEE_COURANTE - age;                   // Calcul
 
 
  // Affichage de l'année
  cout << "Vous êtes né(e) vers l'année " << annee << endl;
 
  return 0;
}

Si ce n'était pas imposé par la donnée, on pourrait aussi ne pas utiliser de variable intermédiaire et effectuer le calcul directement au moment de l'affichage :

#include <iostream>
using namespace std;
 
int main()
{
  constexpr int ANNEE_COURANTE(2025);
  cout << "Entrez votre âge :" << endl; // Affichage de la question
  int age(0)                            // Déclaration
  cin >> age;                           // Lecture de la réponse
 
  // Affichage de l'année
  cout << "Vous êtes né(e) vers l'année " << ANNEE_COURANTE - age << endl;
 
  return 0;
}

Exercice2 : fondue (niveau 1)

Le programme demandé :

#include <iostream>
using namespace std;

int main()
{
  constexpr int BASE(4);     // nombre de personnes pour la recette de base
		
  // Pour faire une fondue fribourgeoise pour 4 personnes il faut : 
		
  double fromage(800.0);    // 800gr de Vacherin fribourgeois
  double eau(2.0);          // 2dl d'eau
  double ail(2.0);          // 2 gousses d'ail
  double pain(400.0); 	    // 400 gr de pain
		
  /* On supposera pour cet exercice que l'utilisateur ne saisit que
   * des valeurs strictement positives mais nous pourrons faire mieux
   * dès la semaine prochaine 
   */
  cout << "Entrez le nombre de personne(s) conviée(s) à la fondue : ";
  int nb_convives;
  cin >> nb_convives;
		
  // Mise à jour des quantités en fonction du nombre de convives :
  double ratio = nb_convives; // Notez le 'double' ici...
  ratio /= BASE;              // ... pour éviter une division entière.
  fromage *= ratio;
  eau 	  *= ratio;
  ail 	  *= ratio;
  pain 	  *= ratio;

  cout << "Pour faire une fondue fribourgeoise pour " << nb_convives << " personne(s), " << endl;
  cout << ("il vous faut : ") << endl;
  cout << " - " << fromage << " gr de Vacherin fribourgeois" << endl;
  cout << " - " << eau << " dl d'eau" << endl;
  cout << " - " << ail << " gousse(s) d'ail" << endl;
  cout << " - " << pain << " gr de pain" << endl;
  cout << " - du poivre à volonté" << endl;

  return 0;
}

Exercice3

Le programme demandé :

#include <iostream>
using namespace std;
 
int main()
{
  int x, y;                           // Déclarations
  double a, b, c, d;
  x=2; y=4;                           // Affectations
  a=x+y; b=x-y; c=x*y; d=x/y;         // Opérations
                                      // Affichage des résultats
  cout << x << "+" << y << "=" << a << " ; "
       << x << "-" << y << "=" << b << endl
       << x << "*" << y << "=" << c << " ; "
       << x << "/" << y << "=" << d << endl
  ;
 
  return 0;
}

Puis même chose en remplaçant «int x, y;» par «double x, y;», puis par «int x; double y;».

Explications :

Lorsque les deux opérandes (x et y) sont de type entier, l'expression x/y la division qui s'effectue est la division entière (ou division «euclidienne») ! C'est-à-dire que le résultat est le quotient. Dans le cas précis (x=2 et y=4), on obtient bien 0 :
x = 0 * y + 2

Par contre, dès qu'une opérande est de type double, c'est une division réelle qui est effectuée. C'est-à-dire que le résultat est la valeur (approchée à la précision des double) du nombre réel correspondant.


Exercice 4

Voici une solution possible :

#include <iostream>
using namespace std;

int main()
{
     // Entrée de données
	cout << "Combien avez-vous reçu d'argent (Frs):) ";
	int budget;
	cin >> budget;

	// Calcul du budget livres & fournitures
	int budget_livres(budget * 3 / 4);
	int reste_budget(budget - budget_livres);

	// Calcul du budget pour les trois autres rubriques
	int autre(reste_budget / 3);

	// Calcul du nombre de cafés
	int nb_cafes(autre / 2);

	// Calcul du nombre de numéros du Flash
	int nb_flash(autre / 4);

	// Calcul du nombre de billets de métro
	int nb_billets(autre / 3);

	// Calcul de l'argent restant
	int reste(autre % 2 + autre % 4 + autre % 3 + reste_budget % 3);

	// Affichage des résultats
	cout << "Livres et Fournitures: " <<  budget_livres << " Frs" << endl;
	cout << "Vous pouvez ensuite acheter :" << endl;
	cout << " " << nb_cafes << " cafés à Sat" << endl;
	cout << " " << nb_flash <<  " numéros du Flash" << endl;
	cout << " " <<  nb_billets << " billets de métro" << endl;
	cout << "et il vous restera " << reste
		 << " Frs pour les roses blanches." << endl;
		
	return 0;
}


Dernière mise à jour : $Date: 2025/09/12 17:11