CINI – Li115 1 Introduction à la programmation impérative en langage C Module Li115 Semestre 2011fev Chargés de cours : Nicolas Sabouret Pierre Fouilhoux.

Slides:



Advertisements
Présentations similaires
Outils logiciel pour la programmation en C. 2 Automatiser la compilation : make make est un utilitaire présent dans toute les distribution de linux >
Advertisements

C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
CINI – Li115 1 Semaine 3 Boucles (suite), tirages aléatoires, bibliothèque graphique ● Imbrication d'instructions if et for ● Boucles for imbriquées ●
CINI – Li115 1 Semaine 4 Révisions ● Questions de cours ● Types des expressions ● Déclaration de variables ● Instruction conditionnelle et boucles ● Structure.
1- Introduction 1ère partie Le langage SQL 2- Connexion 3- Structure & Contenu 4- Requêtes.
CINI – Li115 1 Semaine 6 Les fonctions ● Pourquoi écrire des fonctions ? ● Définition de fonctions ● Fonction main ● Appels de fonctions ● Portée des variables.
CINI – Li115 1 Semaine 10 Les pointeurs ● Notion d'adresse ● Déclaration et utilisation de pointeurs ● "Types pointeur" et initialisation des pointeurs.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Le Langage JavaScript pour le web
Semaine 8 Retour sur les tableaux : fonctions et récursivité
1. Les éléments algorithmiques
Synthèse TP 2 Codeblock 1 Les objectifs de ce tp sont :
JAVA.
Ajouter le code dans une page html
Comment corriger son code sans forcément appeler l’enseignant M2202
Les tableaux différencier les variables simples des variables indicées (ordonnées et numérotées) un identificateur unique désigne un ensemble, une collection.
Environnement de développement des BD
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Cours de programmation en langage C (Norme ANSI)
Représentation des nombres réels
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Chapitre 1 nombres, chaînes de caractères, booléens, et VARIABLES
« Un langage de programmation est une convention pour donner des ordres à un ordinateur. Ce n’est pas censé être obscur, bizarre et plein de pièges subtils.
Eléments d’Informatique Cours11 – Allocation dynamique, listes chaînées Catherine Recanati.
Pointeurs et langage C.
JavaScript.
Opérateurs Toute donnée informatique est stockée en mémoire sous la forme d'une combinaison de bits (mot machine). Les opérateurs bits permettent de modifier.
Algorithmique et programmation de modèles numériques
Semaine #1 INF130 par Frédérick Henri.
AO (Architecture des ordinateurs)
Ajouter le code dans une page html
Principes de programmation (suite)
Algorithmique Langage C
Semaine 11 Les pointeurs (suite)
Les fonctions.
Les fonctions.
Algorithmiques Abdelbasset KABOU
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
SIF-1053 Architecture de ordinateurs
Langages de programmation TP3
Cours N°6: Algorithmiques Structures Conditionnelles
Codage Indenter le code Limiter la portée des variables Traiter les erreurs en premier Utiliser le switch au delà de 3 tests en cascades Ne jamais utiliser.
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
L’I NSTRUCTION DE T EST A LTERNATIF Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira, Bejaia Année.
L ES I NSTRUCTIONS I TÉRATIVES (L ES B OUCLES ) Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie – Université A.Mira,
Introduction À l’algorithmique
De l’ordinateur au processus : rôle d’un système
Programmation en C++ C++ de base
Structure D’une Base De Données Relationnelle
Type Concret – Type Abstrait
Plus de 4000 langages....
Calcul Scientifique Initiation à SCILB
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
2 Copyright © 2004, Oracle. Tous droits réservés. Restreindre et trier les données.
Chapitre I: Les structures des données 4 éme technique 3 // Mlle : Mehrez Majda.
Le Java premiers pas.
Les classes et les objets
Sylvie DELAËT 2002 Architecture des machines Bienvenus en Amphi d’Architecture des Machines.
Programmation Web : Introduction à XML
PROGRAMMATION ET ENSEIGNEMENT
Flowchart Itération Cours 04.
Principes de programmation (suite)
STREAMS (et fichiers).
Analyse et programmation langage ADA
Python Nicolas THIBAULT
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Transcription de la présentation:

CINI – Li115 1 Introduction à la programmation impérative en langage C Module Li115 Semestre 2011fev Chargés de cours : Nicolas Sabouret Pierre Fouilhoux Claude Dutheillet

CINI – Li115 2 Semaine 1 Introduction ● Objectifs et organisation du cours ● Langage C : historique ● Caractéristiques du langage C ● Compilation ● Structure minimale d'un programme ● Types et expressions ● Variables ● Fonctions ● Instructions ● Commentaires ● Bonnes pratiques

CINI – Li115 3 Objectifs et organisation du cours (1) ● Objectifs du cours : ● Apprendre à programmer en langage impératif ● Etre capable d'écrire des programmes en langage C ● Prendre de bonnes pratiques de programmation ● Découvrir quelques algorithmes ● Organisation : ● 12 semaines de cours (1h30) ● 12 semaines de TD et TME (2x1h45) ● Polys ● Cours : bâtiment Esclangon, RC14 (imprimerie centrale) ● TD/TME : distribués par les chargés de TD ● Mémo : distribués par les chargés de TD

CINI – Li115 4 Objectifs et organisation du cours (2) ● Contrôle des connaissances : ● Examen final : 70% ● Contrôle continu : 30% – - 10 % pour le partiel – - 10% pour le TP solitaire (semaine 8) – - 10% pour la présence en TD-TP, les interrogations de TD et l'évaluation des TP ● Site Web de l'UE : ● ● Équipe enseignante ● Documents de cours, TD et TME ● Informations sur les dates d'examen ● Environnement Geany ● Annales

CINI – Li115 5 Objectifs et organisation du cours (3) ● Environnement : Geany ● Utilisable sous Linux, Windows, Mac OS X ● Téléchargeable depuis le site de l'UE

CINI – Li115 6 Langage C : historique ● Début des années 70 : ● Définition du langage C dans les laboratoires Bell (Kernighan et Ritchie) ● Objectif : portabilité ● A partir de 1974 : le langage C est utilisé pour la mise en oeuvre du système d'exploitation UNIX ● 1983 : Normalisation par l'ISO → C-ANSI et C89 ● 1988 : Normalisation POSIX puis 1999 : ISO/IEC9899 (C99) ● Le langage C aujourd'hui : ● Son utilisation dépasse celle du système UNIX. ● Les systèmes d'exploitation les plus répandus sont écrits en langage C. ● Un des langages les plus utilisés. ● Un langage de haut niveau efficace et portable.

CINI – Li115 7 Caractéristiques du langage C ● Langage impératif ● Langage basé sur l'exécution d'instructions ● Les instructions sont exécutées dans leur ordre d'apparition ● Utilisation de structures de contrôle pour répéter des instructions (boucles) ● Autres langages impératifs : Langage d'assemblage, Pascal, Fortran, Visual Basic,... ● Remarque : Scheme est un langage fonctionnel ● Langage typé ● Langage compilé ● Afin d'exécuter un programme en C, il faut tout d'abord traduire le code en langage machine → la compilation ● Cette traduction est réalisée par un compilateur ● Remarque : Scheme n'est pas un langage compilé mais interprété

CINI – Li115 8 Compilation (1) Les programmes source en C sont des fichiers contenant du texte et enregistrés avec l'extension.c. Un programme source en C doit respecter exactement la syntaxe du langage C. Un programme source est écrit par un programmeur. Pour écrire un programme source, le programmeur utilise un éditeur de texte (éditeur de Geany, Gedit, Emacs, Vi, NotePad,...). Ce programme source doit ensuite être traduit en langage machine. Le programmeur procède alors à la compilation de son programme source afin d'obtenir un programme (fichier) exécutable. Ce programme peut être exécuté directement, par un utilisateur n'ayant pas nécessairement la connaissance du langage C. (par double-clic sur le fichier ou passage à l'interpréteur de commandes) Programme Source (.c) Compilation Programme Exécutable

CINI – Li115 9 Compilation (2) La phase de compilation procède en 3 temps : ● 1- Le pré-processeur inclut les fichiers sources et les éléments référencés en tête de fichiers, dans le code source. ● 2- Le compilateur traduit ce fichier de code source (ou programme source) en langage machine. Ce code est sauvegardé dans un fichier de code objet avec l'extension.o ● 3- Le compilateur procède ensuite à l'édition des liens consistant à intégrer des fichiers annexes de code objet auquel le programme fait référence. ● Après la compilation, le programmeur obtient un fichier de code exécutable (programme exécutable) par la machine.

CINI – Li Compilation (3) ● Erreur de compilation : ● Si le programme source ne respecte pas exactement la syntaxe du langage C, le compilateur ne peut pas effectuer la traduction en code machine ● Il retourne une erreur spécifiant le numéro de la ligne et la cause de l'erreur ● Erreur d'exécution : ● Le programme compile sans erreur mais n'effectue pas ce qui était spécifié Programme source (.c) Fichier de code objet (.o) Préprocesseur Traduction en langage machine Edition des liens Programme Exécutable

CINI – Li Structure minimale d'un programme (1) #include int main(){ CINI_print_string("Hello World"); CINI_newline(); return 0; } ● Ce programme source, une fois transformé en programme exécutable, affiche la chaîne de caractères « Hello World » à l'écran et passe à la ligne (ajout d'un retour à la ligne). Inclusion de bibliothèques Instructions du programme

CINI – Li Structure d'un programme (2) ● Exécution dans Geany Compiler Exécuter Debugger

CINI – Li Structure minimale d'un programme (3) ● Pour l'UE LI115, toujours commencer le programme source par : ● #include ● Tout programme source C doit contenir une fonction « main » qui sera appelée lors de l'exécution du programme ● int main(){ ● } ● Instructions : ● La fonction « main » contient des instructions qui sont exécutées séquentiellement (une par une). ● Pour l'UE LI115, la fonction « main » se termine toujours par l'instruction : ● return 0;

CINI – Li Types et expressions (1) ● Les données manipulées en C sont typées. ● Pourquoi typer les données ? ● Connaître l'occupation mémoire de chaque donnée et les opérations possibles sur la donnée. ● Types de base en C (pour l'UE LI115) : ● Entiers : int ● Décimaux : float ● Booléens (true ou false) : bool ● Caractères : char ● Etendue des données : ● int → à ● float →- 3.4* à 3.4* ● char →table ASCII (128 caractères)

CINI – Li Types et expressions (2) ● Opérations arithmétiques (sur les entiers et flottants) : ● Attention : Avant d'écrire une expression contenant une division ● 1- Vérifier le type de retour de la division. Si les données de la division sont représentées par des entiers, le résultat retourné sera celui de la division entière. – Par exemple : 3 / 2 retourne 1 et non 1.5 ● 2- Vérifier que le diviseur sera toujours différent de 0.

CINI – Li Types et expressions (3) ● Opérateurs arithmétiques de comparaison : ● Opérations booléennes :

CINI – Li Types et expressions (4) ● Les caractères : ● Pour spécifier un caractère, on l'entoure du symbole « ' » : – 'c' → le caractère c ● En C, les caractères sont considérés comme des entiers. – L'entier correspondant à un caractère est sa valeur pour le code ASCII. Dans ce code, tout caractère a une valeur entière dans l'intervalle [0, 127] – Par exemple : ● 'a' → 97'b' → 98'A' → 65 – Les lettres de l'alphabet sont rangées dans l'ordre ● → Les opérateurs arithmétiques peuvent être appliqués sur les caractères : – 'a' + 'b''z' – 'a''a' – 1 – 'a' + 1 → vaut 'b' (98)'F' – 2 → vaut 'D'

CINI – Li Types et expressions (5) ● Les chaînes de caractères : ● Plusieurs caractères → une chaîne de caractères ● Dans l'UE LI115, nous utiliserons le type string qui correspond aux chaînes de caractères. ● En C, une chaîne de caractères est entourée de guillemets : – "Bonjour" – "Le C c'est super" ● Attention : ● Dans l'UE LI115, les chaînes de caractères seront seulement utilisées dans les appels de fonctions. ● Dans l'UE LI115 (en raison de la bibliothèque cini.h), les chaînes de caractères sont limitées à 29 caractères. ● → Nous verrons plus tard comment sont réellement manipulées les chaînes de caractères en C

CINI – Li Variables (1) ● Une variable correspond à un emplacement dans la mémoire de l'ordinateur, représenté par un symbole (le nom de la variable). ● La valeur d'une variable correspond à la valeur stockée à cet emplacement. ● Toute variable possède un type permettant de déterminer la taille de l'emplacement mémoire nécessaire pour stocker la valeur. char → 1 octet (8 bits) ● int → 2 ou 4 octets ● float → 4 octets x int c cha r a float

CINI – Li Variables (2) ● Déclaration d'une variable : ● type nom_variable ; ● int a ; → déclare une variable de nom a et de type entier ● char c ; → déclare une variable de nom c et de type entier ● float x ; → déclare une variable de nom x et de type flottant ● bool v;→ déclare une variable de nom v et de type booléen ● Dans l'UE LI115, pas de déclaration de variables de type string. ● Nom d'une variable : ● Chaîne de caractères alphanumériques qui commence par une lettre ou le caractère '_'. ● Sensible à la casse (majuscules et minuscules diffèrent). ● Ne pas utiliser des mots réservés du langage.

CINI – Li Variables (3) ● Déclarations multiples de variables de même type : ● type nom_variable_1,..., nom_variable_n ; ● int a, b ; ● char c1, c2 ; ● ● float x, int a ; → NON ● float x; int a; → OUI

CINI – Li Variables (4) ● Attention : la déclaration d'une variable ne stocke aucune valeur dans l'emplacement mémoire ● int a ; ● Il faut donc affecter une valeur à la variable (initialiser la valeur de la variable) ● Affectation d'une valeur à une variable : nom_variable = expression ; ● La valeur affectée à la variable doit correspondre à son type. ● int a ; → déclaration ● a = 21; → affectation a int

CINI – Li Variables (5) ● char c ; ● c = 't' ; ● float x ; ● x = 7.2 ; ● int a, b, c ; ● a = 8/4 ; ● b = a; ● c = a + 1; ● c cha r x float a int b c

CINI – Li Variables (6) En C, un caractère est un entier positif : char c ; c = 65 ; → c aura pour valeur 'A' Les types numériques sont convertis sans erreur de compilation : ● int a ; ● a = 12.7 ; → a aura pour valeur 12 ● float f; ● f = 12 ;→ f aura pour valeur 12.0 ● float f = 12.4 ; int a = f ;→ a aura pour valeur 12

CINI – Li Variables (7) Déclaration et affectation : type nom_variable = expression ; int a = 12 ; char c = 't'; int x = 13, y = 16; bool b1 = true; bool b2 = false;

CINI – Li Variables (8) ● #include ● int main(){ ● a = 21; ● /* … affichage d'un résultat … */ ● return 0; ● } Attention : ● 1- Il faut toujours déclarer une variable avant de lui affecter une valeur. 2- Il faut toujours affecter une valeur à une variable avant de l'utiliser. 3- Toutes les variables utilisées dans la fonction « main » doivent être déclarées au début de celle-ci. → Erreur à la compilation : « erreur : 'a' undeclared » Erreurs classiques :

CINI – Li Variables (9) ● #include ● int main(){ ● int a; ● a = a+2; ● /* … */ ● return 0; ● } → Avertissement à la compilation : « attention : 'a' is used uninitialized in this function » ● #include ● int main(){ ● int a = 2; ● a = a+1; ● int b = 3; ● /* … */ ● return 0; ● } → la variable b doit être déclarée au début de la fonction « main » (pas de message d'erreur à la compilation) Erreurs classiques (suite) :

CINI – Li ● #include ● int main(){ ● int a, b; ● a = 2; ● b = 3; ● /* … affichage du résultat … */ ● return 0; ● } Variables (10) → OK Code correct :

CINI – Li Fonctions (1) ● Fonctions et bibliothèques : ● En C, on peut utiliser des fonctions définies dans des bibliothèques. ● Il existe un grand nombre de bibliothèques prédéfinies en C. ● Ces bibliothèques portent l'extension «.h ». ● Par exemple : ● Il existe des bibliothèques pour: - les fonctions mathématiques, ● - les fonctions permettant d'afficher des données à l'écran, ● - les fonctions permettant de saisir des données au clavier, ● - les fonctions pour les affichages graphiques, ● etc.

CINI – Li Fonctions (2) ● Signature d'une fonction : – type nom_de_la_fonction(type1 param1,...); ● Appel de fonctions : ● Pour utiliser une fonction, il faut inclure la bibliothèque dans laquelle elle est définie. ● Un appel de fonction a la forme suivante : – nom_de_la_fonction(param1,..., paramN); ● Si la fonction n'a pas de paramètre, la liste entre les parenthèses est vide : – nom_de_la_fonction() ; ● Si la fonction retourne un résultat, il peut être affecté à une variable : – var = nom_de_la_fonction(param1,..., paramN); Type du résultat, ou « void » si la fonction ne renvoie aucun résultat Chaque paramètre est caractérisé par son type et son nom

CINI – Li Fonctions (3) ● Signatures des fonctions d'affichage (sortie) : ● void CINI_newline(); ● void CINI_print_bool(bool b); ● void CINI_print_int(int n); ● void CINI_print_float(float f); ● void CINI_print_string(string s); ● void CINI_print_char(char c); ● Signatures des fonctions de saisie au clavier (entrée) : ● int CINI_read_int(); ● float CINI_read_float(); ● char CINI_read_char();

CINI – Li Fonctions (4) ● Exemple d'utilisation des fonctions d'affichage : ● #include ● int main(){ ● int a; ● CINI_print_string("Saisir un nombre"); ● CINI_newline(); ● a = CINI_read_int(); ● CINI_print_string("Vous avez saisi "); ● CINI_print_int(a); ● CINI_newline(); ● return 0; ● }

CINI – Li Fonction (5) ● Exécution sous Geany :

CINI – Li Commentaires ● Il est indispensable d'ajouter des commentaires à votre code. ● Ces commentaires doivent décrire ce que fait votre programme. ● Les commentaires sont écrits entre /* et */ /* Auteur : Alain Dupont, Groupe 7 */ #include /* Permutation de 2 nombres */ int main(){ int a = 2; int b = 3; int temp; /* affichage de a et b avant la permutation */ CINI_print_int(a); CINI_newline(); CINI_print_int(b); CINI_newline(); /* permutation */ temp = a; a = b; b = temp; /* affichage de a et b après la permutation */ CINI_print_int(a); CINI_newline(); CINI_print_int(b); CINI_newline(); return 0; }

CINI – Li L'outil debug de Geany

CINI – Li L'outil debug de Geany

CINI – Li L'outil debug de Geany

CINI – Li Bonnes pratiques ● Toujours commenter le code source. ● Indenter correctement le code source. ● Sauvegarder le code source dans un fichier ayant l'extension «.c ». ● Utiliser des noms de variables et de fonctions significatifs. ● Tester le code source au fur et à mesure de l'écriture (ne pas attendre d'avoir des dizaines de lignes de code pour vérifier que la compilation s'effectue correctement). ● Sauvegarder régulièrement son code source.

CINI – Li ● Fonction de débogage : ● void CINI_was_here(); ● Chaque fois que la fonction CINI_was_here est appelée, elle affiche la ligne et la fonction dans laquelle elle est appelée. ● Exemple : Fonctions (6) 1#include ● 2int main(){ ● 3int a = 2; ● 4CINI_was_here(); ● 5CINI_print_int(a); ● 6CINI_newline(); ● 7return 0; ● 8} Debug : appel à partir de la ligne 4, exDebug.c (fonction 'main').