PROGRAMMATION AVANCÉE “C” E-mail : [email protected] Pr. Wissam JENKAL Professor at Industrial Departement of National School Of Applied Science of Agadir Ibn Zohr University PhD on signal processing and embedded systems Current research interests include Embedded systems and Information Technologies Cycle Préparatoire ENSA-S4 2021/2022 PROGRAMMATION AVANCÉE “C” Pourquoi ? Why ? 2 PROGRAMMATION AVANCÉE “C” PROGRAMMATION AVANCÉE “C” Pourquoi ? / Why ? *Challenge est l’utilisation des accélérateurs des données massives (Big Data) : Systèmes Hétérogènes PROGRAMMATION AVANCÉE “C” Pourquoi ? / Why ? PROGRAMMATION AVANCÉE “C” Pourquoi ? / Why ? Processeur Core i7 PROGRAMMATION AVANCÉE “C” Application Fields 1/2 PROGRAMMATION AVANCÉE “C” Application Fields 2/2 PROGRAMMATION AVANCÉE “C” Introduction, Chapter I: Array Reminder, Chapter II: Strings of Characters, Chapter III: Pointers in C, Chapter IV: Dynamic Memory Allocation, Chapter V: Functions and Files Header, Chapter VI: Dynamic Structures in C, Chapter VII: Files in C, Chapter VIII: Linked List Data Structure. 2 Introduction Méthodologie de programmation: Information/Algorithmes/Programmation | Introduction • Traitement de l’information 1 0 • Partie (1) - Codage de l’information : Entrée (Lire, scanf,…) • Partie (2) : Traitement (Relations et équations, …) • Partie (3) – Décodage de l’information : Sortie (Ecrire, Afficher, printf,…) Introduction Méthodologie de programmation: Information/Algorithmes/Programmation | Introduction • Traitement de l’information 1 1 • (1): Information (Problème à résoudre?: PrixTTC=PrixHT+PrixHT*TauxTVA), • (2): Analyse, • (3): Algorithme, • (4): Langage de programmation (C, VB, C++, Java, LabVIEW, C#, OpenCL, CUDA, OpenGL, OpenMP, Simula, Smalltalk, Python, Corba, J2EE,…) • (5) Solution: Fichier exécutable (.exe) Introduction Classification: Programmation (3 types) • Programmation Modulaire : Découpage en modules. Le programme est divisé en blocs (fonctions – voir chapitre V) avec leurs propres variables. Exemple: Langage C,… En C le programme principal s’appelle toujours main (fonction principale), Un programme C contient au minimum une fonction (main). | Introduction • Programmation Orientée Objet : Programmation qui supporte l’interaction d’objets ("classes" – voir programme GIIE 3ème ENSA). Chaque objet contient des données et des méthodes qui manipulent les données de l’objet. Exemples: Langages C++, Java, C#, LabVIEW, ... 12 • Programmation Parallèle : Plusieurs tâches séquentielles s'exécutant simultanément, habituellement appelées processus Exemples: Langages C++, OpenMP, OpenCL, CUDA, LabVIEW, VHDL (Description), … Chapitre I: Rappel sur les tableaux en C • Les tableaux sont les variables structurées en C, • C permet un accès direct et plus rapide aux données d'un tableau (via les pointeurs), • Les chaînes de caractères sont déclarées en C comme tableaux de caractères, • Elles permettent l'utilisation d'un certain nombre de notations et de fonctions spéciales (Chapitre II), | Introduction Tableaux à une dimension 13 • Un tableau (à une dimension) A est une variable structurée formée d'un nombre N de variables simples de même type, (composantes du tableau). Le nombre de composantes N est alors la dimension du tableau. Chapitre I: Rappel sur les tableaux en C Tableaux à une dimension | Chapitre I: Rappel sur les tableaux en C Exemple : int T[12]={31,28,31,30,31,30,31,31,30,31,30,31} Tableau de type int de 12 composantes initialisées par les valeurs respectivement 31, 28, 31, ... , 31 14 Accéder aux données du tableau Accéder à la première composante du tableau par T[0], à la deuxième composante par T[1], . . . à la dernière composante par T[11] Chapitre I: Rappel sur les tableaux en C Déclaration et Mémorisation Déclaration : Type NomTableau[Dimension]; ---> (char, int, long, float, double,...) Les noms des tableaux sont des identificateurs, Exemples : | Chapitre I: Rappel sur les tableaux en C char Ch[25]; int T[25]; ou bien long A[15]; float Tab[100]; ou bien double TabA[10]; 15 Chapitre I: Rappel sur les tableaux en C | Chapitre I: Rappel sur les tableaux en C Déclaration et Mémorisation 16 Chapitre I: Rappel sur les tableaux en C | Chapitre I: Rappel sur les tableaux en C Déclaration et Mémorisation 17 Chapitre I: Rappel sur les tableaux en C Mémorisation : En programmation C, le nom d’un tableau est le représentant de l’adresse du premier élément du tableau. Les adresses des autres composantes sont calculées automatiquement | Chapitre I: Rappel sur les tableaux en C relativement à cette adresse. Exemple : int A[5]={1200,2300,3400,4500,5600}; 18 Remarque: Si un tableau est formé de N composantes et si une composante a besoin de M octets en mémoire, alors le tableau occupera de N*M octets. Exemple : En supposant qu'une variable de type long occupe 4 octets (sizeof(long)=4), pour le tableau T déclaré par: long T[15]; C réservera N*M = N*sizeof(type) = 15*4 = 60 octets en mémoire. Chapitre I: Rappel sur les tableaux en C Initialisation et réservation automatique: Initialisation Lors de la déclaration d'un tableau, l’initialisation des composantes du tableau est indiquée par une liste des valeurs entre accolades { }. Exemples int A[5] = {10, 20, 30, 40, 50}; float B[4] = {-1.05, 3.33, 87e-5, -12.3E4}; int C[10] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; Réservation automatique Si la dimension n'est pas indiquée explicitement lors de l'initialisation, alors l'ordinateur réserve automatiquement le nombre d'octets nécessaires. | Chapitre I: Rappel sur les tableaux en C Exemples 19 int A[ ] = {10, 20, 30, 40, 50}; ==> réservation de 5*sizeof(int) octets = 10 octets float B[ ] = {-1.05, 3.33, 87e-5, -12.3E4}; ==> réservation de 4*sizeof(float) octets = 16 octets int C[ ] = {1, 0, 0, 1, 1, 1, 0, 1, 0, 1}; ==> réservation de 10*sizeof(int) octets = 20 octets Chapitre I: Rappel sur les tableaux en C Affichage du contenu d'un tableau Exercice : Entée/Sorties des composantes d’un tableau Donner un programme en C qui permet de saisir le contenu d’un tableau des entiers à 5 éléments et d’afficher le contenu de ce tableau | Chapitre I: Rappel sur les tableaux en C en après. 20 Chapitre I: Rappel sur les tableaux en C Affichage du contenu d'un tableau | Chapitre I: Rappel sur les tableaux en C Exemple: Entée/Sorties des composantes d’un tableau 21 Chapitre I: Rappel sur les tableaux en C Tableaux à deux dimensions | Chapitre I: Rappel sur les tableaux en C Un tableau à 2 dimensions A est à interpréter comme un tableau (uni-dimensionnel) de dimension L dont chaque composante est un tableau (uni-dimensionnel) de dimension C. L le nombre de lignes et C le nombre de colonnes du tableau. Un tableau à 2 dimensions contient donc L*C composantes. 22 Déclaration et mémorisation Exemples: int A[10][10]; float B[10][10]; …. Le nom d'un tableau est le représentant de l'adresse du premier élément du tableau (c.-à-d. l'adresse de la 1ère ligne du tableau). Les composantes d'un tableau à deux dimensions sont stockées ligne par ligne dans la mémoire. Chapitre I: Rappel sur les tableaux en C Déclaration et mémorisation Exemple: Mémorisation d'un tableau à deux dimensions | Chapitre I: Rappel sur les tableaux en C long A[3][2] = { {1, 2}, {10, 20}, {100, 200} }; 23 Un tableau de dimensions L et C, occupera L*C*M octets en mémoire. Exemple: Une variable du type double occupe 8 octets (sizeof(double)=8), pour le tableau T déclaré par: double T[3][2]; Le compilateur réservera L*C*M = 3*2*8 = 48 octets en mémoire. Chapitre I: Rappel sur les tableaux en C Tableaux à deux dimensions Exercice : Entée/Sorties des composantes d’un tableau à deux dimensions Donner un programme en C qui permet de saisir le contenu d’un | Chapitre I: Rappel sur les tableaux en C tableau des entiers à deux dimensions 5 lignes 2 colonnes et 24 d’afficher le contenu de ce tableau en après. Chapitre I: Rappel sur les tableaux en C Affichage du contenu d'un tableau | Chapitre I: Rappel sur les tableaux en C Exemple: Entée/Sorties des composantes d’un tableau à deux dimensions 25 Chapitre I: Rappel sur les tableaux en C | Chapitre I: Rappel sur les tableaux en C END OF CHAPTER 1 26