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