• Aucun résultat trouvé

Université de Xidian Université de Xidian

N/A
N/A
Protected

Academic year: 2022

Partager "Université de Xidian Université de Xidian"

Copied!
2
0
0

Texte intégral

(1)

Université de Xidian Université de Xidian

Polytech’Sophia 2020–2021

Examen de Langage C

(V. Granet)

Durée : 1h30 Aucun document autorisé Mobiles interdits

I1.Sans utiliserles fonctions standard destring.h, et uniquement à l’aide de la notation de pointeur (donc pas de tableau), écrivez la procédureinverserqui inverse une chaîne de caractères.

Cette procédure a un paramètre « donnée » qui est la chaîne à inverser, et un paramètre « résultat » qui est la chaîne inversée. L’en-tête de cette procédure est le suivant :

// antécédent : à compléter // conséquent : à compléter

void inverser (c o n s t char *s1 , char *s2)

Par exemple, sis1est égale à"hellow", après inversion,s2est égale à"wolleh". // antécédent : s1 chaîne de caractères à inverser

// conséquent : s2 chaîne de caractères inversion de s1 void inverser (c o n s t char *s1 , char *s2) {

c o n s t char *p = s1;

// se placer à la fin de s1 w h i l e (* s1) s1 ++;

// parcourir la chaîne en sens inverse et copier // ses caractères dans s2

w h i l e (--s1 >=p)

*s2 ++ = *s1;

// écrire le caractères de fin de chaîne dans s2

*s2 = ’\0 ’;

}

. . . . I2. Toujours sans utiliser les fonctions standard destring.h, et uniquement à l’aide de la notation de pointeur, on veut maintenant récrire la procédureinverserprécédente sous forme d’une fonction, c’est-à-dire qui renvoie la chaîne inversée. Il faudra donc créer une nouvelle chaîne (malloc). Écrivez la fonctioninverserdont l’en-tête est le suivant :

// antécédent : à compléter // conséquent : à compléter

char * inverser (c o n s t char *s)

// antécédent : s chaîne de caractères à inverser // rôle : renvoie l’inverse de s

char * inverser (c o n s t char *s) { i n t lg = 0;

c o n s t char *p = s;

// calculer la longueur de s w h i l e (*s++) lg ++;

// allouer la nouvelle chaîne de longueur lg char *si = malloc (lg +1);

char *q = si;

1

// parcourir la chaîne en sens inverse et copier // ses caractères dans si

s--;w h i l e (--s >=p)

*si ++ = *s;

// écrire le caractères de fin de chaîne dans si

*si = ’\0 ’;

r e t u r n q;

}

Il est également possible d’utiliser la première version deinversercomme suit : // antécédent : s chaîne de caractères à inverser

// rôle : renvoie l’inverse de s

char * inverser2 (c o n s t char *s) { i n t lg = 0;

c o n s t char *p = s;

// calculer la longueur de s w h i l e (*s++) lg ++;

// allouer la nouvelle chaîne de longueur lg char *si = malloc (lg +1);

// inverser p inverser (p, si );

r e t u r n si;

}

. . . . I 3. Écrivez un programme qui prend en paramètre deux noms de fichier. Le premier nom correspond à un fichier de texte qui contient une suite (éventuellement vide) de mots. Les mots ont une longueur maximale de 10 caractères, et sont placés un par ligne.

Votre programme devra lire tous les mots dans le premier fichier, et les écrire de façon inversée (à l’aide de la fonctioninverserprécédente) dans un second fichier de texte dont le nom est le second paramètre programme. Par exemple, si un fichierf1contient :

aerthello bonjour maitenant

L’exécution du programmeinverserFich f1 f2produira le fichier f2 : treaolleh

ruojnob tnanetiam

Note : votre programme devra faire toutes les vérifications nécessaires.

#i n c l u d e <stdio .h>

#i n c l u d e <stdlib .h>

#i n c l u d e <errno .h>

#d e f i n e LGMAXMOT 10

i n t main (i n t argc , char * argv []) {

// vérifier le bon nombre de paramètres programme 2

(2)

i f ( argc !=3) {

fprintf (stderr , " Usage : %s f1 f2\n", argv [0]);

exit ( EXIT_FAILURE );

}

// le nombre de paramètres est correct // ouvrir le fichier de mots argv[1] en lecture FILE *in;

i f (( in = fopen ( argv [1] , "r")) == NULL ) { perror ( argv [1]);

exit ( errno );

}// ouvrir le fichier de mots inversés argv[2] en écriture FILE *out;

i f (( out = fopen ( argv [2] , "w")) == NULL ) { perror ( argv [2]);

exit ( errno );

}

// lire le fichier de mots in et écrire les mots de façon inversée dans out char mot[ LGMAXMOT +1];

w h i l e ( fscanf (in , "%s", mot ) >0) fprintf (out , "%s\n", inverser (mot ));

// fermer les fichiers fclose (in );

fclose (out );

r e t u r n EXIT_SUCCESS ; }

. . . .

3

Références

Documents relatifs

a) GA / ALM: Fonction de Rastrigin (FRA). Les résultats dans le tableau ci-dessous montrent le type de difficulté rencontré si on veut utiliser cette procédure. Comment peut-on

déterminer le sens de variation d une fonction en la décomposant à l aide de fonctions de référence utiliser les variations des fonctions de référence pour comparer des

Vous ne pouvez utiliser que les fonctions définies dans les autorisations utilisateur du Groupe d'autorité, et uniquement le nombre de feuilles défini dans le Groupe de limitation

Pour utiliser un ou des fichiers tout au long d'un programme ou dans une procédure, il faudra l'identifier par une variable dont le type est fonction de l'utilisation que l'on

Pour cela vous pour- rez utiliser tout ce que nous avons vu jusque maintenant (fonctions, listes, utilisation de modules...). À partir du script précédent, refaire le même programme

Nous avons créé une fonction et une procédure dans fichiersource1.pas, nous allons maintenant les utiliser dans notre fichier projet (.dpr ou .bdsproj).. Premierprojet.dpr

Si l’on veut expliciter l’existence du référent light breeze, c’est-à-dire si l’on veut que le GN ne soit plus uniquement la réponse au questionnement initial et donc d’abord

Si l’exécution du programme se trouve dans cette configuration, ça veut dire qu’on vient d’exécuter la ligne 12, et qu’il y a maintenant deux variables en mémoire : x et y