Téléchargement
Transcription
Téléchargement
ÉCOLE POLYTECHNIQUE DE MONTRÉAL DÉPARTEMENT DE GÉNIE ÉLECTRIQUE ET DE GÉNIE INFORMATIQUE Section informatique ING1025: INFORMATIQUE EXAMEN INTRA DATE : HEURE: Vendredi 23 février 2001 DE 8h30 À 10h20 Notes: Ce questionnaire contient 4 questions sur 6 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 <fichier.h>. QUESTION 1 ( 3 Points ) Inscrire dans votre cahier d’examen la lettre correspondant à la bonne réponse. 1.1 Quel sera l’affichage obtenu après l’exécution des instructions suivantes ? char Mot1 [5] = "UN"; char Mot2 [5] = "DEUX"; char Mot3 [50]; strcpy(Mot3, Mot1); strcpy(Mot3, "_"); strcat(Mot3, Mot2); strcat(Mot3, Mot2); cout << Mot3; A) B) C) D) E) _DEUXDEUX UN_DEUXDEUX _UNDEUXDEUX UN_DEUXUN_DEUX Aucune de ces réponses Page 1 sur 6 ING1025 – Hiver 2001 - Intra 1.2 Étant donné le tampon de lecture suivant : L E S C O R P I O N ↵ E S T M A L A D quel sera l’affichage obtenu après l’exécution des instructions suivantes ? char char char Chaine1[50] ; Chaine2[50] ; Caractere ; cin.getline(Chaine1, 50) ; cin.get(Caractere) ; cin.getline(Chaine2, 50); cout << Caractere << Chaine2 << Chaine1; A) EST MALADE LE SCORPION B) E ST MALADELE SCORPION C) EST MALADELE SCORPION D) EST MALADEE E) Aucune de ces réponses 1.3 Quel sera le contenu du tableau après l’exécution des instructions suivantes ? int Tab[10], i, j; for (i=0; i<10; i++) Tab[i]=1; for (i=2;i<10;i++) for (j=i+1;j<10;j++) if ((j%i)==0) Tab[j]=0; A) {0,0,0,0,0,0,0,1,0,0} B) {1,1,1,0,1,0,1,0,1,1} C) {1,1,1,0,0,1,1,0,0,1} D) {1,1,1,1,0,1,0,1,0,0} E) Aucune de ces réponses Page 2 sur 6 E ↵ ING1025 – Hiver 2001 - Intra 1.4 Quel sera l’affichage obtenu après l’exécution des instructions suivantes ? int i = 0; do { switch ( i ) { case 1: i++; break; case 3: i = i - 1; case 4: i += 2; break; default: i++; } cout << i << " "; } while ( i < 5 ); A) B) C) D) E) 1236 1 2 3 2 3 2 3 2 3 2 3 2 etc… 12346 1 2 2 2 2 2 2 2 2 2 2 2 etc. Aucune de ces réponses QUESTION 2 ( 5 Points ) Écrire un programme qui demande un nombre entier positif, détermine et affiche s’il s’agit d’un nombre parfait. Un nombre entier est parfait si la somme de ses diviseurs (sauf lui-même) est égale à ce nombre. Les diviseurs d'un nombre entier sont tous les nombres entiers entre 1 et le nombre tel que le reste de la division entière du nombre par le diviseur vaut 0. Par exemple 6 est un nombre parfait, ses diviseurs sont : 1 , 2 et 3 et leur somme donne 1+2+3=6. Page 3 sur 6 ING1025 – Hiver 2001 - Intra QUESTION 3 ( 6 Points ) Afin de sécuriser l'envoi d'un fichier texte sur un réseau, on désire l'envoyer en 2 fichiers. Pour ce faire, compléter le programme ci-dessous qui demande le nom d'un fichier texte et sauvegarde l'information de celui-ci dans 2 fichiers textes nommés impair.txt et pair.txt. Le fichier impair.txt contiendra les caractères des positions impaires et le fichier pair.txt, les caractères des positions paires du fichier original. Par exemple, si le fichier initial contient : Il fait beau aujourd'hui, allons nous promener. Ce soir on chantera. Le fichier impair.txt contiendra : I atba uor'u,aln ospoee.C oro hnea Le fichier pair.txt contiendra : lfi euajudhi losnu rmnr esi ncatr. La fin de ligne, reconnue par le caractère ASCII #10, est remplacée par le caractère « &» dans le fichier approprié. Le premier caractère lu dans le fichier original est écrit dans le fichier impair.txt. #include <iostream.h> #include <fstream.h> void main() { const char FinDeLigne=10; ifstream FicOrig; // ofstream FicImpair; // // ofstream FicPair; // // char NomFichier[50]; // char CarLu; // int NbreCar; // // Pour comparer à la fin de ligne Le fichier original à scinder Fichier contenant les caractères des positions impaires Fichier contenant les caractères des positions paires Le nom du fichier original Le caractère lu du fichier original Pour compter le nombre de caractères lus // 3.1 Demander et lire le nom du fichier original // 3.2 Ouverture des trois fichiers // 3.3 Boucle de lecture du fichier original // Écriture dans le fichier impair if (CarLu == FinDeLigne) // instruction(s) else // instruction(s) // Écriture dans le fichier pair s'il y a lieu if (CarLu == FinDeLigne) // instruction(s) else // instruction(s) // 3.4 Fermeture des fichiers } Page 4 sur 6 ING1025 – Hiver 2001 - Intra QUESTION 4 ( 6 Points ) Une règle de Golomb est une séquence de NbMarques entiers distincts appelés marques, dont les différences positives entre chaque paire de marques sont toutes distinctes. La première marque de la règle est toujours égale à zéro. Par définition, la longueur d'une règle de Golomb est égale à la valeur de la dernière marque de la règle. Voici un exemple d'une règle de Golomb telle que NbMarques = 5 (règle de 5 entiers) et dont Longueur = 11 (valeur de la dernière marque) : 0 1 4 9 11 → règle de Golomb Pour vérifier qu’il s’agit d’une règle de Golomb il faut calculer toutes les différences positives entre chaque paire de marques et observer qu’elles sont toutes distinctes. Les paires de marques (a,b) et les différences (en gras) sont : (0,1) : 1-0 = 1 (0,4) : 4-0 = 4 (0,9) : 9–0 = 9 (0,11) : 11-0 = 11 (1,4) : 4-1= 3 (1,9) : 9-1 = 8 (1,11) : 11-1 = 10 (4,9) : 9-4 = 5 (4,11) : 11-4 = 7 (9,11) : 11-9= 2 Puisque toutes les différences sont distinctes (1?4?9?11?3?8?10?5?7?2), on peut affirmer que l'ensemble {0, 1, 4, 9, 11} est bel et bien une règle de Golomb. Soit la déclaration de variables suivante : int Marque[NbMarques]; bool Difference[Longueur+1]; - le tableau Marque contient NbMarques entiers tels que Marque[i] ≤ Marque[i+1]. Pour l’exemple précédent nous aurions, NbMarques=5 et Marque[0]=0 Marque[1]=1 Marque[2]=4 Marque[3]=9 Marque[4]=11 - le tableau Difference contient l’information sur les différences formées par les paires d’entiers contenues dans le tableau Marque. § Difference[j] vaut true si la valeur j appartient à l'ensemble de différences formées par les entiers contenus dans le tableau Marque, autrement Difference[j] vaut false. Pour l’exemple précédent nous aurions, Difference[0]=false Difference[3]=true Difference[6]=false Difference[9]=true Difference[1]=true Difference[4]=true Difference[7]=true Difference[10]=true Difference[2]=true Difference[5]=true Difference[8]=true Difference[11]=true Compléter le programme de la page suivante qui utilise les tableaux Marque et Difference pour vérifier si l’ensemble de marques forme une règle de Golomb. Le programme affiche un message précisant s’il s’agit ou non d’une règle de Golomb. S’il ne s’agit pas d’une règle de Golomb, la première différence répétée est affichée également. Page 5 sur 6 ING1025 – Hiver 2001 - Intra #include <iostream.h> void main(void) { const int NbMarques = 10; const int Longueur = 55; const int Marque[] = {0,1,6,10,23,26,34,41,53,55}; bool Difference[Longueur+1]; // Initialiser le tableau Difference[] à false // Vérifier si le tableau Marque[] est // une règle de Golomb. } Page 6 sur 6