PROFDINFO.COM

Votre enseignant d'informatique en ligne

Laboratoire 6 - Types et structures

Exercice 6.1

Ecrivez une fonction qui prend en paramètre un tableau de int ainsi que la taille du tableau et qui retourne la somme des nombres dans le tableau. Testez le bon fonctionnement de la fonction à l'aide d'un programme de test.

Exercice 6.2

Ecrivez une fonction qui prend en paramètre un tableau de float ainsi que la taille du tableau et qui retourne le plus grand nombre dans le tableau. Testez le bon fonctionnement de la fonction à l'aide d'un programme de test.

Exercice 6.3

Ecrivez une fonction qui prend en paramètre un tableau de char, la taille du tableau et une valeur. La fonction doit retourner si oui ou non la valeur est présente dans le tableau. Testez le bon fonctionnement de la fonction à l'aide d'un programme de test.

Exercice 6.4

Ecrivez une fonction qui prend en paramètre deux tableaux de long et leur taille respective et qui retourne si oui ou non les deux tableaux sont identiques. Deux tableaux sont identiques s'ils ont la même taille et les mêmes valeurs aux mêmes endroits. Testez le bon fonctionnement de la fonction à l'aide d'un programme de test.

Exercice 6.5

Ecrivez une fonction qui prend en paramètre un tableau de int ainsi que la taille du tableau et qui le place en ordre croissant. Utilisez pour ce faire l'alogrithme de tri à bulles. Testez le bon fonctionnement de la fonction à l'aide d'un programme de test.

Exercice 6.5 b

Écrire les sous-programmes CopierTableau et TrouverPositionElement de façon à ce que le programme principal suivant fonctionne correctement et ce, pour toutes tailles de tableaux:

#include <iostream>
using namespace std;
// Prototypes
int main()
{
   const int N1=3;
   const int N2=5;
   int Tab1[N1] = {3,2,1};
   int Tab2[N2] = {4,5,6,7,8};
   
   CopierTableau(Tab1,N1,Tab2,N2);
   int Pos = TrouverPositionElement(Tab2,N2,1);
   if(Pos>=0)
   {
      cout << Pos;
   }
   else
   {
      cout << "Element introuvable";
   }
}

Exercice 6.6

Ah! Que la neige neigera! Modifiez votre paysage magique de Noël (voir exercice 5.1) de façon à faire tomber cent petits flocons de neige. Vous devez pour ce faire créer un tableau pour conserver la position X de chacun des flocons et un autre tableau pour conserver la position Y de chacun des flocons. Ensuite, vous devez initialiser la position de chacun des flocons avec une valeur aléatoire à l'aide de la fonction rand. La fonction rand retourne une valeur aléatoire entre 0 et RAND_MAX. La valeur de RAND_MAX peut varier mais est toujours au moins 32767. Il vous faudra utiliser un modulo pour vous assurer que la valeur ne dépasse pas 799 en x et 599 en y. N'oubliez pas d'initialiser le générateur de nombre aléatoire au début de votre programme principal de la façon suivante:

srand(static_cast<unsigned int>(time(0)));

Les fonctions rand, srand et time se trouvent dans les librairies cstdlib et ctime.

Dans la boucle d'animation, vous devez afficher chacun des petits flocons de neige. Ensuite, vous devez déplacer vers le bas chacun des petits flocons. Si un flocon et parvenu au bas complétement de l'image, il doit retourner en haut de l'image. Pour réaliser cet exercice, utilisez le petit flocon de neige suivant:

Voici une capture d'écran du résultat:

Voici l'algorithme général de votre programme:

Déclarer les tableaux PosX[] et PosY[]
Créer la fenêtre
Charger les images en mémoire
Initialiser les tableaux PosX[] et PosY[] avec des valeurs aléatoires
Tant que l'animation n'est pas terminée
   Dessiner le fond
   Dessiner les 4 images
   Pour chaque flocon
      Dessiner le flocon à la position spécifiée dans PosX[] et PosY[]
   Rafraichir la fenêtre
   Attendre un peu
   Pour chaque flocon
      Descendre le flocon d'un pixel
      Si le flocon est en bas
         Remettre le flocon en haut

 

Exercice 6.7

Un étudiant au collège peut être décrit par les informations suivantes:

  1. Créez la structure nécessaire en C++ pour représenter un étudiant.
  2. Déclarez un tableau de 5 étudiants.
  3. Écrivez une fonction qui permettra d'initialiser le tableau d'étudiants. La fonction reçoit un tableau de structures en paramètre et le nombre d'étudiants à initialiser. Pour chaque étudiant, la fonction demande d'entrer les informations à la console.
  4. Écrivez une fonction qui permettra d'afficher le tableau d'étudiants à la console. La fonction reçoit un tableau de structures en paramètre et le nombre d'étudiants à afficher.

Exercice 6.8

Faite une copie de votre exercice 6.7 et supprimez la déclaration de la structure Etudiant. Ajoutez les déclarations des structures suivantes et modifiez votre programme de façon à utiliser ces nouvelles structures:

const int NbCours = 5;

struct Cours
{
    string NomCours;
    string NumeroCours;
    int NumSession;
    int Note;
};
 
struct Etudiant
{
    string Nom;
    string Prenom;
    string NumAdm;
    
    Cours Cours_Etudiant[NbCours];      // Les 5 cours que l'étudiant suit
};

De plus, modifiez la fonction d'affichage afin de calculer et d'afficher à la console la moyenne de chaque étudiant et de calculer et d'afficher la moyenne du groupe.

Exercice 6.9

Modifiez votre solution à l'exercice 3.9 de façon à utiliser la structure suivante:

struct Etudiant
{
	float Notes[3];
};

et le tableau suivant:

Etudiant TableauDesEtudiants[18];

Évidemment, le 3 et le 18 devront être remplacés par des constantes. Votre programme doit donc dans un premier temps lire les 3 notes des 18 étudiants, puis une fois les lectures terminées, calculer la moyenne de chaque étudiants et afficher le commentaire approprié.

Exercice 6.10

Modifiez votre solution à l'exercice 4.17 de façon à utiliser la structure suivante:

struct Etudiant
{
	int Numero;
	float Notes[3];
};

et le tableau suivant:

Etudiant TableauDesEtudiants[1000];

Évidemment, le 3 et le 1000 devront être remplacés par des constantes. Votre programme doit donc dans un premier temps lire le numéro et les 3 notes de tous les élèves jusqu'à ce que l'usager entre le numéro fictif égal à 999999, puis une fois les lectures terminées, calculer la moyenne de chaque élève et afficher le numéro de l'élève et sa moyenne. À la fin, le programme doit afficher la moyenne de la classe.

Exercice 6.11

Modifiez une solution de l'exercice 5.6 de façon à utiliser les structures suivantes:

struct Heure
{
    int Heures;
    int Minutes;
};

struct Date { int JourDuMois; int JourDeLaSemaine; // ou string si vous préférez conserver le jour sous la forme "lundi", "mardi", etc. int Mois; // ou string si vous préférez conserver le mois sous la forme "septembre", "octobre", etc. int Annee; };

struct Temps { Date DateActuelle; Heure HeureActuelle; };

Portez attention aux paramètres des fonctions. Assurez-vous ne pas utiliser des variables hors de ces structures pour conserver les minutes, les heures, le jour du mois, le jour de la semaine, le mois et l'année.

Exercice 6.12

Modifiez votre solution à l'exercice 6.6 de façon à utiliser la structure suivante:

struct Point
{
   int x;
   int y;
};
      

et le tableau suivant:

Point PositionDesFlocons[100];

Évidemment, le nombre 100 devra être remplacé par une constante. Assurez-vous que toutes les positions x et y des flocons et des images sont conservées dans des structures Point. Portez une attention particulière aux paramètres des fonctions de déplacement.

Exercice 6.13

Pour cet exercice, vous devrez faire un programme qui affiche 50 flocons au hasard dans l'image et l'usager doit être en mesure de déplacer le bonhomme de neige avec les touches du clavier pour ramasser les flocons. Pour ce faire, vous devrez utiliser la fonction AttendreEvenement pour attendre que l'usager appuie sur une touche.

Pour vous faciliter le travail, vous devez diviser la fenêtre en 18 lignes et 18 colonnes de 32 pixels chacune en utilisant un tableau 2D. Votre programme doit obligatoirement utiliser les déclarations suivantes:

// Dans un .h:
enum Objet {Vide, Flocon};
const int NbFlocons = 50;
const int NbCases = 18; 
const int NbPixelsParCase = 32; 
const int TailleImage = NbCases * NbPixelsParCase;

struct Position
{
    int x;
    int y;
};

// Dans le main:
Objet Tableau[NbCases][NbCases];
Position Bonhomme;
      

On obtient donc un tableau en deux dimensions où chaque case contient soit du vide, soit un flocon. Au départ, il faut initialiser les cases à Vide pour indiquer que les cases sont vides. On place ensuite au hasard les 50 flocons en tirant une position au hasard et en mettant la valeur Flocon dans la case correspondante.

On affiche les flocons en parcourant tout le tableau et en affichant l'image du flocon au bon endroit dans la fenêtre seulement si la case n'est pas vide.

La position du bonhomme de neige pour sa part est conservée dans un variable séparée et cette position est modifiée en fonction de la touche appuyée. Le bonhomme de neige ramasse un flocon en écrivant Vide dans la case correspondante à la position du bonhomme de neige.

Le programme se termine lorsque l'usager appuie sur la touche ESC.

8.9

Voici l'algorithme général de votre programme:

Déclaration du tableau 2D de flocons
Initialiser le tableau de flocons 
Placer les 50 flocons au hasard dans le tableau 

Déclaration et initialisation de la position du bonhomme de neige

Créer la fenêtre
Charger les images en mémoire

Tant que la touche ESC n'est pas appuyée
   Dessiner le fond

   Dessiner les flocons
   Dessiner le bonhomme de neige

   Rafraichir la fenêtre

   Attendre Evenement
   Bouger le bonhomme de neige
   Effacer le flocon en dessous du bonhomme de neige

N.B.: Conservez la position du bonhomme de neige en cases (de 0 à 17) et non en pixels. Cela vous simplifiera grandement la vie. Pour afficher le bonhomme de neige, il vous suffira alors de multipler les positions en x et en y par NbPixelsParCase pour obtenir sa position dans la fenêtre en pixels...