• Aucun résultat trouvé

Correction TP2 LS1 UEO11 2007-2008

N/A
N/A
Protected

Academic year: 2022

Partager "Correction TP2 LS1 UEO11 2007-2008"

Copied!
9
0
0

Texte intégral

(1)

Correction TP2 LS1 UEO11 2007-2008

I] Conseils pratiques

Rappel de mes coordonnées : PEROUMALNAÏK M.

mail : [email protected]

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

(2)

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

(3)

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 :

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;

(4)

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

(5)

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 :

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

(6)

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

(7)

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

(8)

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 :

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;

(9)

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 }

Références

Documents relatifs

 Deux nombres relatifs de signes contraires (ou différents) et de même distance à l'origine sont dits opposés.. Le nombre 5 est la distance à l'origine du nombre –5. III)

Quand deux nombres relatifs sont ont la même « valeur (absolue) » mais un signe contraire, on dit qu’ils sont opposés.. C OMPARAISON DE DEUX

L'aire de la croix est égale à l'aire totale du carré privé de 4 fois l'aire du carré de côté x.. Donc l'aire de la croix vaut 4² −

Racine carrée d’un nombre positif.. Table

On admet le résultat suivant, qui est un cas particulier du corollaire du théorème des valeurs intermé- diaires rencontré en terminale.. Il sera démontré

Le but de cette activité est de justifier que le produit de deux nombres de signes contraires est un nombre négatif et que celui de deux nombres négatifs est un nombre positif..

Le but de cette activité est de justifier que le produit de deux nombres de signes contraires est un nombre négatif et que celui de deux nombres négatifs est un nombre positif..

Le but de cette activité est de justifier que le produit de deux nombres de signes contraires est un nombre négatif et que celui de deux nombres négatifs est un nombre positif..