C, seconde séance. le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de:



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

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

Chapitre 1 : La gestion dynamique de la mémoire

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

Conventions d écriture et outils de mise au point

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

Les structures de données. Rajae El Ouazzani

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

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

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

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

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

Le langage C. Séance n 4

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

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)

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Le prototype de la fonction main()

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Programmation en langage C

Les processus légers : threads. Système L3, /31

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmique et Programmation, IMA

Programmer en JAVA. par Tama

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

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

Les structures. Chapitre 3

Algorithmique, Structures de données et langage C

Chap III : Les tableaux

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

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

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

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

Programmation système I Les entrées/sorties

Introduction au langage C

Cours de C. Allocation dynamique. Sébastien Paumier

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

SUPPORT DE COURS. Langage C

Java Licence Professionnelle CISII,

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


Introduction à MATLAB R

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

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

INITIATION A LA PROGRAMMATION

Les arbres binaires de recherche

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Claude Delannoy. 3 e édition C++

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

Principes des langages de programmation INF 321. Eric Goubault

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation impérative

Arguments d un programme

Cours Programmation Système

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

Analyse de sécurité de logiciels système par typage statique

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

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

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Recherche dans un tableau

Outils pour la pratique

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

Cours 1 : La compilation

TP3 : Manipulation et implantation de systèmes de fichiers 1

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Cours d Algorithmique et de Langage C v 3.0

Langage Éric Guérin 5 octobre 2010

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

Le langage C. Introduction, guide de reference

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Introduction à la programmation concurrente

STAGE IREM 0- Premiers pas en Python

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

Programmation système en C/C++

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

TP, première séquence d exercices.

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP : Gestion d une image au format PGM

V- Manipulations de nombres en binaire

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Programmation en C/C++

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

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Gestion de la mémoire

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Programmation Classique en langage C

Gestion mémoire et Représentation intermédiaire

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Poker. A rendre pour le 25 avril

Transcription:

C, seconde séance le if then else n est pas une expression, mais une instruction ( Caml) se souvenir de: false, c est 0 ( \0 aussi) test d égalité: == pour printf: %d entier, %f flottant, %c caractère, %p adresse (pointeur), %s chaîne de caractères (tableau de char) en mettant les initialisations avant la boucle, et les incréments dans le corps de la boucle, on transforme un for en un while

Deux petits trucs le préprocesseur de C #include <stdio.h> lire les prototypes des fonctions fournies par la librairie stdio #define MAX 100 macro (abréviation) définition de types typedef Démo def type.c

Pointer sur une structure struct coup { char colonne; int ligne; }; /* un coup aux échecs */ colonne ligne int f(struct coup c){ struct coup *a; a = &c; (*a).colonne = E ; (*a).ligne = 2;... (*a).colonne et non pas *a.colonne notation: a->colonne synonyme de (*a).colonne a->ligne = a->ligne + 1

Pointer sur une structure récursivité dans les données struct personne { int age; struct personne *suivant; }; manipulation: struct personne adam = { 0,??? }; le pointeur invalide: NULL constante définie dans stddef.h, sert en particulier pour signaler une erreur

Sur l allocation Démo fichier alloc.c la fonction malloc attend une taille et renvoie un pointeur vers une zone mémoire nouvellement allouée struct truc *p; p = (struct truc *) malloc(sizeof(struct truc)); pour faire malloc, il faut #include <stdlib.h> void * malloc(size t SIZE) void *: le type le plus général d un pointeur il est bon de transtyper (coercer) à chaque utilisation de malloc... et d ailleurs le contraire de malloc s appelle free

La mémoire et les tableaux On veut ranger une quantité d entités de même type en mémoire: on les met côte à côte, et on appelle ça un tableau Exemple: tableau d entiers k 0 k 1... k n 1 adresse de début du tableau Un tableau, c est une tranche de mémoire ainsi qu une granularité de la tranche

Tableaux déclaration et manipulation déclaration int mois[12]; 12 entiers accès aux cases du tableau, de mois[0] à mois[11] mois[1] = 28; mois[2] = mois[0]; initialisation char voyelles[5] = { a, e, i, o, u }; si on initialise partiellement, le reste est mis à zéro pour mettre tout le tableau à i, on doit faire une boucle il ne faut pas sortir d un tableau (mais pas de contrôle statique) tout plante Segmentation fault... ou pas (c est encore pire) Démo listes.c

Le cas particulier des tableaux de caractères en C, les chaînes de caractères sont des tableaux de char pas besoin d écrire char s[6] = { b, a, t, e, a, u };, on peut directement écrire char s[] = "bateau"; mais ceci définit un tableau de 7 caractères, le dernier étant \0 impression formatée: printf("%s\n",x); x doit être terminé par \0 (sinon ça peut être spectaculaire) Rq: \0 c est false, c est 0... exemples Démo longstr.c, str len.c, autre str len.c, virer.c

Qu est-ce qu un tableau? un tableau t: une adresse de début (t, ou &t[0]) une granularité (type du contenu) ce qu est t au moment de la création de t, la taille est associée au tableau (allocation mémoire) après quoi elle est oubliée, et t est une constante, de type tableau d entiers du coup, lorsque l on passe t à une fonction, on passe l adresse de début du tableau on passe l adresse, pas vraiment le tableau void initialise (int t[n]){... }; est autorisé mais ne sert à rien, car t n existe que comme adresse de début d un tableau d entiers passer N comme argument supplémentaire de initialise la taille d un tableau doit être déterminée statiquement: pas de int n=10; int tab[n];

Tableaux à deux dimensions tableaux de tableaux ex.: int t[3][10] 3 tableaux de 10 entiers for (ligne=0; ligne<3; ligne++) for (colonne=0; colonne<10; colonne++) printf("%d ",t[ligne][colonne]); NB: t[i][j] et non t[i,j]!! (i,j c est la séquence) on peut omettre une coordonnée: void remplit(int t[ ][10]) tableaux de tableaux et contiguïté: imbrication des boucles les matrices sont rectangulaires les int array array en OCaml Démo matrices.c

Relations entre pointeurs et tableaux soit int t[10]; tableau t: adresse de t[0] + type du contenu de t + taille définissons un pointeur int *p = t; on peut faire p[0], p[1], p[2],...... mais aussi *p, *(p+1), *(p+2) = arithmétique sur les pointeurs p[i] abrège *(p+i) et renvoie ici la même chose que t[i] l information int dans le type de p (et de t) sert à savoir la taille des pas lorsque l on fait p+i le nom t dénote une expression constante de type int * (pas de t++) un tableau est un tableau à la déclaration après, c est un pointeur constant un tableau implémente une forme d appel par adresse indexé par un entier

Arithmétique des pointeurs, suite on utilise volontiers un pointeur pour parcourir un tableau for (p=&message[0]; *p!= \0 ; p++)... int *p; p=&t[4]; non seulement peut-on faire *(p+i), mais on peut aussi faire p-q, si p et q sont deux pointeurs pointant à l intérieur d un même tableau, ce qui renvoie un int (en fait, un ptrdiff t) Say it loud: si t est un tableau, on ne peut modifier t... mais on peut modifier un pointeur int premier zero(int t[]) { int *p = t; while(*p!=0)p++; return (p-t)+1; }

Debugger les programmes: gdb

Debugger avec gdb un debugger: programme qui supervise l exécution d un autre programme une option particulière pour la compilation: gcc -Wall -g machin.c -o machin Démo demo gdb.c