TP programmation en langage C
-
Upload
maintworks-gharbi -
Category
Documents
-
view
261 -
download
10
description
Transcript of TP programmation en langage C
Ministère de l’enseignement supérieur et
Institut Supérieur des études technologiques de Rades
Département Génie mécanique
Ayadi walid [email protected]
Atelier programmation en
Licence
C C C
C C C
enseignement supérieur et de la recherche scientifique
Institut Supérieur des études technologiques de Rades
Département Génie mécanique
Version 10/09/13
Atelier programmation en
langage C
icence appliquée en génie mécanique
Première année, semestre1
Unité informatique
Module : Atelier
C C
C C
de la recherche scientifique
Institut Supérieur des études technologiques de Rades
Atelier programmation en
appliquée en génie mécanique
C C
C C
Version 10/09/2013
TP1 Les instructions de base
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
https://docs.google.com/file/d/0B7wNDg3DekVhWkNWLWlMNk5mQU0/ed
it?usp=sharing
http://my.questbase.com/take.aspx?pin=2319
TP1 Les instructions de
base
1.1. Déclaration des variables
Déclaration des variables
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-A
https://docs.google.com/file/d/0B7wNDg3DekVhWkNWLWlMNk5mQU0/ed
http://my.questbase.com/take.aspx?pin=2319-0517-5922
Les instructions de
base
1.1. Déclaration des variables
1.2. Affectation
1.3. Ecriture
1.4. Lecture
2 Déclaration des variables
https://docs.google.com/file/d/0B7wNDg3DekVhWkNWLWlMNk5mQU0/ed
Les instructions de
Version 10/09/2013
TP1 Les instructions de base
1.1. Déclaration des variables
• Syntaxe
Algorithme
VAR <nom de var> :<type>
C
<type de 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
entier
booléen
réelle
caractère
http://www.youtube.com/watch?v=kukKa9Rtnho&feature=relmfu
Déclaration des variables
Déclaration des variables
<type de variable> <nom de variable, nom de variable,…>;
premiere_lettre :caractère
resultat :booléenne
premiere_lettre;
Les types de variables
En C exemple
int -32768 à 32767
int La variable est considérée
elle est égale à 0, Sinon (vrai)
float 2.05452 -1.5
char ‘Z ‘ ‘z’ ‘a’ ‘A’ ‘1’
http://www.youtube.com/watch?v=kukKa9Rtnho&feature=relmfu
3 Déclaration des variables
La variable est considérée (faux)quand
Sinon (vrai)
‘Z ‘ ‘z’ ‘a’ ‘A’ ‘1’
Version 10/09/2013
TP1 Les instructions de base
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
+ : addition
- : soustraction
/ : division
MOD : modulo reste de la
division
* : multiplication
Attention, il ne faut pas confondre l’opérateur logique == (égale à) avec
l’instruction d’affectation =
http://youtu.be/kukKa9Rtnho?t=7m48s
Déclaration des variables
1.2. Expressions et affectation
<nom de variable ou expression>
<nom de variable cible>=<nom de variable ou expression>;
arithmétiques
En C Logique
+ <
- ≤
/ >
% ≥
* =
≠
ET &&
OU ||
NON
Attention, il ne faut pas confondre l’opérateur logique == (égale à) avec
l’instruction d’affectation =
http://youtu.be/kukKa9Rtnho?t=7m48s
4 Déclaration des variables
En C
<
<=
>
>=
==
!=
(touche 1 du clavier)
(touches : AltGr+6)
!
Attention, il ne faut pas confondre l’opérateur logique == (égale à) avec
Version 10/09/2013
TP1 Les instructions de base
1.3. ECRITURE
• Permet d’afficher un message sur écran
Printf("Hello Word!");
• Syntaxe
Algorithme
ECRIRE (<variable ou expression ou "chaine de caractère"
C
printf("<chaine de caractère à afficher>
• 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
C
print f("Bonjour je m’appelle Walid")
2. Modifier le message en ajoutant
précédent
C
print f("Bonjour \ nje m’appelle Walid")
3. Déduire l’action de \n
http://www.youtube.com/watch?v=5PawS09cosE
Permet d’afficher un message sur écran
Printf("Hello Word!");
ou expression ou "chaine de caractère">);
<chaine de caractère à afficher>" , <nom de variable ou expression>);
et voir le résultat
f("Bonjour je m’appelle Walid") ;
Modifier le message en ajoutant \n après le mot Bonjour et comparer le résultat avec le
nje m’appelle Walid") ;
http://www.youtube.com/watch?v=5PawS09cosE
Ecriture - printf 5
et comparer le résultat avec le
Version 10/09/2013
TP1 Les instructions de base
• 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
Changer la valeur 2 par 10 puis par 10.5 et voir le résultat de la compilation
et voir la valeur affichée
printf("La valeur de a=%d",2);
http://www.youtube.com/watch?v=xUSN5X09cC0
Déduire l’ordre d’affectation des %d
printf("La valeur de %d*%d=%d",a,10,a*10);
http://www.youtube.com/watch?v=PQjvo3zEX-A
Ecriture - printf 6
Changer la valeur 2 par 10 puis par 10.5 et voir le résultat de la compilation
Version 10/09/2013
TP1 Les instructions de base
• Syntaxe:
printf("<chaine
• comporte une seule chaine de caractère entre
• Dans la chaine on peut utiliser des
\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
Mémo printf
<chaine de caractère>",<variable ou expression>);
chaine de caractère entre " "
Dans la chaine on peut utiliser des caractères spéciaux qui ne s’affichent pas
une valeur de type entier
remplace une valeur de type réelle
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-A
Mémo - printf 7
);
comme:
Version 10/09/2013 [email protected]
Mémo - scanf TP1 Les instructions de base 8
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
TP1 Les instructions de base
• Manipulation 5
1. Compléter les zones noircies du
C
float a,b; printf("donner la valeur1 scanf("%f",&a); printf("donner la valeur 2 : scanf("%f",&b); printf("la somme de %f+ printf("la soustraction de %f printf("la multiplication de %fx printf("la division de %f/
• Manipulation 6
1. Editer le code ci-dessous
C
char c1 , c2,c3; printf("donner le premier 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
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
LIRE(a)
ECRIRE ("donner la valeur de b")
LIRE(b)
reste�a MOD b ;
quotion �a DIV b;
ECRIRE (a,"=",b,"x", quotion
FIN
Exemple d’écran
Compléter les zones noircies du code ci-dessous et voir le résultat
printf("donner la valeur1 :");
la valeur 2 : ");
somme de %f+ %f=%f\n",a,b,a+b); soustraction de %f -%f=%f\n",a,b,a+b); multiplication de %fx %f=%f\n",a,b,a*b );
printf("la division de %f/ %f=%f\n",a,b,a/b);
et voir le résultat
printf("donner le premier caractère :");
printf("donner le deuxieme caractère :");
printf("donner le troisieme caractère :");
est :%c%c%c",c1,c2,c3);
http://www.youtube.com/watch?v=kukKa9Rtnho&feature=relmfu
Traduire cet algorithme en C
ECRIRE ("donner la valeur de a")
ECRIRE ("donner la valeur de b")
quotion,"+",reste)
Mémo - scanf 9
);
Version 10/09/2013 [email protected]
Mémo - scanf TP1 Les instructions de base 10
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 [email protected]
https://docs.google.com/file/d/0B7wNDg3DekVhSGdiejZPZXoyS28/edit?usp
=sharing
http://my.questbase.com/take.aspx?pin=2300-9270-3377
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
Version 10/09/2013 [email protected]
Condition SI…SINON (if … else ) TP2 Les conditions & les boucles 12
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 [email protected]
Condition SI…SINON (if … else ) TP2 Les conditions & les boucles 13
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 :
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
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
Version 10/09/2013 [email protected]
Mémo les conditions (if … else) TP2 Les conditions & les boucles 14
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 [email protected]
15 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 [email protected]
16 TP2 Les conditions & les boucles La boucle POUR (for )
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 [email protected]
Boucle REPETER … JUSQU'A (do…while ) TP2 Les conditions & les boucles 17
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 [email protected]
Boucle REPETER … JUSQU'A (do…while ) TP2 Les conditions & les boucles 18
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 [email protected]
Boucle TANTQUE … FAIRE (do…while ) TP2 Les conditions & les boucles 19
• 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 [email protected]
Exercices TP2 Les conditions & les boucles 20
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 [email protected]
Exercices TP2 Les conditions & les boucles 21
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 [email protected]
Exercices TP2 Les conditions & les boucles 22
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 constconstconstconst 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 Type Rôle Commentaires
n_secret entier Le nombre secret Entrée clavier
n_joueur entier Le nombre proposé
par le joueur
Entrée clavier
2. Décomposer votre algorithme en grandes parties
Partie 1Partie 1Partie 1Partie 1 :::: Affecter une valeur à n_secret entre 1 et 100
Partie 2Partie 2Partie 2Partie 2 ::::
Répéter de
Demander au joueur un nombre et dit lui sisisisi 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
TP2 Les conditions & les boucles
SI (n_joueur > ECRIRE ("moins")
SINON
SI (n_joueur ECRIRE
SINON
ECRIRE
FSI
FSI
JUSQU'A (n_joueur = n_secret
FIN
4. Traduire votre algo en C et tester
http://youtu.be/_8SGTLvHhLc
TP2 Les conditions & les boucles
> n_secret ) ALORS
("moins")
n_joueur < n_secret ) ALORS
ECRIRE ("Plus")
ECRIRE ("Bravo ! vous avez trouvez le nombre secret")
n_joueur = n_secret )
Traduire votre algo en C et tester
http://youtu.be/_8SGTLvHhLc
Exercices 23
! vous avez trouvez le nombre secret")
Version 10/09/2013 [email protected]
Mémo for, while … do, while TP2 Les conditions & les boucles 24
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 [email protected]
Les tableaux TP3 Les tableaux et les chaines de caractères 25
https://docs.google.com/file/d/0B7wNDg3DekVhWjJYcjhEY3BkY2M/edit?us
p=sharing
http://my.questbase.com/take.aspx?pin=5660-2803-2566
TP3 Les tableaux
et les chaines
3.1. Les tableaux
3.2. Les chaines de caractères
Version 10/09/2013 [email protected]
Les tableaux TP3 Les tableaux et les chaines de caractères 26
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
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];
Tableau de dimension 3
Taille :nxmxL
Tableau de dimension 2
Taille : nxm
Tableau de dimension 1
Taille : n
i
j
0 1 2 … n-1
m-1
1
i
0 1 2 … n-1
i
j
0 1 2 … n-1
L-1
0
m-1
1
Version 10/09/2013 [email protected]
Les chaines TP3 Les tableaux et les chaines de caractères 27
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 [email protected]
Les chaines TP3 Les tableaux et les chaines de caractères 28
• 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 [email protected]
Les chaines TP3 Les tableaux et les chaines de caractères 29
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:
0 1 2 3
M= 0 1 2 3 4 1 5 6 7 8
C
int M[4][2] ={1,2,3,4,5,6};
Version 10/09/2013 [email protected]
Les chaines TP3 Les tableaux et les chaines de caractères 30
• 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 [email protected]
Les chaines TP3 Les tableaux et les chaines de caractères 31
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 [email protected]
Les chaines TP3 Les tableaux et les chaines de caractères 32
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:
0 1 2 3 4 5 6 7 8 9 10 11 12
M= H e l l o 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 [email protected]
Exercices TP3 Les tableaux et les chaines de caractères 33
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) On se fixe un mot de 4 lettres et on l’affiche par des étoiles ‘****’ 2) Le joueur propose une lettre à l'ordinateur 3) 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 [email protected]
Mémo tableaux et chaines TP3 Les tableaux et les chaines de caractères 34
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'.
https://docs.google.com/file/d/0B7wNDg3DekVhSFlrS25xYldWVHM/edit?us
p=sharing
http://my.questbase.com/take.aspx?pin=5660-2803-2566
TP4 Les fonctions et les
procédures
3.1. Les fonctions
3.2. Les procédures
Version 10/09/2013 [email protected]
TP4 Les fonctions et les procédures 36
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. Créer un nouveau projet sur codeBlocks, nommer le « TP4 »
2. Dans la source main.c, recopier le code ci-dessous
3. Compiler le code et tester le pour x=0, x=1, x=2, x=3 et x=4
4. Déduire la fonction f
5. 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 [email protected]
TP4 Les fonctions et les procédures 37
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 [email protected]
TP4 Les fonctions et les procédures 38
• 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