Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)



Documents pareils

Algorithmique et Programmation, IMA

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Introduction au langage C

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Programmation C++ (débutant)/instructions for, while et do...while

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Cours d Informatique

UE Programmation Impérative Licence 2ème Année

Cours d Algorithmique et de Langage C v 3.0

Initiation à la programmation en Python

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Algorithme. Table des matières

Recherche dans un tableau

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Les chaînes de caractères

V- Manipulations de nombres en binaire

I. Introduction aux fonctions : les fonctions standards

Bases de programmation. Cours 5. Structurer les données

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Informatique Générale

SUPPORT DE COURS. Langage C

Introduction à MATLAB R

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

ACTIVITÉ DE PROGRAMMATION

Java Licence Professionnelle CISII,

Rappels Entrées -Sorties

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Cours Informatique Master STEP

Présentation du langage et premières fonctions

STAGE IREM 0- Premiers pas en Python

Programmation Classique en langage C

ALGORITHMIQUE ET PROGRAMMATION En C

Chap III : Les tableaux

Claude Delannoy. 3 e édition C++

Programmation en langage C

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

TP 1. Prise en main du langage Python

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Programmer en JAVA. par Tama

Rappels sur les suites - Algorithme

Le langage C. Séance n 4

Logiciel de Base. I. Représentation des nombres

Cours d algorithmique pour la classe de 2nde

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Chapitre 2 Devine mon nombre!

Cours d initiation à la programmation en C++ Johann Cuenin

INITIATION A LA PROGRAMMATION

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Les structures. Chapitre 3

Licence Sciences et Technologies Examen janvier 2010

Conventions d écriture et outils de mise au point

Initiation. àl algorithmique et à la programmation. en C

Programmation C. Apprendre à développer des programmes simples dans le langage C

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Introduction à l algorithmique et à la programmation M1102 CM n 3

Conversion d un entier. Méthode par soustraction

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Le Langage C Licence Professionnelle Qualité Logiciel Pr. Mouad BEN MAMOUN ben_mamoun@fsr.ac.ma Année universitaire 2011/2012

Initiation à LabView : Les exemples d applications :

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Programmation système I Les entrées/sorties

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Algorithmique et programmation : les bases (VBA) Corrigé

Notions fondamentales du langage C# Version 1.0

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Algorithmique avec Algobox

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Introduction au Langage de Programmation C

Langage Éric Guérin 5 octobre 2010

Les différents types de données et leurs opérations de base

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Initiation à la Programmation en Logique avec SISCtus Prolog

IV- Comment fonctionne un ordinateur?

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Généralités sur le Langage Java et éléments syntaxiques.

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Le langage C. Introduction, guide de reference

Chapitre 1 : La gestion dynamique de la mémoire

Représentation des Nombres

Évaluation et implémentation des langages

Plan du cours. Historique du langage Nouveautés de Java 7

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Transcription:

Algorithmes et Programmes Introduction à l informatiquel! Vie d'un programme! Algorithme! Programmation : le langage! Exécution et test des programmes Chapitre : Algorithmes et Programmes 2 Cycle de vie d'un programme (d'un logiciel)! Conception - Modélisation! Analyse du problème! Solution algorithmique! langage d'algorithmes! Programmation! Programme! langage de «haut niveau»! Compilation Interprétation! Exécution sur machine! langage machine de «bas niveau»! assembleur et code machine! Mise au point! Vérification par test pour corriger! Evaluation du coût pour optimiser Cycle de vie d'un programme (d'un logiciel)! Conception - Modélisation! Langage de description d'algorithme! simplicité, précision! indépendant de la programmation et de la machine! Exemple : diagramme, pseudo C,...! Programmation! Exécution

Cycle de vie d'un programme (d'un logiciel)! Conception - Modélisation! Programmation! Langage de programmation (langages «évolués»)! syntaxe contraignante, différents styles d'abstraction! indépendant de la machine! Types de langages! Exécution! impératifs : Fortran, Cobol, Pascal, C! fonctionnels : Lisp, ML, Caml! logiques : Prolog! objets : C++, Java Cycle de vie d'un programme (d'un logiciel)! Conception - Modélisation! Programmation! Exécution! Langage assembleur! dépendant de la machine, du processeur! Exemples : Assembleur pour PC (IA-2), PowerPC, MIPS, SPARC, etc. 5 6 L'entier N est-il pair? L'entier N est-il pair?! Conception - Modélisation! Analyse du problème! Un nombre N est pair si le reste de la division de N par 2 est nul! Solution algorithmique!. calculer le reste R de la division de N par 2! 2. si R est égal à alors N est pair!. sinon N n'est pas pair! Programmation! Programme C main () {// début du programme principal int nombreateste ; printf("donner un nombre :") ; scanf("%d", & nombreateste) ; if ((nombreateste % 2) == ) printf("%d est pair \n", nombreateste); else printf("%d n'est pas pair \n", nombreateste); // fin du programme principal 7 8

L'entier N est-il pair?! Compilation - Codage load N modi 2 jzer P... halt Assembleur 9debfc 9. 88a6 2 8a2 28 a2 289 Code machine d2 922 Algorithme! (!) Recette, règle, mécanisme, procédé, procédure, méthode,! (=) Description d'une procédure de calcul par une suite d'étapes de calcul, d'actions (plus ou moins) élémentaires.! Un algorithme n'est pas forcément destiné à décrire la solution d'un problème pour la programmation et l'informatique...! Un algorithme en cuisine s'appelle une recette! Un algorithme en musique s'appelle une partition! Un algorithme en tissage s'appelle un point 9 Algorithme (historique)! Les premières formulations de règles précises pour la résolution de certains types d'équations remontent aux Babyloniens (époque d'hammurabi, (8 avant J.C.).! Depuis l'antiquité : algorithmes sur les nombres.! Exemple : l'algorithme d'euclide qui permet de calculer le p.g.c.d. de deux nombres entiers.! Le mot algorithme est plus récent, il vient du nom d'un mathématicien perse du IXe siècle: Muhammad ibn Musa al-khowârizmî.! La signification du mot évolue au cours des temps :! pratique de l'algèbre (d'alembert, XVIIIe siècle)! méthode et notation de toute espèce de calcul! tout procédé de calcul systématique, voire automatique Algorithme de la mousse au chocolat (6 p)! Ingrédients :! 25g de chocolat, 25g de beurre, 6 œufs, 5 g de sucre, café! Etapes :! faire fondre le chocolat avec 2 cuillères d'eau! ajouter le beurre! laisser refroidir avant d'ajouter les jaunes d œufs! ajouter le sucre et comme parfum un peu de café! battre les blancs en neige et les ajouter au mélange.! A partir des ingrédients (données en entrée), appliquer la recette (les étapes) va produire une mousse au chocolat (le résultat). L abus de mousse au chocolat est déconseillé 2

Algorithme : un peu de méthodologie! identifier les données fournies / nécessaires (données en entrée)! identifier le résultat (données en sortie)! déterminer les actions ou opérations élémentaires! spécifier l'enchaînement des actions! langage d'algorithmes = langage de description des données, des actions et des enchaînements Langage de description d'algorithmes Algorithme titre % commentaire Lexique : variables // entrée : variables // sortie : variables // auxiliaire actions : noms des opérations début liste d'instructions fin Calculer le carré de N avec l'addition seule! Analyse! N 2 = N + N +... + N N fois! Algorithme : Algorithme Calcul-Carré-par-Add %Calcul du carré d'un entier Lexique : N entier // Entrée Carré entier // Sortie Action : + Debut Initialiser Carré à Faire N fois : Carré! Carré + N Fin 5 Variable! Une variable est le nom d'un «récipient» destiné à contenir une valeur. Lorsque nous nous intéresserons un peu plus à l'ordinateur, le récipient sera une «zone» mémoire.! Le type d'une variable sert à préciser la nature des valeurs acceptables par le récipient. Un type est un nom pour un ensemble de valeurs.! Exemple : Carré est une variable de type entier. La valeur de (dans) Carré est un entier. La valeur de Carré ne peut être un caractère ou un réel 6

Affectation par une valeur! L'affectation variable! valeur est une instruction qui permet de changer la valeur d'une variable. L'affectation modifie le contenu du récipient désigné par la variable.! La valeur de la variable à gauche de! est remplacée par la valeur à droite de!.! Exemple : Carré! «se lit» le récipient Carré reçoit la valeur.! Avertissement! L'affectation est une instruction qui est dite «destructrice».! L'ancienne valeur de la variable est détruite, écrasée, effacée par la nouvelle valeur!! Carré! N Copie de la valeur de N. La valeur de N (par exemple 7) existe en double 7 Affectation par une expression! L'affectation variable! expression est effectuée par :!. évaluation de l'expression! 2. placement du résultat dans le récipient désigné par la variable à gauche.! Attention! A droite de!, dans l'expression, les variables sont abusivement utilisées pour désigner les valeurs qu'elles contiennent. Ceci est une convention.! Exemple : Carré! Carré + N a pour effet de mettre le résultat de la somme de la valeur de Carré avec la valeur de N dans le récipient Carré. 8 Tester si N est un carré parfait! Analyse! N est un carré parfait si il existe un entier J dont le carré vaut N. (6 en est un, 2 non!)! Algorithme! Algorithme Test-Carré-Parfait! Lexique :! N entier! Réponse booléen! Actions : +, *, ", =! Auxiliaire : I, J entier! (* voir page suivante *) Tester si N est un carré parfait Début. I! Répéter 2. J!I*I. I!I+. jusqu à J # N 5a. Si J = N 5b alors Reponse! Vrai 5c sinon Reponse! Faux Finsi Fin 9 2

Algorithme = Abstraction de séquences de calcul Calcul-Carré-par-Add pour N= Instruction Expression évaluée Valeur de carré Algorithme = Abstraction de séquences de calcul Test du carré parfait (N=7) Instruction Expression évaluée Valeur de i Valeur de J Valeur de réponse. 2. 2 I*I I+ J # 7? Calcul-Carré-par-Add pour N= Instruction Expression évaluée Valeur de carré 2 2 I*I I+ J # 7? I*I 2. 2.... Carré + N Carré + N Carré + N 6 9 2 5 I+ J # 7? I*I I+ J # 7? J=N 9 5c faux Faux 2 22 Instruction conditionnelle! Si «condition» alors faire liste d'instructions sinon faire liste d'instructions FINSI! Exemple : l'instruction 5 de l'algorithme Test- Carré-Parfait est une conditionnelle.! Condition est une expression booléenne! Exemple : Reprenons l'exécution de Test-Carré- Parfait pour N=7.! La première évaluation de la condition J # 7 produit la valeur booléenne «faux» donc les instructions 2. et. sont exécutées. Algèbre de Boole! Un ensemble $ = {, muni de l'ordre total ( < ) et des opérations suivantes :! Addition : x + y = max(x,y)! Multiplication : x.y = min(x,y)! Complémentation : x = si x = et x = si x =! propriétés! l'addition et la multiplication sont commutatives! est élément neutre de l'addition! est élément neutre de la multiplication! l'addition est distributive sur la multiplication et vice versa.! Propriété des compléments : x + x = et x. x = 2 2

Fonctions booléennes tables de vérité Une fonction booléenne f est une application de $ 2 dans $! cas n=.! Il existe fonctions booléennes de {, dans {, :! l'identité, la complémentation et...! cas n=2.! Il existe 2 fonctions booléennes de {, 2 dans {, Algèbre de Boole et Logique! Utiliser faux et vrai (ou F et V) à la place de et! Renommer l'addition, la multiplication et la complémentation par ou, et et non respectivement appelée disjonction, conjonction et négation. x y f f f2 f f f5 f9 f f f5 x F F y F V ou F V et F F Non (x) V V V F V F F V V V V F 25 26 Condition et Expression booléenne! Expression booléenne élémentaire par l'exemple! (J < 7) est une expression booléenne élémentaire.! J est de type entier, 7 est un entier et la comparaison < est un opérateur de N x N dans { F, V.! (Réponse) est une expression booléenne élémentaire.! Réponse est de type booléen.! (Lettre = `a`) est une expression booléenne élémentaire si la variable Lettre est de type caractère.! Remarque! Les mêmes symboles (=, <, etc.) sont utilisés pour la comparaison d'entiers, de caractères, de booléens. Condition et Expression booléenne! Expression booléenne élémentaire par l'exemple! (J < 7 et J > ) est une expression booléenne.! C'est la conjonction de deux expressions booléennes élémentaires.! Elle est évaluée à vraie si la valeur de la variable J appartient à ],7[.! Considérons les variables cv pour la couleur de ma voiture, mv pour la marque et div pour l'immatriculation (département).! Que signifie l'expression ci-dessous? (cv = blanc et mv = peugeot) ou ((cv = gris ou cv = blanc) et div = 75 ) 27 28

Algèbre de Boole (suite)! Théorème de De Morgan! non (a ou b) % (non a) et (non b)! non (a et b) % (non a) ou (non b)! Exemple! Quel est le contraire de le prof porte un pantalon bleu OU bien il porte un pull beige?! Si un étudiant soutient une telle affirmation, par quelle affirmation pouvait vous soutenir exactement l inverse?! Le prof ne porte pas un pantalon bleu! ET! Le prof ne porte pas un pull beige Langage de programmation C #include <stdio.h> main() { const type nom = valeur ; //bibliothèque //entête // bloc déclaration type nom, nom2 ; type2 nom ; instruction;... //bloc d'instructions instruction; 29 Syntaxe : symboles, mots, règles! symboles spéciaux! [ ] \{., ; : # =< > - * / ( )!! mots réservés! if else int char float double while for switch case, const etc.! règles syntaxiques! point virgule après chaque instruction! accolade ouvrante au début { et fermante à la fin de chaque fonction (y compris «main»), de chaque bloc d instructions! La syntaxe d'un programme est définie par une grammaire. Autres règles! Contraintes imposées par le langage! Toute variable apparaissant dans le bloc d'instructions doit être déclarée.! Contraintes imposées par l'usage! Tout programme doit être commenté!! Un commentaire est du texte encadré par des symboles de début /* et de fin */ ou une ligne commençant par //! Ignoré lors des traitements du programme /* Tout l algo repose sur la recherche du plus grand nombre premier après le carré parfait */ int i = ; // sert d indice dans la boucle 2

Bloc déclaration type nom-variable ;! Syntaxe! nom-variable est un identificateur :! les caractères sont les lettres (A..Z,a..z) et les chiffres..9 et le soulignement (pas de caractères spéciaux, pas de blancs) mais ne commencent pas par un chiffre! ne commence pas par un chiffre! minuscules et majuscules sont différentes fred! Fred! longueur maximum = (plus de caractères sont tolérés, mais ils sont ignorés)! Déclarer une variable sert à! désigner un récipient par son nom! spécifier le domaine des valeurs que peut «contenir» cette variable Types! Généralités! Un type est un nom pour un ensemble de valeurs. Un type est muni d'opérateurs. Donc :! Déclarer une variable sert aussi à connaître les opérateurs applicables à (la valeur de) la variable! Avertissement Les compilateurs C ne peuvent détecter certaines erreurs de typage.! Exemple! un caractère (lettre de l alphabet, chiffres) sera représenté par un entier de type char (8 bits) : la lettre a sera représentée par l entier 97!! Une erreur flagrante de typage ( * a ) ne sera pas détectée! Les types entiers! Pour manipuler les entiers, C propose 6 types (Table cidessous). D autres existent.! Les opérations sur les entiers sont l addition +, la soustraction -, la multiplication *, la division / et les comparaisons (=,!=, >; >=, etc.) TYPE unsigned char char unsigned short short unsigned int int Intervalle [,255] [-28,27] [, 6556] [-2768, 2767] [, 29967295] [-27868, 27867] Codage octet (= 8 bits) octet 2 octets 2 octets octets octets 5 Les types réels! Pour manipuler les réels, C propose 2 types (d autres existent) présentés dans la table ci-dessous! Les opérateurs sur les réels sont l addition +, la soustraction -, la multiplication *, la division /, les comparaisons (=,!=, >, >=, etc.) TYPE float double Intervalle [-2-5, -2 28 ],, [+2-5, +2 28 ] [-2-75, -2 2 ],, [+2-75, +2 2 ] Codage octets 8 octets Chiffres significatifs 7 chiffres décimaux 5 chiffres décimaux 6

Type booléen! Le type booléen n existe pas en C.! Le booléen faux est représenté par l entier, et le booléen vrai par tout entier différent de.! Les opérations de comparaison produisent quand la condition est fausse et quand la condition est vraie.! Les opérateurs sur les expressions booléennes sont le ET : &&, le OU : et le NON :! Type caractère! Le type caractère n existe pas de manière indépendante en C! Les caractères sont représentés par des «char» correspondant au codage ASCII des caractères alphanumériques (lettres et chiffres), typographiques (ponctuation), etc.! Les caractères sont entrés entre quotes a, b, 9, etc. 7 8 Déclarations de constantes! const type nom-constante = valeur! nom-constante est un identificateur qui sert à nommer une valeur.! Une constante sert souvent à simplifier la lisibilité d'un programme.! Le nom donné à la valeur correspondant à l'utilisation de cette valeur dans un contexte particulier (ici le programme).! Exemples! const float PI =.59; // PI est la valeur.59! const float euro 6.56; // euro est le réel 6.56! const int duo = 2; // duo est synonyme de 2! Avertissement! Il est impossible de changer la valeur 2 :! De la même manière il est impossible de toucher à la constante duo dans le programme! 9 Affectation nom-variable = expression ;! sémantique! seule la notation change par rapport au langage algorithmique i!i+ le type de l'expression à droite de = doit être identique au type de la variable à gauche! Exemples I = ; I = I + ; res = (J = =I*I) ; // res = ou res =! Attention : le compilateur C fait des conversions pour que la valeur affectée corresponde au type de la variable à gauche.! Exemple :! int n; float x=5.;! n=x; // Les deux types sont différents! printf("n=%d \n", n); // résultat affiché : n=5

Instructions d entrée-sortied scanf("format", &nom-variable);! Permet de saisir (lire) des données tapées au clavier! FORMAT permet de spécifier le type de la variable lue. Par exemple, "%d" pour un entier, "%f" pour un réel ( d = décimal, f = floating point ) L'exécution de l'instruction ci-dessus! Attend que l'utilisateur tape une valeur au clavier! Cette valeur est affectée à la variable (idem au pluriel)! La variable doit avoir été declarée (avec le bon type) (const) Exemple int I= 2 ; scanf ("%d",&i) ;! Si l'utilisateur tape, la valeur de la variable I est après exécution des deux instructions. Instructions d entrée-sortied scanf ("FORMATS", liste de variables); Exemple scanf ("%d %d %d", &I, &J, &N) si l'utilisateur tape 22, la valeur de la variable I est, celle de J est et celle de N est 22 après exécution. Avertissement Si la valeur saisie n'est pas du type de la variable alors une erreur d'exécution se produit. Si la valeur n'est pas saisie, alors l'exécution du programme attend! 2 Instructions d entrée-sortied printf ("FORMAT", expression) printf ("FORMATS", liste d'expressions)! permet d'afficher des valeurs (résultats de calcul)à l'écran. Exemple I = ; //la valeur de I est printf("%d", I) ; //affichage de à l'écran printf("%d", 5+7) ; //affichage de 2 à l'écran printf("valeur de I= %d", I) ; //affichage de valeur de I= printf ("FORMAT \n", expression) affiche le résultat de l'évaluation de l'expression puis effectue un retour à la ligne (voir console) Programmation en C du Test-Carré-Parfait main() { int I, N;... printf ("Donnez l'entier a tester : \n"); scanf("%d", &N); I = ; // initialisation de I... printf( "Oui la valeur que vous avez entré ");! Avertissement! Toute instruction est suivie d un point virgule ; // saisie de la valeur de N au clavier

Conditionnelle Conditionnelle if (condition) instruction ; Erreur à éviter : if (condition); instruction ; condition est une expression booléenne L'exécution de l'instruction globale! évalue la condition! si la condition est vraie, exécute l'instruction. Attention : si la condition est fausse, il ne se passe rien dans ce cas. if (condition) instruction; if (condition) instruction; else instruction2; if ( ); instruction; EST TOUJOURS EXECUTE A CAUSE DU ;! Permet d'introduire des branchements d'instructions.! L'exécution de l'instruction globale! évalue la condition! si la condition est vraie, exécute l'instruction! sinon exécute l'instruction 2.! Exemple N = ; I=2; if (N==I*I) printf ("L'entier %d est un carré parfait", N);! Exemple N = 5; I=2; if (N= =I*I) printf ("L'entier %d est un carre parfait", N); else printf("l'entier %d n'est pas un carre parfait", N); Affichage à l'écran de : L'entier est un carré parfait Affichage à l'écran de L'entier 5 n'est pas un carre parfait 5 6 Conditionnelle if (condition) bloc-instruction else bloc-instruction2 Un bloc d'instructions est une liste d'instructions encadrée par les mots clé { et! Exemple N = 5 ; if (N % 2 = =) printf("%d est pair", N); else { N = N- ; printf ("%d est pair", N); Affichage à l'écran : est pair % est le reste de la division entière Conditionnelle switch (expression) { case expression-constante : bloc-instruction ; break; case expression-constante : bloc-instruction 2; break;... case expression-constante : bloc-instruction n; break; default : bloc-instruction; break;! le cas default est facultatif.! Pas de break signifie que les 2 cas sont traités ensemble! L'instruction break provoque une sortie immédiate du switch 7 8

Conditionnelle! Exemple N=5 switch (N%2) { case : printf ("%d est impair", N) ; break; case : printf ("%d est pair", N) ; break;! Exemple switch (C) { case : case 2 : case : case 6 : case 8 : printf("%d est un chiffre pair", C); break; case : case : case 5 : case 7 : case 9 : printf("%d est un chiffre impair", C); break; default : printf ("%d n est pas un chiffre", C); Itération! Une itération correspond à la répétition d'une séquence de calcul.! Exemple : l'instruction. est itérée N fois dans l'algorithme du Calcul-Carré-par-Add! Le nombre d'exécutions répétées de l'instruction ne dépend pas des calculs effectués par l'instruction.! Exemple : la séquence d'instructions [ 2...] est itérée dans l'algorithme Test-Carré-Parfait.! Le nombre d'exécutions répétées de [ 2...] dépend des calculs effectués par la séquence elle-même. 9 5 Itération : tant que Itération : Répéter jusqu à Tant que (expression) Instructions fin tant que Répéter Instructions jusqu à (expression)! Attention! Initialiser les variables testées dans l expression! Modifier les variables dans la boucle pour qu elle s arrête.! Attention! Initialiser les variables testées dans l expression avant le «répéter»! Modifier les variables dans la boucle pour qu elle s arrête.! On exécute des instructions avant de tester l expression! Exemple : calcul de factorielle Lexique : N, Res entier; ecrire ("entrez N") ; lire (N); Res!; Tant que (N>) Res!Res*N; N!N-; Fin tant que! Exemple : calcul de factorielle Lexique : N, Res entier; ecrire ("entrez N") ; lire (N); Res!; répéter Res!Res*N; N!N-; jusqu à (N " );! Exécution pour N=, N=.! Exécution pour N=, N=; 5 52

Itération : Pour Pour i allant de borne_inf à borne sup (par pas de ) faire instructions Fin pour! Exemple : calcul de factorielle Lexique : N, Res, i entier; ecrire ("entrez N") ; lire (N); Res!; Pour i allant de 2 à N faire Res!Res*i; Fin pour! Exécution pour N=, N=; Itération! Une écriture concise pour la répétition de blocs d'instructions! Il existe 2 sortes d'itération :!. Le nombre de répétitions est fixe! faire N fois! en C : for! 2. Le nombre de répétitions n'est pas fixe! Il dépend des calculs effectués par les instructions répétées! si... alors repartir! en C : while ou do...while 5 5 Itération-while Itération - do...while! Le nombre de répétitions n'est pas fixe while (condition) bloc-instruction;! condition est une expression booléenne! L'exécution de cette itération s'effectue par :!. évaluation de la condition! 2.! si la condition est vraie alors exécution du bloc-instruction et repartir (recommencer) en.! si la condition est fausse alors l'exécution est terminée.! Tant que la condition est vraie, le bloc d'instructions est exécuté.! A la sortie de la boucle, la condition est toujours fausse ( ne pas tester) 55 Le nombre de répétitions n'est pas fixe do liste-instruction while (condition); L'exécution de cette itération s'effectue par :.- exécution de la liste d'instructions 2.- évaluation de la condition.-! si la condition est vraie alors repartir (recommencer) en.! si la condition est fausse alors l'exécution est terminée.! Exécuter la liste d'instructions tant que la condition est vraie et toujours au moins une fois!!! 56

Itération - do...while Exemple Main () { scanf("%d", &N); Res = ; do { Res = Res * N ; N = N - ; // N est modifié while (N > ) ; // N est testé printf("%d \n", Res); Simulation de l'exécution! pour la saisie de et pour la saisie de 5 Itération - for Le nombre de répétitions est fixe for (expr; expr2; expr;) {bloc-instructions L'exécution de cette itération s'effectue par :. initialiser le compteur d'itération par expr 2. Tant que la condition expr2 est vraie, exécuter le bloc d'instructions. Le compteur est modifié par expr à chaque itération Utilisation typique (boucle pour du langage de description d algorithme) for (i=; i<n; i=i+) {bloc-instructions Remarque générale d'utilisation Veiller à ce que l'intervalle [début, fin] soit identifiable avant l'itération. 57 58 Itération - for Exemple scanf("%d", &N) ; res = ; for (I = 2; I <=N; I = I + ) res = res * I ; printf("%d \n", res); Simulation de l'exécution (pour la saisie de et pour la saisie de 5) Simulation par while scanf("%d", &N) ; res = ; I = 2 ; while (I <= N) { res = res * I ; I = I + ; printf("%d", res); Itération - for Exemple d'itération avec décrémentation scanf("%d", &N) ; res = ; for (I = N; I >=2; I = I - ) res = res * I ; printf ("%d", res); Simulation de l'exécution pour la saisie de et pour la saisie de 5 Remarque générale! pour l'itération for, on peut mettre plusieurs autres variantes pour les expressions expr, expr2 et expr. 59 6

Programmation de Test-Carré-Parfait! Rappel de l'algorithme Début. I! Répéter 2. J!I*I. I!I+. jusqu à J # N 5a. Si J = N alors Reponse! Vrai 5b. Sinon Reponse! Faux Finsi Fin 6 Programme Test-Carré-Parfait #include <stdio.h> ; // bibliothèque main() { /* Test-Carré-Parfait : Ce programme vérifie si l'entier N est ou non un carré parfait */ int N, I, J ; // bloc déclaration printf ("Donnez l'entier à tester : "); scanf("%d", &N); // saisie de la valeur de N au clavier I = ; // initialisation de I J = ; while (J<N) { I = I+ ; J = I * I ; if (J == N) printf("%d est un carré parfait", N); else printf("%d n'est pas un carré parfait", N); 62 Autres prog.. de Test-Carré-Parfait Imbrication de boucles main(){ // Test-Carré-Parfait... I = ; // initialisation de I do {J = I * I ; I = I+ ; while (J<N);... main(){ // Test-Carré-Parfait... // enlever J de la déclaration I = -; // initialisation de I do I = I+ ; while (I * I <N);... main(){ // Test-Carré-Parfait... for (I=; I*I<N; I=I+); // BOUCLE AUTO-SUFFISANTE... 6! Supposons que la multiplication soit interdite! main(){ // Test-Carré-Parfait... I = ; // initialisation de I do { J = ; for (k=; k <= I; k = k + ) J = J + I; // calcul de J=I*I par additions successives I = I+; // incrémentation de I while (J<N);...! La boucle «for» est imbriquée dans la boucle «do...while». 6

Tableaux mono-dimensionnels! Définition! Le type tableau permet de représenter des fonctions à domaine fini! A chaque valeur d'un indice, le tableau associe une valeur ou élément de tableau.! Exemple! On peut représenter les N entiers premiers par : main (){... const int N = ; int Tprem[N]; 65 Tableaux mono-dimensionnels! Définitions sur un exemple! A chaque case i, le tableau fait correspondre un nombre premier! Accessible par l'opération Tprem[i]! On peut changer la valeur d'une case par Tprem[i]=valeur! Le type des éléments (ici entier) peut être quelconque! Attention : les compilateurs C ne vérifient pas que l indice est compris dans l intervalle défini à la déclaration du tableau. S il n est pas dans cet intervalle, il y a généralement erreur à l exécution. 2 2 9 5 5 6 7 7 8 2 66 9 7 Tableaux mono-dimensionnels! Utilisation! Le programme Tableau est un exemple simple qui affiche sur l'écran tous les éléments du tableau des nombres premiers Tprem main() { const int N = ; int Tprem [N]; Tprem[] = ; Tprem[] = 2; Tprem[9] = 2 ; // pas Tprem[]!!! int i; for (i= ; i < N; i = i +) printf("%d \n", Tprem[i]); 67 Tableaux mono-dimensionnels Utilisation (suite)! Le programme TabCar compte et affiche le nombre de 'a' dans le tableau Tcar main(){ // programme TabCar const int N = ; char Tcar [N]; int i, Nba; Nba = ; for (i= ; i < N; i = i +) if (Tcar[i] == 'a') Nba = Nba + ; printf("le nombre de a est : %d", Nba); 68

Tableaux mono-dimensionnels Utilisation (suite)! Le programme PremCar vérifie et affiche si 'a' est présent dans le tableau Tcar Tableaux multi-dimensionnels! Définition! A chaque valeur d'un couple d indice, le tableau associe une valeur ou élément de tableau. main(){ const int N = ; char Tcar [N]; int i ; // programme PremCar i = ; while ((i < N) && (Tcar[i]!= 'a')) i = i + ; if (i == N) printf("a n'est pas dans le tableau ", i); else printf("a est dans le tableau à la pos %d ");! Exemple! On peut représenter les N*M entiers par : const int N = ; const int M = ; int Matrice[N] [M]; 69 7 Tableaux multi-dimensionnels 2 7 8! Définitions sur un exemple! A chaque case i,j le tableau fait correspondre un nombre entier! Accessible par l'opération Matrice[i][j]! i.e : grdnb = Matrice[][6];! On peut changer la valeur d'une case par Matrice[i][j]=valeur! Le type des éléments (ici entier) peut être quelconque 5 5 5 2 2 8 6 7 7 5 8 5 5 9 9 9 7 2 6 8 5 7 8 8 5 8 2 25 9 6 9 7 5 2 7 Boucles imbriquées et tableaux 2D! Les boucles imbriquées permettent de parcourir un tableau multi-dimensions. main () { const int N = ; //Attention a ne pas se melanger les pinceaux const int M = ; // entre les 2 dimensions!!!! int Matrice[N] [M]; for (i= ; i < N; i = i +) { for (j= ; j < M; j = j +) { if (Matrice[i][j] ==) NbZero = NbZero+; printf("le nombre de est : %d", NbZero); 72

Boucles imbriquées et tableaux 2D main () { const int N = 7; const int M = 7; int Mat[N] [M]; int Mat2[N-2] [M-2]; for (i= ; i < N-; i = i +) { for (j= ; j < M-; j = j +) { Mat2[i-][j-] = (Mat[i-][j]+Mat[i+][j]+ Mat[i][j-]+Mat[i][j+])/; for (i= ; i < N-2; i = i +) { for (j= ; j < M-2; j = j +) { printf("%d ", Mat2[i][j]); printf( "\n"); Que fait ce code? 7 Tableaux multi-dimensionnels! Utilisation! Le programme Tableau2 est un exemple simple qui affiche sur l'écran tous les éléments du tableau des nombres Tprem main() { const int N = ; const int M = ; int Matrice [N][M]; Matrice [][] = ; Matrice [][] = 2; Matrice [9][] = 2 ; // pas Tprem[]!!! Matrice [][9] = 2; Matrice [9][9] = 5 ; // pas Tprem[]!!! int i; for (i= ; i < N; i = i +) for (j= ; j < M; j = j +) printf("%d \n", Matrice [i][j]); 7 Généralités sur les fonctions! Les fonctions permettent:! de scinder un programme en plusieurs parties, et de décrire le déroulement du programme principal de façon claire! de mettre en commun des ressources entre programmeurs! d éviter des séquences d instructions répétitives! de spécialiser des séquences d instructions grâce à leurs paramètres! de calculer des valeurs, et/ou d agir sur des objets Algorithmique action NOM { DESCRIPTION DE L ACTION Données : LES DONNES EN ENTRÉE Résultats : LE OU LES DONNES RETOURNEES Début INSTRUCTIONS (construisant la valeur des données retournées) Fin 75 76

Exemple action div { les variables résultats q et r sont respectivement calculées comme le quotient et le reste de la division entière Données : a, b : entier; Résultats : q, r : entier; Début q!; tant que a"b faire a! a-b; q! q+; Appel : fin tant que div (25, 7, x, y); r! a; Fin 77 Algorithmique fonction NOM " type de retour { DESCRIPTION DE LA FONCTION Lexique : LES DONNES LOCALES Début INSTRUCTIONS retourner variable; Fin 78 Exemple fonction puissance " entier { calcul la puissance n d un entier a donné Lexique: res, i : entier; Début res! ; pour I allant de a N faire res! res*a; fin pour Appel retourner res; : Fin x=puissance x=puissance (25, 7); 79 Particularités des fonctions en C! Types de modules: les «fonctions» et «procédures» ne sont pas distinguées! Mode de transmission des arguments: uniquement par valeur! Variables globales: accessibles à toutes les fonctions 8

Types de modules! Les fonctions fournissent un résultat (valeur de retour), calculé à partir des valeurs de ses paramètres, qui peut ensuite apparaître dans une expression.! Typiquement, les procédures des autres langages réalisent des actions, mais en pratique rien n empêche les fonctions d en réaliser également.! En C, il n existe que la notion de fonction:! la valeur de retour d une fonction peut être ignorée (ex: printf)! une fonction peut ne retourner aucune valeur! une fonction peut retourner une valeur non scalaire (ex: structures)! une fonction peut modifier (indirectement) les valeurs de certains paramètres 8 Transmission des paramètres! En C, la transmission des paramètres se fait uniquement par valeur:! les valeurs des paramètres passés lors de l appel d une fonction sont copiées localement à la fonction, et les copies sont ensuite utilisées en lecture/écriture! toute modification des valeurs est perdue lorsque la fonction se termine! Il est néanmoins possible de modifier les paramètres d une fonction grâce à la notion de pointeur (variable pointant en mémoire vers un objet d un certain type):! la fonction peut alors opérer en lecture/écriture sur l objet pointé par le pointeur! les modifications sont alors effectuées sur l objet d origine, et restent donc effectives après la fin de la fonction 82 Définition d une fonction! Syntaxe générale:! Ex: <type-de-retour> <nom>(<liste-paramètres>) <instructions> /* définition d une fonction «abs» retournant un entier et prenant deux entiers comme paramètres */ int abs(int a, int b) { /* corps de la fonction */ if (a > b) return (a b); return (b a); 8 Paramètres d une fonction! Tout type d objet peut être passé comme paramètre d une fonction:! types de base (variantes de int, float, double, char)! structures! tableaux! pointeurs! Les déclarations des paramètres, séparées par des virgules, associent un spécificateur de type à un déclarateur (nom de variable)! Un liste de paramètres vide est possible 8