Algorithmique & Langage C IUT GEII S1

Documents pareils
SAUVEGARDE COBIAN. LE B.A. BA De La sauvegarde Avec «CobianBackup» ou comment faire des sauvegardes automatiques

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

Algorithmique et Programmation, IMA

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


Solutions du chapitre 4

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

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

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)

Les chaînes de caractères

Recherche dans un tableau

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

Java Licence Professionnelle CISII,

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

I. Introduction aux fonctions : les fonctions standards

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

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

Le langage C. Séance n 4

INITIATION A LA PROGRAMMATION

Les structures de données. Rajae El Ouazzani

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

Introduction au langage C

Initiation à la programmation en Python

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Cours d Informatique

ALGORITHMIQUE ET PROGRAMMATION En C

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

Résolution de systèmes linéaires par des méthodes directes

Examen Médian - 1 heure 30

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

Rappels Entrées -Sorties

ACTIVITÉ DE PROGRAMMATION

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

Introduction au Langage de Programmation C

Cours Programmation Système

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

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

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Conventions d écriture et outils de mise au point

Plus courts chemins, programmation dynamique

Programmation en langage C

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

Langage Éric Guérin 5 octobre 2010

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

1. Structure d'un programme FORTRAN 95

L exclusion mutuelle distribuée

Chap III : Les tableaux

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

Chapitre 4 : Exclusion mutuelle

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Algorithmique et programmation : les bases (VBA) Corrigé

Application 1- VBA : Test de comportements d'investissements

Corrigé des TD 1 à 5

Notions fondamentales du langage C# Version 1.0

Organigramme / Algorigramme Dossier élève 1 SI

Programmer en JAVA. par Tama

SUPPORT DE COURS. Langage C

Les arbres binaires de recherche

Le prototype de la fonction main()

Programmation C. J.-F. Lalande. 15 novembre 2012

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

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

TP 1. Prise en main du langage Python

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Cours d algorithmique pour la classe de 2nde

Cours de Génie Logiciel

L INFORMATION DU CREANCIER MUNI DE SURETE... 2

Logiciel de Base. I. Représentation des nombres

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

Pourquoi l apprentissage?

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:

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

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

CH.6 Propriétés des langages non contextuels

Algorithmique, Structures de données et langage C

La Faculté de Droit Virtuelle est la plate-forme pédagogique de la Faculté de Droit de Lyon

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Claude Delannoy. 3 e édition C++

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

Programmation linéaire

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Séquence 3. Expressions algébriques Équations et inéquations. Sommaire

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Licence Sciences et Technologies Examen janvier 2010

Les Imprimantes EOLE 2.3. Documentation sous licence Creative Commons by-nc-sa - EOLE (http ://eole.orion.education.fr) révisé : Janvier 2014

Chapitre 10. Les interfaces Comparable et Comparator 1

Cours de Systèmes d Exploitation

Transcription:

Algorithmique & Langage C IUT GEII S1 2 Notes de cours cours_algo_lgc2.10.odp deuxième partie : Bases Algorithmiques 1

Licence Vous êtes libres : Paternité - Pas d'utilisation Commerciale - Partage des Conditions Initiales à l'identique 2.0 France * de reproduire, distribuer et communiquer cette création au public * de modifier cette création, selon les conditions suivantes : Paternité. Vous devez citer le nom de l'auteur original. Pas d'utilisation Commerciale. Vous n'avez pas le droit d'utiliser cette création à des fins commerciales. Partage des Conditions Initiales à l'identique. Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identiqueà celui-ci. * A chaque réutilisation ou distribution, vous devez faire apparaître clairement aux autres les conditions contractuelles de mise à disposition de cette création. * Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits Ce qui précède n'affecte en rien vos droits en tant qu'utilisateur (exceptions au droit d'auteur : copies réservées à l'usage privé du copiste, courtes citations, parodie...) voir le contrat complet sous : http://fr.creativecommons.org/contrats.htm 2

Plan du cours Opérateurs relationnels Opérateurs logiques Expressions avec les opérateurs relationnels et logiques Bases Algorithmiques Haut > Bas Alternative : if... else 3

Vrai / Faux VRAI : 0 FAUX: 0 En C toute expression non nulle est dite VRAIE La valeur 0 est dite FAUSSE 4

Opérateurs relationnels Math C = ==!= > > >= < < <= Une expression formée avec ces opérateurs vaut : 0 si elle est fausse 1 si elle est vraie 5

Opérateurs relationnels int i = 2, j = 3, k ; k = ( i==j ) ; k vaut : k = i >0 ; k vaut : k = ( (i+1) == 3 ) ; k vaut : k = ( i >= j ) ; k vaut : k = 2 * ( j > i ) + ( (i+j) == (2*i + 1) ) + (i==j) ; k vaut : 6

Opérateurs relationnels Ils s'appliquent à la plupart des types. On peut mélanger certains types dans les expressions. Ils retournent toujours une valeur entière (0 ou 1). (Attention à ne pas comparer des valeurs signées à des valeurs non signées.) float x = 3.7 ; int i= 2, j ; j = ( i < x ) ; Attention à cause de la précision limité, l'égalité de deux réels est rarement vraie. 7

Opérateurs logiques ET && OU NON! 8

Opérateurs logiques int i=3, j=4, k ; k = (i<6) && (j>=i) ; k vaut : k =!( (i>2) (j < 3 ) ) ; k vaut : 9

Bases Algorithmiques 10

Haut / Bas Les instructions s'exécutent de haut en bas, les unes après les autres. Dès qu'une instruction est exécutée, la suivante commence. La vitesse est déterminée par les performances de l'ordinateur. 11

Alternative (ou choix) Permet d'exécuter une séquence d'instructions ou une autre selon la valeur vraie ou fausse d'une expression. exp F V I1; I2; Si exp est vraie la séquence I1; est exécutée. Sinon (si exp est fausse) c'est la séquence I2; qui est exécutée. 12

Alternative C : if...else exp F V I1; I2; if ( exp ) I1; else I2 ; 13

Exemple : if... else int i=3, j = 5, k ; k = ( i>j ) ; if ( k ) printf ("A") ; else printf ("B") ; Le programme affiche : 14

Exemple : if... else int i=3, j = 5 ; if ( i > j ) printf ("A") ; else printf ("B") ; Le programme affiche : 15

if sans else exp V I ; F if ( exp ) I ; 16

Partage en trois On imbrique des instructions if/else. Exemple : Afficher petit, moyen ou grand en fonction de la valeur de x petit 10 moyen 100 grand x Un if/else permet de séparer deux cas (logique binaire). Par exemple : petit et moyen/grand. Dans le second cas, une autre if/else va permettre de séparer moyen et grand. 17

Partage en trois i<10 F V petit V i<100 F moyen grand 18

Partage en trois if ( i < 10 ) printf( "petit" ); else if ( i < 100 ) printf( "moyen" ); else printf( "grand" ); Pour i = 9 le programme affiche :. Pour i = 100 le programme affiche :. Pour i = 10 le programme affiche :... Pour quelle valeur de i le programme affiche moyen?... 19

Encadrements Exemple : Afficher ok si x est compris entre -3 et 12 : if ( ( -3 < x ) && ( x <12 ) ) printf( "ok" ); Attention en C l'expression -3<x<12 n'est pas vraie si x est compris entre -3 et 12! ( -3<x<12 est une expression toujours vraie! En effet : (-3<x) vaut 0 ou 1. Mais 0<12 et 1<12 donc -3<x<12 vaut 1 quelque soit x! De même x<12 vaut 0 ou 1 or -3<1 et -3<0 donc -3<x<12 vaut 1 quelque soit x! ) 20

Factorisation Lorsqu'une instruction (ou une partie d'instruction) est identique dans la clause if et dans la clause else, c'est qu'elle ne dépend pas de l'expression évaluée dans le if(). Elle peut donc être placée soit avant soit après le if/else : C'est la factorisation. Essayer de factoriser vos programmes. Factorisation => Programmes souvent plus simples Programmes plus concis Programmes plus faciles à modifier 21

Factorisation Non factorisé : if ( x>0 ) x = x+3 ; printf("x vaut %d",x); else x = -x+3 ; printf("x vaut %d",x); Première factorisation : if ( x>0 ) x = x+3 ; else x = -x+3 ; printf("x vaut %d",x); 22

Factorisation deuxième factorisation : if ( x < 0 ) x = - x ; x = x + 3 ; printf("x vaut %d",x); Si on doit modifier ce programme pour modifier la valeur d'incrémentation ou modifier la langue d'affichage, il n'y a à chaque fois qu'une seule ligne à modifier. 23

Ne pas remplacer if/else par deux if! On est parfois tenté de remplacer un if/else par deux if successifs. Outre le fait que ce n'est pas efficace car l'expression doit être évaluée deux fois, c'est parfois dangereux. En effet : if ( exp ) I1; else I2; n'est pas toujours équivalent à : if ( exp ) I1; if (!exp) I2; Le contraire d'une expression n'ait pas toujours trivial. Laissez le compilateur évaluer!exp!! 24

Ne pas remplacer if/else par deux if! Soit le problème suivant : Une valeur x doit être multipliée par 2 si elle est inférieure ou égale à 15 et doit être multipliée par 4 si elle est strictement supérieure à 15. if ( x <= 15 ) x = x * 2 ; if ( x > 15 ) x = x * 4 ; Programme faux Programme correct : if ( x <=15 ) x = x * 2 ; else x = x * 4 ; 25

Ne pas remplacer if/else par deux if! 140 120 100 80 60 s1 s2 40 20 0 0 5 10 15 20 25 26

Ne pas remplacer if/else par deux if! Il faut donc reconnaître : - les situations ou les actions sont mutuellement exclusives et pour ces cas il faut absolument utiliser des if/else imbriqués. - les situations où les actions peuvent être éventuellement effectuées simultanément et dans ce cas une suite de if sans else convient. 27

Utilisez la structure qui convient à la situation! 1,2 et 3 sont mutuellement exclusives 1 2 3 Une et une seule instructions est effectué Une seule instruction 1 ou alors 2 ou alors 3 est toujours effectuée quelque soit les valeur des expressions dans les if. if (...) 1 ; else if(...) 2 ; else 3 ; 1 2 3 if (...) 1 ; if (...) 2 ; if (...) 3 ; Selon les valeurs des expressions dans les if, on effectue éventuellement 1 et éventuellement 2 et éventuellement 3 (donc éventuellement aucune instruction). 28

Utilisez l'algorithme qui convient! L'algorithme pour les conditions non mutuellement exclusives peut, si on élabore correctement les conditions, recouvrir le cas mutuellement exclusif. Il en faut pas le faire car : - c'est compliqué : il n'est pas toujours facile de trouver les bonnes équations logiques - c'est dangereux : un changement futur dans une condition implique de revoir les deux autres - c'est toujours moins efficace : perte de temps de 1,8x en moyenne Il faut reconnaître la situation (exclusif /non exclusif) et employer l'algorithme adapté. 29