Programmation - TP3


19/09/2017

Organisation


  • mardi 05/09 : TP1
  • mardi 12/09 : TP2
  • mardi 19/09 : TP3
  • mardi 26/09 : TP4 avec M. Colin
  • mardi 03/10 : TP5
  • mardi 10/10 : Examen 2x1h + 2h TP6
  • mardi 17/10 : TP6
  • mardi 24/10 : Examen 2x2h

Programme du jour


  • Rappel rapide if
  • Rappel boucles "pour/for"
  • TP jusqu'à 16h
  • Suite du cours
  • TP

Corrections TP précédent

TP2-1 - algo


Début
   Réel euros, francs

   obtenir euros
   francs <- euros x 6,55956
   afficher francs
Fin
		

TP2-1 - C

Rappel rapide : les tests

Forme simple


instruction
si (condition)
	instruction
	...
	instruction
finsi	
instruction
		

Rappel rapide : les tests

Forme avec alternative


instruction
si (condition)
	instruction
	...
	instruction
sinon
	instruction	
	...
	instruction
finsi
instruction
		

Rappel rapide : les tests

Exemple


Debut
   Entier age, difference
   obtenir age
   si (age = 27)
      afficher "27 ans ? hou la... fais attention !" 
   sinon
      si (age < 27)
         difference <- age - 27
         afficher "Encore" difference "ans de tranquilité"
      sinon
         afficher "Le plus dur est passé"
      finsi
   finsi
   afficher "Fin du programme"
Fin
		

Rappel rapide : les tests

Les conditions

  • Expression qui ne peut être que vrai ou faux
  • Construite avec des opérateurs relationels : > < ≤ ≥ = ≠
  • Et en combinant des conditions : ou / et
  • Utiliser des parentheses pour gérer les priorités
  • Attention : Ne pas oublier les parentheses englobante

Rappel rapide : les tests

Quand utiliser un test

  • Quand il y a un "si" :
  • "déterminer si l'utilisateur est du signe astrologique"
  • Quand il y un choix :
  • "Transformer ensuite le programme pour que l'utilisateur choisisse sa devise"
  • Quand les comportements doivent être différents :
  • Valeur absolue "a-b", déterminer la saison de naissance de l'utilisateur

Rappel rapide : les tests en C


instruction;
if (condition) {
	instruction;	
	...
	instruction;			
}
instruction;
		

Les conditions

Opérateurs relationels :

  • >   <   <=   >=
  • ==   !=

Attention : ne pas confondre l'affectation et l'égalité

Et :     &&

Ou :     ||

Exemples


int main(void) {
   int age, difference;
   printf("Entrez votre age: ");
   scanf("%d", &age);
   if (age == 27) {
      printf("27 ans ? hou la... fais attention !\n"); 
   } else {
      if (age < 27) {
         difference = 27 - age;
         printf("Encore %d ans de tranquilite\n", difference);
      } else {
         printf("Le plus dur est passe\n");
      }
   }
   printf("Fin du programme\n");
   system("pause"); return 0;
}
		

Rappel : les boucles pour


pour compteur de expr_debut à expr_fin
	instruction
	...
	instruction
finpour		
		

Exemple de boucle pour


Début
	Entier i, debut, fin

	obtenir debut
	obtenir fin
	pour i de debut à fin
		afficher i
	finpour
Fin
		

Si début=3 et fin=11, affichera 3 4 5 6 7 8 9 10 11

Exemple de boucle pour


Début
	Entier i, valeur, carre

	pour i de 1 à 12
		obtenir valeur
		carre <- valeur x valeur
		afficher "valeur au carre :" carre
	finpour
Fin
		

Demandera 12 valeurs, et affichera à chaque fois le carré du nombre saisi

Chaque passage dans la boucle s'appelle une itération

Les boucles pour

Quand les utiliser

  • Quand il faut faire plusieurs fois la même chose
  • Quand il faut obtenir plusieurs valeurs
  • Le nombre d'itérations à faire est connu à l'avance
  • "Demandez 5 notes" -> "pour i de 1 à 5"
  • Ou bien juste avant de commencer la 1ere itération
  • "Demandez n notes" -> "obtenir n" puis "pour i de 1 à n"

Les boucles "pour" en C


for (i=[debut] ; i<=[fin] ; i=i+1) {
	instruction;
	...		
	instruction;
}
		

for (j=3 ; j<=11 ; j=j+1) {
	printf("%d ", j);
}
		

Les boucles pour en C


Entier i, debut, fin

obtenir debut
obtenir fin
pour i de debut à fin
	afficher i
finpour
		

int i, debut, fin;

scanf("%d", &debut);
scanf("%d", &fin);
for (i=debut ; i<=fin ; i=i+1) {
	printf("%d ", i);
}
		

Les boucles pour en C


Entier i, valeur, carre

pour i de 1 à 12
	obtenir valeur
	carre <- valeur x valeur
	afficher "valeur au carre :" carre
finpour
		

int i, valeur, carre;

for (i=1 ; i<=12 ; i=i+1) {
	scanf("%d", &valeur);
	carre = valeur * valeur;
	printf("valeur du carre : %d\n", carre);
}
		

TP

  • The fiche
  • Indique ce que vous pouvez faire en algorithmie
  • Passage algorithmie -> C
  • Bible pour rechercher des erreurs dans le code C

Au boulot

  • TP 2 (2eme partie)
  • Appliquez en C après chaque exercice
  • Mais appliquez les consignes Dev-C++ du TP3
  • Correction algo 15h
  • Correction C 15h40

Boucles "tant que"


Début
	Entier n

	n ⟵ 0
	tant que ( (n * n) < 100)
		n  ⟵  n + 1
	fintantque
	afficher n
Fin
		

Mélange de "pour" et de "si"

On répète le bloc tant que la condition est vraie

Boucles "tant que"


tant que (condition)
	instruction
	...
	instruction
fintantque	
		
  • Syntaxe quasiment identique au "si" (en particulier la condition)
  • Attention au fintantque
  • Décalage demandé

Boucles "tant que"

Quand les utiliser ?

  • Quand il faut répéter un nombre indéterminé de fois quelque chose
  • Mots clés : "jusqu'à", "tant que"
  • Au moment de la première itération, on ne sait pas combien il y en aura

Les boucles "tant que" en C


while (condition) {
	instruction;
	...		
	instruction;
}
		

Quasi identique à "if"

Les boucles "tant que" en C


Entier n

n ⟵ 0
tant que ( (n x n) < 100)
	n  ⟵  n + 1
fintantque
afficher n
		

int n;

n = 0;
while ( (n * n) < 100) {
	n = n + 1;
}
printf("n vaut : %d\n", n);
		

Suite TP

  • TP 3
  • Appliquez en C après chaque exercice