Vous êtes sur la page 1sur 9

Correction TP2 LS1 UEO11

2007-2008

I] Conseils pratiques
Rappel de mes coordonnées :

PEROUMALNAÏK M.
mail : mperouma@univ-ag.fr
page-perso : http://grimaag.univ-ag.fr/~mperouma/

Les corrections proposées sont des propositions de correction : vous


aussi pouvez trouvez autre chose qui peut potentiellement fonctionner.

Partant de là, c'est à vous de fournir un algortihme structuré et un code


propre pour étayer la justesse de votre proposition.

II] Exercice 2 : Notion de variable

1 - Intitulé

Exercice : Ecrire un programme permettant de permuter deux valeurs


entières. Réalisez un affichage avant et après permutation.

2 – Correction

Dans l'énoncé, on distingue clairement deux actions :


1. permuter deux valeurs entières
2. affichage avant et après permutation.

Dans le cadre de cette correction, on choisit de permettre à l'utilisateur de


rentrer les valeurs entières à permuter.
On arrive donc à la suite d'actions élémentaires suivantes :
1. Demander à l'utilisateur de rentrer deux valeurs entières
2. Saisir les valeurs
3. Afficher les valeurs avant permutation
4. Permuter les valeurs
5. Afficher les valeurs après permutation.
Pour permuter ces valeurs, on choisit d'utiliser une variable permettant
de stocker temporairement la valeur d'une variable.
Considérons la variable comme un conteneur : il va falloir échanger le
contenu de deux conteneurs sans perdre aucune donnée.

Dans l'exemple suivant, on va avoir à gauche les opérations réalisées en


mémoire puis à droite l'algo, en considérant a, b et c.
Permutons le contenu de a et de b en utilisant c comme variable temporaire:

En machine Lignes d'algo associées


A B C
<!> Pas d'algo pour cette ligne <!>

Initialisation

A B C

C← A

A B C

A← B

A B C

B← C

Donc au final, une proposition d'algorithme et une proposition de code:

Algorithme : permut_var

Entrées
Sorties 

Constantes
Variables
a, b, c : entier
Début
Ecrire('Saisissez deux valeurs entières ')
Ecrire('Valeur n°1 ? ')
Lire(a)
Ecrire('Valeur n°2 ? ')
Lire(b)
Ecrire('Valeurs entrées : var1=',a,' var2=',b)
c ← a
a ← b
b ← c
Ecrire('Valeurs entrées : var1=',a,' var2=',b)
Fin

Le code correspondant :

N° Fic hier e xo2.c : P roposition de co rrection


1 #include<stdio.h> //Inclusion de la librairie standard STDIO
2
3 /* Exercice 2 : Permutation de variables */
4
5 //MAIN
6 main() 
7 {
8    /* Déclaration */
9    int a, b, c;
10
11    /* Action */
12    //Demander à l'utilisateur de rentrer les valeurs
13    printf(''Saisissez deux valeurs entières: \n'');
14    printf(''Valeur a : '');
15    scanf(''%d'', &a);
16    printf(''Valeur b : '');
17    scanf(''%d'', &b);
18    //Affichage avant permutation
19    printf(''Valeurs saisies  a : %d, b : %d. \n'',a,b);
20    //Permutation
21    c = a;
22    a = b;
N° Fic hier e xo2.c : P roposition de co rrection
23    b = c;
24    //Affichage après permutation
25    printf(''Valeurs saisies  a : %d, b : %d. \n'',a,b);
26 }

III] Exercice n°3 : Lecture au clavier

1 – Intitulé

Exercice : Le but de cet exercice est de comprendre le fonctionnement de la


fonction scanf, fonction permettant à l'utilisateur de saisir des données.
Pour plus d'informations (entête de la fonction, formats,...) tapez dans un
shell

man scanf

Considérons une voiture qui parcourt une distance donnée. Ecrivez un


programme permettant à l'utilisateur, en fonction de la durée du trajet (en
secondes) et de la longueur de ce trajet (en mètres) de donner à l'utilisateur la
vitesse moyenne de cette voiture.

2 – Correction

L'énoncé de l'exercice nous propose de calculer et d'afficher la vitesse d'un


véhicule dont la distance et la durée du trajet sont saisis au clavier par
l'utilisateur.
On choisit donc d'effectuer la liste d'actions élémentaires suivantes :
1. Demander à l'utilisateur de saisir la longueur du trajet parcouru
par le véhicule (en m) et la durée de ce trajet
2. Lire ces valeurs
3. Afficher ces valeurs (facultatif : affichage de contrôle)
4. Calculer la vitesse (vitesse = distance /temps)
5. Afficher le résultat
Tout d'abord l'algorithme :

Algorithme : calcul_vitesse

Entrées
d, t : entiers // d:distance  t:temps
Sorties 
v : réel // v: vitesse
Constantes
Variables

Début
Ecrire('Saisissez la distance et le temps ')
Ecrire('Entrez la distance en m : ')
Lire(d)
Ecrire('Entrez le temps en secondes :')
Lire(t)
Ecrire('distance :',t,'m, temps :',b,'sec')
v ← d/t
Ecrire('La vitesse est de : ',v,' m/s')
Fin

On peut en déduire le code en C suivant :

N° Fic hier e xo3.c : P roposition de co rrection


1 #include<stdio.h> //Inclusion de la librairie standard STDIO
2
3 /* Exercice 3 : Calcul de vitesse */
4
5 //MAIN
6 main() 
7 {
8    /* Déclarations */
9    int d,t;
10    float v;
11    /* Action */
12    //Demander à l'utilisateur de rentrer la dist et le temps
N° Fic hier e xo3.c : P roposition de co rrection
13    printf(''Saisissez la distance et le temps: \n'');
14    printf(''Entrez la distance en m : \n'');
15    scanf(''%d'', &d);
16    printf(''Entrez le temps en sec : \n'');
17    scanf(''%d'', &t);
18    //Affichage de contrôle
19    printf(''distance : %d m, temps : %d sec\n'',d,t);
20    //Calcul de la vitesse
21    v=d/t;
22    //Affichage ­­ %0.2f => 2chiffres après la virgule
23    printf(''La vitesse est de %0.2f m/s. \n'',v);
24 }

IV] Exercice n°4 : Structure conditionelle if

1 – Intitulé

Exercice :
Ecrire un programme affichant la moyenne de cinq nombres entiers
entrés au clavier par l'utilisateur. L'on affichera séparément la moyenne des
nombres négatifs et la moyenne des nombres positifs entrés.

2 – Correction

Tout d'abord, pour calculer la moyenne d'un groupe d'éléments quelconque, il


nous faut deux données : la somme de ces éléments ainsi que le nombre
d'éléments considérés.

De ce fait, suivant que le nombre saisi soit positif ou non (on va, pour la suite
de cet exercice, considérer 0 comme un nombre positif.), nous devrons
l'ajouter à la somme existante de nombres positifs et recenser cette
occurrence.

Nous venons donc de mettre en évidence le traitement à appliquer pour une


saisie donnée :

– Déterminer le signe du nombre


– Si le nombre est positif ou nul, l'ajouter à la somme des nombres positifs
et incrémenter le compteur de nombres positifs.
– Sinon, l'ajouter à la somme des nombres négatifs et incrémenter le
compteur de nombres négatifs.

Clairement ici, nous avons un traitement générique à appliquer plusieurs fois :


nous sommes typiquement dans le cas d'utilisation idéal d'une boucle.

Le nombre d'itérations étant connu (5), nous pouvons légitimement utiliser


une boucle Pour.

On peut donc déduire l'algorithme suivant:

Algorithme : moy_posneg

Entrées
n : entier // entier saisi
Sorties 
mpos, mneg : réel // moyennes
Constantes
Variables
i : entier
nbpos, nbneg :entier

Début
nbpos ← 0
nbneg ← 0
mpos ← 0
mneg ← 0
Pour i allant de 1 à 5 faire
  Début
   Ecrire('Saisissez la valeur n° ',i)
   Lire(n)
   Si (n < 0) alors 
  Début
   mneg ← mneg + n
   nbneg ← nbneg + 1
  Fin
Sinon
  Début
   mpos ← mpos + n
   nbpos ← nbpos + 1
  Fin
FinSi
  Fin
FinPour
Si (nbpos > 0) alors
  Ecrire('Moyenne nb pos :', mpos/nbpos)
FinSi
Si (nbneg > 0) alors
  Ecrire('Moyenne nb neg :', mpos/nbneg)
FinSi
Fin

Avant de passer au code C, quelques remarques sur l'algorithme.


Vous remarquerez que je ne stocke pas le calcul de la moyenne. La raison de
ceci est que ce calcul de moyenne n'est pas systématique.
En effet, si l'on prend le cas (par exemple) où l'utilisateur n'a entré que des
nombres positifs : sans la condition finale, l'on se retrouverait à faire une
division par zéro, ce qui est mathématiquement impossible.

De cet algorithme découle la proposition de code C suivante :

N° Fic hier e xo4.c : P roposition de co rrection


1 #include<stdio.h> //Inclusion de la librairie standard STDIO
2
3 // Exercice 4 : Moyenne de nombres entiers négatifs et positifs 
4
5 //MAIN
6 main() 
7 {
8    /* Déclarations */
9    int nombre=0,i,nb_pos=0, nb_neg=0 ;
10    float moy_pos=0, moy_neg=0;
11    /* Action */
12    /* Début de la boucle de saisie */
13    for(i=1; i<6; i++)
14     {
15       printf(''Saisissez la valeur n°%d : \n'',i);
16       scanf(''%d'', &nombre);
17       //Suivant le signe du nombre
18       if(nombre >= 0)
19        { nb_pos=nb_pos+1;
N° Fic hier e xo4.c : P roposition de co rrection
20          moy_pos = moy_pos+nombre;}
21        else
22          { nb_neg=nb_neg+1;
23          moy_neg = moy_neg+nombre}
24     }
25    if(nb_pos>0)
26      printf(''La moyenne des nombres positifs saisis est: %f : 
\n'',nb_pos);
27    if(nb_pos>0)
28      printf(''La moyenne des nombres positifs saisis est: %f : 
\n'',nb_pos);
29 }

Vous aimerez peut-être aussi