Systèmes Informatiques TD 1: langage C entrées/sorties et la fonction main()



Documents pareils
Arguments d un programme

Rappels Entrées -Sorties

Les chaînes de caractères

Bases de programmation. Cours 5. Structurer les données

Le langage C. Séance n 4

Chap III : Les tableaux

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Programmation système I Les entrées/sorties

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Le prototype de la fonction main()

Programmation système de commandes en C

INITIATION A LA PROGRAMMATION

UE Programmation Impérative Licence 2ème Année

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Algorithmique et Programmation, IMA

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Introduction au langage C

Programmation impérative

Conventions d écriture et outils de mise au point

Chapitre 1 : La gestion dynamique de la mémoire

Table des matières. Chapitre 4 : Variables pointeurs

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Initiation. àl algorithmique et à la programmation. en C

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Programmation C. Apprendre à développer des programmes simples dans le langage C

Compression de Données - Algorithme de Huffman Document de Conception

Cours d initiation à la programmation en C++ Johann Cuenin

Logiciel de base. Première année ENSIMAG

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation C. J.-F. Lalande. 15 novembre 2012

Programmation Classique en langage C

Les structures de données. Rajae El Ouazzani

Programmation système en C/C++

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Pensez à vous inscrire... si ce n est pas encore fait

Travaux Dirigés n 1 : chaînes de caractères

Gestion de la mémoire

Les structures. Chapitre 3


3IS - Système d'exploitation linux - Programmation système

Généralités sur le Langage Java et éléments syntaxiques.

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Architecture des ordinateurs

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Claude Delannoy. 3 e édition C++

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Les fichiers. Chapitre 4

Programmation en langage C

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

TD3: tableaux avancées, première classe et chaînes

INF 104 (SELC) Introduction au langage C

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Algorithmique, Structures de données et langage C

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

Langage Éric Guérin 5 octobre 2010

Support de Cours de Langage C. Christian Bac

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Exercice sur les Dockers

Utilisation d objets : String et ArrayList

Structure d un programme

PROGRAMMATION PAR OBJETS

Java Licence Professionnelle CISII,

Programmation en langage C Eléments de syntaxe

Langages et Concepts de Programmation Introduction à la programmation en langage C

SUPPORT DE COURS. Langage C

Codage d information. Codage d information : -Définition-

Cours Informatique 1. Monsieur SADOUNI Salheddine

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

ALGORITHMIQUE ET PROGRAMMATION En C

Principes des langages de programmation INF 321. Eric Goubault

V- Manipulations de nombres en binaire

Cours de C. Allocation dynamique. Sébastien Paumier

UE C avancé cours 1: introduction et révisions

Architecture des ordinateurs

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

Programmation en C - Sommaire

Le système de gestion des fichiers, les entrées/sorties.

Cours de programmation avancée. Le langage C. Université du Luxembourg

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

IV- Comment fonctionne un ordinateur?

Les débordements de tampons et les vulnérabilités de chaîne de format 1

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Cours Programmation Système

Programmation assembleur : aperçu

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Utilisation de la Kinect

Introduction à C++ et à wxwidgets

Cours 6 : Tubes anonymes et nommés

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

COURS D'INFORMATIQUE: LANGAGE C NOTES DE COURS

Programmation défensive

Transcription:

Systèmes Informatiques TD 1: langage C entrées/sorties et la fonction main() P. Bakowski bako@ieee.org

Fonctions printf() et scanf() Les programmes en langages C ont besoin des fonctions qui permettent de lire les données (arguments) et d afficher les résultats. arguments résultats P. Bakowski 2

Fonctions printf() et scanf() Ces fonctions doivent également convertir les données saisies et affichées en texte ASCII en format interne qui est binaire. arguments code binaire 00..1010 11..0010 01..1110 résultats P. Bakowski 3

Fonctions printf() et scanf() Les données/arguments d entrée peuvent être fournis par les fonctions type scanf(..) où directement par l interface de la fonction main(). arguments du programme main(..) données scanf(..) P. Bakowski 4

Fonctions printf() et scanf() Les résultats sont affichés par le biais de la fonction printf(..) main(..) scanf(..) printf(..) résultats P. Bakowski 5

Fonctions printf() et scanf() Les résultats sont affichés par le biais de la fonction printf(..) main(..) scanf(..) printf(..) résultats Dans ce TD nous allons étudier ces fonctions P. Bakowski 6

Exercice 1 - fonction printf() Exercice 1: étude de la fonction printf(..,..) Écrire un programme simple sans argument (main()) qui affiche trois valeurs numériques P. Bakowski 7

Exercice 1 - fonction printf() Exercice 1: étude de la fonction printf(..,..) Écrire un programme simple sans argument (main()) qui affiche trois valeurs numériques initialisées comme un nombre décimal (vd), comme un nombre héxa-décimal (vh), et comme un nombre octal (vo). P. Bakowski 8

Exercice 1 - fonction printf() Exercice 1: étude de la fonction printf(..,..) Écrire un programme simple sans argument (main()) qui affiche trois valeurs numériques initialisées comme un nombre décimal (vd), comme un nombre héxa-décimal (vh), et comme un nombre octal (vo). A l affichage appliquer à chaque valeur les trois conversions décimale, héxa-décimale, octale. P. Bakowski 9

Exercice 1 - fonction printf() La fonction printf(..) est une «super» fonction; ; elle peut recevoir un nombre d arguments variable. P. Bakowski 10

Exercice 1 - fonction printf() La fonction printf(..) est une «super» fonction; elle peut recevoir un nombre d arguments variable. Dans la première partie elle a besoin des caractères de conversion; ; ces caractères indiques comment on veut afficher les données binaires: P. Bakowski 11

Exercice 1 - fonction printf() La fonction printf(..) est une «super» fonction; elle peut recevoir un nombre d arguments variable. Dans la première partie elle a besoin des caractères de conversion; ces caractères indiques comment on veut afficher les données binaires: %d - pour l affichage en décimal (0,..,9) %x - pour l affichage en héxa-décimal (0,..,9,..,f) %o - pour l affichage en octal (0,..,7) P. Bakowski 12

Exercice 1 - fonction printf() La fonction printf(..) est une «super» fonction; elle peut recevoir un nombre d arguments variable. Dans la première partie elle a besoin des caractères de conversion; ces caractères indiques comment on veut afficher les données binaires: %d - pour l affichage en décimal (0,..,9) %x - pour l affichage en héxa-décimal (0,..,9,..,f) %o - pour l affichage en octal (0,..,7) les données binaires - variables sont listées dans la deuxième partie d arguments P. Bakowski 13

Exercice 1 - fonction printf() main() // pas d arguments { int vd = 99; // variable décimale int vh = 0xab; // héxa-décimale int vo = 072; // octale déclaration et initialisation P. Bakowski 14

Exercice 1 - fonction printf() main() // pas d arguments { int vd = 99; int vh = 0xab; int vo = 072; printf("vd= %d, %x, %o",, vd,vd,vd); // compléter le programme P. Bakowski 15

Exercice 2 - fonction scanf() Exercice 2: étude de la fonction scanf(..,..) Écrire un programme simple sans argument (main()) qui lit trois valeurs numériques exprimées comme P. Bakowski 16

Exercice 2 - fonction scanf() Exercice 2: étude de la fonction scanf(..,..) Écrire un programme simple sans argument (main()) qui lit trois valeurs numériques exprimées comme un nombre décimal (vd), comme un nombre héxa- décimal (vh), et comme un nombre octal (vo). P. Bakowski 17

Exercice 2 - fonction scanf() Exercice 2: étude de la fonction scanf(..,..) Écrire un programme simple sans argument (main()) qui lit trois valeurs numériques exprimées comme un nombre décimal (vd), comme un nombre héxa- décimal(vh), et comme un nombre octal (vo). Afficher le valeurs saisies en appliquant à chaque valeur les trois conversions décimale, héxa- décimale, octale. P. Bakowski 18

Exercice 2 - fonction scanf() main() // pas d arguments { int vd; int vh; int vo; scanf("%d,%x,%o", &vd,&vh,&vo); Attention: : on doit fournir les adresses des arguments à lire - remplir P. Bakowski 19

Exercice 2 - fonction scanf() main() // pas d arguments { int vd; int vh; int vo; scanf("%d,%x,%o", &vd,&vh,&vo); printf("vd= %d, %x, %o", vd,vd,vd); // compléter le programme P. Bakowski 20

Fonction main() et ses arguments Étude de la fonction main(..) La fonction main(..) permet de récupérer les arguments du programme: main(int argc, char *argv[]) P. Bakowski 21

Fonction main() et ses arguments Étude de la fonction main(..) La fonction main(..) permet de récupérer les arguments du programme: main(int argc, char *argv[]) tableau de pointeurs vers des chaînes de caractères! P. Bakowski 22

Fonction main() et ses arguments main(int argc, char *argv[]) Le premier argument indique le nombre d arguments (chaînes de caractères), le nom du programme inclut. P. Bakowski 23

Fonction main() et ses arguments %nom_du_programme toto tata argv[0] argv[1] argv[2] main(int argc, char *argv[]) argc=3 argv[0] argv[1] argv[2] argv[3] P. Bakowski 24

Fonction main() et ses arguments %nom_du_programme toto tata main(int argc, char *argv[]) argc=3 argv[0] argv[1] argv[2] argv[3] P. Bakowski 25

Fonction main() et ses arguments %nom_du_programme toto tata main(int argc, char *argv[]) argc=3 argv[0] argv[1] argv[2] argv[3] P. Bakowski 26

Fonction main() et ses arguments %nom_du_programme toto tata main(int argc, char *argv[]) argc=3 argv[0] argv[1] argv[2] argv[3] P. Bakowski 27

Fonction main() et ses arguments %nom_du_programme toto tata main(int argc, char *argv[]) argc=3 argv[0] argv[1] argv[2] argv[3] (*char) 0 pointeur NULL P. Bakowski 28

Exercice 3 - fonction main() Écrire un programme avec l interface main: main(int argc, char *argv[]) P. Bakowski 29

Exercice 3 - fonction main() Écrire un programme avec l interface main: main(int argc, char *argv[]) Qui permet d afficher les chaînes (arguments) et la taille des chaînes saisies dans la ligne de commande. P. Bakowski 30

Exercice 3 - fonction main() Écrire un programme avec l interface main: main(int argc, char *argv[]) Qui permet d afficher les chaînes (arguments) et la taille des chaînes saisies dans la ligne de commande. Utiliser la fonction printf(..,..) et strlen(..). P. Bakowski 31

Exercice 3 - fonction main() La fonction strlen(..) permet de calculer le nombre d octets dans une chaîne; comme l argument on donne l adresse du premier caractère! P. Bakowski 32

Exercice 3 - fonction main() La fonction strlen(..) permet de calculer le nombre d octets dans une chaîne; comme l argument on donne l adresse du premier caractère! Attention: : la chaîne doit se terminer par le caractère ASCII 0 (en binaire 00000000) P. Bakowski 33

Exercice 3 - fonction main() La fonction strlen(..) permet de calculer le nombre d octets dans une chaîne; comme l argument on donne l adresse du premier caractère! Attention: : la chaîne doit se terminer par le caractère ASCII 0 (en binaire 00000000) Le caractère ASCII 0 n est pas pris en compte! P. Bakowski 34

Exercice 3 - fonction main() main(int argc, char *argv[]) { int i; for (i=0; i<argc; i++) printf("%s %s:%d \n",argv[i],strlen(argv[i])); } caractère nouvelle ligne affichage des chaînes de caractères P. Bakowski 35

Exercice 4 - fonction main() Exercice 4: étude de la fonction main(..) Écrire un programme qui permet d afficher les chaînes (arguments) saisies dans la ligne de commande. Cette fois ci les chaînes représentent les valeurs numériques. P. Bakowski 36

Exercice 4 - fonction main() Exercice 4: étude de la fonction main(..) Écrire un programme qui permet d afficher les chaînes (arguments) saisies dans la ligne de commande. Cette fois ci les chaînes représentent les valeurs numériques. %nom 345 678 argv[0] argv[2] argv[1] P. Bakowski 37

Exercice 4 - fonction main() Exercice 4: étude de la fonction main(..) Écrire un programme qui permet d afficher les chaînes (arguments) saisies dans la ligne de commande. Cette fois ci les chaînes représentent les valeurs numériques. %nom 345 678 argv[0] argv[2] argv[1] Utiliser la fonction de conversion atoi() pour initialiser les variables internes. Afficher le contenu (en héxa- décimal) ) de ces variables P. Bakowski 38

Exercice 4 - fonction main() main(int argc, char *argv[]) { int a[10]; for(i=0;i<argc-1;i++) { } %nom 345 678.. a[i] = atoi(argv[i+1]); printf("%x\n",a[i]); n",a[i]); } maximum 10 arguments numériques P. Bakowski 39

Fonction main() et pointeurs Les pointeurs sont des adresses qui pointent vers les données (ou autres pointeurs). P. Bakowski 40

Fonction main() et pointeurs Les pointeurs sont des adresses qui pointent vers les données (ou autres pointeurs). Un pointeur est enregistré comme une valeur numérique codée sur 32 bits. 32 bits P. Bakowski 41

Fonction main() et pointeurs Les pointeurs sont des adresses qui pointent vers les données (ou autres pointeurs). Un pointeur est enregistre comme une valeur numérique codée sur 32 bits. Initialement le contenu d un pointeur est égal à zéro (pointeur NULL) int *ptra; int *ptrb; NULL NULL P. Bakowski 42

Fonction main() et pointeurs On initialise un pointeur avec l adresse qui pointe vers une zone qui contient des données (ou un/des pointeur/s). int *ptra; int *ptrb; P. Bakowski 43

Fonction main() et pointeurs Cette zone peut être réservée statiquement par une déclaration (par exemple int tab[10]) ou dynamiquement par une fonction d allocation dynamique malloc(..). int *ptrsta; int tab[10] ptrsta = tab; int *ptrdyn; ptrdyn = malloc(sizeof(int)*10); P. Bakowski 44

Exercice 5 - main() et pointeurs Exercice 5: étude de la fonction main(..) et de pointeurs Écrire un programme qui permet de lire, de stocker et de comparer le contenu de argv[1] et argv[2]. %comp toto tata contenu argv[1] = contenu argv[2] P. Bakowski 45

Exercice 5 - main() et pointeurs Exercice 5: étude de la fonction main(..) et de pointeurs Écrire un programme qui permet de lire, de stocker et de comparer le contenu de argv[1] et argv[2]. %comp toto tata contenu argv[1] = contenu argv[2] Attention: on compare le contenu adressé par les pointeurs (pas les adresses enregistrées dans les pointeurs) P. Bakowski 46

Exercice 5 - main() et pointeurs déclarer deux pointeurs ptr1 et ptr2 (de type char) char ptr1,ptr2; P. Bakowski 47

Exercice 5 - main() et pointeurs transférer les chaînes/arguments dans les zones mémoire réservées dynamiquement par la fonction malloc(..); ptr1 = malloc(strlen(argv[1]+1)); char ptr1,ptr2; ptr2 = malloc(strlen(argv[2]+1)); P. Bakowski 48

Exercice 5 - main() et pointeurs transférer les chaînes/arguments dans les zones mémoire réservées dynamiquement par la fonction malloc(..); char ptr1,ptr2; strcpy(ptr1,argv[1]); argv[1] => strcpy(ptr2,argv[2]); argv[2] => P. Bakowski 49

Exercice 5 - main() et pointeurs comparer les chaînes par le biais de la fonction strcmp(..,..) ptr1 ptr2 strcmp(ptr1,ptr2) \0 \0 La comparaison s arrête sur le premier caractère ASCII 0 P. Bakowski 50

Exercice 5 - main() et pointeurs comparer les chaînes par le biais de la fonction strcmp(..,..) afficher le résultat [«oui», «non»] ptr1 ptr2 strcmp(ptr1,ptr2) \0 \0 strcmp(ptr1,ptr2) égale à 0 => chaînes sont égales affichage «oui» sinon «non» P. Bakowski 51

Résumé fonction printf(..) affichage sortie et conversion des données formatées fonction scanf(..) lecture et conversion des données formatées arguments du programme main(..) int argc et char *argv[] Puis: pointeurs, allocation statique et dynamique P. Bakowski 52