Vous êtes sur la page 1sur 7

FIT 2

Algorithmique et programmation I
Damien Bert het & Vincent Labatut
Universit Galatasaray

TP 01

Premiers programmes, les entres/sorties

1 Introduction
Vocabulaire connatre : Programme : suite dinstructions destines tre excutes par un ordinateur. Fichier excutable : fichier contenant un programme crit dans un langage comprhensible par lOS (Operating System) et pouvant tre excut par lordinateur. Lextension dun fichier excutable est souvent .exe(executable). Concrtement un fichier excutable est une suite de 1 et de 0. Fichier source : programme crit dans un langage de programmation (comme le langage C), comprhensible par un tre humain, mais qui ne peut pas tre excut par lordinateur. Pour excuter le programme crit dans un fichier source, il faut utiliser un compilateur. Un compilateur est un logiciel programme qui permet de construire un fichier excutable partir du fichier source. Le compilateur que nous utiliserons sappelle gcc (GNU C Compiler). Un algorithme est une suite finie dinstructions permettant de rsoudre un problme donn. Un code source nest pas quivalent un algorithme. Le mme algorithme peut tre cod diffremment, en fonction : Des choix de la personne qui programme : noms des variables, dcoupage du programme en fonctions, choix des structures de donnes le langage de programmation employ. le type de machine utilise etc. Cette distinction se traduit concrtement en TP, par le fait, que deux tudiants ne peuvent raisonnablement crire des codes identiques sans avoir copi !!! Une IDE (integrated development interface), cest un logiciel qui vous permet dcrire vos programmes dans un langage de programmation choisi. Pour crire des programmes en C/C++, vous pouvez utiliser par exemple lIDE DevC++. Dans nos TP, nous utiliserons lIDE eclipse et son extension la CDT (C/C++ Development Tools). Pour installer eclipse sur votre ordinateur personnel vous aurez besoin de lire ces documents : Installation de java. Installation declipse. Installation de la CDT. Pour utiliser eclipse vous pouvez lire ce document : Utilisation declipse.

Algorithmique et programmation I

FIT 2

TP 01 1/7

Premiers programmes, les entres/sorties

2 Les diffrentes tapes de la construction dun excutable :


fichiers sources
main() fonct1()

sources complts
main() fonct1()

sources assembleur
ADD JUMP X ...

fichiers objets
01101010 01010100 01010101

fichier excutable

dition des liens

prtraitement

compilation

assemblage

fonct2()

fonct2()

ADD X,Y ADD Y,Z ... LABEL UN JUMP DE ...

01110111 01111011 01111011 11010100 11001100 10101001

fonct3() fonct4()

fonct3() fonct4()

10010101 00010101 00010101 00101010 10010101 01010101 01000111

Prtraite ment : un ensemble de transformations syntaxiques sont apportes aux fichiers sources (remplacement et inclusion de texte, notamment). On obtient des sources complts. Compilation : chaque source complt est traduit en assembleur. On obtient donc une nouvelle version du source, le source assembleur. Assemblage : chaque source assembleur est traduit en code machine (binaire). On obtient ce que lon appelle des fichiers objets. A ce stade, les appels de fonctions nont pas encore t traits, car les implmentations des fonctions peuvent tre dans des fichiers diffrents. dition des liens : la construction est acheve en combinant ventuellement diffrents fichiers objets, de manire inclure dans un seul fichier excutable la fonction main et toutes les fonctions utilises. Par abus de langage, on appelle compilation lensemble de ce processus de construction.

3 La fonction main
Un programme en C est dcoup en fonctions, chaque fonction tant au mme niveau, c'est--dire quil ne peut y avoir de fonctions dfinis lintrieur dune autre fonction (contrairement au langage Pascal par exemple). Il y a cependant une fonction partic ulire, la fonction appele main, cest cette fonction qui est excute par le programme et cest elle qui appellera les autres fonctions. Un programme C qui crit affiche bonjour et passe la ligne :
#include <stdio.h> int main(void) { printf("bonjour\n") ; return 0; }

#include <stdio.h> : Cette instruction est une directive de prcompilation elle

demande linclusion de la bibliothque des entres et sorties standard. int main(void) : cest len tte de la fonction principale, cette en-tte rsume :

Algorithmique et programmation I

FIT 2

TP 01 2/7

Premiers programmes, les entres/sorties o Le nom de la fonction : main. o Les valeurs quelle reoit en argument, dans notre cas aucune. o Le type de la valeur retourne par la fonction. Les accolades { et } entourent le corps de la fonction, c'est--dire lensemble de ses instructions. printf("bonjour\n") est un appel la fonction printf dfinie dans la bibliothque des entres et sorties standards. La chaine de caractres "bonjour\n" est largument de cette fonction printf. Linstruction return 0; sert indiquer que la fonction main sest excute sans erreur.

Exercice 1
Recopier, compilez et excutez ce programme.

4 Les entres et sorties


Le terme dentres/sorties dsigne les mcanismes utiliss pour quun programme puisse recevoir/envoyer des donnes depuis/vers un flux. Un flux peut tre un fichier, un priphrique (cran, clavier, etc), ou dautres entits. Dans ce TP, nous nous intressons seulement lentre standard, qui est le clavier, et la sortie standard, qui est lcran. En langage C, le flux dentre standard est appele stdin (pour standard input) et le flux de sortie standard est appele stdout (pour standard output). Il existe de nombreuses mthodes permettant deffectuer des entres/sorties en langage C, suivant le type des donnes traiter. On distinguera les fonctions qui manipulent les donnes de manire non-formate, c'est--dire caractre par caractre, et celles qui travaillent de manire formate. Par dfaut, laccs au flux est buffris, ce qui signifie quune zone de mmoire sert de tampon. Par exemple, dans le cas du flux dentre standard, les donnes issues du clavier sont stockes dans le tampon, et attendent que le programme ait besoin delles.
programme.c

tampon
1234 1235 1236 1237 1238 1239
TP 01 3/7

Lintrt de laccs buffris est que, tant que le programme ne demande pas laccs au tampon, il est possible de modifier les donnes qui y sont contenues. Remarque : pour pouvoir utiliser les fonctions dentre-sortie prsentes dans ce TP, vous devez inclure la bibliothque stdio.h dans votre programme.

5 Entres/sorties non-formates
La fonction int getc(FILE *stream) renvoie le code ASCII du caractre qui a t lu dans le flux stream. Si on veut saisir un caractre au clavier, on crira :

Algorithmique et programmation I

FIT 2

Premiers programmes, les entres/sorties


char c; c=getc(stdin);

Si une erreur se produit, la fonction renvoie -1. On ne tiendra pas compte de cette possibilit lorsquon travaille sur le flux standard stdin, mais il est important de connatre cette proprit, qui sera utile plus tard. La fonction getchar fonctionne exactement pareil que getc, la diffrence quon na pas prciser quon utilise le flux standard :
char c; c=getchar();

Ces deux fonctions getc prennent un caractre dans le tampon et le suppriment du tampon. Si le tampon est vide, le programme se bloque jusqu ce quun char soit plac dans le tampon, c'est--dire : jusqu ce quune valeur soit saisie au clavier. La fonction int putc(int c, FILE *stream) crit le caractre dont le code ASCII est c dans le flux stream. Si on veut afficher un caractre lcran, par exemple le caractre A, on crira donc :
char c=A; putc(c, stdout);

Si une erreur se produit, la fonction renvoie -1, sinon elle renvoie le code ASCII du caractre qui a t crit. L encore, on ne tiendra pas compte, ici, de la possibilit derreur. La fonction putchar fonctionne exactement pareil que putc sans prciser le flux :
char c=A; putchar(c);

Exercice 2
En utilisant getchar et putchar, crivez un programme qui saisit un caractre et qui laffiche lcran.

Exercice 3
Mme question avec deux caractres : dabord le programme saisit les deux caractres, puis il affiche les deux caractres. Remarque : pour changer de ligne, vous pouvez afficher le caractre '\n'.

6 Sorties formates
La fonction putchar ne permet dafficher que des caractres. La fonction printf, elle, permet deffectuer une sortie formate, et dafficher des valeurs de nimporte quel type simple :
printf(format,exp1,...,expn);

La fonction affiche les valeurs des expressions exp1,...,expn. Le paramtre format est une chane de caractre de formatage indiquant comment les expressions doivent tre affiches. Cette chaine de caractres peut contenir deux sortes dinformations : du texte normal, qui sera affich tel quel du texte spcifiant des formats daffichage Par exemple, pour afficher le texte normal bienvenue dans le programme, on fera (dans lexemple, la ligne fonce reprsente le rsultat lcran) :
printf("bienvenue dans le programme"); bienvenue dans le programme

Un format daffichage prend la forme dun pourcent % suivi dune expression prcisant le format. Par exemple, le format %d signifie que lon veut afficher un entier relatif exprim en base 10 (entier dcimal) :
printf("%d",1234);

Algorithmique et programmation I

FIT 2

TP 01 4/7

Premiers programmes, les entres/sorties


1234

Il est possible davoir du texte normal et des formats dans la m me chane de formatage :
printf("affichage du nombre : %d",1234); affichage du nombre : 1234

Lors de laffichage, chaque format prsent dans la chaine de formatage est utilis pour afficher la valeur dune des expressions passes en paramtre. Le 1 er format sert afficher la 1re expression, le 2me format afficher la 2me expression, etc. :
printf("affichage du nombre 1 : %d. affichage du nombre 2 : %d",12,34); affichage du nombre 1 : 13. affichage du nombre 2 : 34

On manipule des expressions, on nest donc pas limit des constantes littrales, on peut utiliser des variables et des op rateurs, par exemple :
int a=5; printf("%d plus %d egale %d",10,a,10+a); 10 plus 5 egale 15

Remarque : le caractre % est un caractre spcial dans une chane de formatage, puisquil permet de dfinir un format Si on veut afficher le caractre % lui- mme, il faut crire %% dans la chaine de formatage, afin que la fonction printf sache quil ne sagit pas dun format :
printf("resultat des ventes : %d %%",87); resultat des ventes : 87 %

Les principaux codes de formatage sont : code rsultat affich %d nombre entier relatif dcimal %u nombre entier naturel dcimal %o nombre entier naturel octal %x et %X nombre entier naturel hexadcimal %c caractre %f nombre rel dcimal %e et %E nombre rel dcimal en notation scientifique Remarque : par dfaut, un rel est affich avec 6 chiffres aprs la virgule. Il est possible de prciser, entre le % et la lettre du format, un modificateur de formatage prcisant le type de la donne afficher : donne codes concerns option rsultat affich int aucune d, i, o, x, X, u entier h (unsigned) short
l

rel

f, e, E

aucune
l L

long float double long double

En plaant une valeur entire entre le % et la lettre du format, on peut prciser le nombre de chiffres minimal afficher. Pour un rel, le point dcimal compte comme un chiffre. Si le nombre afficher ne contient pas assez de chiffres, les chiffes manquants sont remplacs par des caractres espace. Si on prfre remplir le vide avec des caractres 0, il suffit de faire prcder la valeur minimale dun zro.
printf("entier:%4d reel:%9f",12,1.23456); entier: 12 reel: 1.234560 printf("entier:%04d reel:%09f",12,1.23456); entier:0012 reel:01.234560

Algorithmique et programmation I

FIT 2

TP 01 5/7

Premiers programmes, les entres/sorties On peut galement fixer la prcision, c'est--dire le nombre de chiffres aprs la virgule en faisant suivre le nombre prcdent dun point et dune valeur entire. Si le nombre afficher contient plus de chiffres, un arrondi est ralis. Sinon, le nombre est complt avec des zros :
printf("%.8f %.2f",1.23456,1.23456); 1.23456000 1.23

Exercice 4
x3=0.000012345, x4=1e-10

Soient les variables relles (utilisez des double) suivantes : x1=1.2345,x2=123.45, et x5=-123.4568e15. Affichez leurs valeurs avec %f et avec %e.

Exercice 5
Soient les variables relles (float) suivantes : x1=12.34567, x2=1.234567, x3=1234567, et x6=1234.567. Utilisez printf pour obtenir laffichage suivant :
x4=123456.7, x5=0.1234567
12.35 1234567.00 0.12 1.23 123456.70 1234.57

Exercice 6
crivez un programme qui affiche la valeur 1234,5678 de type float avec les formats %d, %f et %e. Quobserve-t-on pour %d ?

7 Entres formates
La fonction scanf permet de saisir des valeurs de manire formate. Le principe est le mme que pour printf : on utilise une chane de formatage, et une suite de paramtres.
scanf(format,adr1,...,adrn);

La diffrence est quici, les paramtres sont des adresses. Ainsi, pour saisir un entier, on fera :
int i; scanf("%d",&i);

Loprateur & permet de prciser quon passe en paramtre non pas la variable i, mais son adresse. On peut saisir plusieurs valeurs la fois, lutilisateur devra les sparer par un retour chariot, un espace ou bien une tabulation :
int i,j,k; scanf("%d%d%d",&i,&j,&k);

Cela signifie que par dfaut, il nest pas possible de lire le caractre espace avec scanf. On utilise avec scanf les mmes codes de formatages (d, u, o, x, X, c, f, e, E) et modificateurs (h, l, L) que pour printf. On peut prciser la longueur maximale de la donne lue, en insrant une valeur avant le code de formatage (ou le modificateur). Par exemple, pour saisir un entier de 5 chiffres maximum :
int i; scanf("%5d",&i);

Il est galement possible de prciser que les valeurs lues doivent tre spares pa r des caractres particuliers. Par exemple, pour lire 3 valeurs spares par des points-virgules :
int i,j,k; scanf("%d;%d;%d",&i,&j,&k);

Remarque : scanf utilise un accs buffris au clavier, et ne consomme pas le dernier retour chariot. On a donc le mme problme que pour getchar.

Exercice 7
crivez un programme qui saisit un entier avec scanf et affiche le triple de cette valeur.

Algorithmique et programmation I

FIT 2

TP 01 6/7

Premiers programmes, les entres/sorties

Exercice 8
crivez un programme qui saisit une heure au format suivant : heures:minutes:secondes. Le programme doit afficher les valeurs saisies de la manire suivante (en respectant lalignement) :
entrez lheure (hh:mm:ss) : 1:2:34 1 heure(s) 2 minute(s) 34 seconde(s)

Algorithmique et programmation I

FIT 2

TP 01 7/7

Vous aimerez peut-être aussi