• Aucun résultat trouvé

Université de Nice-Sophia Antipolis POLYTECH

N/A
N/A
Protected

Academic year: 2022

Partager "Université de Nice-Sophia Antipolis POLYTECH"

Copied!
2
0
0

Texte intégral

(1)

Université de Nice-Sophia Antipolis POLYTECH

Elec3 2018–2019

Examen de Info C

Durée : 1h

Aucun document autorisé

Mobiles interdits Nom : Prénom :

I1. Écrivez de façon itérative la fonctionitosqui renvoie la conversion d’un entier positif ou nul passé en paramètre, en sa représentation sous forme d’une chaîne de caractères. Aucune fonction standard destring.hn’est à utiliser.

/*

* Antécédent : n >=0

* Rôle : renvoie la conversion de n en sa représentation sous forme

* d ’une chaîne de caractères .

*/

char * itos (unsigned i n t n) {

// allouer un tableau de caractères mémoriser tous les chiffres

char chiffres [s i z e o f (unsigned i n t)*3]; // log_2(sizeof(char)) = 3 // décomposer l’entier n

// note : les chiffres sont obtenus en ordre inverse i n t i = 0;

do {

chiffres [i ++] = n %10 + ’0 ’;

n /=10;

} w h i l e (n !=0);

// allouer la chaîne de caractères résultat de taille i+1 // et y placer les chiffres dans le bon ordre

char *s = malloc (i +1);

i n t j =0;

f o r (i - -; i >=0; i --, j ++) s[j] = chiffres [i ];

// mettre le caractère de fin de chaîne s[j +1] = ’\0 ’;

r e t u r n s;

}

. . . . Pour représenter les chaînes de caractères, on définit le typeStringsuivant :

t y p e d e f s t r u c t string {

char *s; // les caractères de la chaîne i n t lg ; // longueur de la chaîne } * String ;

I2. Écrivez la fonctionString string(const char*s)qui renvoie uneStringinitialisée à partir de la chaîne de caractères passée en paramètre.

String string (c o n s t char *s) {

String ms = malloc (s i z e o f(s t r u c t string ));

ms -> lg = strlen (s );

// on alloue la place mémoire pour la nouvelle chaîne de car ms ->s = malloc (s i z e o f(char)* ms -> lg +1);

// et on la copie

1

strcpy (ms ->s , s );

r e t u r n ms ; }

. . . . I 3. Écrivez la fonctionstringCatqui renvoie uneStringconcaténation de deuxStringpassées en

paramètre.

String stringCat (c o n s t String s1 , c o n s t String s2 ) { String ms = malloc (s i z e o f(s t r u c t string ));

ms -> lg = s1 -> lg +s2 -> lg ; ms ->s = malloc (ms -> lg +1);

ms ->s = strcat ( strcpy (ms ->s , s1 ->s), s2 ->s );

r e t u r n ms ; }

. . . . I 4. Un fichier contient une suite d’entiers et de réels en alternance, d’abord un entier, puis un réel.

on considère que le fichier est sans erreur. Attention, le fichier n’est pas un fichier de texte (pas defscanf) !

Écrivez la procéduresommequi calcule la somme des entiers et celle des réels. Cette procédure devra posséder 3 paramètres. Un paramètre donnée, le nom du fichier, et deux paramètres résultats, les sommes des entiers et des réels.

v oi d somme (c o n s t char *f , i n t * sInt , double * sDouble ) { // ouvrir le fichier en lecture

FILE * fp ;

i f (( fp = fopen (f , "r"))== NULL ) { perror (f );

exit ( errno );

}

// le fichier f est ouvert en lecture i n t x;

double y;

* sInt = * sDouble = 0;

w h i l e ( fread (&x , s i z e o f(i n t), 1, fp ) >0) { // lire le réel

fread (&y , s i z e o f(double), 1, fp );

// sommer les entiers et les réels

* sInt += x;

* sDouble += y;

}

// fermer le fichier fclose ( fp );

}

. . . . I 5. Dans le répertoire courant, le fichier qui contient la suite d’entiers et de réels se nomme monFichier. Écrivez la fonctionmainqui appelle la procéduresommeprécédente et qui écrit sur la sortie standard les deux sommes calculées.

i n t main (v oi d) { i n t sInt ;

double sDouble ;

2

(2)

somme (" monFichier ", & sInt , & sDouble );

printf ("%d - %f\n", sInt , sDouble );

r e t u r n EXIT_SUCCESS ; }

. . . .

3

Références

Documents relatifs

Avec la notation de pointeur, écrivez en C la fonction somme qui prend en paramètre une chaîne de caractères qui représente un entier naturel et qui renvoie la somme de ses

Écrivez de façon itérative la fonction itos qui renvoie la conversion d’un entier positif ou nul passé en paramètre, en sa représentation sous forme d’une chaîne de

Écrivez un programme qui lit sur l’entrée standard une opération arithmétique formée de 2 entiers et d’un caractère ( ’+’ , ’-’ , ’*’ ou ’/’ ) et qui écrit sur

Écrivez la fonction creerFichDates qui lit un fichier de texte contenant la suites d’entiers, et qui crée un fichier de dates valides (de type Date ).. Sans l’écrire, vous

Au lieu de retirer, à chaque itération, 1 diviseur au dividende et d’incrémenter de 1 le quotient, le diviseur est multiplié successivement par 2 pour trouver son plus grand

qui prend en paramètre une chaîne de caractères, et qui remplace chaque chiffre par le caractère ’_’ dans celle-ci.. La fonction renvoie un pointeur sur le 1er caractère de

Il est nécessaire d’écrire un destructeur pour libérer explicitement la mémoire occupée par le tableau et les 3 points du triangle

En utilisant, la classe std::ifstream et ses méthodes is_open , get , eof et close , écrivez la classe FileInputStream qui permet de lire un fichier d’octets (et uniquement