• 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 2017–2018

Examen de Info C

Durée : 1h30 Aucun document autorisé

Mobiles interdits Nom : Prénom :

I1. En utilisant uniquement la notation de pointeur et à l’exclusion de toute autre fonction (sauf isdigit), écrivez en C la fonctionsansLesChiffresqui prend en paramètre deux chaînes de carac- tèress1ets2. Cette fonction copies2danss1en enlevant tous les chiffres présents danss2. De plus, elle renvoie le nombre de chiffres supprimés. Par exemple, l’appel suivant :

sansLesChiffres(s,"jeudi 14 juin 2018")renvoie la valeur6etsest égale à"jeudi juin".

/*

* Rôle : affecte à s1 la chaîne s2 dans laquelle les

* chiffres ont été supprimés . De plus , elle renvoie le

* nombre de chiffres supprimés .

i n t*/ sansLesChiffres (char *s1 , c o n s t char * s2 ) { i n t n =0;

w h i l e (* s2 ) { i f (! isdigit (* s2 ))

* s1 ++=* s2 ; e l s e

n ++;

// on avance tjs dans s2 s2 ++;

}

* s1 =’\0 ’;

r e t u r n n;

}

. . . . On souhaite représenter une liste d’éléments de typeTde façon circulaire (le dernier élément est lié au premier) par une structure simplement chaînée.

I2. Écrivez la déclaration du typeLISTE_CIRqui permet cette représentation.

t y p e d e f i n t T;

s t r u c t noeud { T elt ;

s t r u c t noeud * suivant ; };

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

s t r u c t noeud * first , * last ; } LISTE_CIR ;

. . . . I3. En utilisant cette déclaration deLISTE_CIR, dessinez une liste à0élément, une liste à1élément,

une liste à2éléments, et enfin une liste à3éléments.

1

liste circulaire à 2 elts

last

suivant liste circulaire à 0 elt

first last first

liste circulaire à 1 elt

last

suivant

first

liste circulaire à 3 elts

last

suivant first

. . . . I 4. Écrivez la procéduretournerqui prend en paramètre une listeliet un entiernet qui faitnfois

le tour de la liste de façon circulaire.

i n t estVide ( LISTE_CIR l) {

r e t u r n l. first == NULL && l. last == NULL ; }

/*

* Antécédent : n >=0

v oi d*/ tourner ( LISTE_CIR l , i n t n) { assert -n >=0);

i f (! estVide (l ))

f o r (i n t i =0; i <n; i ++) { s t r u c t noeud *q = l. first ; do

q = q -> suivant ; w h i l e (q != l. first );

} }

. . . . I 5. Écrivez la procédureajouterEnTetequi ajoute un élément au début de la liste circulaire. Cette

procédure possède l’en-tête suivant (que vous devez respecter) : v oi d ajouterEnTete ( LISTE_CIR *li , T e)

v oi d ajouterEnTete ( LISTE_CIR *li , T e) {

s t r u c t noeud *p = malloc (s i z e o f(s t r u c t noeud ));

p -> elt = e;

i f ( estVide (* li )) {

(* li ). first = (* li ). last = p;

p -> suivant = p;

} e l s e {

2

(2)

p -> suivant = (* li ). first ; (* li ). first = p;

(* li ). last -> suivant = (* li ). first ; }

}

. . . . I6. Donnez la déclaration d’une structureDatepour représenter une date formée de 3 entiers : jour,

mois et année.

t y p e d e f s t r u c t { i n t jour , mois , annee } Date ;

. . . . I7. Un fichier de texte contient un suite d’entiers séparés par un ou plusieurs espaces. Trois entiers consécutifs représentent une date. Écrivez la fonctioncreerFichDatesqui lit un fichier de texte contenant la suites d’entiers, et qui crée un fichier de dates valides (de typeDate). Sans l’écrire, vous pourrez utiliser la fonction booléennedateValidequi teste si la date (de typeDate) passée en paramètre correspond à une date valide ou pas. La fonctioncreerFichDatesprend les noms des deux fichiers en paramètre. Son en-tête est le suivant :

v oi d creerFichDates (char *in , char * out );

v oi d creerFichDates (char *in , char * out ) { FILE * fdIn , * fdOut ;

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

exit ( errno );

}i f (( fdOut = fopen (out , "w")) == NULL ) { perror ( out );

exit ( errno );

}

// ok : les 2 fichiers sont ouverts i n t j , m , a;

w h i l e (( fscanf ( fdIn , "%d %d %d", &j , &m , &a ))==3) { assert (n ==3);

Date d = {j , m , a };

i f ( dateValide (d ))

fwrite (&d , s i z e o f( Date ), 1, fdOut );

} //

fclose ( fdIn ); fclose ( fdOut );

}

. . . .

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