Vous êtes sur la page 1sur 24

Algorithmique et Programmation I

Séance 6

Ça accélère…

Année universitaire 2021/2022 – Semestre 1

1
De plus en plus … complexe
Écrire un programme qui …

1. calcule la moyenne d'un étudiant


2. calcule la moyenne de N étudiants
3. calcule la moyenne de N étudiants puis affiche la moyenne
générale de toute la classe

2
Voici le programme 3
#include <stdio.h>
void main ()
{
float Note1, Note2, Moyenne, Somme = 0.0;
int i, N;

printf ("Nombre d'étudiants :"); scanf ("%d", &N);


for (i = 1; i<=N; i++)
{
printf ("Note 1: "); scanf ("%f", &Note1);
printf ("Note 2: "); scanf ("%f", &Note2);

Moyenne = (Note1 * 0.8) + (Note2 * 0.2);


Somme = Somme + Moyenne ;
printf (“Moyenne de l’étudiant: %f", Moyenne);
}
printf ("Moyenne générale : %.2f", Somme/N);
}

3
De plus en plus … complexe
Écrire un programme qui …

1. calcule la moyenne d'un étudiant


2. calcule la moyenne de N étudiants
3. calcule la moyenne de N étudiants puis affiche la moyenne
générale de toute la classe

4. calcule la moyenne de N étudiants, la moyenne de toute la


classe et le nombre de moyennes supérieures à 10

4
Voici le programme 4
#include <stdio.h>
void main ()
{
float Note1, Note2, Moyenne, Somme = 0.0;
int i, N, NbreSup10 = 0;

printf ("Nombre d'étudiants :"); scanf ("%d", &N);


for (i = 1; i<=N; i++)
{
printf ("Note 1: "); scanf ("%f", &Note1);
printf ("Note 2: "); scanf ("%f", &Note2);

Moyenne = (Note1 * 0.8) + (Note2 * 0.2);


Somme = Somme + Moyenne ;
if (Moyenne >= 10.0) NbreSup10 ++;
printf (“Moyenne de l’étudiant: %f", Moyenne);
}
printf ("Moyenne générale : %.2f", Somme/N);
printf ("Nbre >= 10 : %d", NbreSup10);
} 5
De plus en plus … complexe
Écrire un programme qui …

1. calcule la moyenne d'un étudiant


2. calcule la moyenne de N étudiants
3. calcule la moyenne de N étudiants puis affiche la moyenne
générale de toute la classe

4. calcule la moyenne de N étudiants, la moyenne de toute la


classe et le nombre de moyennes supérieures à 10

5. calcule la moyenne de N étudiants, la moyenne de toute la


classe et le nombre de moyennes supérieures à la moyenne
générale de toute la classe !

6
Ce programme ne le fait plus !
#include <stdio.h>
void main ()
{
float Note1, Note2, Moyenne, Somme = 0.0;
int i, N, NbreSup10 = 0;

printf ("Nombre d'étudiants :");


Ce 10.0 doit êtrescanf ("%d",
remplacé par la&N);
moyenne
for (i = 1; i<=N; i++) générale de la classe …
{
printf ("Note 1: "); scanf ("%f", &Note1);
qu'on("%f",
printf ("Note 2: "); scanf ne connaît pas encore !
&Note2);

Moyenne = (Note1 * 0.8) + (Note2 * 0.2);


Somme = Somme + Moyenne ;
if (Moyenne >= 10.0) NbreSup10 ++;
printf (“Moyenne de l’étudiant: %f", Moyenne);
}
printf ("Moyenne générale : %.2f", Somme/N);
printf ("Nbre >= 10.0 : %d", NbreSup10);
} 7
Quand une variable simple ne suffit plus…

Dans le programme précédent, nous avons besoin


de calculer les moyennes des étudiants et de les
conserver pour après, les comparer à la moyenne
générale et afficher celles qui lui sont supérieures.

Dans la variable Moyenne, on ne peut stocker qu'une


seule valeur!

8
Les tableaux indice
Nombre
d’éléments
T[0] T[1] T[2]
int T[5]; T[3] T[4]
T
Type des Nom
éléments
En C:
int Premiers [4];
1. Les indices débutent en 0
Premiers [0] = 2; 2. T[i] : i+1ème élément
Premiers [1] = 3;
Premiers [2] = 5;
Premiers [3] = 7;
printf(“Le 3e nombre premier: %d\n”, Premiers [2]);
printf(“Somme du 2e et du 3e: %d”, Premiers[1]+ Premiers[2]);

Le 3e nombre premier: 5
Somme du 2e et du 3e: 8
9
Utilisation
Indexation par une variable

int T [4]; L’élément d’indice 3 est 7


int i = 3;
T[0]=2; T[1]=3; T[2]=5; T[3]=7;
printf (“L’élément d’indice %d est %d”, i, T[i]);

Parcours d'un tableau à l'aide d'une boucle

int T [4]; Indice 0: Valeur 2


int i;
Indice 1: Valeur 3
T[0]=2; T[1]=3; T[2]=5; T[3]=7; Indice 2: Valeur 5
for (i= 0; i< 4; i++) Indice 3: Valeur 7
{
printf (“Indice %d: Valeur %d\n”, i, T[i]);
}
10
Remplir un tableau
Remplir un tableau à l'aide d'une boucle
int T [4], i, x;
for (i= 0; i< 4; i++)
{
printf ("Donnez l'élément n°:%d", i);
scanf (“%d”, &x);
T[i] = x;
}
On peut initialiser un tableau lors de sa déclaration
int Tpremiers [4] = {2, 3, 5, 7};

Et même:
int Tpremiers [] = {2, 3, 5, 7};

Par contre, on ne peut pas utiliser l'affectation !

int Tpremiers [4];


Tpremiers = {2, 3, 5, 7}; 11
Copie, comparaison: Attention !

On ne peut affecter un tableau à un autre

int T1 [4] = {2, 3, 5, 7};


int T2 [4];
T2 = T1;

Ni comparer un tableau avec un autre par ==

int T1 [4] = {2, 3, 5, 7};


int T2 [4] = {2, 3, 5, 7};
if (T1 == T2)
printf ("Tableaux identiques.");
else
printf ("Tableaux différents.");
12
Copier puis comparer
#include <stdio.h>
void main ()
{
float T1 [4] = {2, 3, 5, 7}, T2 [4];
int i; char Egaux;

for (i = 0; i<4; i++)


{ T2 [i] = T1 [i]; }

Egaux = 'O'; Peut mieux faire !


for (i = 0; i<4; i++)
{
if (T1 [i] != T2 [i])
Egaux = 'N';
}

if (Egaux == 'O') printf ("Tableaux identiques.");


else printf ("Tableaux différents.");
}
13
Copier puis mieux comparer
#include <stdio.h>
void main ()
{
float T1 [4] = {2, 3, 5, 7}, T2 [4];
int i; char Egaux;

for (i = 0; i<4; i++)


{ T2 [i] = T1 [i]; }

Egaux = 'O'; i = 0;
while ((i < 4) && (Egaux == 'O'))
{
if (T1 [i] != T2 [i])
Egaux = 'N';
i ++;
}
if (Egaux == 'O') printf ("Tableaux identiques.");
else printf ("Tableaux différents.");
}
14
Attention aux dépassements !
À la différence d'autres langages, C ne contrôle pas les dépassements.

int T [3]; int T [3];


T [0] = 2; T [0] = 2;
T [1] = 3; T [1] = 3;
T [2] = 5; T [2] = 5;
T [3] = 7; T [4] = 7;

int T [3]; int T [3], i;


int i; T[0] = 2; T[1]=3; T[2]=5;
T[0] = 2; T[1] = 3; T[2] =5; for (i= 0; i < 150; i++)
for (i= 0; i < 5; i++) {
{ scanf (“%d”, &T[i]);
printf (“T[%d]:%d”,i,T[i]); }
}

Tous ces programmes ne provoquent pas d'erreurs à la compilation.


Ils peuvent générer des erreurs à l'exécution. Ce n'est même pas sûr !
15
Rechercher une valeur
#include <stdio.h>
void main ()
{
int T1 [4] = {2, 3, 5, 7};
int i, V, Trouve;

printf ("Valeur à chercher: "); scanf ("%d", &V);

Trouve = 0;
for (i = 0; i<4; i++)
{
if (T1 [i] == V)
Trouve = 1;
}

if (Trouve == 1) printf ("Valeur trouvée.");


else printf ("Valeur non trouvée.");
}
16
Mieux rechercher une valeur
#include <stdio.h>
void main ()
{
int T1 [4] = {2, 3, 5, 7};
int i, V, Trouve;

printf ("Valeur à chercher: "); scanf ("%d", &V);

Trouve = 0; i = 0;
while ((i<4) && (Trouve == 0))
{
if (T1 [i] == V)
Trouve = 1;
i ++;
}

if (Trouve == 1) printf ("Valeur trouvée.");


else printf ("Valeur non trouvée.");
}
17
Encore mieux rechercher une valeur
#include <stdio.h>
void main ()
{
int T1 [4] = {2, 3, 5, 7};
int i, V, Trouve;

printf ("Valeur à chercher: "); scanf ("%d", &V);

Trouve = 0; i = 0;
while ((i<4) && (!Trouve))
{
if (T1 [i] == V)
Trouve = 1;
i ++;
}

if (Trouve) printf ("Valeur trouvée.");


else printf ("Valeur non trouvée.");
}
18
C'est logique !

Trouve !Trouve Trouve == 1 Trouve == 0


1 0 1 0
0 1 0 1

Conséquence

if (Trouve == 1) if (Trouve)

if (Trouve == 0) if (!Trouve)

19
Cas particulier: Les tableaux de caractères

char nom [10];

Ces tableaux suivent les mêmes règles que les tableaux de nombres.
Mais ils ont en plus certaines particularités.

Un tableau de caractères = Une chaîne de caractères

Chaîne = séquence de caractères terminée par zéro, noté '\0'

20
Chaînes de caractères: Suite
Déclarations:

char Nom [10];


char Nom [10] = {'B', 'o', 'n', 'j','o', 'u', 'r', '\0'};
char Nom [10] = "Bonjour";
char Nom [] = "Bonjour"; /* Taille sera 8 = 7 + 1 */

char Mot [10] = "Bonjour";

Mot B o n j o u r \0 ? ?

21
Chaînes de caractères: Affichage, saisie
Affichage
char Prenom[] = “Ali”;
Votre prénom: Ali
printf(“Votre prénom: %s”, Prenom);

Saisie
scanf et %s : s'arrête aux espaces, tabulations et retours de ligne
char nom [32]; Votre nom: Ali Ibn
printf (“Votre nom: “); Votre nom est Ali
scanf (“%31s”, nom);
printf (“Votre nom est %s”, nom);
Notez l’absence de & dans ce cas

fgets : lit tous les caractères jusqu'au Return (compris) ou le nombre indiqué
char nom [10];
printf (“Tapez votre nom: “); Votre nom: Ali Ibn
fgets (nom, 10, stdin); Votre nom est Ali Ibn
printf (“Votre nom est %s”, nom); 22
Chaînes de caractères: Taille et copie
Bibliothèque string
#include <stdio.h>
#include <string.h>

strlen : longueur d'une chaîne de caractères


char animal [10] = "Chat";
int longueur;
longueur = strlen (animal);
printf (“%s comporte %d caractères”,animal, longueur);

strcpy: copie d'une chaîne de caractères dans une autre


char animal [10] = “Kattous”;
char hayawan[10];
strcpy( hayawan, animal);
strcpy( hayawan, “kalb”);
23
Concaténation et comparaison
strcat : ajout d'une chaîne de caractères à la fin d'une autre
char animal [10] = “Chat”;
strcat (animal, “on”);
printf (“%s”, animal);

strcmp : comparaison dans l’ordre lexicographique


char passwd [] = “SimSim”; char s1[]=“BAC”;char s2 []=“Chien”;
char S[10]; if (strcmp(s1, s2) < 0)
printf(“% s avant %s”, s1, s2);
scanf(“%9s”, S); else
if (strcmp(S, passwd) == 0) if (strcmp(s1, s2) > 0)
printf(“ Bienvenue ”); printf(“% s après %s”, s1, s2);
else else
printf(“ Au revoir”); printf(“% s = %s”, s1, s2);

24

Vous aimerez peut-être aussi