ÉCOLE POLYTECHNIQUE DE MONTRÉAL DÉPARTEMENT DE GÉNIE INFORMATIQUE ING1025 : INFORMATIQUE EXAMEN INTRA Date Vendredi 10 octobre 2003 Heure De 8h30 à 10h20 Notes Ce questionnaire contient 4 questions sur 8 pages. Aucune documentation n est permise. Calculatrices interdites. Ne recopiez pas les déclarations ni les instructions déjà fournies dans l examen. Vous n avez pas à ajouter de commentaires dans vos programmes ni les fichiers d en-tête. QUESTION 1 (4 points) Indiquez, pour chaque section de programme, l affichage obtenu après l exécution des instructions suivantes (n inscrivez sur votre cahier que la lettre correspondante à la proposition; il n y a qu une seule réponse possible). Question 1.1 (1 point) char c1 [20 ] = "Brice"; char c2 [20 ] = "de"; char c3 [20 ] = "Nice"; char c4 [100]; strcpy ( c4, c3 ); strcat ( c2, c1 ); strcpy ( c1, c2 ); strcat ( c4, c2 ); A. NicedeBricede B. BricedeNice C. NicedeBricedeBrice D. NicedeBriceBricedeBrice cout << c4 << c1 << endl; Page 1 de 8
Question 1.2 (1 point) char c [ ] = "ABCD"; int res = 0; for ( int i = 0 ; i < 4 ; i++ ) switch ( c[i] ) case 'A': i++; res += 4; break; case 'B': res = 2 + i; break; case 'C': res -= 3; default: res++; cout << res << endl; A. 3 B. 2 C. 1 D. 4 Question 1.3 (1 point) int j, i = -1; for ( j = 0 ; j < 4 ; j++ ); i+=2; cout << j << " "; if ( i = 8 ) cout << i+2 << " "; A. 4 B. 4 10 8 C. 4 9 7 D. 4 7 cout << i << " "; cout << "\n\n"; Page 2 de 8
Question 1.4 (1 point) int i = 10; int j; do for ( j = 0 ; j < 3 ; j++ ) cout << i - j << " "; i--; while (i > j); A. 10 8 6 7 5 3 4 2 0 B. 10 8 6 4 2 0 C. 10 8 6 4 6 4 2 0 D. 10 8 6 8 6 4 4 2 0 cout << endl; Page 3 de 8
QUESTION 2 (5 points) Le jeu intitulé, Bataille Navale, consiste à déterminer la position des bateaux de l adversaire sur une grille de 16 cases par 16 cases. Inspiré de ce jeu, vous devez compléter le programme de la page suivante qui affiche la position et le nom de chaque bateau sur la grille d un joueur, sachant que un bateau occupant 2 case est un torpilleur; un bateau occupant 3 cases est un cuirassé; un bateau occupant 4 cases est un croiseur; un bateau occupant 5 case est un porte-avions. Afin de simplifier le traitement nous considérons que une case contenant le caractère O n est pas occupée par une partie de bateau; une case contenant le caractère X est occupée par une partie de bateau; tous les bateaux sont obligatoirement en position horizontale; voici un exemple d une grille possible correcte et d une grille incorrecte : OOOXXXXXOOOOOOOO OOOXXXXOOXXXXOOO OOOXXXOOXXXOOOOO OOOXXXOOOOXXXOOO OOOOOOOOOOOOOOXX XXOOOOOOOOOOOOXX OOOOOOXXOOOOOOOO Grille correcte OOOXOOOOOOOOOOOO OOOXOOOOOOOOOOOO OOOXOOOOOOOOXOOO OOOOOOOOOOOOXOOO OOOXXXXOOOOOXOOO OOOOOOOOOOOOXOOO OOOXXXOOXXXOOOOO OOOXXXXXXXXOOOOO XXOOOOOOOOOOOOXX OOOOOOXOOOOOOOOO OOOOOOXOOOOOOOOO Grille Incorrecte la case précédant un bateau est obligatoirement un espace (à moins qu il soit en première colonne) et la case qui suit est obligatoirement un espace (à moins qu il occupe la dernière colonne); la première ligne est la ligne 0 et la première colonne est la colonne 0. (Suite à la page suivante) Page 4 de 8
Compléter les instructions du programme ci-dessous sans ajouter aucune déclaration. #include <iostream> #include <fstream> using namespace std; void main() const int MAXLIGNE=16; const int MAXCOLONNE=16; char Grille[MAXLIGNE][MAXCOLONNE]; // Tableau où sont mémorisés les bateaux int Ligne, Colonne; // Pour manipuler le tableau Grille int Longueur; // La longueur d'un bateau /*** VOUS NE DEVEZ PAS ÉCRIRE CES INSTRUCTIONS ***/ //Placer les bateaux sur la grille //Instructions qui mémorisent dans le tableau Grille //la position des bateaux /*** VOUS NE DEVEZ PAS ÉCRIRE CES INSTRUCTIONS ***/ /*** VOUS DEVEZ ÉCRIRE LES INSTRUCTIONS CI-DESSOUS ***/ // Structure répétitive pour balayer le tableau Grille // Si un bateau est trouvé cout << "Il y a un bateau en case (" <<Ligne <<','<<Colonne<<')'; // Déterminer la longueur du bateau // Afficher le type de bateau correspondant a la longueur cout << " il s'agit d'un "; // à compléter Page 5 de 8
QUESTION 3 (6 points) À la suite d une commotion cérébrale subie sur les pentes de ski à la fin de la session d automne, un professeur d Ing1025 sort de l hôpital et retourne chez lui pour compiler les notes de ses étudiants. Malheureusement, il ne se rappelle plus d aucun concept de programmation et son programme qui lui aurait permit de compiler les notes est inachevé. Au cours de la session, il a stocké les notes de ses étudiants dans un fichier «Notes.txt» qui prend la forme suivante. Sur chaque ligne, nous retrouvons le matricule de l étudiant, son nom, son prénom, et les cinq notes obtenues lors des contrôles. 1087593 Jean Grincheux 12.50 17.00 11.25 18.25 12.00 1098465 Mark Bizarre 11.00 08.25 18.25 13.50 14.00 1036985 Lucie Jones 13.25 15.75 13.00 18.75 16.00. Fichier «Notes.txt» fourni à titre d exemple Le nombre d étudiants est inconnu mais heureusement, aucun élève n a de nom composé (i.e. tous les étudiants possèdent un prénom et un nom qui n incluent pas d espace) et aucun élève a été absent lors d un contrôle (i.e. tous les étudiants ont obtenus 5 notes durant la session). Complétez le programme ci-dessous qui lit le fichier «Notes.txt» au complet. Pour chaque étudiant le programme calcule la moyenne des cinq notes obtenues. Une fois ce calcul effectué, le programme écrit dans le fichier «Resultats.txt» le matricule de l étudiant et la moyenne qu il a obtenue. 1087593 14.2 1098465 13 1036985 15.35. Fichier «Resultats.txt» fourni à titre d exemple Précisions: 1) Pour des raisons de confidentialité, nous désirons seulement retrouver dans le fichier «Resultats.txt» le matricule des étudiants et sa moyenne. 2) Ne pas oublier de tester si l ouverture des fichiers s est fait correctement. 3) Inutile de configurer le nombre de décimales lors de l écriture des moyennes dans le fichier «Resultats.txt» 4) Inutile de retranscrire la portion de programme déjà fournie sur votre copie. Page 6 de 8
/* ----------------------------------------------------------------------------------------------- */ /* Programme: Compilation.cpp */ /* Auteur: James Kastoilagueulensky */ /* */ /* Description: Transcrit le matricule de chaque etudiant de ma section, du fichier */ /* Notes.txt dans le fichier Resultats.txt. Calcule la moyenne des */ /* des 5 notes obtenues par chaque etudiant conservees dans le */ /* fichier Notes.txt. Ecrit cette moyenne dans le fichier Resultats.txt */ /* */ /* Date de creation: 12 decembre 2003 */ /* */ /* Notes: Ne pas oublier de tester l ouverture des fichiers. */ /* ----------------------------------------------------------------------------------------------- */ #include <iostream> #include <fstream> using namespace std; void main(void) ifstream FicNotes; ofstream FicResultats; // Pour lire le fichier Notes.txt // Pour ecrire dans le fichier Resultats.txt unsigned int Matricule; float Note1, Note2, Note3, Note4, Note5; float Moyenne; char Prenom[25], Nom[25]; // Pour lire le matricule de ch. etud. // Pour lire les notes de ch. etudiant // Pour calculer la moyenne. // Pour lire les noms de ch. etudiant /* --- A COMPLETER CI-DESSOUS --- */ Page 7 de 8
QUESTION 4 (5 points) La suite de Fibonacci est une suite classique de nombres entiers dont les deux premiers éléments sont 1, et les éléments suivants sont obtenus en sommant les deux éléments précédents. Les 7 premiers termes de la suite sont donc : 1, 1, 2, 3, 5, 8, 13, On demande d écrire un programme permettant d afficher la séquence des nombres entiers positifs plus petits ou égaux à n (n entré par l usager et n < 500) qui ne font pas partie de la suite de Fibonacci, et de calculer leur somme. Le résultat de l affichage pour n=15 est : 4, 6, 7, 9, 10, 11, 12, 14, 15, somme = 88 Page 8 de 8