0% ont trouvé ce document utile (0 vote)
20 vues7 pages

TD 3

Ce document présente un TD-TP sur les opérateurs, expressions et instructions conditionnelles en programmation pour les étudiants en 2ème année de licence en sciences et technologie. Il comprend des exercices sur les valeurs et types d'expressions, les opérateurs relationnels et logiques, ainsi que la simulation d'un programme pour l'émission d'un ticket de caisse. Des conseils pour l'écriture de programmes, la définition d'algorithmes et l'importance des commentaires dans le code sont également fournis.

Transféré par

bouarourchanez66
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
20 vues7 pages

TD 3

Ce document présente un TD-TP sur les opérateurs, expressions et instructions conditionnelles en programmation pour les étudiants en 2ème année de licence en sciences et technologie. Il comprend des exercices sur les valeurs et types d'expressions, les opérateurs relationnels et logiques, ainsi que la simulation d'un programme pour l'émission d'un ticket de caisse. Des conseils pour l'écriture de programmes, la définition d'algorithmes et l'importance des commentaires dans le code sont également fournis.

Transféré par

bouarourchanez66
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

LICENCE SCIENCES, TECHNOLOGIE 2ème année

U.E. PROGRAMMATION pour l’INGENIEUR 1

TD-TP n°3
Opérateurs, Expressions et Instruction conditionnelle
Préparer l’exercice I avant la séance
I – Valeur et Type d’une expression
Compléter le tableau suivant en précisant la valeur des expressions et leur type
(voir sur EPREL fichier TD_3_TableauX_a_compléter )
17/3 (float) (17/3) (double) (17)/3 17./3 17%3
Valeur 5
Type* int
Taille (nbre
4
d’octets)
Justifier Exemple de
(expliquer) justification :
vos L’opérateur de
division / s’applique ici
réponses entre 2 entiers et
réalise donc une
division entière.
17/3 est donc de type
entier et vaut 4
* réponses possibles : int float ou double
Après avoir rempli le tableau ci-dessus, exécuter le programme suivant et comparer vos
« prévisions » aux différents affichages produits par le programme ci-dessous.

#include <stdio.h>
int main()
{
printf("17/3 = %d\n",17/3);
printf("(float)(17/3) = %f\n",(float)(17/3));
printf("(double)(17)/3= %lf\n",(double)(17)/3);
printf("17./3= %lf\n",17./3);
printf("17 %c 3 = %d\n",37,17%3);
/* si on avait dans ce printf : "17 % 3 = %d\n" % 3 serait considéré comme un code format (→ erreur).
} On affiche donc le caractère de code ASCII 37 */

Pour vérifier que les tailles en octets indiquées dans le tableau sont correctes,
ajouter après chaque ligne du programme une instruction qui permet d’afficher la
taille de représentation de chaque expression en nombre d’octets.
Exemple :
ajouter après le 1er printf l’intruction
printf("nombre d'octets: %d\n\n",sizeof(17/3));
ajouter après le 2ème printf l’intruction
printf("nombre d'octets: %d\n\n", sizeof ((float)(17/3)));
etc....
II - Opérateurs relationnels et logiques

1 – Opérateurs relationnels

Soient les variables entières signées a et b, compléter le tableau suivant


Opérateur relationnel xx Notation en C a b Valeur de (a xx b)
Supérieur 7 5
Supérieur ou égal 18 18
Inférieur -2 -5
Inférieur ou égal 0 0
Egal 4 3
Différent 3 4
(voir sur EPREL fichier TD_3_TableauX_a_compléter)

2 – Opérateurs logiques
a) Soient les variables réelles u et v, compléter le tableau suivant
Opérateur logique binaire xx Notation en C u v Valeur de (u xx v)
ET 7.8 0
OU inclusif 1.6 E-30 0

Opérateur logique unaire Notation en C u Valeur de NON u


NON 0.04
(voir sur EPREL fichier TD_3_TableauX_a_compléter)

b) Soit une variable a de type entier signé


Ecrire en langage C, une expression qui vaut 1 si a   4 , 7 et 0 sinon.

Ecrire un programme qui demande la saisie d’une valeur entière


et affiche « saisie valide » si cette valeur appartient à l’intervalle [-4 7]
et affiche « saisie non valide » dans le cas contraire
Pour cela on utilise l’instruction de choix
if (expression conditionnelle) instruction ;.
else instruction ;.

c) Soit une variable c de type caractère,


Ecrire « sur papier » en langage C, une expression qui vaut 1 si le caractère c correspond à
une lettre de l’alphabet minuscule ou majuscule et 0 dans le cas contraire.
Pour résoudre cette question on peut définir 2 expressions logiques qui seront ensuite associées :
- la première expression est à l’état logique 1 quand c est une lettre minuscule
- la deuxième expression est à l’état logique 1 quand c est une lettre majuscule
Associer ensuite ces 2 expressions logiques pour répondre à la question posée.

Vérifier que cette expression est correcte en écrivant un programme qui saisit une valeur pour
c et affiche « Caractere alphabetique » quand l’expression est vraie, et « Caractere non
alphabetique » dans le cas contraire.
III - Simulation d’un programme permettant l’émission d’un ticket de caisse conformément
à la facture ci-dessous.

Le programme doit demander à l’utilisateur du logiciel de saisir au clavier les données et des
informations à partir desquelles il pourra éditer un ticket de caisse correspondant à la facture.

Le programme doit donc réaliser les tâches suivantes:


- Afficher un message demandant la saisie du montant HT et effectuer cette saisie
- Calculer le montant de la TVA.
- Afficher le message « Le client a-t-il une carte de fidelite (o/n) ? »
et saisir la réponse de l’utilisateur (qui est le caractère ‘o’ si oui et ‘n’ si non)
- Si la réponse est oui, afficher un message demandant à l’utilisateur de saisir le n° à 6 chiffres de la
carte de fidélité
- Calculer le montant de la remise.
- Afficher le ticket de caisse
avec la même structure à 2 colonnes (sans les encadrements) que celui présenté ci-dessus
Pour cela il faut utiliser le caractère tabulation \t

Conseils pour l’écriture de ce programme :


Procéder par étape : écrire seulement des petites parties du programme, tester leur bon
fonctionnement et les assembler progressivement.
Bien choisir le nom des variables utilisées, de manière à ce que le programme soit facilement
compréhensible. En langage C, par convention, les variables sont en minuscule et les
constantes en MAJUSCULE.

Eléments nécessaires pour écrire ce programme :


Les constantes sont définies grâce à la directive de compilation #define (placée avant l’en-tête
de la fonction main). Exemple #define TVA 0.02
Avant la saisie d’un caractère avec la fonction scanf, il faut placer l’instruction fflush(stdin) ;
pour vider le buffer standard des Entrées-Sorties

Tester votre programme, en utilisant différentes valeurs de total HT et vérifier que vous obtenez
les résultats attendus. Consigner les résultats de vos différents tests.
Qu’est ce qu’un algorithme ?
L’algorithme
 c’est l’expression des différentes étapes à effectuer pour accomplir une tâche.
 il fait suite à une analyse du problème qui permet de définir ces étapes et leur enchaînement.
 il se fonde parfois sur la solution formelle d’un problème (voir calcul du PGCD dans prochain TD)
 il n’est pas spécifique du langage de programmation (on le traduit dans le langage que l’on utilise).

Exemple avec le programme précédent «Ticket-Facture »

Lexique :
TVA : une constante égale à 0.2
REMIS : une constante égale à 0.05
prix_ht : un réel // montant est une variable qui représente un prix hors taxe
tax , prix_ttc, remis, total: des réels
rep : un caractère
cart_fidel : un entier
affich_format_ticket: une fonction

DEBUT
Afficher (« saisir le prix HT : »)
Lire prix_ht
tax ← prix_ht X TVA // le signe ← correspond à l’opération d’affectation
// on « donne » à la variable à gauche de ← la valeur de l’expression à sa droite
Faire
Afficher (« Le client a-t-il une carte de fidelite (o/n) ? »)
Lire rep
Tant que (rep différent de ‘n’ ET de ‘o’)

Si rep est égal à ‘o’ alors Lire remis


prix_ttc= prix_ht + tax.
total=prix_ttc - remis
affich_format_ticket (prix_ht, tax, prix_ttc, cart_fidel,total)
FIN

 Pour faire le programme « Ticket-Facture », vous avez (auriez) sûrement gagné du temps
en commençant par définir et écrire l’algorithme de ce programme.
Dans un 2ème temps, vous traduisez votre algorithme en langage C .

___________________________________________________________________

DENIERE ETAPE du développement de votre programme


AJOUTER des COMMENTAIRES - MISE EN PAGE
Les commentaires ajoutés au programme (associés à une bonne mise en page) sont quasiment aussi
importants que le programme lui-même car ils permettent rapidement, sans se replonger dans le
code, de comprendre la structure du programme, et d’éventuelles parties délicates utilisées dans le
code.
Certes sur un programme de quelques lignes, ça ne paraît pas très nécessaire mais sur des
programmes conséquents, c’est…….INDISPENSABLE car un jour, il faudra peut-être corriger des
« bug » ou compléter le programme.
Il faut donc s’entraîner à commenter.

 Voir ANNEXE 1 : COMMENTER UN PROGRAMME


ANNEXE 1 : COMMENTER UN PROGRAMME
Il ne s’agit pas de commenter chaque instruction.
Par exemple a=10 ; /* donner la valeur 10 à la variable a */
mais de mettre en évidence les groupes d’instructions qui constituent une des tâches élémentaires du
programme et au sein de ces groupes commenter les instructions clés ou celles qui ne sont pas évidentes à
comprendre.
Vous trouverez un exemple de programme commenté (et correctement mis en page) ci-dessous.

/**Calcul des solutions d'une équation du second degré */


#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,delta,x,y;
int signe;
/****** saisie des paramètres a,b,c tel que axx+bx+c=0 *****/
printf("entrez la valeur de a : ");scanf("%f",&a);
printf("entrez la valeur de b : ");scanf("%f",&b);
printf("entrez la valeur de c : ");scanf("%f",&c);
/***** Solutions pour paramètres a et/ou b et/ou c nuls*****/
if (a==0)
{
if (b==0)
if (c==0) printf(" infinite de solutions "); /* a, b et c sont nuls */
else printf(" pas de solutions \n"); /* a et b sont nuls mais pas c */
else printf(" solution unique : x=%f\n",-c/b); /* a est nul mais pas b*/
}
else /** Solutions pour a non nul *****/
{
delta=(b*b-4*a*c); /* calcul du déterminant delta et détermination de son signe */
if (delta>0) signe=1;
if (delta==0) signe=0;
if (delta<0) signe=-1;

/***** solutions selon la valeur du déterminant ********/


switch(signe)
{
case 1:
printf("\nX1=%f et",((-b-sqrt(delta))/(2*a)));
printf(" X2=%f\n",((-b+sqrt(delta))/(2*a)));
break;
case 0:
printf("\nX1=X2=%f\n",(-b/(2*a)));
break;
case -1:
printf("\nX1=%f %+fj et",-b/(2*a),-sqrt(-delta)/(2*a));
printf(" X2=%f %+fj\n",-b/(2*a),sqrt(-delta)/(2*a));
}
}
/*************** FIN ********************/
return 0;
}
________________________________________________________________________________________

ANNEXE 2 : Opérateurs du langage C


Opérateurs du langage C (par ordre de précédence)
Catégorie Opérateur Associativité des opérandes
Référence ( ) [ ] . -> Gauche --> Droite
Unaire + – ++ – – ! ~ * & (cast) sizeof Gauche <-- Droite
Arithmétique * / % Gauche --> Droite
Arithmétique + - Gauche --> Droite
Décalage << >> Gauche --> Droite
Relationnel < <= > >= Gauche --> Droite
Relationnel == != Gauche --> Droite
Manip. binaire & Gauche --> Droite
Manip. binaire ^ Gauche --> Droite
Manip. binaire | Gauche --> Droite
Logique && Gauche --> Droite
Logique || Gauche --> Droite
Conditionnel ?: Gauche --> Droite
Affectation = + = -= * = /= %= Gauche <-- Droite
Séquentiel , Gauche --> Droite
ANNEXE 3 : TABLE des codes ASCII

TABLE des codes ASCII de base (0 à 127)

TABLE ASCII étendue

Vous aimerez peut-être aussi