Durée : 14 minutes.
Aucun document n’est autorisé.
Une seule réponse par question, pas de point négatif en cas de mauvaise réponse.
Noircir les cases pour la reconnaissance optique (Ne pas cocher mais remplir la
case!). En cas d’erreur, entourer d’un cercle la case noircie correcte.
L’ordre et la dificulté des questions/réponses sont aléatoires.
A 0 0 0.25 0 D 0 0 0 0
B 0.25 0.25 0.25 0.25 E 0 0 0.25 0.25
C 0 0.25 0.25 0.25
Question 2 Quel est le test correct pour vérifier que r est diviseur commun de a et b ?
A 6 2 0 B 10 6 2 C 10 6 0 D 6 2 -2
Question 4 Soit un tableau défini par double tab[6], que représente alors l’expression
*(tab+2)+1 ?
A tab[3] D &tab[2]+1
B tab[1]+1 E &tab[3]
C tab[2]+1
Question 5 La fonction fun() est appellée combien de fois dans les boucles imbriquées suivantes
:
for(i=0;i<3;i++)
for(j=i;j>0;j--)
{ fun(); }
A 6 B 3 C 4 D 5 E 2
② ②
② +1/2/59+ ②
if (a != 0)
printf("e");
else if ((a==1) || (b==2))
printf("f");
else if (b==2)
printf("g");
else
{ /*no instruction*/};
A 6 B 0 C 8 D 13 E 5
int n=4;
int *p_n=&n;
② ②
② +1/3/58+ ②
*p2 = 4;
p2 = p1;
a = 3;
*p1 = *p2+1;
A 2 3 1 4 D 4 4 4 4
B 4 3 3 4 E 2 4 2 2
C 3 2 3 3
Question 11 Combien de fois la fonction fun() est-elle appelée dans le code suivant ?
i=0;
do
{ i++;
fun(); }
while (i<0);
A 3 B 2 C 1 D une infinité E 0
Question 12
Quel est le code correct pour définir un tableau de 3 float et accèder au dernier élément du tableau
?
Question 13
L’instruction malloc(11*sizeof(int)) réserve ?
② ②
② +1/4/57+ ②
② ②
② +1/5/56+ ②
Les réponses aux questions sont à donner exclusivement sur cette feuille. NE PAS
COCHER LES REPONSES MAIS NOIRCIR LES CASES.
Question 1 : A B C D E Question 8 : A B C D E
Question 2 : A B C D Question 9 : A B C D E
Question 3 : A B C D
Question 10 : A B C D
Question 4 : A B C D E
Question 11 : A B C D E
Question 5 : A B C D E
Question 6 : A B C D E Question 12 : A B C D
Question 7 : A B C D E Question 13 : A B C D
② ②
Correction
Les réponses aux questions sont à donner exclusivement sur cette feuille. NE PAS
COCHER LES REPONSES MAIS NOIRCIR LES CASES.
Question 1 : A B C D E Question 8 : A B C D E
Question 2 : A B C D Question 9 : A B C D E
Question 3 : A B C D
Question 10 : A B C D
Question 4 : A B C D E
Question 11 : A B C D E
Question 5 : A B C D E
Question 6 : A B C D E Question 12 : A B C D
Question 7 : A B C D E Question 13 : A B C D
② +1/1/60+ ②
Durée : 12 minutes.
Aucun document n’est autorisé.
Une seule réponse par question, pas de point négatif en cas de mauvaise réponse.
Noircir les cases pour la reconnaissance optique (Ne pas cocher mais remplir la
case!). En cas d’erreur, entourer d’un cercle la case noircie correcte.
Question 1
Quelle est la sortie du programme suivant:
int gg ( int i ) A 1 2
{ int k=1; B 0 1
return i+k ; }
C 1 1
void hh ( int i , int ∗ j ) D 1 0
{ i ++; E 0 0
∗ j=i +1; }
int main ( )
{ int a=0, b=0;
gg ( a ) ;
hh ( a ,&b ) ;
b=gg ( a ) ;
p r i n t f ( "%d␣%d" , a , b ) ;
return 0 ; }
Question 2
Quel est le test correct pour tester la présence d’un caractère dans une chaîne str[20]?
Question 3
Qu’affiche le programme suivant?
② ②
② +1/2/59+ ②
Question 4
Qu’affiche le code suivant ?
char t e x t [ ] = " t h e ␣ w o r s t ␣ t h i n g s \n␣come␣ f r e e ␣ t o ␣ us " ;
t e x t [ 2 3 ] = ’ \0 ’ ;
p r i n t f ( "%s " , t e x t ) ; /∗ ou p u t s ( t e s t ) ; ∗/
Question 5
int a [ ] = { 1 , 2 , 3 } ; A &a[1] 2
int b [ ] = { 4 , 5 } ; B &b[0] 2
int ∗ c [ 2 ] = { a , b } ; C 5 &b[1]
Question 6
Quels sont la fonction et l’appel correct permettant de récupérer une durée en heures+minutes à
partir d’un nombre de minutes ?
A void convert(int *h, int *min) C void convert(int *h, int *min)
{ *h = *min/60; { h = min/60;
*min = *min%60;} min = min%60;}
et et
int hour, minutes; int hour, minutes;
convert (hour, minutes); convert (&hour, &minutes);
B void convert(int *h, int *min) D void convert(int *h, int *min)
{ *h = *min/60; { *h = min/60;
*min = *min%60;} *min = min%60;}
et et
int hour, minutes; int hour, minutes;
convert (&hour, &minutes); convert (*hour, *minutes);
② ②
② +1/3/58+ ②
Question 7
La valeur affichée par le programme est ?
void f o n c t i o n ( int ∗a ) A 3
{ a [1]=4; }
B 4
int main ( )
C 1
{ int T[ 3 ] = { 1 , 2 , 3 } ;
f o n c t i o n (T ) ; D 2
p r i n t f ( "%d" ,T [ 1 ] ) ;
return 0 ; } E aucun: erreur de compilation
Question 8
Qu’affiche le programme suivant?
Question 9
Où est l’erreur ?
1 char ∗ v i l l e ;
2 ∗ v i l l e =(char ∗ ) m a l l o c ( 3 0 ∗ s i z e o f ( char ) ) ;
3
4 p r i n t f ( " C a p i t a l e ␣du␣ Burundi ? " ) ;
5 s c a n f ( "%s " , v i l l e ) ;
6 p r i n t f ( " Votre ␣ r e p o n s e : ␣%s " , v i l l e ) ;
Question 10
Que teste le code suivant ?
char s t r [ 2 0 ] = " o i s e a u " ;
i f ( s t r==" c h e v a l " )
{
② ②
② +1/4/57+ ②
② ②
② +1/5/56+ ②
Les réponses aux questions sont à donner exclusivement sur cette feuille. NE PAS
COCHER LES REPONSES MAIS NOIRCIR LES CASES.
Question 1 : A B C D E Question 6 : A B C D
Question 2 : A B C D Question 7 : A B C D E
Question 3 : A B C D E Question 8 : A B C D E
Question 4 : A B C D Question 9 : A B C D
Question 5 : A B C D E Question 10 : A B C D
② ②
Correction
Les réponses aux questions sont à donner exclusivement sur cette feuille. NE PAS
COCHER LES REPONSES MAIS NOIRCIR LES CASES.
Question 1 : A B C D E Question 6 : A B C D
Question 2 : A B C D Question 7 : A B C D E
Question 3 : A B C D E Question 8 : A B C D E
Question 4 : A B C D Question 9 : A B C D
Question 5 : A B C D E Question 10 : A B C D
② +1/1/60+ ②
Les questions n’attendent qu’une seule réponse, sauf une question avec mention contraire.
Pas de point négatif en cas de mauvaise réponse.
Chaque sujet est unique et associé à une feuille réponse unique en fin de document.
Indiquez votre numéro de table et nom sur cette feuille réponse, qui est la seule à rendre.
Question 1
Soit un fichier texte contenant le nom d’un objet Quelle instruction est à utiliser pour le lire ?
stellaire et sa magnitude: double i;
char str[40];
Question 2
Que teste le code suivant ?
char s t r [ 2 0 ] = " o i s e a u " ;
i f ( s t r==" c h e v a l " ) {
Question 3
if (i != 0) A a
printf("a");
else if (i==1) B bc
printf("b");
C b
else if (j==2)
printf("c"); D ad
else
printf("d"); E bd
② ②
② +1/2/59+ ②
Question 4
Question 5
Question 6
Pour lire au clavier 2 caractères à placer dans A scanf("%c %c", *t, *(t+1));
les éléments t[0] et t[1] d’un tableau, on peut B scanf("%c %c", *t, *(t)+1);
écrire:
C scanf("%c %c", t, t+1);
D scanf("%c %c", t);
E scanf("%c %c", t[0], t[1]);
Question 7
Soit le code suivant pour modéliser une machine Que vaut alors *(enigma[1]) ?
enigma:
A &roue2[0]
char r o u e 1 [ 9 ] = " e i x b c p o a " ;
char r o u e 2 [ 9 ] = "uvdwrmnf" ; B roue1[1]
char r o u e 3 [ 9 ] = " g j s q h t k l " ; C roue1
② ②
② +1/3/58+ ②
Question 8
Quelle erreur s’est glissée dans le programme A Il manque un & devant pointeur dans la
suivant ? ligne du free.
int ∗ p o i n t e u r=NULL;
B Il manque une * devant le pointeur dans
p o i n t e u r =( int ∗ ) m a l l o c ( s i z e o f ( int ) ) ; la ligne du test if.
i f ( p o i n t e u r == NULL) { return ( −1);}
C Il y a une * en trop devant pointeur dans
p r i n t f ( " Quel ␣ age ␣ avez−vous ␣ ? ␣ " ) ; la ligne du printf.
s c a n f ( "%d" , &p o i n t e u r ) ;
D Il manque une * devant le pointeur dans
p r i n t f ( "Vous␣ avez ␣%d␣ ans \n" , la ligne malloc.
∗ pointeur ) ;
E Il y a un & en trop devant pointeur dans
f re e ( pointeur ) ; la ligne du scanf.
Question 9
Question 10
② ②
② +1/4/57+ ②
Question 11
La date de dernière modification des fichiers permet de savoir quels fichiers ont été modifiés depuis la
dernière compilation et donc ceux à prendre en compte pour mettre à jour le programme (méthode
employée par l’utilitaire make). D’aprés le détail des fichiers du répertoire suivant, quel est alors
le jeu minimum d’opérations à réaliser pour mettre à jour l’exécutable program?
Question 12
int main ( )
{ int a=1, b=2;
swap1 ( a , b ) ;
swap2 ( &a , b ) ;
p r i n t f ( "%d␣%d\n" , a , b ) ;
return 0 ; }
Question 13
Soit la structure suivante définie en début de Comment déclarez-vous dans une fonction 2
fichier source (pas de typedef): stuctures afin de stocker le nom et la note de
2 étudiants ?
struct s t u d e n t {
char name [ 3 0 ] ; A struct {} student1, student2;
char n o t e ;
/∗un e n t i e r −128< <127∗/ B struct student{} student1, student2;
}; C student student1, student2;
D struct student1, student2;
E struct student student1, student2;
② ②
② +1/5/56+ ②
Question 14
Question 15 ♣
② ②
② +1/6/55+ ②
Question 16 Afin de simplifier l’écriture, on ajoute au fichier un nouveau type (eleve) pour
la structure avec:
typedef struct s t u d e n t eleve ;
et on définit une liste avec eleve promo[101];.
Quelle défintion de fonction correspondrait à l’appel ci-dessous pour afficher la liste d’élèves ?
int n=58;
a f f i c h e _ l i s t e ( promo , n ) ;
A
void a f f i c h e _ l i s t e ( e l e v e l i s t , int n )
{ int i ;
f o r ( i =0; i <n ; i ++)
{ p r i n t f ( "%s ␣%d\n" , &( l i s t [ i ] . name ) , l i s t [ i ] . n o t e ) ; } }
B
void a f f i c h e _ l i s t e ( e l e v e ∗ l i s t , int n )
{ int i ;
f o r ( i =0; i <n ; i ++)
{ p r i n t f ( "%s ␣%d\n" , &( l i s t [ i ]−>name ) , l i s t [ i ]−>n o t e ) ; } }
C
void a f f i c h e _ l i s t e ( e l e v e l i s t , int n )
{ int i ;
f o r ( i =0; i <n ; i ++)
{ p r i n t f ( "%s ␣%d\n" , l i s t [ i ]−>name , l i s t [ i ]−>n o t e ) ; } }
D
void a f f i c h e _ l i s t e ( e l e v e ∗ l i s t , int n )
{ int i ;
f o r ( i =0; i <n ; i ++)
{ p r i n t f ( "%s ␣%d\n" , l i s t [ i ]−>name , l i s t [ i ]−>n o t e ) ; } }
E
void a f f i c h e _ l i s t e ( e l e v e ∗ l i s t , int n )
{ int i ;
f o r ( i =0; i <n ; i ++)
{ p r i n t f ( "%s ␣%d\n" , l i s t [ i ] . name , l i s t [ i ] . n o t e ) ; }
}
② ②
② +1/7/54+ ②
Les réponses aux questions sont à donner exclusivement sur cette feuille. NE PAS
COCHER LES REPONSES MAIS NOIRCIR LES CASES.
Question 1 : A B C D E Question 9 : A B C D E
Question 2 : A B C D Question 10 : A B C D E
Question 3 : A B C D E Question 11 : A B C D E
Question 4 : A B C D E Question 12 : A B C D E
Question 5 : A B C D E Question 13 : A B C D E
Question 6 : A B C D E Question 14 : A B C D
Question 7 : A B C D E Question 15 : A B C D E F
Question 8 : A B C D E Question 16 : A B C D E
② ②
Correction
Les réponses aux questions sont à donner exclusivement sur cette feuille. NE PAS
COCHER LES REPONSES MAIS NOIRCIR LES CASES.
Question 1 : A B C D E Question 9 : A B C D E
Question 2 : A B C D Question 10 : A B C D E
Question 3 : A B C D E Question 11 : A B C D E
Question 4 : A B C D E Question 12 : A B C D E
Question 5 : A B C D E Question 13 : A B C D E
Question 6 : A B C D E Question 14 : A B C D
Question 7 : A B C D E Question 15 : A B C D E F
Question 8 : A B C D E Question 16 : A B C D E
② +1/1/60+ ②
Question 2 Quand a lieu l’édition de liens et quelle est l’utilité de l’éditeur de liens ?
A A lieu après la compilation. Crée l’exécutable en regroupant le code machine des fonctions
issues des fichiers sources et des bibliothèques utilisées.
B A lieu après la compilation. Crée l’exécutable en regroupant le code source des fonctions
issues des fichiers sources et des bibliothèques utilisées.
C A lieu avant la compilation. Crée l’exécutable en regroupant le code machine des fonctions
issues des fichiers sources et des bibliothèques utilisées.
D A lieu avant la compilation. Crée l’exécutable en regroupant le code source des fonctions
issues des fichiers sources et des bibliothèques utilisées.
Question 3
Quelle déclaration au sujet du langage C est vraie ?
Question 4
Quel est le problème dans le programme suiv- A ligne 7: déclaration incorrecte du pointeur
ant? B ligne 8 et 9: le pointeur utilisé n’est pas
1 void main ( ) initialisé (segfault)
2 { C ligne 8: l’opérateur -> est incorrect pour
3 struct xx
accéder au champ de s
4 { int x ;
5 char name [ 2 0 ] ; D ligne 9: l’opérateur -> est incorrect pour
6 }; accéder au champ de s
7 struct xx ∗ s ;
8 p r i n t f ( "%d" , s−>x ) ;
9 p r i n t f ( "%s " , s−>name ) ;
10 }
② ②
② +1/2/59+ ②
Question 5
Question 6
Question 7
Dans la déclaration int table [2][3] = A aucun des éléments est initialisé à 0.
{{0}, {0}}; , B seule la premère colonne est initialisée à 0.
C tous les éléments sont initialisés à 0.
D seuls les 2 premiers éléments de la première
ligne sont initialisés à 0.
E seule la dernière colonne est initialisée 0.
(Faire l’analogie avec le cas d’un tableau simple
lorsque int t[3] = {0}; /*!*/ )
Question 8
Pour disposer dans une fonction f d’une variable A static int i; à l’extérieur de f
i dont B int i; à l’extérieur de f
• la valeur est préservée entre chaque appel C static int i; à l’intérieur de f
• et qui ne soit pas visibe de l’extérieur de D int i; à l’intérieur de f
la fonction f, E private int i; à l’intérieur de f
il faut la définir en tant que:
② ②
② +1/3/58+ ②
Question 10
Question 11
Question 12
Question 13
Question 14
② ②
② +1/4/57+ ②
Question 15
f u n c t i o n (&x , y ) ;
p r i n t f ( "%i ␣%i " , x , y ) ;
return 0 ; }
Question 16
Question 17
Question 18
② ②
② +1/5/56+ ②
Question 19
Question 20
Quel est le problème du programme suivant ? A un tableau de char ne peut être initialisé
int main ( ) comme fait dans ce programme.
{ char m1[ 9 ] = " message1 " ; B les tableaux sont trop petits.
char m2[ 9 ] = " message2 " ; C un tableau statique ne peut être à gauche
de l’affectation (=) hors une initialisation.
m2 = m1 ; D un tableau de char ne peut être affiché
p r i n t f ( "msg␣ i s ␣%s " , m1 ) ; avec un printf.
return 0 ; }
Question 21
Question 22
On souhaite manipuler une matrice 2D avec Le prototype d’une fonction typique pour ma-
une notation de la forme M[i][j] et pouvoir la nipuler M est alors :
passer facilement à une fonction. A f( int *m, int L*C)
B f( int m[], int L, int C);
Le C ne laisse pas d’autre alternative que
C f( int* m, int L, int C);
d’utiliser un tableau de pointeur (alloué dy-
namiquement ou statiquement). D f( int m[], int L, int C);
E f( int **m, int L, int C);
Question 23
② ②
② +1/6/55+ ②
Question 24
Question 25
Question 26
do
A while ( i <3) { y++;
{ y++;
i ++; }
i ++; }
while ( i <2);
B y++;
est équivalent à : i ++;
while ( i <1) { y++;
i ++; }
D y++;
i ++;
while ( i <2) { y++;
i ++; }
Question 27
Si une fonction a pour prototype void fn A fn(&x) avec x défini par int *x;
(int*); , laquelle de ces expressions est correcte B fn(*x) avec x défini par int *x;
pour appeler la fonction ?
C fn(x) avec x défini par int *x;
D fn(x) avec x défini par int x;
② ②
② +1/7/54+ ②
Question 28
Question 29
Soit un fichier ouvert dans le mode suivant : A Le fichier est ouvert en lecture.
B un 2ème fichier result.txt est créé à côté
FILE *F; du premier dans le répertoire courant.
F=fopen("result.txt","w"); C On a une erreur à la compilation.
Si le fichier "result.txt" existe déjà, que se D Le contenu du fichier sera écrasé avec les
passe-t’il (qu’avez-vous constaté en TP)? nouvelles écritures.
E F prend la valeur NULL.
Question 30 ♣
struct s t r _ p e o p l e {
A ( ∗ j d o e)−>age
char name [ 2 0 ] ;
int age ; };
B j_doe . age
struct s t r _ p e o p l e j_doe ;
L’accès au champ age de la variable j_doe est C (&j_doe)−>age
possible avec les 2 syntaxes suivantes:
D j_doe−>age
E (&j_doe ) . age
Question 31
② ②
② +1/8/53+ ②
Question 32
Si x est le nom d’un tableau 1D, quelle proposi- A *(x+i) équivaut à &x[i]
tion est correcte ? B *(x+i) équivaut à x[i]+1
C *(x+i) équivaut à *x[i]
D x+i équivaut à &x[i]
Question 33
Question 34 ♣
Question 35
La valeur affichée par le programme est ?
void f o n c t i o n ( int ∗a ) A 4
{ a [1]=4; }
B 2
int main ( )
C aucun: erreur de compilation
{ int T[ 3 ] = { 1 , 2 , 3 } ;
f o n c t i o n (T ) ; D 1
p r i n t f ( "%d" ,T [ 1 ] ) ;
return 0 ; } E 3
Question 36
② ②
② +1/9/52+ ②
Question 37
Question 38 ♣
Question 39
B mat=malloc(2*sizeof(int**));
for (j=0 ;j<2 ;j++)
mat[j]=malloc(3*sizeof(int));
C mat=malloc(3*sizeof(int*));
for (j=0 ;j<3 ;j++)
mat[j]=malloc(2*sizeof(int));
D mat=malloc(2*sizeof(int*));
for (j=0 ;j<2 ;j++)
mat[j]=malloc(3*sizeof(int));
Question 40
② ②
② +1/10/51+ ②
Question 41
if( 0<(y-x) ) D ta
{ return y; } /*!*/
else
{ printf("ta"); }
printf("ti");
return x;
}
Question 42
② ②
② +1/12/49+ ②
Les 40 exercices n’attendent qu’une seule réponse, sauf mention contraire (♣).
Pas de point négatif en cas de mauvaise réponse.
Note: sizeof(int) vaut 4 pour tout le sujet.
/*!*/ indique qu’il faut y réfléchir à 2 fois.
Chaque sujet est unique et associé à une feuille réponse unique en fin de document.
Indiquez votre numéro de table et nom sur la grille réponse, qui est la seule à rendre.
② ②
Correction
Les réponses aux questions sont à donner exclusivement sur cette feuille. NE PAS
COCHER LES REPONSES MAIS NOIRCIR LES CASES.
Question 1 : A B C D Question 22 : A B C D E
Question 2 : A B C D Question 23 : A B C D E
Question 3 : A B C D Question 24 : A B C D E
Question 4 : A B C D Question 25 : A B C D E
Question 5 : A B C D Question 26 : A B C D
Question 6 : A B C D Question 27 : A B C D
Question 7 : A B C D E Question 28 : A B C D E
Question 8 : A B C D E Question 29 : A B C D E
Question 9 : A B C D Question 30 : A B C D E
Question 10 : A B C D E Question 31 : A B C D E
Question 11 : A B C D Question 32 : A B C D
Question 12 : A B C D Question 33 : A B C D
Question 13 : A B C D Question 34 : A B C D E
Question 14 : A B C D E Question 35 : A B C D E
Question 15 : A B C D E Question 36 : A B C D E
Question 16 : A B C D E Question 37 : A B C
Question 17 : A B C D Question 38 : A B C D E
Question 18 : A B C D Question 39 : A B C D
Question 19 : A B C D Question 40 : A B C D
Question 20 : A B C D Question 41 : A B C D
Question 21 : A B C D E Question 42 : A B C D E
TPS – 1ère année 2013/2014
Consignes : Créer un répertoire portant votre nom dans le répertoire d’accueil (/home/examc1/).
Dans ce répertoire portant votre nom, vous créerez vos fichiers sources.
Les pdf du cours et les fichiers nécessaires à l'examen dont un makefile sont disponibles dans le
répertoire en lecture seule /usr/local/tp/examC. Avec l’explorateur, on accède à ce répertoire
par le disque nommé système de fichiers qui représente la racine /.
Les exercices et leurs questions peuvent être traités indépendamment. La répartition des points sera
approximativement de 20% pour l'exercice 1, 40% pour l'exercice 2 et 40% pour l'exercice 3.
Une chaîne de caractères w est un carré si il existe une chaîne u telle que w=uu. Par exemple,
“chercher“ et “bonbon“ sont des carrés.
Ecrire une fonction qui teste si la chaîne passée en argument est un carrée.
Suivant la valeur retournée par la fonction, la fonction main affichera si la chaîne est carrée ou non.
Le réseau SPEEDI est composé de stations identifiées par un code numérique. Chaque station mesure
quotidiennement la dose de radiation effective dans l'air exprimée en nanoSievert par heure (nS/h).
1 - Ecrire une fonction float nSh_to_mSa(float ...) qui retourne la dose de radiation
effective en milliSievert par an (mS/a) pour une radiation exprimée en nS/h. Une année comptera
toujours 365 jours.
Modifier votre code pour lire ce fichier et mémoriser les doses quotidiennes. Finalement, afficher à
l'écran l'identifiant de la station et sa dose minimale, maximale et moyenne après conversion en mS/a
par le biais des fonctions écrites précédemment.
Remarque: La dose de radiation moyenne dans l'air au japon était de 0,4 mS/a avant l’incident.
1- Ecrire une fonction m_sum(...)qui retourne la matrice somme de 2 des matrices d'entiers carrées
passées en paramètres. La fonction doit fonctionner quelque soit la dimension NxN des matrices. La
matrice résultante sera affichée par la fonction main().
2- Ajouter une fonction m_product(...)qui retourne le produit matriciel entre 2 matrices carrées
entières passées en paramètres. La matrice résultante sera affichée par la fonction main().
Une fois le produit validé, ajouter une fonction m_alloc() - si ce n'est déjà fait - qui prend en
charge l'allocation dynamique de mémoire pour une matrice nxm (allocation via un tableau de
pointeurs ou un tableau 1D ). La fonction retournera alors un pointeur.
Modifier votre programme pour utiliser cette fonction afin d'allouer la mémoire de vos matrices.
�����
�������������������������������������������������������������
����������� ������������������������
���������������������
����������������������
����
��������� ���������������� ����
�����
���������� ���������������
�����
����
����
��������� ���������������������� ���� ������ ���� ����� ����� ������ ������� ��
������
�������� ��
�����
�����������������
�����������������
�����
�������� �������������
������
������� �������������
����� ������������
������� �������������
����� ������������
������������������
������
�����
�����
�����������������
������
�����
�����
��������� ���������������� ��� ����� �����
������
�����
������� ��������������������������
����� �����������������������
�����
�����
������� ��������������������������
����� ��������������������
�����
�����
������� ��������������������������
����� ���������������������������
�����
������
�����
�����
�������� ������
������
���������� ���������������������
���������� ���� ���� ����
��������� �������������������
�������� ����
��������� �������
���������� ��
���������� ������
�����
�������������������������������� ����������������
�����
�����
�����������������������������������
�����
�����������������������������
�����
�����
�����
������������������������������
�����
���������� ���������������������������� ������
������
�����
�������������������������������������������������������������
����������� ������������������������
������������������
���������
������
�����
�����
�������������������������������������������
�����
������������������������������������������������������������������������������������
�����
�����
����������� ��
������
�����
�����
�������������������������������������������������������������
����������� ������������������������
���������������������
������������ ����������
����
�������� ����������� ��������� �� ����� �� ��� ��
�����
������� ����
����
������� �������������
���� ����������������
������
����� ��������������������������
�����
������
�����
�����
������
�����
�����
��������� ������������ ��������� �� ����� �� ��� ��
������
�������� ������
�����
�������� �������������
����� ����������������
������
����� ������������
����� ��� �������������
����� ���������������������������
�����
������
�����
�����
������
�����
�����
�������� ������
������
�����
�������� ����
�������� ����
�����
�������� ���� ���� ����
�����
������� ������� �����������������������
������� ������� �����������������������
������� ������� �����������������������
�����
�������� ����� ��������
������
���������������� ����������������������
���������������� ����������������������
���������������� ����������������������
�����
������
�����
�����������������������������������������������������������������������������������
���������������������
�����
���������������
���������������
���������������
���������������
���������������
���������������
���������������
���������������
�����
�����
���������������������
�����
�����
�������������������������������������������������������������
����������� ������������������������
�������� �������������
������
����� ����������������
����� ����������������������
����� �������������
������
�����
����������� ��
������
�����
�����
�����
TPS – 1ère année 2014/2015
Consignes :
Créer un répertoire portant votre nom dans le répertoire d’accueil (/home/examc1/). Dans
ce répertoire portant votre nom, vous créerez vos fichiers sources.
Les pdf du cours et les fichiers nécessaires à l'examen dont un makefile sont disponibles
dans le répertoire en lecture seule /usr/local/tp/examC. Avec l’explorateur, on accède à ce
répertoire par le disque nommé système de fichiers qui représente la racine /.
On peut compiler, exécuter ses fichiers avec make exo1, make exo2_1, puis ./exo1, ./...
Les 2 exercices sont à traiter dans l'ordre de votre choix et sont indépendants. Penser aux exemples de
lecture de fichiers et définition de structures disponibles dans le cours.
La mesure du décalage vers le rouge du spectre des galaxies, z (sans unité), permet une mesure de leur
vitesse de fuite v, vue de la terre: v = zc avec c la vitesse de la lumière.
En 1929, Edwin Hubble a corroborer la théorie de l'expansion de l'univers en identifiant une relation
constante entre la vitesse des galaxies et leur distance (plus elle est éloignée, plus vite elle s'éloigne):
On propose de recalculer cette constante à partir de données astronomiques et d'en déterminer l'âge de
l'univers.
1. Ecrire une fonction de prototype double z_to_v(double z); qui retourne la vitesse en
km.s-1 pour un décalage vers le rouge z.
La vitesse de la lumière est c= 299 792 km.s-1.
2. Ecrire alors une fonction main() qui lit le fichier humason1936.txt, disponible dans
/usr/local/tp/examC pour stocker dans un tableau (alloué via malloc() de
préférence) les distances des galaxies en Mpc et dans un autre leur vitesse en km/s via la
fonction précédente.
Le fichier est composé de 21 lignes contenant chacune le nom de la galaxie (une
chaîne de caractères), son décalage en z et sa distance d en Mpc séparés d'un espace:
[nom z distance(Mpc)]
soit Virgo 0.0029 1.6
Leo 0.065 35.1
...
On rappelle que %lf est à utiliser lors de la lecture (pas l'écriture) d'un double avec fscanf() ou
scanf().
Note: Si on ne parvient pas à lire le fichier, on continuera l'exercice en copiant les valeurs des
5 premières lignes du fichier humason1936.txt dans le code source.
Note: N'hésitez pas à valider votre fonction reg_lin() avec un jeu test de 2 ou 3 points
particuliers.
4. Ajouter une fonction univers_an() qui retourne l'âge de l'univers en années à partir du
paramètre H0. Afficher le résultat (pas plus de quelques milliards d'année.).
a0 + a1 x +... + an-1 xn-1 + an xn est représenté par le tableau [a0 a1 .. an-1 an]
Pour simplifier l'exercice, on travaille avec des tableaux de taille 6, nous limitant donc aux
polynômes de degré 5.
Lors de la multiplication, les coefficients P[i] de P sont obtenus par la convolution des 2
tableaux de coefficients de P1 et P2, soit :
!!! ! = !!1[!]!!2[! − !]
!!!
Note: Cette formule est valable car P1 et P2 sont des tableaux de même taille et le résultat P
tient aussi dans un tableau de même taille.
4. Finalement, écrire une fonction main() qui définie les polynômes P1=x+1
P2=2x+2
P3=x2+3x+1
et des polynômes pour les calculs intermédiaires, afin de calculer et afficher le résultat de
(P1+P2).P3 .
1. Définir d'abord une structure iNum (avec ou sans typedef) qui permet de décrire un
nombre complexe avec sa partie réel et sa partie imaginaire.
Les polynômes sont alors décrits par des tableaux de iNum.
Ceci implique de définir d'abord des fonctions pour l'addition et la multiplication de nombres
complexes. Afin de pouvoir écrire des instructions telles que c=iAdd(a,b), on pourra écrire
(si iNum est défini via un typedef ) :
3. Ecrire une fonction main() qui alloue (de préférence via malloc()) les polynômes
P1=x+i
P2=(2+i)x+2
P3=x2+1
et affiche le résultat de P1.P2 puis (P1.P2)+P3.
�����
�����������������������������������������������������������
����������� ������������������������
������������ ���������
����
����������� ���� � �����������������������������
����
����
�������� ������������������� � �
�����
���� ��� ��
���� ������������
����� �������������������
����� � ������������������� �
����� ������������
�����
������
�����
��������� ��������������� �� ������� ��� ������ ����
������
����� ��� ��
����� �������������������
����� � ����������������� �
������
�����
��������� ���������������� �� ������� ��� ������� ���
������
����� ��� �� ��
����� ��� ���������������� ��������������������������
����� ��� ����� ���� ����� ��������������������������������������
����� � ��������� � �������������� �
������
�����
�����
�����
�������� ������
������
����� ������ ����������������������� �������
����� ������ �����������������������
����� ������ �����������������������
����� ������ ����������� �����������
�����
����� ��������������������
�����
����� �����������������
����� ������������������
����� �������������
�����
����� �����������������������
�����
����� ����������������������
����� ������������������
����� �������������
�����
����� ������ ��
������
�����
�����
�����������������������������������������������������������
����������� ������������������������
������������ ���������
����
����������� ���� � �����������������������������
����
����������� ������ ������� ����� ������ ��� � �����
����
����
�������� ��������� �� ���� ��
�����
����� ���� ����
����� �����������������������
����� �����������������
����� ������ ����
������
�����
�����
��������� ���������� �� ���� ��
������
����� ���� ����
����� ��������� ������������� � ����������
����� ������������������ � ������������
����� ������ ����
������
�����
�����
��������������������������������������������������������������
��������������������������������������������������������������������
�����
�����
��������� ����������������� � �
������
����� ��� ��
����� ������������
����� �������������������
����� � ��������������������������������� �������� � � ����������������������������
�����������������
����� ������������
�����
������
�����
��������� ������������� �� ����� ��� ���� ����
������
����� ��� ��
����� �������������������
����� � ����������������������� �
������
�����
��������� �������������� �� ����� ��� ����� ���
������
����� ��� �� ��
����� ��� ���������������� ��������������������������
����� ��� ����� ���� ����� ��������������������������������������
����� � ��������� ������ ���������������������� �
������
�����
�����
�����
�������� ������
������
����� ���� ���������� ������ ������ ������ ������ ������ ����� ��
����� ���� ���������� ������ ������ ������ ������ ������ ����� ��
����� ���� ���������� ������ ������ ������ ������ ������ ����� ��
����� ���� ����������� �����������
�����
�����
����� ���������������������
����� ������������������
����� �������������
�����
����� ����������������������
�����
�����������������������������������������������������������
����������� ������������������������
�����
����� �����������������������
����� ������������������
����� �������������
�����
����� ������ ��
������
�����
�����
TPS – 1ère année 2015/2016
Consignes :
Créer un répertoire portant votre NOM dans le répertoire d’accueil (/home/examc1/).
Dans ce répertoire portant votre nom (exemple : DUPONT), vous créerez vos fichiers sources.
Les pdf du cours et les fichiers nécessaires à l'examen sont disponibles dans le répertoire en
lecture seule /usr/local/tp/examC. Avec l’explorateur, on accède à ce répertoire par le disque
nommé système de fichiers qui représente la racine /.
Le manuel est accessible avec la commande man ( man 3 strlen ) et se quitte avec la touche [q].
Les 3 exercices sont à traiter dans l'ordre de votre choix et sont indépendants.
Ecrire une fonction GBPtoEUR() qui pour une valeur décimale en livre (GBP) retourne 2 entiers:
• la partie entière de la valeur en euros après application du taux de change
(int)value donne la partie entière du nombre décimale value
Exemple : pour 2,0 (GBP), la fonction doit retourner 2 (EUR) et 83 (EUR centimes).
Pour ce faire, on utilisera de préférence ni structure, ni tableau mais deux pointeurs pour
« retourner » les 2 entiers.
GLENELG n’est pas qu’un petit village des Highlands écossais avec un ferry vers l’île de Skye,
c’est aussi un palindrome.
Un palindrome est un mot dont l'ordre des lettres reste le même qu'on le lise de gauche à droite ou
de droite à gauche. Autres palindromes: anna, radar, kayak, ressasser, ABBA(le groupe)…
Ecrire une fonction int is_palindrome(…) qui retourne vrai ou faux si le mot passé en
paramètre est un palindrome. On peut ou pas se servir de la fonction strlen().
La tester avec un main() minimaliste.
[Brouillon]
Le code ISBN-10, au dos mon guide de l’Ecosse, identifie de manière unique le livre par 10 chiffres:
- les 9 premiers chiffres du code, compris entre 0 et 9, identifient le livre ;
- le 10ème chiffre sert à contrôler la validité du code ISBN. Ce 10ème chiffre est soit entre 0 et 9,
soit est le « chiffre » X (majuscule) qui a la valeur numérique 10 ;
L’algorithme pour tester la validité du code ISBN est simple. On calcule 2 sommes : s1 et s2.
Le code ISBN est valide si la valeur de s2 est divisible par 11 (voir le reste de la division entière).
Exemple :
1) on calcule et stocke les sommes partielles s1 de l’ISBN 013162959X comme illustré ci-dessous.
ISBN-10 0 1 3 1 6 2 9 5 9 X
s1 0 1 4 5 11 13 22 27 36 46
B) Mettre votre test sous forme d’une fonction checkISBN() qui prend en paramètre le tableau
de caractères contenant le code ISBN et retourne en résultat si le code est valide ou non.
Attention checkISBN() doit laisser intact le tableau de char passé par le main().
Définir alors une structure livre pour stocker au moins le titre (taille < à 50 caractères) et
l’ISBN d’un livre.
Modifier votre main pour lire le fichier, stocker ses informations dans une liste (un tableau de
structures de taille arbitraire défini dans le main()), puis appeler vos fonctions :
• affich(…) qui affiche le nom et ISBN de tous les livres à partir de la liste en argument.
• affich_valid(…)qui parcourt la liste mais n’affiche que ceux dont l’ISBN est valide.
(i.e. les 5 premiers du fichiers, les meilleurs)
Note : Si on ne parvient pas (malgré les exemples dans le cours) à utiliser un tableau de structure, on
pourra simplement lire le fichier et afficher au fur et à mesure les noms et ISBNs des livres qui sont
valides sans les mémoriser dans une liste.
B) Proposer une fonction trie() pour trier la liste de livres par ordre alphabétique des titres.
On propose le tri par sélection et d’utiliser la fonction strcmp qui retourne une valeur négative si
la première chaine est inférieure dans l’ordre alphabétique à la seconde et positive si l’inverse (cf
manuel). Afficher la liste triée.
Rappel : on peut par simple affectation (=) copier le contenu d’une structure dans une autre de même type.