Algorithmique et Programmation C - INPT - 2024/2025 PDF
Document Details
Uploaded by Deleted User
INPT
2024
N. El Faddouli
Tags
Summary
This document is an INPT past paper for Algorithmique et Programmation C. It outlines the course plan for 2024/2025, covering topics such algorithms, C programming, data structures, and related concepts.
Full Transcript
Filière Smart-ICT Algorithmique et Programmation C Mr N.EL FADDOULI [email protected] [email protected] Anné...
Filière Smart-ICT Algorithmique et Programmation C Mr N.EL FADDOULI [email protected] [email protected] Année Universitaire:2024/2025 1 1 Plan CHAPITRE 1: CHAPITRE 3: Ø L'ALGORITHMIQUE Ø LES TABLEAUX Définitions: Informatique, Ordinateur, Ø LES CHAÎNES DE Programme, Logiciel CARACTÈRES Etapes de développement d’un programme Ø LES POINTEURS Concepts de base d’algorithmique. Ø GESTION DE MÉMOIRE CHAPITRE 2: CHAPITRE 4 Ø CONCEPTS DE BASE DU LANGAGE C Ø LES FONCTIONS Structure d’un programme C Déclaration Variables et constantes Définition Affectation et opérateurs Appel Affichage des sorties La récursivité Lecture des entrées Les instructions de sélection Les instructions de répétitions (boucles) 3 3 1 Le Langage C 46 46 Le langage C: Prérequis F Notions de base d'Algorithmique: v Variable v Affectation v Lecture des entrées v Affichage des résultats v Instructions de sélection (instructions conditionnelle) v Les boucles F Analyse de problème et développement d'algorithme 47 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 47 2 Le langage C: C Vs Python F Le langage C est l'un des langages de programmation les plus utilisés F Il a été classé à la 4ème position dans le top 10 des langages les plus utilisée en 2023. Python C Programmation procédurale, fonctionnelle et orientée objet Programmation procédurale Exécuté par un interpréteur ligne par ligne (exécution lente) Compilé pour avoir un exécutable en langage machine (exécution rapide) Code plus court que celui en C (prototypage rapide) Python est principalement développé en C et plusieurs librairies sont en C Déclaration de type n’est pas obligatoire Déclaration de type obligatoire Typage dynamique Typage statique Gestion automatique de la mémoire Le programmeur gère lui-même l’allocation et la libération de la mémoire 48 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 48 Le langage C: Structure d'un programme en C (1/2) F Dans un programme en langage C, on indique les variables et les instructions qui les manipules pour lire les entrées et calculer les sorties. F Exemple Algorithme Entrées : (Aucune) Sorties : message Traitement : Affichage de ’’Bonjour la 1ere année’’ Ecrire ( "Bonjour la 1ère année" ) # include void main( ) { printf("Bonjour …"); } { et } indiquent le début et la fin du programme délimitent les commentaires qui sont ignorés lors de la compilation ; indique la fin d’une instruction 49 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 49 3 Le langage C: Structure d'un programme en C (2/2) F Un programme (fichier d'extension.c) peut contenir cinq sections dont certaines sont optionnelles organisées comme suit: Directives de compilation Déclaration des variables externes (globales) w Déclaration des prototypes de fonctions x Programme principal y Définition des fonctions F Les directives de compilation sont des instructions données au préprocesseur du compilateur. Elles commencent par le symbole # et sont traitées avant la phase de compilation proprement dite. F Ces directives permettent de contrôler divers aspects de la compilation, comme l'inclusion de fichiers, la définition de constantes, et la gestion conditionnelle de blocs de code. F Le programme principal x contient les instructions exécutées à son lancement. F Nous verrons les autres sections dans les prochains slides de ce support. 50 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 50 Le langage C: Les directives de compilation (1/2) F La directive #include permet d'inclure le contenu de fichiers dans le programme et qui sont généralement des bibliothèques des fonctions appelées dans le programme. F La syntaxe utilisée est la suivante: #include ou #include "nom-fichier" F Les fichiers entre chevrons < > sont recherchés dans les répertoires standard du compilateur. F Les fichiers entre guillemets " " sont recherchés d'abord dans le répertoire de travail là où il y a le programme, puis dans les répertoires standard. F Ces bibliothèques sont généralement des fichiers texte dont l'extension est.h mais peut être n'importe quelle autre extension (.c par exemple)Exemples: #include #include #include #include 51 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 51 4 Le langage C: Les directives de compilation (2/2) F La directive #define est utilisée pour définir des constantes ou des macros, qui sont des symboles ou des fragments de code qui seront remplacés par une valeur ou un code spécifique avant la compilation. F Pour définir une constante on utilise la syntaxe suivante: #define constante valeur Exemple: #define PI 3.14159 Chaque fois que le symbole PI est rencontré dans le programme, lors de la compilation, il est remplacé par 3.14159 F Pour définir une macro on utilise la syntaxe suivante: #define macro(paramètres) code_de_remplacement Exemple: #define Somme(a, b) (a + b) Chaque fois que la macro Somme ou #define Max(a , b) (a > b ? a : b ) Max est rencontrée dans le programme, lors de la compilation, elle est remplacée par le code associé. Par exemple Max(x, 4) sera remplacé par (x > 4 ? x : 4 ) F Il y a d'autre directives de compilation comme les directives conditionnelles que nous verrons dans des exemples par la suite. 52 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 52 Le langage C: Le programme principal F Le programme principal le langage C est une fonction main() ayant la structure minimale suivante: main() { ……. ……. } F Chaque instruction ou déclaration de variables se termine par point-virgule. F On peut également spécifier la valeur de retour (entier par exemple) de la fonction et des paramètres: int main(char args[ ]) { ……. On n'indique pas le type de retour ou on utilise void si la ……. fonction n'a pas de valeur de retour. return entier; } 53 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 53 5 Le langage C: Les variables (1/3) F Les variables sont des symboles représentant des données en entrée ou calculées. F Chaque variable est caractérisée par: - Un nom qui l'identifie dans le programme et qui contient des lettres, des chiffres et le caractère "_" et commence par ce dernier ou une lettre. On n'utilise pas des mots clés (if, while, …) - Une valeur à un instant donnée. Elle peut être remplacée par une autre valeur. - Un type qui représente la nature de la valeur. - Une zone mémoire dans la RAM qui contient la valeur. F Pour déclarer une variable dans le programme, on utilise la syntaxe suivante: type nom_variable1, nom_variable2, …. ; Il y a plusieurs types possibles: int (entier), long (entier long), float (réel), double (réel à double précision), char (un caractère), …. F Exemple: main() { float a, prix; Pour les noms de variables, le langage C fait la distinction entre minuscule et majuscule int A, B=9; La valeur initiale d'une variable est indétermnée (dépend char rep; …. } du contenu de la zone mémoire réservée pour la variable) 54 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 54 Le langage C: Les variables (2/3) F La taille de la zone mémoire d'une variable dépend de son type. Type Signification Taille en octet Valeurs limites (généralement) int , short Entier 2 32768 à 32767 long Entier 4 -2147483648 à 2147483647 float Réel 4 -10-37 à 1038 double Réel à double précision 8 -10-307 à 10308 long double réel long 10 -10-4932 à 104932 char caractère 1 unsigned entier positif 2 0 à 65535 F La taille dépend aussi du système d'exploitation et du compilateur utilisé F La fonction sizeof(type, variable ou valeur) retourne la taille en octets du paramètre donné. int n, i ; n = sizeof (i); n = sizeof (int); n = sizeof (3.14); 55 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 55 6 Le langage C: Les variables (1/3) F Avant la norme C99 (C89/C90) toutes les déclarations devaient être placées en premier dans un bloc avant les instructions. Exemple: main() { int x = 5, y; Bloc de code: float r; { …. …. …. } } F À partir de la version C99 du langage C (norme ISO/IEC 9899:1999) on peut mélanger les déclarations et les instructions dans le même bloc de code. Exemple: main() { int x = 5, y; …. float r; …. } 56 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 56 Le langage C: L'affectation (1/2) F L'affectation est une instruction qui consiste à évaluer (calculer) la valeur d'une expression et la stocker dans une variable. F La syntaxe de l'affectation est la suivante: variable = expression ; Exemple: int i ; float j = 3.5 ; char c = 'A' ; i = 36; i = i *2 + 6 ; F Une conversion implicite, si elle est possible, est effectuée lorsque le type de la valeur de l'expression est différent de celui de la variable. Exemple: i=j; i=c; c = 66; F N.B: Une erreur est produite lorsque la conversion implicite est impossible 57 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 57 7 Le langage C: L'affectation (2/2) F On peut faire une conversion forcée (cast) d'une expression vers un type spécifique en utilisant la syntaxe suivante: (Nouveau_Type) Expression Exemple: int i = 9 float y , j = 2.5; y = int ( j ) * i ; y = j * i; F Il est possible de perdre des données, en particulier lors de la conversion de types plus grands en types plus petits (par exemple, un double en int ou un long en char). F Lors de la conversion d'un type plus grand en un type plus petit, si la valeur ne peut pas être représentée par le nouveau type, il peut y avoir des comportements imprévisibles ou des dépassements de capacité (overflow). 58 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 58 Le langage C: Les opérateurs arithmétiques F Les opérateurs de calcul utilisés dans les expressions arithmétiques sont les suivants: Opérateur Calcul effectué Exemple int A=19, B=7,C; float D=12, H; + La somme de deux nombres C = A + B; - La différence entre deux nombres C = A-B; * Le produit de deux nombres C = A*B; / - Résultat de la division réelle d'un H = D/5 ; nombre par un autre si l'un des deux C = A/B; opérandes est un réel. H= (float)A/B; - Le quotient de la division entière (euclidienne) d'un entier par un autre. % Le reste de la division entière d'un C = A%B; entier par un autre 59 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 59 8 Le langage C: L'affectation combinée F On peut combiner une affectation et un opérateur arithmétique lorsqu'on veut faire un calcul sur une variable et mémoriser le résultat dans cette même variable: variable opérateur= expression ; Où opérateur peut être: +, -, *, / ou % F Exemple main () { int i = 9, j=2; i += j ; i /= j ; i -= j ; ….. } 60 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 60 Le langage C: Les opérateur d'incrémentation/décrémentation (1/2) F Pour incrémenter ou décrémenter un nombre de 1, on utilise respectivement les deux opérateurs unaires ++ et -- comme suit: ++variable ; ou variable++ ; --variable ; ou variable-- ; F Exemple: main () { int i = 9 , j ; i++ ; --i ; ……. } 61 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 61 9 Le langage C: Les opérateur d'incrémentation/décrémentation (1/2) F L'instruction d'incrémentation/décrémentation peut être combinée à une autre instruction comme l'affectation. On aura donc deux instructions à exécuter dans l'ordre en commençant par l'incrémentation/décrémentation ou l'autre instruction. F On aura une post-incrémentation ou une pré-incrémentation. La différence réside dans le moment où la valeur de la variable est modifiée par rapport à l'utilisation de cette valeur dans l'expression. On doit faire une affectation de la valeur de i à j et incrémenter i. F Exemple: int i = 5 , j ; Il s'agit là d'une post-incrémentation. On aura donc ces deux instructions dans cet ordre: i++; j = i; ➩. i=6 et j=6 j = ++i ; j = i++ ; On a une pré-incrémentation. On aura donc ces deux instructions dans cet ordre: j = i; i++; ➩. i=6 et j=5 62 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 62 Le langage C: Les opérateur de traitement de bits F les opérateurs de traitement de bits (ou opérateurs bitwise) permettent de manipuler directement les bits qui composent les variables entières (int, long, char, etc.). F Ils sont souvent utilisés pour des opérations bas niveau, comme la manipulation de drapeaux (flags) ou l'optimisation de certains algorithmes. Opérateur Nom Description & ET bit à bit (AND) Renvoie 1 si les deux bits sont 1, sinon renvoie 0. | OU bit à bit (OR) Renvoie 1 si l'un des deux bits est 1, sinon renvoie 0. ^ OU exclusif (XOR) Renvoie 1 si un seul des bits est 1, sinon renvoie 0. ~ NON bit à bit (NOT) Inverse tous les bits (0 devient 1 et 1 devient 0). > Décalage à droite bit de signe pour les nombres signés). 63 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 63 10 Le langage C: Les opérateur de traitement de bits F Exemple: int i = 597; int j = 12; int k; k=i&j; k = j >> 2 ; k = ~j ; F Exemple: Utilisation de drapeaux (flags) pour gérer des permissions #define FLAG_READ 1 #define FLAG_WRITE 2 #define FLAG_EXEC 4 main() { per = per | FLAG_READ; int per = 0; per |= FLAG_READ; per |= FLAG_WRITE; per &= ~FLAG_WRITE; ….. } 64 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 64 Le langage C: L'affichage des sorties (1/2) F Il y a plusieurs fonctions qui permettent d'afficher des sorties sur écran. F On utilise généralement la fonction printf() définie dans la bibliothèque standard stdio.h (Standard Input Output) et qui permet d'afficher du texte, des variables, et des résultats de calculs dans la console. printf("chaîne de formatage", variables, expressions); F La chaîne de formatage contient du texte et des spécificateurs de format F Exemple: void main() { int A=34, N=5; float prix=34.6; char O='G' ; printf("Bonjour…"); Deux chiffres après la virgule. Par printf("les deux entiers %d et %d \n", A, B); défaut, printf() affiche six chiffres après printf("Le total est %f \n", N*prix); la virgule. printf("Le prix unitaire %.2f \n", prix) ; On a une prét-incrémentation. On aura donc ces deux instructions dans cet ordre: printf("\n \t Valeur de A= %d", A++); printf("Valeur de A= %d\n", A); A++; printf("La caractère est %c \n", O); } ➩ Ecran: Valeur de A=34 A=35 65 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 65 11 Le langage C: L'affichage des sorties (2/2) F Les spécificateurs de format sont: Spécificateur Description Exemple %d Entier (int) int x = 10; printf("%d", x); %ld Entier long long l = 123456; printf("%ld", l); %f Réel (float) float y = 3.14; printf("%f", y); %lf Réel (double)) double y = 3.14; printf("%lf", y); %c Caractère char c = 'A'; printf("%c", c); %s Chaîne de caractères (string) char str = "Bonjour"; printf("%s", str); %x Format hexadécimal int a = 255; printf("%x", a); %% Signe de pourcentage printf("100%% correct"); %e Format exponentiel float r= 12345.6789; printf("%e", r); %p Adresse mémoire d'un pointeur int* p1; printf("%p", p1); F On peut également préciser des caractères de contrôle de l'affichage en utilisant \n (retour à la ligne), \t (faire une tabulation), \a (envoyer un bip sonore), \" (afficher le guillemet), \b (reculer le curseur d'un pas) ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 66 Le langage C: Le lecture des entrées(1/2) F Il y a plusieurs fonctions qui permettent lire les entrées à partir du périphérique d'entrée standard (clavier) et les stocker dans des variables. On utilise F On F utilise généralement généralementlalafonction printf() fonction définie scanf() dansdans définie la bibliothèque standard la bibliothèque standard stdio.h et qui permet lire des valeurs de différents types dans des variables. scanf(" spécificateurs de format ", adresses de variables ); F Les spécificateurs de format permettent de spécifier les types des valeurs attendues. F Pour avoir l'adresse d'une variable, on utilise l'opérateur & : &variable F Exemple: void main() { int N; float prix; char O ; printf("Donnez le nombre d'articles: "); scanf("%d", &N) ; printf("Donnez le nombre d'articles et le prix: "); printf("Donnez le prix unitaire: "); scanf("%d%f", &N, &prix) ; scanf("%f", &prix) ; printf("Montant à payer: %.2f \n", N*prix) ; } 67 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 67 12 Le langage C: Le lecture des entrées(2/2) F Lorsqu'on utilise scanf() pour lire un caractère (%c) après une autre entrée numérique (entier ou réel), un caractère de nouvelle ligne (\n) laissé dans le tampon d'entrée peut poser un problème. Exemple: void main() { int a; char r; L'utilisateur n'aura pas la printf("Donnez un entier:"); scanf("%d",&a); main que pour saisir la valeur de r ➩ Le 2ème scanf printf("Donnez un caractère:"); scanf("%c", &r); stockera le caractère \n (code ascii 10) printf("\n %d %c\n", a, r); automatiquement dans r. } F Pour contourner cela, on peut: Ø ajouter un espace avant %c dans scanf() pour ignorer les espaces et sauts de ligne: scanf(" %c", &o) Ø faire appel à fflush(stdin) avant scanf("%c", &o) afin de vider le tampon de lecture utilisé par scanf. 68 ALGORITHMIQUE & PROGRAMMATION C \ N.EL FADDOULI CC-BY NC SA 68 13