Cours d`informatique en Langage C 1ère année 2014-2015
Transcription
Cours d`informatique en Langage C 1ère année 2014-2015
Cours d’informatique en Langage C è ère 1 année 2014‐2015 L’i L’informatique à l’IOGS f ti à l’IOGS 1A : Langage C : apprentissage d’un langage de programmation structuré p g 3 séances Matlab : analyse numérique 2A 2A : Langage C++ à Bordeaux : Langage C++ à Bordeaux 3A : Palaiseau : Python 2 Dé l Déroulement de l’année t d l’ é U Une session de cours‐td au 1S i d td 1S 11 séances de 2h Dont 2 synthèses (2h note), un mini‐projet + un examen individuel sur machine i di id l hi Un projet au 2S 3 séances de 4h + une présentation orale du projet + une présentation orale du projet 3 B t d 1ères séances But des 1 é Préciser (un peu) ce qu’est l’informatique Bases d’un langage informatique : le langage C B d’ l i f ti l l C Bases du raisonnement informatique q Prise en main d’un environnement de développement : Code::Blocks développement : Code::Blocks Essais de 1ers programmes 4 L L Le Langage C C Créé au début des années 70 par Dennis Ritchie et Brian Kernighan Brian Kernighan Langage multi plate‐forme : Windows, Mac, Linux, nombreux micro‐processeurs En respectant la norme ANSI/ISO, le même code n respectant la norme ANSI/ISO, le même code va pouvoir être recompilé par plusieurs systèmes Reste encore aujourd Reste encore aujourd'hui hui un langage très un langage très utilisé dans le monde (perfectionné depuis : la norme a évolué) é l é) 5 L L Le Langage C C Langage évolué / langage de bas niveau Évolué : « Évolué : « relativement » proche de l » proche de l’humain humain Bas niveau : proche de la machine Langage C : Langage évolué Langage évolué Mais aussi assez proche de la machine Permettra par exemple de programmer des P l d d microprocesseurs. 6 1ère Approche de l’informatique A h d l’i f ti Manipulation de données Calculs, entrées, sorties Calculs, entrées, sorties – saisies, affichages saisies, affichages – écriture écriture et lecture dans des fichiers, … Données : stockées dans des cases mémoires Case mémoire : emplacement physique où est stockée ((sous forme électrique) la donnée à traiter q ) La case mémoire élémentaire : c’est l’octet (on y reviendra) Une case mémoire : connue par la machine grâce à son adresse = son emplacement physique Connue par le programmeur par un nom (à choisir) 7 1ère Approche de l’informatique A h d l’i f ti Traitements de base sur les mémoires Initialisation d Initialisation d’une une mémoire mémoire Affectation du résultat d’un calcul ou d’un traitement à une mémoire à é Et aussi Saisie d Saisie d’une une valeur au clavier et stockage dans une valeur au clavier et stockage dans une mémoire Affichage sur l’écran du contenu de la mémoire Affi h l’é d d l é i 8 1ère Approche de l’informatique A h d l’i f ti Un exemple d’algorithme : Résolution d’une équation du 1er degré à coefficients réels : a.x + b = 0 Saisir a p puis b si a=0 faire si b=0 faire Affi h « Tout Afficher T t réel é l estt solution l ti » sinon Faire Afficher « Pas de solution réelle » sinon Faire Calculer –b/a Solution Afficher Solution 9 1ère Approche de l’informatique A h d l’i f ti Processus de développement : A partir d A partir d’un un problème donné problème donné Humain Méthode à mettre en œuvre : algorithme Le développeur Langage informatique Traduction en informations exécutables Code::Blocks Micro -processeur Le PC 10 Les bases du Langage C Le programme main main() { } 11 P é t ti d C d Bl k Présentation de Code::Blocks Code::Blocks est un IDE (Integrated p ) Development Environment) : Il permet d'éditer le code (taper le programme) d'édi l d ( l ) de compiler pour traduire le code en langage machine faire l’édition de liens et réaliser un exécutable d’exécuter le programme de corriger les erreurs (déboguer) et de mettre au de corriger les erreurs (déboguer) et de mettre au point le programme grâce aux outils de debug. 12 P é t ti d C d Bl k Présentation de Code::Blocks Code::Blocks est téléchargeable gratuitement à: http://www.codeblocks.org/downloads/binaries Lancer Code::Blocks par exemple avec le raccourci sur le bureau raccourci sur le bureau 13 P é t ti d C d Bl k Présentation de Code::Blocks Créer un nouveau projet 14 P é t ti d C d Bl k Présentation de Code::Blocks Créer une Application Console 15 P é t ti d C d Bl k Présentation de Code::Blocks Cliquer sur Next Sélectionner comme langage le C Info C – IOGS 1A 2012-2013 16 P é t ti d C d Bl k Présentation de Code::Blocks Renseigner les noms et les chemins Par exemple en créant un dossier spécifique pour Par exemple en créant un dossier spécifique pour la session de C et un dossier par séance en remplaçant si besoin \\hera par U:\ l b \\h \ Exemple : U:\jean.michel\Mes documents\ProgrammesEnC\td1 \j \ \ g \ 17 P é t ti d C d Bl k Présentation de Code::Blocks L’espace projet tel qu’il apparaît Incluant un programme de base Info C – IOGS 1A 2012-2013 18 P é t ti d C d Bl k Présentation de Code::Blocks Une fois le code écrit, il faut générer un p exécutable en compilant : avec Build > Build ou avec CTRL F9 ou avec CTRL – ou avec Pour exécuter le programme : avec Build > Run avec Build > Run ou avec CTRL – F10 ou avec 19 P é t ti d C d Bl k Présentation de Code::Blocks Nb : on peut tout faire en une fois : avec Build avec Build > Build and run Build and run ou avec F9 ou Nb : pour mettre en forme le programme Plugin > Source code formatter Plugin > Source code formatter 20 P é t ti d C d Bl k Présentation de Code::Blocks En cas d’erreurs, aller lire la fenêtre suivante puis cliquer sur l’erreur Et toujours commencer par corriger la 1ère erreur de la liste avant de relancer la compilation 21 P é t ti d C d Bl k Présentation de Code::Blocks Règles à respecter absolument : Un seul main () par projet. Un seul main () par projet. Et donc un seul fichier comprenant la fonction main Tous les fichiers de code source devront avoir l’ t i l’extension .c Attention aux extensions en .cpp (erreur dans la création du projet) qui ne fonctionneront pas ici 22 Les bases du Langage C Une ligne de code se termine par ; i main() { … mem3 = mem1 + mem2; … } 23 Aff t ti Affectation : avec le signe = l i Ne permet pas de tester l’égalité mathématique ! mathématique ! Affecte l’expression de droite à la variable de gauche Expressions non autorisées : xpressions non autorisées : b + c = 50 ; 3 = a ; Instructions autorisées : b = a + c ; b = c + 77 ; a = b = 44; 24 E Exemple 1 l 1 En pseudo‐code 20 mem1 250 mem2 mem1 + mem2 mem3 Pour utiliser une variable,, il faut d’abord l’avoir déclarée en précisant son type En Langage C main() { int mem1; int mem2; int mem3; mem1 = 20; mem2 = 250; mem3 3 = mem1 1 + mem2; 2 } 25 E Exemple 1 (variantes) l 1( i t ) main() { /* Utilisation de la , */ int mem1,mem2,mem3; 1 2 3 mem1 = 20; mem2 = 250; mem3 = mem1 + mem2; } main() { // Déclaration et Initialisation int mem1=20 , mem2=250 , mem3; mem3 = mem1 + mem2; } 26 C Commentaires du code t i d d Un code doit être commenté Afin d Afin d’être être lisible par d lisible par d’autres autres (vos enseignants, (vos enseignants, votre binôme, vos futurs collègues, les personnes qui vont modifier votre code, …) qui vont modifier votre code, …) Les commentaires sont compris entre /* et */ avec d’éventuels avec d éventuels sauts de lignes sauts de lignes Ou encore // uniquement pour le reste de la ligne 27 Li ibilité d Lisibilité du code d Un code doit être lisible Grâce aux commentaires Grâce aux commentaires Avec des noms de variables ou de fonctions explicites Avec une mise en forme des différents blocs 28 Id tifi t Identificateurs des variables d i bl Identificateur = nom permettant de désigner ( ) une variable (ou une fonction) Caractères autorisés a, …,z,A, …,Z et 0, …, 9 et _ A Z 0 9 Un identificateur commence par une lettre ou par le caractère _ Attention : Le C différencie majuscules et j minuscules 29 Id tifi t Identificateurs des variables d i bl Choix de nom explicite Améliore la lisibilité du code Améliore la lisibilité du code Exemples : Ma_Variable Ma Variable TemperatureFarenheit Les noms explicites de variables permettent p p de ne pas surcommenter 30 Dé l ti d Déclaration des variables en C i bl C Déclarer une variable c’est définir son nom et son type int mem1; /* mem1 est de type int */ En Langage C, on doit déclarer une variable avant de l’utiliser On effectue les déclarations de variables en On effectue les déclarations de variables en début de bloc, c‐à‐d juste après { Pas d Pas d’importance importance dans l dans l’ordre ordre des des déclarations Attention A i : ne pas mélanger ligne exécutables él li é bl et déclarations 31 Q l Quelques types de variables en C t d i bl C Type entier : int Exemple : int MaVariable ; Type réel : float Exemples : float Discriminant ; float Eps = 1e-6 ; float Tempe= 23.5 ; 32 V i bl Variables en C C On va rencontrer les variables à 3 occasions : Déclaration traité ici Initialisation Souvent indispensable … pour éviter p g ( p ) des programmes faux (même s’ils compilent) Utilisation traité à plusieurs reprises Initialisation : de 2 façons Initialisation : de 2 façons int MaVariable ; …//déclaration //déclaration ou code MaVariable = 2 ; // Init int MaVariable = 2 ; // Déclaration & Init simultanées Au choix du développeur 33 FFonctions d’affichage (1 ti d’ ffi h (1ère approche) h ) Affichage d’une phrase, d’un entier, d’un réel : #include <stdio.h> <stdio h> main() { int mem1 = 10 ; float mem2 = 20.0 ; Nécessaire en début de code pour utiliser la fonction d’affichage 3 appels à la fonction d’affichage printf("Bonjour, ça va bien?\n"); printf("%d\t" printf( %d\t , mem1); printf("%f\n", mem2); } 34 Fi hi d’ têt h Fichiers d’en tête : .h Stdio : standard input output Fichier .h (comme header) ou fichier d Fichier h (comme header) ou fichier d’en‐tête en tête Contient la déclaration de la fonction utilisée Permet de s’en servir en sachant : Ce qu Ce qu’elle elle fait fait La syntaxe à utiliser Mais sans connaître le code de la fonction M i î l d d l f i Il en existe de nombreux autres : math.h, stdlib.h, string.h, ctype.h, time.h 35 Fonctions de saisie au clavier (1 ( ère approche) Saisie d’un entier ou d’un réel : #include <stdio.h> <stdio h> main() { int mem1 ; float mem2 ; … scanf("%d",&mem1); scanf("%f" scanf( %f ,&mem2); &mem2); … } Attention à bien mettre le & avant le nom de la variable (mem1 ici) Attention :pas de \n du type : ‘scanf(’%d\n ’’) ; 36 St t Structure d’un programme simple d’ i l #include <stdio.h> main() { int mem1 ; float mem2 ; … scanf("%d",&mem1); scanf("%f",&mem2); … } En-tête Corps du programme : main() Accolade de début Dé l Déclarations ti des d variables i bl Instructions du programme Accolade de fin 37 L Les structures de contrôle t t d t ôl Quelques problèmes simples : Convertir les Fahrenheit en Celsius et afficher un message si la température (en °C) est négative Déterminer le min et le max parmi 2 nombres Afficher les nombres impairs entre 0 et 100 (inclus) Nécessitent des tests ou des boucles : ce sont Nécessitent des tests ou des boucles : ce sont les structures de contrôle 38 St t Structure de contrôle : Les boucles d t ôl L b l 3 types de boucles Boucles for Boucles for De i = 0 à N, faire instructions Boucles while Tant que (condition vraie), faire Tant que (condition vraie) faire instructions Boucles do while B l d hil faire instructions Tant que (condition vraie) 39 L b l Les boucles E Exemples de boucles for l d b l f : for (i=0;i<100;i++) Nombre = Nombre *2; /* Fin de la boucle for : i s’incrémente s’il n’est pas égal à 100 et la ligne d’instruction est ré‐exécutée */ ’ é là l l d’ é é é */ for (i=0;i<=100;i=i+10) { Nombre = Nombre *2; /* Plusieurs instructions : donc on met des accolades */ Nombre2 = Nombre2 *3; Nombre2 = Nombre2 *3; } /* Fin de l a boucle for : i s’incrémente etc… */ for (i=0;;i++) for (;;) (;;) { … } { } { } { … } /* La condition de terminaison est /* La condition de terminaison est facultative mais pas le ; */ //* Une boucle for particulière !! Une boucle for particulière !! *// 40 L b l Les boucles E Exemples de boucles while l d b l hil : while (i<100) ii++;; //* Fin de la boucle while: i s Fin de la boucle while: i s’incrémente incrémente ss’ilil n n’est est pas égal pas égal à 100 et la ligne d’instruction est ré‐éxécutée*/ while (i<100) ( ) { i++; Nombre = Nombre Nombre Nombre *i;i; //* Plusieurs instructions : donc on met Plusieurs instructions : donc on met des accolades */ Nombre2 = Nombre2 *2*i; } ; ; / /* Fin de la boucle while Fin de la boucle while*// while (1) { … } /* Une boucle while particulière !! */ 41 L b l Les boucles Les boucles do … while : Syntaxe proche des while Syntaxe proche des while Mais ce type de boucle sera exécutée au moins une fois (même si la condition est fausse une fois (même si la condition est fausse d’emblée) do { i++; } while (i<100) ; 42 L Les conditions d’arrêt des boucles diti d’ êt d b l Condition d’arrêt : expression logiques Opérateurs : Opérateurs Signification < I fé i Inférieur à <= Inférieur ou égal à > Supérieur ou égal à Supérieur ou égal à >= Supérieur ou égal à == Égal (ne pas confondre avec = qui correspond à l’affectation) != Différent de Même priorité Priorité inférieure 43 L Les conditions d’arrêt diti d’ êt Condition d’arrêt : expression logique Évaluation d Évaluation d’expression expression logique : logique : A l’aide de : || (Ou) && (Et) ! (négation logique) Exemple l : (i>= 100) || (j==10) && !(k>0) && p prioritaire sur || 0 correspond à Faux Toute valeur non nulle correspond à Vrai To te ale r non n lle correspond à Vrai Exemple : if (correct) ou bien if(!correct) 44 St t Structure de contrôle : Les tests d t ôl L t t 2 2 types de tests d Les if … else Les L switch it h Les if … else if else if (Condition) instruction1; if (Condition) (C diti ) i instruction1; t ti 1 else instruction2; if (Condition) { instruction1; instruction2; } else { instruction2 ;} 45 L t t l if imbriqués Les tests : les if i bi é E Exemple l if (choix1< 0) if (choix2>0) instruction1; else instruction2; Le else se rapporte toujours au dernier if sans else L’indentation n’a pas de conséquence sur la compilation … … mais sur la lisibilité: Pensez donc à indenter ! i l li ibilité P d ài d t ! Code::Blocks propose d’ailleurs une mise en forme via gg > Source code formatter f Pluggins 46 L t t l if successifs Les tests : les if if Application : choix successifs if ( (choix1< 0) ) instruction1; ; else if (choix2>0) instruction2; else if (choix3>0) ( h i 3>0) i instruction3; t ti 3 else if (choix4>0) instruction4; [ else instruction5; ] 47 L t t Les tests Les switch Switch (Choix) { case 1 : instruction1 ; break; case 2 : instruction2 ; break; case 3 : instruction3 ; break; … default : instruction_default ; break; } Le break permet de sortir de la boucle lorsque la condition est vérifiée La variable de choix doit être de type entier (ou caractère) Le default n’est exécuté que si aucun des autres cas e default n est exécuté que si aucun des autres cas n’est vrai : il est facultatif. Le break après default est facultatif mais est une bonne convention d’écriture 48 T bl Tableau à 1 dimension en Langage C à 1 di i L C Comme pour les variables, on va rencontrer les tableaux dans 3 types de circonstance : Déclaration – Initialisation – Utilisation Déclaration : int tab[10] ; Attention : int tab[n] est interdit en C L La numérotation des composantes commence à 0 et se é t ti d t à0 t termine à N‐1 ; ex : tab[0] à tab[9] Utilisation : x = tab[2] + tab[4]; tab[2] = tab[4]*2 ; tab[i] = i + j ; 49 T bl Tableau à 1 dimension en Langage C à 1 di i L C Attention : Si on dépasse la taille du tableau : le programme compile mais l’ é i l’exécution « plantera l » Initialisation : Fortement conseillé 2 façons : soit à la déclaration, soit dans le code int Montab[5] = {1,3,17,-54,2} ; __________________________________ int Montab[5] ; … bout de code // boucle remplissant les cases tab[i] 50 T bl Tableau à 2 dimensions en Langage C à 2 di i L C Pratiquement comme pour les tableaux 1D. Déclaration : int tab[10][2] ; // 10 lignes, 2 col. Utilisation : x = tab[2][3] + tab[2][4]; tab[2][4] = tab[1][4]*2 ; tab[i][j] = i + j ; 51 L b La base 2 2 EEn informatique, les informations sont stockées i f i l i f i ké dans des dispositifs électroniques ne prenant que 2 états électriques : un état correspond à 0 et 2 états électriques : un état correspond à 0 et l’autre à 1. On parle alors de bits (« binary digit On parle alors de bits (« binary digit ») Ca impose de représenter les nombres en base 2 (ou binaire) (ou binaire) On peut presque s’en affranchir pour programmer en Langage évolué. programmer en Langage évolué. Voyons en cependant le principe 52 L b La base 2 2 En base 10 : on exprime les nombres avec 10 chiffres de 0 à 9 : 1984 = 1.103 + 9.102 + 8.101 + 4.100 E b En base 2: on a seulement 2 chiffres 0 et 1 2 l t 2 hiff 0 t 1 1011 = 1.23 + 0.22 + 1.21 + 1.20 soit 11 53 L b La base 2 2 En informatique : la « case mémoire » (g p ) élémentaire est l’octet (groupement de 8 bits) ou byte en anglais Une donnée peut être mémorisée sur Une donnée peut être mémorisée sur plusieurs octets (voir juste après) Un octet permet de coder : De 0000 0000 à 1111 1111 De 0000 0000 à 1111 1111 Soit de 0 à 255 en non‐signé ou de – 128 à +127 en signé ou de 128 à +127 en signé 54 T Types des variables en C d i bl C Pourquoi déclarer le type des variables ? Pour que l Pour que l’ordinateur ordinateur puisse traiter une mémoire puisse traiter une mémoire il doit connaître : Son emplacement physique Son emplacement physique La taille occupée par cette mémoire (en nombre d’octets)) Emplacement physique Emplacement physique Rôle de la chaîne de Rôle de la chaîne de développement (Code::Blocks) La taille occupée La taille occupée le programmeur le fait en le programmeur le fait en indiquant le type 55 T Types des variables en C d i bl C Types entiers : : 1 octet short: 2 octets long: l 4 octets octets int: 2 ou 4 octets car ça dépend du compilateur : type le plus employé. Ici 4 octets. c char a Et aussi Types « unsigned » : unsigned short int, unsigned long int int. 56 O é ti Opérations sur les entiers l ti 5 opérations : + (addition), + (addition) ‐ (soustraction), (soustraction) * (produit), (produit) / (division), % (reste de la division entière). ÉÉvaluation de la gauche vers la droite l i d l h l d i / et * : même niveau de priorité et priorité sur + et ‐ 57 O é ti Opérations sur les entiers l ti Opérations unaires : i++ ++i i-i --i i+=5 signifie i = i+5 Idem avec i*=a etc. 58 T Types des variables en C d i bl C Types réels : float: oat réel en simple précision codé p p sur 4 octets double: réel en double précision codé réel en double précision codé sur 8 sur 8 octets 4 é ti 4 opérations : Les mêmes que pour les entiers, mais sans le modulo (%) 59 E é En résumé é Type en C T unsigned short int T ill (octets) Taille ( t t) 2 V l Valeurs permises i entier court 2 -32 768 à 32 767 entier long non signé 4 0 à 4 294 967 295 entier long 4 -2 147 483 648 à 2 147 483 647 int entier (16 bits) 2 -32 768 à 32 767 int entier (32 bits) 4 -2 147 483 648 à 2 147 483 647 2 char entier non signé (16 bits) entier non signé (32 bits) texte 1 256 caractères (0 à 255) float nombre décimal 4 1.2e-38 à 3.4e38 double nombre double 8 de 2.2e-308 2 2e 308 à 1.8e308 1 8e308 short unsigned long int long int unsigned int unsigned int Nom F N Français i entier court non signé 4 0 à 65 536 0 à 65 536 0 à 4 294 967 295 60 P i ité d Priorité des opérateurs é t L’expression la plus à droite est d’abord p évaluée puis stockée dans la variable immédiatement à gauche du = Dans une expression, la règle d’associativité Dans une expression la règle d’associativité est de gauche à droite Avec certaines règles de priorité : (du plus au moins prioritaire) ++ ‐ ‐ * / % / % + ‐ 61 Ch i d t Choix des types Attention : Le compilateur ne fait pas le traitement des dépassements de capacité. C’est au développeur de typer ses variables de façon correcte Exemple : char a,b,c; … a = b + c ; Ce programme va être compilé, s’exécuter (apparemment) normalement, mais est faux ! 62 C Conversion de types i d t Attention Att ti : les opérateurs sont conçus pour 2 opérandes de même l é t t 2 é d d ê type et produisent un résultat du même type. int a,b; a+b est de type int 5/2 est donc int et vaut 2 !! 32/100*100 32/100 100 vaut 0 Quand 2 opérandes de types différents, le compilateur convertit dans le type dominant avec la convention : Ch Char < short h t i int t < long l int i t < float fl t < d double bl Forçage de type : ç g yp 5/2.0 Le résultat est un float valant 2.5 32/100.0*100 Le résultat est un float valant 32.0 32 0 63 C Conversion de types i d t Exemples : int a=64,b=2; float x=1,y=2; b=7/b; b 7/b; /* En premier : calcul de l'argument à droite du = donc 7 (entier) / 2 (entier) donne 3 (entier, reste 1, que l'on obtiendrait par 5%2). donc b=3 */ x=7/b; /* 7 et b entiers => passage en réel inutile, calcul de 7/2 donne 3 ( ti (entier, reste t 1) puis i opérateur é t = (t (transformation f ti d du 3 en 3 3.0 0 puis i transfert dans X qui vaut donc 3.0) */ x=7/y; x 7/y; /* un int et un float autour de / : transformation implicite de 7 en réel (7.0), division des deux réel (3.5), puis transfert dans x */ x=7.0/b; /* un int et un float autour de / : transformation implicite de b en 64 réel, division des deux réel (3.5), puis transfert dans x */ C Conversion de types i d t Attention : Le compilateur fait une conversion de type sans Le compilateur fait une conversion de type sans tenir compte du membre de gauche de l affectation l’affectation Le résultat peut donc dépasser le type prévu D’où perte d’informations ! D’où perte d’informations ! 65 C t t Constantes symboliques b li Définies en début de programme (au même Défi i déb d ( ê niveau que les #include) par : #define PI 3 3.14159 14159 #define TAUX_TVA 0.196 Règle de style : constantes symboliques en Règle de style : constantes symboliques en majuscules Règle de syntaxe : pas de signe = et pas de ; g y p g p ; Intérêt : Lisibilité du code 1 seule modification de la valeur même s’il y a plusieurs occurrences 66 C t t Constantes symboliques b li Exemples d’utilisation x = sin(2*PI*Omega*t) ; Prix = Cout* (1 + TAUX_TVA) ; Les constantes symboliques sont très utilisées 67 Affi h Affichage console avec printf l i tf Affichage de variables int x; printf("x =%d\n" ,x); Affiche ll’int Affiche int x et saute à la ligne suivante x et saute à la ligne suivante Les codes de format d’affichage sont : %d %c %f %lf int char fl t float double … 68 Affi h Affichage console avec printf l i tf Affichage de variables et de chaînes de caractères int x = 2 ; double y = 2.5 ; printf(‘‘le produit de %d par %lf vaut %lf \n’’ , x , y y, x*y); y Affiche : le produit de 2 par 2.5 vaut 5 69 S ii l i Saisie clavier avec scanf et printf f t i tf Saisies de valeur de variables int x ; printf(‘‘Entrez x = \n’’); scanf(‘‘%d ’’,&x); Stocke nombre tapé au clavier dans la variable x Attention : au signe & devant la variable x p pas de \n dans le scanf \ 70