Téléchargement

Transcription

Téléchargement
Questionnaire
examen intra
INF1005C
Sigle du cours
Identification de l’étudiant(e)
Nom :
Prénom :
Signature :
Matricule :
Groupe :
Sigle et titre du cours
Groupe
Trimestre
INF1005C – Programmation procédurale
Tous
20073
Professeur
Local
Téléphone
Martine Bellaïche – coordonnatrice, chargés de cours
M-3414
4679
Jour
Date
Durée
Heures
Vendredi
19 octobre 2007
1h50
8h30
Documentation
Calculatrice
Toute
Aucune
Aucune
Programmable
Voir directives particulières
Non programmable
Les cellulaires, agendas
électroniques ou téléavertisseurs
sont interdits.
Directives particulières
-
Ne recopiez pas les déclarations ni les instructoins déjà fournies dans le questionnaire.
Vous n’avez pas à écrire de commentaires ni d’en-têtes.
Les surveillants ne répondront à aucune question. En cas de doute, veuillez faire vos
suppositions et les écrire sur le cahier d’examen.
Important
Bonne chance à tous!
L’examen contient 4 questions sur un total de 4 pages (excluant cette page)
La pondération de cet examen est de 25 %
Vous devez répondre sur :
le questionnaire
Vous devez remettre le questionnaire :
oui
le cahier
les deux
non
Le plagiat, la participation au plagiat, la tentative de plagiat entraînent automatiquement l'
attribution de la note F dans
tous les cours suivis par l'
étudiant durant le trimestre. L'
École est libre d'
imposer toute autre sanction jugée opportune, y
compris l'
exclusion.
I NF1005C : Programmation procédurale Corrigé
Question 1 (4 points)
1.1 Quel sera l'
affichage obtenu après l'
exécution des instructions suivantes?
int A;
for( A = 13; A >0; A-- )
{
switch( A )
{
case 0
: A *= 2;
break;
case 2
: A += 3;
case 4
: A = 2;
break;
case 6
: A = 0;
default : A %= 5;
}
cout << A << ' ';
}
1.2 Quel sera l'
affichage obtenu après l'
exécution des instructions suivantes?
int vecteur1[7] = {7, 4, 8, 1, 4, 1, 4};
float vecteur2[7];
int i, compte;
cout << "Vecteur 1 : [ ";
for ( i=0; i<7; i++ )
{
cout << vecteur1[i] << ' ';
}
cout << "]";
cout << "Vecteur 2 : [ ";
compte=0;
//affiche les réels en point flottant et ajoute des
// des zéros s'il y a lieu.
// exemple 12.67 , 56.0
cout.setf(ios::showpoint|ios::fixed);
// setprecision(Nb_dec) affiche Nb_dec après le point.
while( compte < 7 && vecteur1[compte] != 1)
{
vecteur2[compte] = (float) vecteur1[compte];
cout << setprecision(1) << vecteur2[compte] << ' ';
compte++ ;
}
cout << "]";
Page 2 sur 8
Automne 2007
I NF1005C : Programmation procédurale Corrigé
Automne 2007
Réponse question 1
321
Vecteur 1 : [ 7 4 8 1 4 1 4 ] Vecteur 2 : [ 7.0 4.0 8.0 ]
Question 2 (4 points)
Soient les déclarations suivantes :
int T[10] = {3,4,9,2,6,10,2,1,5,8};
int S[10]= {0};// tous les éléments du tableau sont initialisés à 0
Écrivez la partie du programme qui remplit le tableau d’entiers S, tel que chaque élément
S[i] contienne la somme des éléments de T entre T[0] et T[i] (T[i] compris). Par exemple
S[0] contiendra la valeur 3, S[1] contiendra la valeur 7, S[2] contiendra la valeur 16,
S[3] contiendra la valeur 18 et ainsi de suite.
Réponse question2
int T[10] = {3,4,9,2,6,10,2,1,5,8};
int S[10]= {0};// tous les éléments du tableau sont initialisés à 0
for (int i=0; i<10;i++)
for ( int j=0; j<=i;j++)
S[i] = S[i]+T[j];
for ( int i = 0; i <10;i++)
cout << S[i] << " ";
ou
S[0] = T[0];
for(int i =1; i<10; i++)
S[i] = S[i-1] + T[i];
ou
b=0;
for(int i =0; i<10; i++)
{
b += T[i];
S[i] = b;
}
Page 3 sur 8
I NF1005C : Programmation procédurale Corrigé
Automne 2007
Question 3 (5 points)
Écrire un programme qui lit un mot, calcule et affiche seulement la fréquence de chaque
lettre dans le mot, et finalement trouve et affiche la lettre ayant la plus grande fréquence.
Remarques :
1. Le mot ne contient ni apostrophe, et ni trait d’union.
2. Le mot peut contenir des majuscules. La fonction tolower() convertit une
lettre majuscule en minuscule. La fonction fera une conversion seulement et
seulement si la lettre est majuscule. Par exemple, tolower(‘T’) vaut ‘t’,
et tolower(‘a’) vaut ‘a’.
Cette fonction est définie dans # include <cctype>.
3. L’expression
‘a’-‘a’ vaut la valeur entière 0,
‘b’-‘a’ vaut la valeur entière 1,
‘c’-‘a’ vaut l a valeur entière 2,
‘d’–‘a’ vaut la valeur entière 3,
‘e’–‘a’ vaut la valeur entière 4 ,
et ainsi de suite pour toutes les lettres de l’alphabet.
4. L’expression
char (0+'a') vaut le caractère ‘a’,
char (1+'a') vaut le caractère ‘b’,
char (2+'a') vaut le caractère ‘c’,
char (3+'a') vaut le caractère ‘d’,
etc…
Page 4 sur 8
I NF1005C : Programmation procédurale Corrigé
Automne 2007
Réponse question 3
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
int main()
{
string Mot;
int Frequence[26] ={0};
int Max =-1, Indice, IndiceMax;
cout << " Veuillez entrer le mot ";
cin >>Mot;
for (int i = 0; i< Mot.size(); i++)
{
Indice = tolower(Mot[i])-'a';
Frequence [Indice]++;
}
for ( int i = 0; i< 26; i++)
{ if (Frequence[i]!=0)
cout << char (i+'a') << " " << Frequence[i]<< endl;
if (Frequence[i] >Max)
{
IndiceMax = i;
Max = Frequence[i];
}
}
cout << "La plus grande frequence "<< endl;
cout << char (IndiceMax+'a') << " " << Max;
}
Page 5 sur 8
I NF1005C : Programmation procédurale Corrigé
Automne 2007
Question 4 (7 points)
La nouvelle version du logiciel iTune, possède un fichier texte contenant les
caractéristiques de toutes les chansons contenues dans sa librairie. Ce fichier, nommé
iTUNEMUSIC.DAT, décrit, pour chaque chanson :
sur trois lignes :
son titre (chaîne d'
au plus 80 caractères),
l’artiste (chaîne d'
au plus 80 caractères),
l’album (chaîne d'
au plus 80 caractères),
sur la quatrième ligne :
son année de parution,
son genre (un seul mot d’au plus 30 caractères),
son nombre de fois écouté jusqu’à présent,
son nombre d’étoiles (0=non disponible, 5=excellent),
sa taille (en Mega octets)
par exemple :
...
Savoure le rouge
Stephie Shock
Les Vendredis
2006 Franco 5 3 3.457
Youri
Les Trois Accords
Grand Champion International de course
2006 Franco 25 5 4.635
Umbrella
Rihanna
Good Girl Gone Bad
2007 R&B 21 0 3.245
...
Page 6 sur 8
I NF1005C : Programmation procédurale Corrigé
Automne 2007
Question 4 ( suite)
Le nombre de chansons contenues dans iTUNEMUSIC.DAT est indéterminé mais très
grand, ce qui empêche de mémoriser toutes les informations du fichier dans une variable
de type tableau.
Une chanson est considérée « très bonne » si le produit du nombre d’étoiles par le
nombre de fois écouté est supérieur ou égal à 100 :
« Très bonne » => (nb. d’étoiles * nb. fois écouté) >= 100
Vous devez concevoir un programme en langage C/C++ qui réalisera les opérations
suivantes:
• demande à l’utilisateur d'
entrer (au clavier) une année A;
• affiche (à l'
écran) tous les titres de chansons, contenus dans le fichier
iTUNEMUSIC.DAT, ayant paru l'
année A et étant considérées comme très
bonnes selon la règle donnée plus haut.
N.B. On supposera que l'
utilisateur ne commet pas d'
erreurs, i.e. qu'
il entre bien une
valeur numérique représentant une année. Il y a toujours au moins une chanson « très
bonne » pour l’année à considérer.
Page 7 sur 8
I NF1005C : Programmation procédurale Corrigé
Automne 2007
Réponse question 4
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void main()
{
string titre, artiste, album, genre;
int annee, refAnnee, nbEcoute, nbEtoiles;
float taille;
ifstream ficLecture;
cout << "Les tres bonnes chansons de quelle annee desirez-vous?";
cin >> refAnnee;
ficLecture.open("Y:\\cours\\inf1005c\\aut07\\Cp\\itunes\\itunesmus
ic.dat");
if(!ficLecture.fail())
{
getline(ficLecture,titre);
while(!ficLecture.eof())
{
getline(ficLecture,artiste);
getline(ficLecture,album);
ficLecture >> annee >> genre >> nbEcoute >> nbEtoiles
>> taille;
if(refAnnee == annee)
{
if((nbEcoute*nbEtoiles)>=100)
{
cout << titre << endl;
}
}
ficLecture.ignore(1);
getline(ficLecture,titre);
}
}
else
cout << "Erreur lors de l'ouverture du fichier";
}
Page 8 sur 8