• Aucun résultat trouvé

2 Insertion d’un élément dans un tableau pts. U 25’

N/A
N/A
Protected

Academic year: 2022

Partager "2 Insertion d’un élément dans un tableau pts. U 25’"

Copied!
2
0
0

Texte intégral

(1)

Auteur: Mohamed Messabihi

Matière: Programmation et structures de données Date17 Mars 2015

Durée1h30

Université Abou Bakr Belkaïd - Tlemcen Faculté des Sciences 1èreAnnée MI Semestre 2

Correction du Contrôle Continu

Aucun document n'est autorisé Les solutions doivent être rédigées en C

Tout appareil électronique doit être éteint (téléphone, ordinateur, tablette,...)

1 Affichage pts. U 30’

Qu’affiche les deux programmes suivants :

1 # include< stdio .h>

2 void Toto(int *i, int *j) 3 { int *k;

4 k=i; 5 i=j; 6 j=k; 7 }

8 void main() 9 { int a, b=0;

10 int *p1, *p2=&b;

11 p1 = p2; 12 a = *p2+2;

13 *p1 = 1;

14 printf("a=%d\n",a); //1pt 15 printf("b=%d\n",b); //1pt 16 Toto(&a,&b);

17 printf("a=%d\n",a); //1pt 18 printf("b=%d\n",b); //1pt 19 }

1 # include< string .h>

2 void main() 3 {

4 int T[8]={0 , 1, 2, 3, 4, 5, 6};

5 int i, *p = T;

6 char c='A', s[8] , *q;

7 printf("*p = %d \n", *p); // 0.5 pt 8 for(i=0;i<7;i++)

9 {

10 (*p)= *(p+1) ; 11 s[i]=c+i;

12 printf("T[%d ]=% d\n",i,T[i]); //2pt

13 p++;

14 }

15 q = strchr(s, c+1) ;

16 printf("s = %s \n" , s); // 0.5 pt 17 printf(" Loulou = %d \n", q-s); // 0.5 pt 18 printf("q = %s \n" , q); // 0.5 pt 19 }

Solution

2 Insertion d’un élément dans un tableau pts. U 25’

Écrire une fonctioninsertionqui prend en entrée un tableauTd’entier à une dimension (supposé déjà trié dans l’ordre croissant%), sa tailleL(qui doit être strictement inférieur à 100) et un entierN. Cette fonction permet d’insérer l’élément Ndans le tableauTà la bonne position pour que le tableau reste trié.

Exemple : avecL= 8 aprèsinsertion(T,L,24),Ldevient égale à 9.

T: 3 8 11 17 48 56 61 90 −→ T: 3 8 11 17 24 48 56 61 90

ZRemarque.On ne demande ni la saisie du tableauTni son affichage.

Solution

(2)

1 void insertion(int T[100] , int *L ,int N) // 1.5 pt 2 {

3 int i=0,j;

4 if(*L<100) // 0.5

5 {

6 while (N>=T[i]&&i<*L)i++; //1pt

7 for(j= *L; j>i; j--) // 0.5 pt

8 {

9 T[j]=T[j-1]; //1pt

10 }

11 T[i]=N; //1pt

12 (*L) ++; // 0.5 pt

13 }

14 else printf(" Insertion impossible ( tableau plein )!\n");

15 }

3 Conversion d’une chaîne de caractères en un réel pts. U 35’

On vous demande d’écrire une fonction similaire à la fonction atof()déjà prédéfinie dans la biblio- thèque"stdlib.h". Cette fonction permet de convertir une chaîne de caractères en un réel équivalent. Par exemple atof("12.65") renvoi le réel 12.65. On ne considère ici que les chaînes de caractères qui contiennent un nombre réel sous la forme suivante :"<Partie Entière>.<Partie Décimale>".

Exemple : les chaînes 134.5087 et 24.17963 sont valide, alors que les chaînes 12.498.65, 596e06 et 451,659ne le sont pas.

1. Écrire une fonctionstringToDoublequi prend en entrée une chaine de caractère (on suppose qu’elle respecte le format ci-dessus, pas besoin donc de la vérifier) et qui renvoie un réel équivalent.

ZAttentionBNe pas utiliser la fonctionatof(). Le codeAsciidu caractère ’0’ est 48 s’il en est besoin.

Solution

1 double stringToDouble( char s[20]) // 0.5 pt 2 {

3 double r; // 0.25 pt

4 char E[20] , D[20]; // 0.5 pt

5 int l = strlen(s); // 0.25 pt

6 int i, indicePoint ;

7 indicePoint = (strchr(s,'.'))-s; // 0.25 pt

8 for(i=0; i<l; i++) // 0.5 pt

9 {

10 if(i<indicePoint) E[i]=s[i]; // 0.5 pt 11 else if (i>indicePoint) // 0.5 pt 12 D[i-indicePoint-1] = s[i];

13 }

14 E[indicePoint]='\0 '; // 0.25 pt

15 D[l-indicePoint-1]='\0 '; // 0.25 pt 16 r=atoi(E)+(atoi(D)/pow(10 , strlen(D))); // 0.5 pt

17 return r; // 0.5 pt

18 }

2. Écrire un programme pour tester la fonctionstringToDouble. Solution

1 void main()

2 { char s[20]; // 0.25 pt

3 double r; // 0.25 pt

4 puts(" Donnez un nombre reel ");

5 gets(s); // 0.25 pt

6 r=stringToDouble(s); // 0.25 pt

7 printf("%lf", r); // 0.25 pt 8 }

Références

Documents relatifs

Dans un premier temps, on r´ epondra aux questions ` a l’´ ecrit puis pour v´ erifier que nos algorithmes sont bien ´ ecrits, on les programmera sur machine.. Exercice

Écrire une fonction stringToDouble qui prend en entrée une chaine de caractère (on suppose qu’elle respecte le format ci-dessus, pas besoin donc de la vérifier) et qui renvoie un

– sinon, si l’étudiant a validé un minimum de 30 crédits avec au moins 10 crédits dans un semestre et 20 crédits dans l’autre, alors l’étudiant est déclaré comme admis

Écrire une fonction Simplication qui reçoit deux valeurs en paramètre représentant le numé- rateur et le dénominateur d’une fraction et puis affiche une fraction

Thème : nombres complexes, écriture algébrique, calculs, conjugué, module, argument, équations. Pour obtenir la totalité des points à chaque question, les calculs devront

(2 points) 5) Expliquer en utilisant la description ci-dessus pourquoi soit notre hypothèse est fausse, soit elle n'est pas suffisante, c'est-à-dire que des facteurs

Si le nombre de participants est inférieur ou égale à 50 l’aide sera de 80€ par personne sinon elle ne sera plus que de 50€ par participant.. On souhaite écrire un algorithme

Donner ensuite les solutions sur R de cette même