Vous êtes sur la page 1sur 5

ENSEM 1ire GI Exercice 1 : /5 pts

Le 22/02/2012 DS LANGAGE C

Ecrire un programme qui demande l'utilisateur de saisir n entiers stocks dans un tableau ainsi qu'un entier V et un entier k compris entre 0 et (n-1). Le programme doit dcaler d'une case vers la droite tous les lments partir de l'indice k (en supprimant le dernier lment du tableau) et doit mettre la valeur V dans le tableau l'indice k. Le programme doit ensuite afficher le tableau final. Allouer dynamiquement la taille du tableau et utiliser uniquement le formalisme pointeur. Exercice 2 : /5 pts Ecrire un source C qui gnre un jeu sur les lettres dun mot. Le jeu permet un joueur, en premier de lire une chaine de caractres, de la coder en une deuxime chane (exemple : mot saisi "ALGORITHME" sera cod "A--------E") ensuite de proposer une lettre. On cherchera alors dans la chane saisie la prsence de la lettre. Si la lettre sy trouve on la placera dans la chane code toutes les positions o elle se situe dans la chane saisie. Si la lettre nest pas prsente on comptera une erreur. Compter le nombre des propositions de lettres faites (on initialise un compteur de propositions faites zro au dbut). Le jeu se terminera sur le fait que toutes les lettres de la chane aient t trouves ou que le nombre derreurs soit gal 8. Si le mot obtenu est bon, afficher le nombre de propositions faites sinon afficher un message. Exercice 3 : /10 pts Ecrire un source C, permettant de faire divers calculs sur les nombres complexes. On reprsente chaque nombre complexe z sous forme algbrique, par deux nombres rels, sa partie relle et sa partie imaginaire, nommes Re et Im. Utiliser la structure de donnes suivante pour manipuler ces nombres: typedef struct { double Re; double Im; }Complexe; Le programme prendra la forme de plusieurs fonctions et dun programme principal main(), chacune des fonctions demandes ralise un traitement. Par exemple, le code de la fonction Complexe ConjugueC(Complexe z) qui retourne le complexe conjugu de z, est donn par : Complexe ConjugueC(Complexe z) { Complexe res ; /*Complexe rsultat*/ res.Re=z.Re ; res.Im=-z.Im ; return res ;} De la mme faon, crire les fonctions suivantes : 1. La fonction Complexe LectureC() qui permet la saisie au clavier des parties relle et imaginaire dun nombre complexe quelle retourne en rsultat. 2. La procdure void EcritureC(Complexe z) qui permet dafficher lcran un nombre complexe pass en paramtre sous la forme : z=Re+iIm. 3. La fonction Complexe SommeC(Complexe z1, Complexe z2) qui calcule la somme de deux complexes passs en paramtres de la fonction, rsultat r=z1+z2. 4. La fonction Complexe ProduitC(Complexe z1, Complexe z2) qui calcule le produit de deux complexes passs en paramtres de la fonction, rsultat r=z1*z2. 5. La fonction Complexe ConjugueC(Complexe z) qui retourne le complexe conjugu de z. 6. La fonction Complexe QuotientC(Complexe z1, Complexe z2) qui ralise la division de deux nombres complexes passs en paramtres de la fonction, rsultat r=z1/z2. 7. La fonction double ModuleC(Complexe z) qui calcule |z|. 8. La fonction double ArgumentC (Complexe z) qui calcule arg(z), rsultat dans ]- , ]. 9. Une fonction int main() qui permet de tester toutes ces fonctions et procdures, par proposer une liste de choix lutilisateur. Quelques Rappels( en criture mathmatique) : Soient z1=x1+iy1 et z2=x2+iy2 deux nombres complexes : - La somme de z1 et z2 est donne par r= (x1 + x2) + i(y1 + y2) - Le produit de z1 et z2 est donn par r= x1*x2 - y1*y2 + i(x1*y2 + x2*y1) - Le quotient r=z1/z2 est donn par r=z1*conjuge(z2)/| z2|2 - Le nombre r=x1-iy1 est appel conjugu de z1 - Le module dun nombre complexe est donn par |z1|=(x12+y12)1/2 - Largument dun nombre complexe est donn par =atan(x1/y1).

Epreuve Propose par Mme OUAZZANI TAIBI F.Z

ENSEM 1ire GI

Le 22/02/2012 DS LANGAGE C

Corrig des 3 exercices


Exercice 1 #include<stdio.h> #include<conio.h> #include<stdlib.h> int main() { int i,j, n, v, k,*t; printf(" donner le nombre des elements desires : "); scanf("%d",&n); t=(int*)malloc(n*sizeof(int)); printf("\n\n---remplissage du tableau --- \n\n"); for(i=0; i<n;i++) { printf("\n t[%d] = ",i); scanf("%d", t+i); } printf("\n\n\nentrer la valeur V a inserer dans le tableau "); scanf("%d",&v); printf("\n a la position desiree k : "); scanf("%d",&k); for(i=0; i<n; i++) if( i!=k) continue; else { for(j=n-1;j>i; j--) *(t+j)=*(t+j-1); *(t+i)= v; break; } for(i=0; i<n; i++) printf("\n\n\tt[%d]= %d",i,*(t+i)); getch(); return 0; } Exercice 2 #include<stdio.h> #include<conio.h> #include<string.h> #define MAX 15 int main() { char mot[MAX], code[MAX], car; int erreur=0, p=0, i,x,a; printf(" Veuillez entrer un mot : "); scanf("%s",mot); strcpy(code, mot); x=strlen(mot); for(i=1; i<x-1; i++) code[i]='-'; printf("\n\n\n <%s> code est : <<%s>>\n",mot, code); printf("\n\n\n\n\n***************JEU**************\n\n\n"); do{ a=-1;

Epreuve Propose par Mme OUAZZANI TAIBI F.Z

ENSEM 1ire GI

Le 22/02/2012 DS LANGAGE C

printf("\n\n-----> donner une lettre : "); fflush(stdin); scanf("%c", &car); for(i=1; i<x-1; i++) if(mot[i]== car) { code[i]=car; a=1; } if(a==-1) erreur++; p++; printf("\n\t\t mot= %s code = %s", mot,code); }while( erreur !=8 && (strcmp(mot,code)!=0)); if(strcmp(mot,code)==0) printf("\n\n nombre de propositions faites est %d pour avoir le mot : %s ",p, mot); getch(); return 0; } Exercice 3 #include<stdio.h> #include<conio.h> #include<math.h> #include<string.h> char c[15]; typedef struct { double re; double im; }complexe; complexe lecture(void) { complexe c1; printf("\n\tcomposantes du %s complexe :\n\n\t\tre = ",c); scanf("%lf",&c1.re); printf("\t\tIm = "); scanf("%lf", &c1.im); return(c1); } void ecritureC(complexe z) { if(z.im >=0) printf("\n\n %s : %.2lf + %.2lfi\n\n",c,z.re,z.im); else printf("\n\n %s : %.2lf %.2lfi\n\n",c,z.re,z.im); } complexe produitC(complexe x1, complexe x2) { complexe res; res.re= x1.re*x2.re - x1.im*x2.im; res.im= x1.re*x2.im + x2.re*x1.im; return res; } complexe sommeC(complexe x1, complexe x2) { complexe res; res.re= x1.re + x2.re; res.im= x1.im + x2.im; return res;

Epreuve Propose par Mme OUAZZANI TAIBI F.Z

ENSEM 1ire GI

Le 22/02/2012 DS LANGAGE C

} complexe conjugueC(complexe x1) { complexe res; res.re= x1.re; res.im= -x1.im; return res; } double moduleC(complexe x) { double r ; r= sqrt(pow(x.re,2)+pow(x.im,2)); return r; } complexe quotientC(complexe x1, complexe x2) { complexe res, u; double b; u=conjugueC(x2); b=pow(moduleC(x2), 2); u.re=(u.re)/b; u.im=(u.im)/b; res=produitC(x1,u); return res; } double argumentC(complexe z) { double k; k= atan(z.re/z.im); return k; } int main() { complexe z1, z2, z, r; double a, arg; int choix, rep, p=1; printf("\n\n\tVeuillez saisir deux complexes :\n"); strcpy(c,"premier"); z1=lecture(); strcpy(c,"deuxieme"); z2=lecture(); do{ getch(); printf("\n\n****** Traitement sur des complexes*********\n\n"); printf(" MENU "); printf("\n\t\t2- ECRITURE"); printf("\n\t\t3- SOMME"); printf("\n\t\t4- PRODUIT"); printf("\n\t\t5- CONJUGUE"); printf("\n\t\t6- QUOTIENT"); printf("\n\t\t7- MODULE"); printf("\n\t\t8- ARGUMENT"); printf("\n\t\t0- FIN\n\n"); printf("\n\n\t\t\tFaites votre choix : "); scanf("%d", &choix); switch(choix) { case 2 : {printf("\n\n voici les deux complexes : "); strcpy(c,"premier_complexe"); ecritureC(z1); strcpy(c,"deuxieme_complexe");

Epreuve Propose par Mme OUAZZANI TAIBI F.Z

ENSEM 1ire GI

Le 22/02/2012 DS LANGAGE C ecritureC(z2); }break; case 3 : { z=sommeC(z1,z2); strcpy(c,"somme_complexe"); ecritureC(z); } break;

case 4 : { z=produitC(z1,z2); strcpy(c,"produit_complexe"); ecritureC(z); }break; case 5 : { z=conjugueC(z1); strcpy(c,"conjugue_complexe1"); ecritureC(z); z=conjugueC(z2); strcpy(c,"conjugue_complexe2"); ecritureC(z); }break; case 6 : { r=quotientC(z1,z2); strcpy(c,"quotient_complexe"); ecritureC(r); }break; case 7 : { strcpy(c,"premier"); a=moduleC(z1); printf("\n le module du %s complexe est : %.2lf\n",c,a); strcpy(c,"deuxieme"); a=moduleC(z2); printf("\n le module du %s complexe est : %.2lf\n",c,a); }break; case 8 : { strcpy(c,"premier"); a=argumentC(z1); printf("\n l argument du %s complexe est : %.2lf\n",c,a); strcpy(c,"deuxieme"); a=argumentC(z2); printf("\n le argument du %s complexe est : %.2lf\n",c,a); }break; case 0 : p= -1; } }while(p==1); getch(); return 0; }

Epreuve Propose par Mme OUAZZANI TAIBI F.Z