• 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!
1
0
0

Texte intégral

(1)

Université de Nice-Sophia Antipolis POLYTECH

ELEC3 2017–2018

Examen de Langage C

Durée : 0h45 Aucun document autorisé Mobiles interdits

I1. É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 la sortie standard le résultat de son évaluation. Par exemple, si on saisit18 - 5, le programme écrit13. Vous utiliserez l’énoncéswitch. Vous penserez aussi à traiter les cas d’erreur.

#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 < stdio .h >

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

i n t main (v oi d) { i n t a , b , res ; char op ;

// lire les 2 entiers et l’opérateur scanf ("%d %c %d", &a , &op , &b );

// évaluer l’opérateur s w i t c h ( op ) {

c a s e ’+ ’ : res = a+b; break;

c a s e ’-’ : res = a -b; break;

c a s e ’* ’ : res = a*b; break;

c a s e ’/ ’ : assert (b !=0);

res = a/b; break;

d e f a u l t : fprintf ( stderr , " opérateur %c inconnu \n", op );

r e t u r n EXIT_FAILURE ; }

// écrire sur la sortie standard le résultat printf ("%d %c %d = %d\n", a , op , b , res );

r e t u r n EXIT_SUCCESS ; }

. . . . On représente les coordonnées d’un pointpdu plan cartésien par deux réels (double)xetytels quep= (x, y). On dispose de la fonction :

double distance (double x1 , double y1 , double x2 , double y2 ) qui renvoie la distance entre 2 points(x1, y1)et(x2, y2). On appellep¯la distance d’un pointp= (x, y)par rapport à l’origine(0,0).

I2. Écrivez en C la fonctioncomparequi compare 2 points (4 réels double)p1= (x1, y1)etp2= (x2, y2)et renvoie :

1

-1sip¯1<p¯2

0sip¯1= ¯p2

1sip¯1>p¯2

/*

* Antécédent : (x1 , y1 ) et (x2 , y2 ) 2 points du plan

* Rôle : renvoie :

* -1 si (x1 , y1 ) < (x2 , y2 )

* 0 si (x1 , y1 ) = (x2 , y2 )

* 1 si (x1 , y1 ) > (x2 , y2 )

*/

i n t compare (double x1 , double y1 , double x2 , double y2 ) { double d1 = distance (0 , 0, x1 , y1 );

double d2 = distance (0 , 0, x2 , y2 );

i f (d1 < d2 ) r e t u r n -1;

i f (d1 > d2 ) r e t u r n 1;

// d1==d2 r e t u r n 0;

}

. . . . I 3. Écrivez en C une fonction qui calcule le pgcd de deux entiers naturels positifs.

On rappelle que le plus grand commun diviseur de deux entiers naturels positifs est l’entier naturel le plus grand qui les divise tous les deux. Il est tel que :

pgcd(a, b) =

(pgcd(a−b, b)sia > b pgcd(a, b−a)sia < b

Vous procéderez par de façon itérative par soustractions successives des va- leursaetb, jusqu’à ce queaetbsoient égaux.Vous donnerez l’invariant et les affirmations nécessaires.

/* Antécédent : a >0 et b >0

* Rôle : renvoie le pgcd de a et b

*/

i n t pgcd (i n t a , i n t b) { w h i l e (a != b)

// pgcd(a,b) = pgcd(a-b,b) et a>b // = pgcd(a,b-a) et a<b

i f (a >b)

// pgcd(a,b) = pgcd(a-b,b) et a>b a -= b;

e l s e

// pgcd(a,b) = pgcd(a,b-a) et a<b b -= a;

// pgcd(a,b)==a et a==b r e t u r n a;

}

. . . .

2

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 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

Lors d’un appel de fonction ou de procédure, la transmission par valeur consiste à affecter, après évaluation, la valeur du pa- ramètre effectif à son paramètre formel

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