Algorithmique et langage C. préambule Un processus est Un phénomène que l’on peut décrire. L’ algorithmique est l’ outil logique définissant les processus.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Introduction au Langage C,C++
Programmation Orienté Objet en C++
Rappels C.
Introduction au langage C
Les tableaux. Tableau? Erreur de langage ! Un tableau est généralement une liste… Cest donc une liste de mêmes éléments : Liste de notes Liste de noms.
Piles, files et listes: notions théoriques
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…
C.
Les structures de données
Structures et unions types énumérés Qu'est-ce qu'une structure
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Chap. 1 Structures séquentielles : listes linéaires
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
Lycée Louis Vincent SEANCE 6 Python Les listes Lundi 25 novembre 2013.
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Démarche de résolution de problèmes
II. Chaînage, SDD séquentielles
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
II. Chaînage, SDD séquentielles
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les fichiers binaires en C++
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Présentation Structures de Données et TDA
Points importants de la semaine Les allocations programmées de mémoire. Les enregistrements.
IFT 6800 Atelier en Technologies d’information
8PRO100 Éléments de programmation Les types composés.
Méthode et Outils pour la Programmation
Structures de données IFT-10541
C++ : variables Déclaration de variables
Structures de données IFT-2000
Plan cours La notion de pointeur et d’adresse mémoire.
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
Stocker plusieurs valeurs de même type dans une variable
Le langage C Structures de données
Objectifs A la fin de ce chapitre, vous pourrez : présenter l'utilisation d'opérations de chargement de données par chemin direct décrire l'utilisation.
Un survol du language C.
Labo 4 : Les structures et les entrées et sorties
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
ETNA – 1ème année Guillaume Belmas –
PostgreSQL – Présentation
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
1 Système d’exploitation Les scripts csh 1 ère Année Année Tienté HSU.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
UE MAREP Cours 12 : Révisions
Introduction au langage C Structures de données
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Algorithmique et langage C. Et me la renvoyer bien sûr… Developpez.com, wiki, siteduzero et autre son les bienvenus… (les questions sont en orange) C’est.
PRO-1027 Programmation Scientifique en C
1 Listes des méthodes de la classe string, et exemples.
LES TABLEAUX Définition: Création d’un tableau:
Algorithmique et langage C
Projet lif7 : Zelda Armes
Introduction au langage C
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Transcription de la présentation:

Algorithmique et langage C

préambule Un processus est Un phénomène que l’on peut décrire. L’ algorithmique est l’ outil logique définissant les processus en algorithmes. Un algorithme est donc une suite d’instruction à suivre pour produire un processus. tout deux fondent un système logique ou presque…

préambule le programme est la transcription de ces algorithmes respectant les paradigmes du langage utilisé. (un paradigme étant une représentation du monde, une philosophie, un système) bref… la règle du jeu! un compilateur permet la transcription du programme en un code machine exécutable. Code machine qui pourra être exécuté, si tant est que la configuration hardware et software requise est respecté. l’algorithme est correct. La transcription dans le programme est correcte.

processus, traitement et autre olibrius Il traite des entrées et selon son exécution émet des sorties et/ou des erreurs processus entrée in stdin sortie out stdout sortie d’erreur error stderr

les données Tout processus commence par des données auquel on applique par la suite un traitement

Entrée / Sortie… même combat! les E/S sont potentiellement de deux natures : –Stockés fichier (txt, xml, xsd, ini, VSAM,…), base de donnée Son dilemme consistant à comment accéder, classer l’information et comment la lire, créer, modifier, supprimer. –Émises/reçus commande, pipe, socket, protocole de communication réseau, client serveur, n-tiers… Son dilemme consistant à comment ouvrir/fermer la communication et transmettre/recevoir l’information.

Entrée / Sortie… et au milieu alors ? les E/S « externe » et les données « internes »(dites de travail) au processus sont stockés dans les variables. ces variables sont définit par un type et un nom. au nom correspond son adresse mémoire. (il est unique, mais 2 noms peuvent partager la même adresse) au type correspond la taille mémoire occupé. (bien sûr plusieurs types peuvent partager la même taille ) Au final la déclaration d’une variable A de type nombre s’écrit : char A;

Le type ou pourquoi les pommes ne donnent pas de jus de citron ? le type définit la taille, mais définit aussi le comportement de la variable. Exemple : on ne peut pas appliquer une racine carré à une chaîne de caractère. Malgré tout, les types admettent des instructions intrinsèques l’ affectation de contenu A  B le contenu de B est copié dans le contenu de A (B et A étant de même type) Le conversion de type A  (char ) B A qui est un char reçoit la valeur converti en char de B (A et B étant de même taille)

Les types de base en C Type de donnéeSignificationTaille (en octets) à titre d’exemplePlage de valeurs acceptée charCaractère1-128 à 127 unsigned charCaractère non signé10 à 255 short intEntier court à unsigned short intEntier court non signé20 à intEntier 2 (sur processeur 16 bits) à (sur processeur 32 bits) à unsigned intEntier non signé 2 (sur processeur 16 bits)0 à (sur processeur 32 bits)0 à long intEntier long à unsigned long intEntier long non signé40 à floatFlottant (réel)43.4* à 3.4*10 38 doubleFlottant double81.7* à 1.7* long doubleFlottant double long103.4* à 3.4* Ce qui nous amène à la question ?  Et le nom (adresse mémoire pour ceux qui suivrait pas) … C’est un type?

Quelque part … dans la mémoire The pointeur ou le contenu d’un contenant, peut-être un contenant !!! Connaissant ce contenant, on trouve le contenu donc le contenu du contenu du contenant qui n’est autre que le contenu de son contenant, lui-même contenu dans un contenant … Le pointeur est un des grands paradigmes de l’informatique. Pas de secret, c’est un type, il se déclare par * (en C) int *ptA Le pointeur représente une adresse mémoire (il pointe un certain type ici) Une variable A est créé son adresse sur un processeur et OS 32 bits est alors codé sur … 4 octets je créer un pointeur sur 32 bits 1 octet Autre part … dans la mémoire E F A C 0xCAF9 0xCAFA 0xCAFB 0xCAFC 0xDEC4 Et je lui affecte l’adresse de A 0xCAFD 0xCAFE 0xDECA D’où (calembour douteux du geek) ? J’ai du café dans le déca …

int * ptrA, A=10, imageA; ptrA = & A; imageA= * ptrA; * ptrA=20; Résultat?... Il y a 10 dans imageA et 20 dans A. les pointeurs Version code… Création du pointeur d’entier ptrA à valeur nulle. Création de l’entier A valorisé à 10. Création de l’entier imageA. ptrA est valorisé avec l’adresse de A. imageA est valorisé avec le contenu pointé par prtA. le contenu pointé par prtA est valorisé à 20.

Un tableau de taille n est un pointeur adressant une zone mémoire de n * taille du type unitaire. De même pour un tableau de multidimensionnel (sa zone mémoire est le produit des tailles de toutes ses dimensions) Un tableau à 3 dimensions se conceptualise comme suis tableau int tab[10][5][3];

tableau Il peut être initialisé avec des valeurs par défaut int tab2[10]={1,2,,3,4,5,6,7,8,9}; Il peut se convertir en pointeur int *ptr; Et donc ptr = tab2; peut s'écrire ptr = &tab2[0]; comme ptr = &tab2[5]; peut s'écrire ptr = tab2 + 5 * sizeof(int); ???

Structure et union Une structure est un groupe contenant plusieurs type déclaré struct personne { char prenom[25]; char nom[25];} a,*ptr_a; Ensuite on l’utilise comme suit ptr_a = &a; a.prenom = "adrien"; ptr_a->nom = "le labousse"; Prenom nom structure personne

Structure et union Une union est un groupe contenant plusieurs type déclaré à la même adresse. union compte { char rib_val[22]; struct RIB { char code_banque[5]; char code_guichet[4]; char num_compte[11]; char clef[2];} rib_struct; } a; Ainsi rib_struct est équivalant à rib_val rib_val code_banque code_guichet num_compte clef union compte

simple et double les structures de données dynamiques Liste chaînée data1 ptrPrev ptrNext data2 ptrPrev ptrNext data3 ptrPrev ptrNext data4 ptrPrev ptrNext structure

Liste chaînée pile (LIFO) et file (FIFO), la ressemblance LIFO  Last In First Out FIFO  First In First Out ils possèdent deux pointeurs : La tête (élément origine)  ptrHead La queue (dernier élément inséré)  ptrTail Lors de l’insertion d’un élément A, ils ont le même comportement : A.ptrPrev = ptrTail; //on accroche A à la liste ptrTail->prtNext = &A;// dans les 2 sens ptrTail = &A; //modification du pointeur de queue Bref ce sont toutes les deux des…??? Listes chaînées bien sûr  vous suivez ? hein… 

pile (LIFO) et file (FIFO) la ressemblance data1 ptrPrev ptrNext data2 ptrPrev ptrNext data3 ptrPrev ptrNext data4 ptrPrev ptrNext Soit une liste et ses pointeurs ptrHead ptrTail Insertion 1 er élémentInsertion 2 eme élémentInsertion 3 eme élémentInsertion 4 eme élément

pile (LIFO) et file (FIFO) la différence la pile Lors de la lecture –Lit le contenu de l’élément de queue. –le pointeur de queue est affecté à l’adresse de l’élément précédent. vide si le pointeur précédent de l’élément de queue est nul. la file Lors de la lecture –Lit le contenu de l’élément de tête. –le pointeur de tête est affecté à l’adresse de l’élément suivant. vide si le pointeur suivant de l’élément de tête est nul.

pile (LIFO) et file (FIFO) la différence data1 ptrPrev ptrNext data2 ptrPrev ptrNext data3 ptrPrev ptrNext data4 ptrPrev ptrNext Soit une liste remplie et ses pointeurs ptrHead LIFO ptrTail FIFO Lecture 1 er élémentLecture 2 eme élémentLecture 3 eme élémentLecture 4 eme élément ptrHead FIFO ptrTail LIFO Lecture 4 eme élémentLecture 3 eme élémentLecture 2 eme élémentLecture 1 er élément

les structures de données dynamiques les arbres binaires (binaire pour l’exemple …simple ) data1 ptrLeftChild structure ptrParent ptrRightChild data2 ptrLeftChild ptrParent ptrRightChild data3 ptrLeftChild ptrParent ptrRightChild data4 ptrLeftChild ptrParent ptrRightChild data5 ptrLeftChild ptrParent ptrRightChild data6 ptrLeftChild ptrParent ptrRightChild data7 ptrLeftChild ptrParent ptrRightChild  mon descendant  mon ascendant

les structures de données dynamiques les diagrammes… c’est Santa Barbara data1 id ptr [ ] data2 id ptr [ ] data3 id ptr [ ] data4 id ptr [ ] data5 id ptr [ ] data6 id ptr [ ] data7 id ptr [ ] data8 id ptr [ ] data9 id ptr [ ] data0 id ptr [ ]

int* ptr_mem; ptr_mem = (int *)malloc(N*sizeof(int)); ptr_mem = (int *)realloc(ptr_mem, M*sizeof(int)); free(ptr_mem); ptr_mem = NULL; Fonction d’allocation mémoire dynamique en C Création des pointeurs à valeur nulle. ptr_mem est valorisé avec l’adresse d’une zone mémoire de taille de N int La zone mémoire pointé par ptr_mem est réalloué à la taille de M int et ptr_mem est valorisé avec l’adresse de cette nouvelle zone. Libération de la mémoire de la zone pointée Que reste-t-il donc dans prt_mem? Il pointe toujours son adresse!!!