C
Ministère de l’enseignement supérieur et de la recherche scientifique Institut Supérieur des études technologiques de Rades Département Génie mécanique
C
C
C
C
C
C
C
Atelier programmation en langage C C
C
C
C
C
Licence icence appliquée en génie mécanique Première année, semestre1 Unité informatique Module : Atelier
Ayadi walid ayadi.walid@gmail.com
Version 10/09/13
C
TP1 Les instructions de base
TP1
Déclaration des variables
Les instructions de base 1.1. Déclaration des variables 1.2. Affectation 1.3. Ecriture 1.4. Lecture
http://youtu.be/QF9z9Awtm1o http://youtu.be/oL0eB0FuaEE http://www.youtube.com/watch?v=kukKa9Rtnho&feature=relmfu http://www.youtube.com/watch?v=5PawS09cosE
http://www.youtube.com/watch?v=xUSN5X09cC0 http://www.youtube.com/watch?v=PQjvo3zEX http://www.youtube.com/watch?v=PQjvo3zEX-A
https://docs.google.com/file/d/0B7wNDg3DekVhWkNWLWlMNk5mQU0/ed it?usp=sharing
http://my.questbase.com/take.aspx?pin=2319 http://my.questbase.com/take.aspx?pin=2319-0517-5922
Version 10/09/2013
Ayadi.Walid@Gmail.com
2
TP1 Les instructions de base
Déclaration des variables
1.1. Déclaration des variables •
Syntaxe
Algorithme VAR <nom de var> :<type> C <type de variable> <nom de variable, variable nom de variable,…>; Exemple 1 Algorithme VAR a : entier C
int a ; •
Exemple 2
Algorithme VAR a,b,c :entier montant : réelle premiere_lettre :caractère resultat :booléenne C
int a,b,c; float montant; char premiere_lettre; int resultat; •
Les types de variables
Type
En C
exemple
entier
int
-32768 à 32767
booléen
int
La variable est considérée (faux)quand elle est égale à 0, Sinon (vrai)
réelle
float
2.05452 -1.5
caractère
char
‘Z ‘
‘z’
‘a’ ‘A’
‘1’
http://www.youtube.com/watch?v=kukKa9Rtnho&feature=relmfu Version 10/09/2013
Ayadi.Walid@Gmail.com
3
TP1 Les instructions de base
Déclaration des variables
1.2. Expressions et affectation •
Syntaxe
Algorithme <nom de variable cible> <nom de variable ou expression> C <nom de variable cible>=<nom de variable ou expression>;
•
Exemple 1
Algorithme a 10 a a+1 b (a*10-1)/3 C a=10 ; a=a+1 ; b=(a*10-1)/3 ;
•
Opérateurs arithmétiques
Arithmétiques
En C
Logique
En C
+ : addition
+
<
<
- : soustraction
-
≤
<=
/ : division
/
>
>
MOD : modulo reste de la division
%
≥
>=
* : multiplication
*
=
==
≠
!=
ET
&&
(touche 1 du clavier)
OU
||
(touches : AltGr+6)
NON
!
Attention, il ne faut pas confondre l’opérateur logique == (égale à) avec l’instruction d’affectation =
http://youtu.be/kukKa9Rtnho?t=7m48s Version 10/09/2013
Ayadi.Walid@Gmail.com
4
TP1 Les instructions de base
Ecriture - printf
1.3. ECRITURE •
Permet d’afficher un message sur écran
Printf("Hello Word!");
•
Syntaxe
Algorithme ECRIRE (<variable ou expression ou "chaine de caractère">); caractère" C printf("<chaine <chaine de caractère à afficher>" afficher> , <nom de variable ou expression>);
•
Exemple 1
Algorithme VAR a : entier DEBUT a 10 ECRIRE(a) FIN C int a; a=10; printf("%d ",a);
•
Manipulation1
1. Ecrire le code ci-dessous et voir le résultat C printf("Bonjour f("Bonjour je m’appelle Walid"); Walid") 2. Modifier le message en ajoutant \n après le mot Bonjour et comparer le résultat avec le précédent C printf("Bonjour\nje nje m’appelle Walid"); Walid") 3. Déduire l’action de \n http://www.youtube.com/watch?v=5PawS09cosE
Version 10/09/2013
Ayadi.Walid@Gmail.com
5
TP1 Les instructions de base
•
Ecriture - printf
Manipulation2
1. Ecrire le code ci-dessous 2. Compiler le programme 3. Changer la valeur 2 par 10 puis par 10.5 et voir le résultat de la compilation 4. Déduire l’action de %d 5. Changer %d par %f et voir la valeur affichée C printf("La valeur de a=%d",2);
http://www.youtube.com/watch?v=xUSN5X09cC0
•
Manipulation3
1. Ecrire le code ci-dessous 2. Compiler le programme 3. Déduire l’ordre d’affectation des %d C int a; a=5; printf("La valeur de %d*%d=%d",a,10,a*10);
http://www.youtube.com/watch?v=PQjvo3zEX http://www.youtube.com/watch?v=PQjvo3zEX-A
Version 10/09/2013
Ayadi.Walid@Gmail.com
6
TP1 Les instructions de base
Mémo - printf
Mémo printf • Syntaxe: printf("<chaine <chaine de caractère>",<variable ou expression>); ); • comporte une seule chaine de caractère entre " " • Dans la chaine on peut utiliser des caractères spéciaux qui ne s’affichent pas comme: \n : fait un retour à la ligne %d : remplace une valeur de type entier %f : remplace une valeur de type réelle %c : remplace un caractère Et il y en a d’autre…
http://www.youtube.com/watch?v=kukKa9Rtnho&feature=relmfu http://www.youtube.com/watch?v=5PawS09cosE
http://www.youtube.com/watch?v=xUSN5X09cC0 http://www.youtube.com/watch?v=PQjvo3zEX http://www.youtube.com/watch?v=PQjvo3zEX-A
Version 10/09/2013
Ayadi.Walid@Gmail.com
7
Mémo - scanf
TP1 Les instructions de base
1.4. LECTURE
scanf Permet de lire une entrée saisie au clavier par l’utilisateur
•
Syntaxe
Algorithme LIRE (<nom de variable >); C scanf("<type de variable à lire>" ,&<nom de variable> );
•
Exemple 1
Algorithme VAR a : entier DEBUT ECRIRE ("donner la valeur de a") LIRE(a) FIN C { int a ; printf("donner la valeur de a") ; scanf("%d",&a); }
•
Manipulation 4
1. Ecrire le code ci-dessous et voir le résultat C int a ; printf("donner un entier a"); scanf("%d",&a); printf("Vous avez entré la valeur %d",a); 2. Compiler le programme et entrer la valeur 10.5, quel est la valeur affiché ? 3. Remplacer %d par %f dans scanf et printf, compiler et entrer la valeur 10.5 (n’oublier pas de remplacer int a par float a. Déduire
Version 10/09/2013
Ayadi.Walid@Gmail.com
8
Mémo - scanf
TP1 Les instructions de base
•
Manipulation 5
1. Compléter les zones noircies du code ci-dessous et voir le résultat C float a,b; printf("donner la valeur1 :"); scanf("%f",&a); printf("donner la valeur 2 :"); : scanf("%f",&b); printf("la somme de %f+%f=%f\n",a,b,a+b); %f+ printf("la soustraction de %f-%f=%f\n",a,b,a+b); %f printf("la multiplication de %fx%f=%f\n",a,b,a*b); %fx ); printf("la division de %f/%f=%f\n",a,b,a/b); %f/
•
Manipulation 6
1. Editer le code ci-dessous et voir le résultat C char c1,c2,c3; printf("donner le premier caractère :"); scanf("%c",&c1); printf("donner le deuxieme caractère :"); scanf("%c",&c2); printf("donner le troisieme caractère :"); scanf("%c",&c3); printf("Le mot est :%c%c%c",c1,c2,c3); http://www.youtube.com/watch?v=kukKa9Rtnho&feature=relmfu
•
Exercice 1
1. Traduire cet algorithme en C Algorithme Algorithme VAR a, b,reste,quotion: entier DEBUT ECRIRE ("donner la valeur de a") LIRE(a) ECRIRE ("donner la valeur de b") LIRE(b) reste a MOD b ; quotion a DIV b; ECRIRE (a,"=",b,"x", quotion,"+",reste) quotion FIN Exemple d’écran
Version 10/09/2013
Ayadi.Walid@Gmail.com
9
Mémo - scanf
TP1 Les instructions de base
Mémo scanf • Syntaxe: scanf("<type de variable à lire>" ,&<nom de variable>); • Comporte une seule chaine de caractère entre " " • Dans la chaine on remplace le type de valeur à lire par : %d : pour lire une valeur de type entier %f : pour lire une valeur de type réelle %c : pour lire un caractère Et il y a d’autre…
Version 10/09/2013
Ayadi.Walid@Gmail.com
10
TP2
Les conditions & les boucles 2.1. Les conditions 2.2. Les boucles : 2.2.1. Boucle POUR 2.2.2. Boucle REPETER… JUSQU’A 2.2.3. Boucle TANTQUE …FAIRE
https://docs.google.com/file/d/0B7wNDg3DekVhSGdiejZPZXoyS28/edit?usp =sharing
http://my.questbase.com/take.aspx?pin=2300-9270-3377
Version 10/09/2013
Ayadi.Walid@Gmail.com
TP2 Les conditions & les boucles
Condition SI…SINON (if … else )
2.1. La condition SI…SINON •
Syntaxe
Algorithme SI (<condition logique de teste >) ALORS Début <traitement si vrai> fin SINON Début <traitement si faux> fin FIN SI C if (<condition logique de teste >) { <traitement si vrai>; } else { <traitement si faux> ; }
•
Exemple 1 :
Algorithme SI ((a<=12) OU (a=b)) ALORS Début a a+1 fin SINON Début a a-1 fin FIN SI C
if((a<=12)||(a==b)) { a=a+1; } else { a=a-1; }
Version 10/09/2013
Ayadi.walid@gmail.com
12
TP2 Les conditions & les boucles
Condition SI…SINON (if … else )
Attention, il ne faut pas mettre un point virgule ( ;) après les parenthèses de la condition logique, ceci termine l’instruction conditionnelle
•
Manipulation 7
4. Identifier la <condition logique>, <traitement si vrai>, <traitement si faux> de l’algorithme suivant : Algorithme résultat VAR moy : réel DEBUT LIRE (moy) SI (moy>=10) ALORS Début ECRIRE ("Admis") fin SINON Début ECRIRE ("refuse") fin FIN SI FIN 5. Traduire cet algorithme en langage c 6. Modifier votre programme afin de traiter le cas de rachat quand la moyenne est comprise entre 9.75 et 10
Version 10/09/2013
Ayadi.walid@gmail.com
13
TP2 Les conditions & les boucles
Mémo les conditions (if … else)
Mémo if…else • Syntaxe
if
if (<condition logique de teste >) { <traitement si le test est vrai>; }
Attention, il n’ya pas un point virgule devant les parenthèses de la condition de teste
• Syntaxe
if…else
if (<condition logique de teste >) { <traitement si le test est vrai>; } else { <traitement si le teste est faux> ; }
Version 10/09/2013
Ayadi.walid@gmail.com
14
TP2 Les conditions & les boucles
La boucle POUR (for )
2.2. Les boucles 2.2.1. La boucle POUR Syntaxe Algorithme POUR (<initialisation du compteur> ; <condition de répétition> ;<incrémentation du compteur>) FAIRE <traitement > Fin POUR C for {
(<initialisation du compteur>;<condition de répétition>
;<incrémentation
du compteur>)
<traitement >; }
Attention, il n’ya pas un point virgule devant les parenthèses de la boucle for
Exemple Algorithme VAR i : entier POUR i de 0 à 10 FAIRE ECRIRE (i) Fin POUR C int i; for (i=0;i<=10;i++) { printf("%d",i); }
Attention aux boucles infinies Lorsque vous créez une boucle, assurez-vous toujours qu'elle peut s'arrêter à un moment ! Si la condition est toujours vraie, votre programme ne s'arrêtera jamais !
Version 10/09/2013
Ayadi.walid@gmail.com
15
La boucle POUR (for )
TP2 Les conditions & les boucles
Si votre boucle ne s’arrête pas après la compilation, appuyer sur la touche clavier « pause » ou cliquer par la sourie sur la console pour arrêter le bouclage et fermer la console (X) pour terminer l’exécution du programme
•
Manipulation 8
1. Compléter le programme ci-dessous qui traduit l’algorithme suivant : Algorithme VAR i : entier POUR i de 0 à 10 FAIRE SI (i MOD 2=0) ALORS ECRIRE (i) FIN SI Fin POUR C int i; printf("Les nombres paires <10 sont:\n"); for (i=0;i<=10;i++) { if (i%2==0) { printf("%d\n",i); } }
2. Voir ce qui se passe si on met cette condition de répétition : i>=0 3. Commenter ! 4. Modifier votre programme pour qu’il affiche les nombres entiers impairs inférieurs à 20
2.2.2. La boucle REPETER … JUSQU’A Syntaxe Algorithme REPETER <traitement > JUSQU'A (<condition d’arrêt> ) C do { <traitement >; }while(<condition de répétition>);
Version 10/09/2013
Ayadi.walid@gmail.com
16
TP2 Les conditions & les boucles
Boucle REPETER … JUSQU'A (do…while)
Exemple : contrôle de saisi Algorithme contrôle de saisi VAR a : entier REPETER ECRIRE (“donner un entier entre 10 et 20”) LIRE(a) JUSQU'A ((a>=10) ET (a<=20)) C int a; do { printf("donner un entier entre 10 et 20"); scanf("%d",&a); }while((a<10)||(a>20));
La condition d’arrêt de la boucle répéter … jusqu'à dans l’algorithme est transformée en son complément logique dans la boucle do … while en langage C
• Manipulation 9 1. Compléter le programme ci-dessous qui traduit l’algorithme suivant : Algorithme VAR i : entier i 0 REPETER ECRIRE ( i ) i I+1 JUSQU'A (i >10) C int i; i=0; do { printf("%d",i); i++; }while(i<=10);
Version 10/09/2013
Ayadi.walid@gmail.com
17
TP2 Les conditions & les boucles
Boucle REPETER … JUSQU'A (do…while)
2. Placer l’incrémentation du compteur avant le printf. Conclure 3. Que faut –il changer dans ce cas pour pouvoir compter à partir de 0 ? 4. Comparer cette boucle avec la boucle POUR
2.2.3. La boucle TANTQUE…FAIRE •
Syntaxe
Algorithme TANTQUE (<condition de répétition>) FAIRE <traitement > FIN TANTQUE C while(<condition de répétition>) { <traitement >; }
•
Exemple : contrôle de saisi 2
Algorithme contrôle de saisi 2 VAR a : entier ECRIRE (“donner un entier entre 10 et 20”) LIRE(a) TANTQUE ( (a<10) OU (a>20) ) ECRIRE (“donner un entier entre 10 et 20”) LIRE(a) FIN TQ C int a; printf("donner un entier entre 10 et 20"); scanf("%d",&a); while((a<10)||(a>20)) { printf("donner un entier entre 10 et 20"); scanf("%d",&a); }
Attention, il n’ya pas un point virgule devant la condition de la boucle while
Version 10/09/2013
Ayadi.walid@gmail.com
18
TP2 Les conditions & les boucles
Boucle TANTQUE … FAIRE (do…while)
• Manipulation 10 1. Compléter le programme ci-dessous qui traduit l’algorithme suivant : Algorithme VAR i : entier i 0 TANTQUE (I < 10) ECRIRE ( i ) i i+1 FIN TQ C int i; i=0; while(i<=10) { printf("%d",i); i++; } 2. Mettez l’incrémentation avant le printf. Conclure 3. Que faut –il changer dans ce cas pour pouvoir compter à partir de 0 ? 4. Comparer cette boucle avec la boucle POUR et la boucle REPETER…JUSQU'A
Version 10/09/2013
Ayadi.walid@gmail.com
19
TP2 Les conditions & les boucles
Exercices
EXERCICE 2 : factoriel 1. Traduire l’algorithme suivant en langage C 2. Compiler et voir le résultat pour n=5, puis n=4 puis n=1 3. Essayer le cas de n=0 qui doit donner 1 (0 !=1) 4. Ajouter une condition au programme pour traiter le cas de n=0 5. Ajouter un contrôle de saisi pour que n soit positive et inférieur ou égale à 100 6. Remplacer la boucle POUR par la boucle REPETER…JUSQU'A puis par la boucle TANTQUE…FAIRE et retraduire le programme 7. Essayer le cas de n=20 ; chercher une réponse Algorithme factoriel VAR i,n,F : entier DEBUT ECRIRE ("donner un entier :") LIRE (n) F 1 POUR i de 1 à n FAIRE F F*i FIN POUR ECRIRE (F) FIN C ………………………………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………………………………. ………………………………………………………………………………………………………………………………………………………………………………. ……………………………………………………………………………………………………………………………………………………………………………….
EXERCICE 3 : jeu devinette a) Le principe du jeu Le principe est le suivant. 8. L'ordinateur tire au sort un nombre entre 1 et 100. 9. Il vous demande de deviner le nombre. Vous entrez donc un nombre entre 1 et 100. 10. L'ordinateur compare le nombre que vous avez entré avec le nombre « secret » qu'il a tiré au sort. Il vous dit si le nombre secret est supérieur ou inférieur à celui que vous avez entré. 11. Puis l'ordinateur vous redemande le nombre. 12. … Et il vous indique si le nombre secret est supérieur ou inférieur. 13. Et ainsi de suite, jusqu'à ce que vous trouviez le nombre secret.
Version 10/09/2013
Ayadi.walid@gmail.com
20
TP2 Les conditions & les boucles
Exercices
Le but du jeu, bien sûr, est de trouver le nombre secret en un minimum de coups. Voici une « capture d'écran » d'une partie, c'est ce que vous devez arriver à faire :…….
Quel est le nombre ? 50 C'est plus ! Quel est le nombre ? 75 C'est plus ! Quel est le nombre ? 85 C'est moins ! Quel est le nombre ? 80 C'est moins ! Quel est le nombre ? 78 C'est plus ! Quel est le nombre ? 79 Bravo, vous avez trouve le nombre mystere !!!
b) Tirer un nombre au sort On essaie de générer un nombre aléatoire automatiquement. L'avantage est qu'on peut jouer tout seul du coup. Pour générer un nombre aléatoire, on utilise la fonction rand(). Cette fonction génère un nombre au hasard. Mais nous, on veut que ce nombre soit compris entre MIN=1 et MAX=100 Pour ce faire, on va utiliser la fonction srand depuis la bibliothèque time.h
C srand(time(NULL)); n_secret = (rand() % (MAX - MIN + 1)) + MIN;
La première ligne (avec srand) permet d'initialiser le générateur de nombres aléatoires.
L'instruction srand ne doit être exécutée qu'une seule fois (au début du programme). Il faut obligatoirement faire un srand une fois, et seulement une fois. Vous pouvez ensuite faire autant de rand() que vous voulez pour générer des nombres aléatoires, mais il ne faut PAS que l'ordinateur lise l'instruction srand deux fois par programme, ne l'oubliez pas.
Version 10/09/2013
Ayadi.walid@gmail.com
21
TP2 Les conditions & les boucles
Exercices
MAX et MIN sont des constantes, le premier est le nombre maximal (100) et le second le nombre minimal (1). Je vous recommande de définir ces constantes au début du programme, comme ceci :
C const int MAX = 100, MIN = 1;
c) Les bibliothèques à inclure Pour que votre programme fonctionne correctement, vous aurez besoin d'inclure trois bibliothèques : stdlib, stdio et time (la dernière sert pour les nombres aléatoires). Votre programme devra donc commencer par :
C #include <stdio.h> #include <stdlib.h> #include <time.h>
d) Avant de programmer le jeu : 1. Analyser les variables entrées et sorties
Nom de Variable n_secret n_joueur
Type entier entier
Rôle Le nombre secret Le nombre proposé par le joueur
Commentaires Entrée clavier Entrée clavier
2. Décomposer votre algorithme en grandes parties Partie 1 : Affecter
une valeur à
n_secret entre 1 et 100
Partie 2 : Répéter de Demander au joueur un nombre et dit lui si c’est plus ou moins par rapport la valeur secrète Jusqu’à ce qu’il tombe sur la bonne valeur
3. Ecrire votre idée en algorithme (je vous propose cette solution que vous devrez le compléter) Algorithme jeu devinette VAR n_secret, n_joueur : entier DEBUT n_secret RANDOM(1..100) REPETER ECRIRE ("Quel est le nombre ?:") LIRE (n_joueur ) Version 10/09/2013
Ayadi.walid@gmail.com
22
TP2 Les conditions & les boucles
Exercices
SI (n_joueur > n_secret ) ALORS ECRIRE ("moins") SINON SI (n_joueur n_joueur < n_secret ) ALORS ECRIRE ("Plus") SINON ECRIRE ("Bravo ! vous avez trouvez le nombre secret") FSI FSI JUSQU'A (n_joueur n_joueur = n_secret ) FIN
4. Traduire votre algo en C et tester
http://youtu.be/_8SGTLvHhLc
Version 10/09/2013
Ayadi.walid@gmail.com
23
TP2 Les conditions & les boucles
Mémo for, while … do, while
Mémo for, while, do..while • Syntaxe for for {
(<initialisation du compteur>;<condition de répétition>
;<incrémentation
du compteur>)
<traitement >; }
Attention, il n’ya pas un point virgule devant les parenthèses de la boucle for
• Syntaxe do … while do { <traitement >; }while(<condition de répétition>);
Attention, la boucle do … while se termine par un point virgule
• Syntaxe while while(<condition de répétition>) { <traitement >; }
Attention, il n’ya pas un point virgule devant la condition de la boucle while
Version 10/09/2013
Ayadi.walid@gmail.com
24
TP3 Les tableaux et les chaines de caractères
TP3
Les tableaux
Les tableaux et les chaines 3.1. Les tableaux 3.2. Les chaines de caractères
https://docs.google.com/file/d/0B7wNDg3DekVhWjJYcjhEY3BkY2M/edit?us p=sharing
http://my.questbase.com/take.aspx?pin=5660-2803-2566
Version 10/09/2013
Ayadi.walid@gmail.com
25
TP3 Les tableaux et les chaines de caractères
Les tableaux
3.1. Les tableaux Ils permettent de stocker des variables de même type de façon contiguë. Chaque variable est adressé par des indices. Ils sont caractérisés par: • Une identité : nom du tableau • Une dimension (1D, 2D, 3D, …) • La taille : longueur de chaque dimension
m-1 m-1 j 1
1
L-1
j i
i 0
0
1
2
…
0
1
2
…
n-1
n-1
i 0
1
2
…
n-1
Tableau de dimension 1
Tableau de dimension 2
Tableau de dimension 3
Taille : n
Taille : nxm
Taille :nxmxL
Déclaration des tableaux à une dimension
•
Syntaxe
Algorithme VAR <nom du tableau> : tableau (<longueur>) <type> C
<type> <nom du tableau>[<longueur>]; Exemple 1 : Algorithme VAR T : tableau (5) entier C
int T[5];
Version 10/09/2013
Ayadi.walid@gmail.com
26
TP3 Les tableaux et les chaines de caractères
Les chaines
Attention, le premier élément du tableau est T[0], et le dernier élément est T[4]. Les longueurs sont des entiers
Déclaration des tableaux à 2 dimensions
•
Syntaxe
Algorithme VAR <nom du tableau> : tableau (<longueur ligne>, <longueur colonne>) <type> C <type> <nom du tableau>[<longueur ligne>][<longueur colonne>];
•
Exemple 2 :
Algorithme VAR T : tableau (5,3) entier C
int T[5][3]; Attention, le premier élément du tableau est T[0] [0], et le dernier élément est T[4] [2]. Les longueurs sont des entiers
•
Manipulation 11
7. Donner les caractéristiques des tableaux X, Y et Z depuis le code ci-dessous :
Nom tableau
Dimension
Taille
Nombre de case
Type
X Y Z U
C int X[10][10]; float Y[255]; int Z[10][8][6]; char U[12];
Version 10/09/2013
Ayadi.walid@gmail.com
27
TP3 Les tableaux et les chaines de caractères
•
Les chaines
Manipulation 12
1. Traduire en C l’algorithme suivant en apportant des améliorations d’affichage: Algorithme VAR T : tableau (3) entier i:entier DEBUT POUR i=0 à 2 FAIRE LIRE(T[i]) FIN POUR POUR
i=0 à 2 FAIRE ECRIRE(T[i]) FIN POUR
FIN
•
Manipulation 13
Dans cette manipulation on souhaite remplir un tableau avec n entier saisi au clavier avec n donnée par l’utilisateur, puis on afficher la somme de ses valeurs Exemple d’écran Donner la longueur du tableau :3 Donner T[0] :2 Donner T[1] :0 Donner T[2] :1 La somme est 3
1. Compléter l’algorithme ci-dessous et traduire le en C en apportant des améliorations d’affichage: Algorithme VAR T : tableau (255) entier n,i,s :entier DEBUT ECRIRE ("Donner le nombre de case") LIRE(n) POUR i=0 à n-1 FAIRE LIRE(T[i]) FIN POUR s=0 ; POUR i=0 à n-1 FAIRE s=s+T[i] FIN POUR ECRIRE(s) FIN
Version 10/09/2013
Ayadi.walid@gmail.com
28
TP3 Les tableaux et les chaines de caractères
Les chaines
Attention, il ne faut jamais déclarer un tableau avec une longueur inconnu comme int T[n] . La solution peut être par le choix d’une longueur assez grande et suffisante à l’exécution du programme
•
Manipulation 14 : initialisation des tableaux
Dans cette manipulation on souhaite initialiser un tableau T de taille 4 par les valeurs suivantes : T=
12
0
8
-1
0
1
2
3
1. 1ère solution : utiliser ce code pour initialiser le tableau T puis afficher le C int T[4]; T[0]=12; T[1]=0; T[2]=8; T[3]=-1;
1) 2ème solution : utiliser ce code pour initialiser le tableau T puis afficher le C int T[4]={12,0,8,-1};
2) Compléter le code ci-dessous pour initialiser la matrice M suivante et afficher ses valeurs: M=
0 1
0
1
2
3
1 5
2 6
3 7
4 8
C int M[4][2]={1,2,3,4,5,6};
Version 10/09/2013
Ayadi.walid@gmail.com
29
TP3 Les tableaux et les chaines de caractères
•
Les chaines
Manipulation 16 : traduire cet algorithme en C
Algorithme VAR T : tableau (3) (3) : entier i, trace : entier DEBUT POUR i de 0 à 2 FAIRE POUR j de 0 à 2 FAIRE LIRE( T[i][j] ) FIN POUR FIN POUR trace 0 POUR i de 0 à 2 FAIRE Trace trace + T[i] T[i] FIN POUR ECRIRE (trace) FIN
Version 10/09/2013
Ayadi.walid@gmail.com
30
TP3 Les tableaux et les chaines de caractères
Les chaines
3.1. Les chaines de caractères Elles sont vues par le C comme un tableau de caractères se terminant par un code de fin appelé le caractère nul '\0'.
•
Syntaxe
Algorithme VAR <nom de la chaine> : chaine (<longueur>) C
<type> <nom de la chaine>[<nbre de caractère+1>]; Exemple 2 : Algorithme VAR message : chaine (10) C
char T[10];
On a défini un tableau de caractères de 10 éléments. Le message ne pourra contenir au plus que neuf caractères car le dixième est réservé pour le caractère de fin '\0'.
•
Manipulation 15 : initialisation des chaines de caractères
Dans cette manipulation on souhaite initialiser une chaine de taille 10 par un message de 7 caractères par les valeurs suivantes : T=
B
o
n
j
o
u
r
\n
0
1
2
3
4
5
6
7
8
9
2. 1ère solution : utiliser ce code pour initialiser la chaine message puis afficher la C char message[10]; message[0]='B'; message[1]='o'; message[2]='n'; message[3]='j'; message[4]='o'; message[5]='u'; message[6]='r'; message[7]='\0';
Version 10/09/2013
Ayadi.walid@gmail.com
31
TP3 Les tableaux et les chaines de caractères
Les chaines
3) 2ème solution : utiliser ce code pour initialiser la chaine message puis afficher la C char message[10]= "Bonjour"; Attention, Il n’est pas possible d'initialiser une chaîne de la façon suivante :
char message = "Bonjour";
4) Compléter le code ci-dessous pour initialiser la chaine M par le message "Hello World !" ensuite l’afficher: M=
0
1
2
3
4
H
e
l
l
o
5
6
7
8
9
10
11
12
W
o
r
l
d
!
\0
C char M[255] ="Hello World!"; int i ; for (i=0;i<=11;i++) { Printf(“%c”,M[i]); }
5) Essayer cette méthode pour afficher le message M sans utiliser une boucle, déduire le rôle de %s C char M[255] ="Hello World!"; Printf(“%s”,M);
Il existe une multitude de fonctions de manipulations des chaînes, voir la bibliothèque string.h
Version 10/09/2013
Ayadi.walid@gmail.com
32
TP3 Les tableaux et les chaines de caractères
Exercices
EXERCICE 4 : Jeu mot caché version 0 e) Le principe du jeu Le but du jeu est de dévoiler le mot caché en un minimum de coups
f) Déroulement du jeu 1) 2) 3)
On se fixe un mot de 4 lettres et on l’affiche par des étoiles ‘****’ Le joueur propose une lettre à l'ordinateur Si cette lettre existe l’ordinateur affichera cette lettre dans leurs positions dans le mot caché, les autres lettres restent cachées par des étoiles ‘*’, Sinon rien ne change et on passe au deuxième coup 4) Cette boucle continue jusqu’à ce que le mot se dévoile en totalité Voici un exemple de partie : Supposons que le mot caché est. ISET
Essayer de devoile le mot : **** Essai 1, donner une lettre : A Le mot est : **** Essai 2, donner une lettre : S Le mot est : *S** Essai 3, donner une lettre : B Le mot est : *S** Essai 4, donner une lettre : E Le mot est : *SE* Essai 5, donner une lettre : o Le mot est : *SE* Essai 6, donner une lettre : i Le mot est : ISE* Essai 7, donner une lettre : T Le mot est : ISET Bravo !
Version 10/09/2013
Ayadi.walid@gmail.com
33
TP3 Les tableaux et les chaines de caractères
Mémo tableaux et chaines
Mémo tableaux et chaines • Syntaxe déclaration tableau ou chaine de dimension 1
<type> <nom> [<longueur>]; • Syntaxe déclaration tableau ou chaine de dimension 2
<type> <nom> [<longueur1>][<longueur2>];
• Affichage d’une chaine en utilisant %s printf(“%s”,<nom de chaine>);
Une chaine de longueur n ne peut contenir que n-1 caractères au plus car la fin du message est terminé par le caractère de fin '\0'.
Version 10/09/2013
Ayadi.walid@gmail.com
34
TP4
Les fonctions et les procédures 3.1. Les fonctions 3.2. Les procédures
https://docs.google.com/file/d/0B7wNDg3DekVhSFlrS25xYldWVHM/edit?us p=sharing http://my.questbase.com/take.aspx?pin=5660-2803-2566
36
TP4 Les fonctions et les procédures
3.1. Les fonctions Syntaxe Algorithme FONCTION <nom de fonction> (<paramètre 1> :<type>, …, <paramètre n> :<type>) :<type de sortie> DEBUT <traitement> Sortie <résultat de la fonction> FIN C
<type> <nom de la fonction> (<type> <paramètre 1>, …, <type> <paramètre n>) { <traitement>; return <résultat de la fonction> ;
}
Exemple 1 : Algorithme FONCTION carre (x : entier) : entier DEBUT Sortie x*x FIN C
int carre (int x) { return
x*x ;
}
Manipulation 16 : 1. 2. 3. 4. 5.
Créer un nouveau projet sur codeBlocks, nommer le « TP4 » Dans la source main.c, recopier le code ci-dessous Compiler le code et tester le pour x=0, x=1, x=2, x=3 et x=4 Déduire la fonction f Compléter le code pour traiter le cas des valeurs réelles et les valeurs négatives
C factorielle #include <stdio.h> #include <stdlib.h> int main() {
Version 10/09/2013
Ayadi.walid@gmail.com
37
TP4 Les fonctions et les procédures
int x=0; float f(int n) { if (n==0) { return 1; } else { return n*f(n-1); } } printf("x="); scanf("%d",&x); printf("%.f",f(x)); }
•
Manipulation 17
2. Ajouter les instructions nécessaires à l’algorithme ci-dessous pour lire deux vecteurs A et B de 3 coordonnées puis affiche leur somme A+B (il faut utiliser les procédures Remplir et Afficher) 3. Traduire en C l’algorithme en apportant des améliorations d’affichage: Algorithme VAR T : tableau [3] entier i:entier DEBUT PROCEDURE Remplir (VAR T : tableau [3] entier, i : entier) DEBUT POUR i=0 à 2 FAIRE LIRE(T[i]) FIN POUR FIN Remplir PROCEDURE Afficher (VAR T : tableau [3] entier, i : entier) DEBUT POUR i=0 à 2 FAIRE ECRIRE(T[i]) FIN POUR FIN Remplir
FIN
• Version 10/09/2013
Ayadi.walid@gmail.com
38
TP4 Les fonctions et les procédures
•
Manipulation 18
Chercher un algorithme de tri et transformer le en procédure
EXERCICE 5 : Jeu mot caché version 1 Reprendre votre code du jeu mot caché et modifier le en se servant des fonctions et des procédures
Version 10/09/2013
Ayadi.walid@gmail.com