Algorithmique & Langage C

Slides:



Advertisements
Présentations similaires
Semaine #1 INF155 par Frédérick Henri.
Advertisements

Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
02/10/2015Les structures de contrôle1 COURS A2I12 Initiation à l'algorithmique illustrée par le langage C Guillaume BOURLET Département GEII IUT Sénart/Fontainebleau.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Le débogage Semaine 12 Version A15. Plan de leçon - Débogage  Commentaire javadoc  Définition  Fonctionnement  Point d’arrêt  Exécution  Contrôler.
1 © Copyright 2005, Philippe Arlotto tln.fr Creative Commons Attribution-ShareAlike 2.0 license 18/09/2016 Cours microprocesseurs.
1 © Copyright 2005, Philippe Arlotto tln.fr Creative Commons Attribution-ShareAlike 2.0 license 20/09/2016 Algorithmique & Langage.
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.
Table ronde – Réseaux et recherche d'emploi Comment fonctionne le réseau professionnel, comment le mobiliser et le développer lorsqu’on est étudiant ?
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
1 © Copyright 2005, Philippe Arlotto tln.fr Creative Commons Attribution-ShareAlike 2.0 license 25/09/2016 ● Algorithmique & Langage.
CINI – Li115 1 Semaine 3 Boucles (suite), tirages aléatoires, bibliothèque graphique ● Imbrication d'instructions if et for ● Boucles for imbriquées ●
1 © Copyright 2005, Philippe Arlotto tln.fr Creative Commons Attribution-ShareAlike 2.0 license 26/09/2016 Algorithmique & Langage.
1 © Copyright 2006, Philippe Arlotto tln.fr Creative Commons Attribution-ShareAlike 2.0 license 27/09/2016 ● Algorithmique & Langage.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 © Copyright 2005, Philippe Arlotto tln.fr Creative Commons Attribution-ShareAlike 2.0 license 27/09/2016 Algorithmique & Langage.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Algorithmique & Langage C IUT GEII S1
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.
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Scratch un outil au service de la technologie
Scratch Partie 03 Version A16.
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Qu'est-ce que POSIX? Une librairie en langage C
Algorithmique & Langage C
Instructions de contrôle
Semaine #1 INF130 par Frédérick Henri.
Javadoc et débogueur Semaine 03 Version A17.
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Principes de programmation (suite)
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Master Réseaux et Systèmes Distribués (RSD)
L’Instruction de Test Alternatif
Algorithmiques Abdelbasset KABOU
Matrices, déclaration en CSharp
SIF-1053 Architecture de ordinateurs
Un Algorithme , c'est Quoi ?
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Langages de programmation TP3
Algorithmique & Langage C
Cours N°6: Algorithmiques Structures Conditionnelles
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,
Algorithmique & Langage C IUT GEII S1 Notes de cours (deuxième partie)
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
La méthode du simplexe. 1) Algorithme du simplexe  Cet algorithme permet de déterminer la solution optimale, si elle existe, d’un problème de programmation.
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Architecture de machines Le microprocesseur Cours
Entrées/Sorties - Variables - Calculs - Alternative
Calcul Scientifique Initiation à SCILB
Exercice : le jeu. Vous devez concevoir l’algorithme permettant de jouer avec votre calculatrice : elle détermine au hasard un nombre caché entier entre.
Calculs des incertitudes Lundi 30 Avril 2018 Master de Management de la Qualité, de la Sécurité et de l’Environnement.
Grafcet Pratic Présentation et Prise en Main 22/11/2018 L.CUVELIER.
Semaine #3 INF130 par Frédérick Henri.
Semaine #2 INF130 par Frédérick Henri.
Niveau 2 : Tables de plongée
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Flowchart Itération Cours 04.
PROGRAMMATION ET ENSEIGNEMENT
Programme d’appui à la gestion publique et aux statistiques
Quelle est la valeur de S après exécution des instructions suivantes :
L.P.M Chapitre N°3 Les structures de contrôle itératives Dégager le traitement itératif Problème Nombre d’itération ?? Inconnu à l’avance Connu à l’avance.
Python Nicolas THIBAULT
PROGRAMMATION SOUS R. PRESENTE PAR : ACHETTOU ISMAIL LAARICH TARIQ ENCADRE PAR : Pr. EXPOSÉ SUR LA PROGRAMMATION SUR R 2.
Contenu Systèmes de test parallèles Multithreading Synchronisation
L’apprentissage par la robotique Mr. Zouari Lazhar
Transcription de la présentation:

Algorithmique & Langage C IUT GEII S1 Les boucles Notes de cours (troisième partie) 3

Licence Partage des Conditions Initiales à l'Identique 2.0 France Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique 2.0 France Vous êtes libres : * 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

Plan du cours Boucle while... Algorithmes à connaître Analyser un programme Boucle do...while Boucle for... Le "hasard" , l'ordinateur et le C Le temps universel

Boucle while... Permet de répéter l'exécution d'une séquence d'instructions tant que une expression est vraie. Si exp est vraie la séquence I; est exécutée. Puis l'expression est à nouveau évaluée et l'exécution de I; se poursuit tant que exp est vraie. exp F V I;

Boucle while exp while ( exp ) { I; } F V I;

Boucle while : exemple i=0 ; printf("début\n") ; while ( i < 3 ) { printf("A") ; i = i + 1 ; } printf("fin\n") ; printf("%d\n",i) ; i < 3 F V printf("A") ; i = i + 1 ; printf("fin\n") ; printf("%d\n",i) ;

Boucle while Si l'expression est fausse dès la première fois, la séquence d'instructions n'est jamais exécutée. Si l'expression est toujours vraie, la séquence est exécutée infiniment. On a une boucle infinie. En général, les instructions dans le corps de la boucle modifient une variable intervenant dans l'expression et après quelques itérations l'expression devient fausse. Une boucle while permet des répéter des instructions de 0 fois à l'infini.

Exemple : boucle while int i = 0 ; while ( i < 3 ) { printf("A"); i = i + 1 ; } int i = 3 ; while ( i > 0 ) { printf("A"); i = i - 1 ; } int i = 1 ; while ( i <= 3 ) { printf("A"); i = i + 1 ; }

Algorithme à connaître Pour répéter N fois une séquence Ins; : int i = 0; while ( i < N ) { Ins ; i = i + 1 ; }

Analyser un programme 1 : int i = -1 ; 2 : while ( i < 9 ) { 3 : printf("A%i",i); 4 : i = i + 2 ; } ligne i i<9 1 -1 2 V Écran

Boucle do...while I; do { I; } while ( exp ) ; exp F V

Boucle do...while Comme l'expression est évaluée après l'exécution de la séquence I, la séquence est toujours exécutée au moins une fois. Si l'expression est toujours vraie, on a une boucle infinie. La boucle do...while permet de répéter des instructions de une fois à l'infini.

Exemple : do...while int i = 0 ; do { printf("A"); i = i + 1 ; }

Analyser un programme 1 : int i = 0 ; 2 : do { 3 : printf("A%i",i); } while ( i > -6) ; ligne i i > -6 Écran

Toutes les boucles sont équivalentes Un algorithme utilisant une boucle peut toujours être transformé pour produire le même résultat en utilisant l'autre boucle. Cependant, il vaut mieux utiliser la boucle while (ou for) et réserver la boucle do...while lorsque les instructions du corps de boucle doivent être exécutées au moins une fois au minimum.

Un cas ou do...while est judicieuse Demander une valeur dans un intervalle et recommencer tant que l'utilisateur répond une valeur incorrecte. Ex : demander une valeur réelle comprise entre 1 et 2.

do...while float x ; do { printf("Entrez une valeur entre 1 et 2 : "); scanf("%f",&x); } while ( x < 1.0 || x>2.0 ) ; printf("Merci !");

do...while Demander un nombre entre 1 et 2, cinq fois au maximum. float x ; int n = 5 ; do { printf("Entrez une valeur entre 1 et 2 : "); scanf("%f",&x); n = n – 1 ; } while ( ( x < 1.0 || x>2.0 ) && (n > 0) ) ; if ( x>=1.0 && x<=2.0 ) { printf("Merci !"); } else { printf("Trop d'erreur !"); }

Qu'affiche ce programme ? 5 : int i=0, j ; 7 : while ( i < 5 ) { 9 : if ( i > 2 ) { 11  : j = 2*i ; 12  : printf("A%d ",j); } else { 14 : printf("B "); } 16 : i=i+2; 17 : printf("C "); 19 : printf("D%d%d\n",i,j);

= Boucle for La boucle for est équivalente à la boucle while. int i = 0 ; while ( i < 3 ) { printf("A"); i = i + 1 ; } int i = 0 ; for ( ; i < 3 ; ) { printf("A"); i = i + 1 ; } = Que l'on écrira plutôt : int i ; for (i=0 ; i < 3 ; i = i + 1 ) { printf("A"); }

= Boucle for while en "condensé" ins1 ; while ( exp2 ) { ins ; ins3 ; } for ( ins1 ; exp2 ; ins3 ) { ins ; } = Avantage : on ne risque pas d'oublier l'initialisation (Ins1) Attention : notez bien que ins3 est exécutée après ins

Boucle for Qu'affiche ce programme ? n° i j j < 9 6 : int i, j = 5 ; 8 : for ( i = 0 ; j < 9 ; i = i + 1 ) { 10 : printf("%d %d", i , j ) ; 11 : j = j + 1 ; } 13 : printf("%d %d", i , j ) ; Écran

Opérateurs ++ et -- Ces opérateurs incrémentent ou décrémentent une variable entière. Ils peuvent être placés avant ou après une variable entière. Placé avant l'opération est effectuée avant l'évaluation de l'expression. Placé après l'opération est effectuée après l'évaluation de l'expression. Ex : int i ; l'expression i++ a la valeur de i et comme effet d'incrémenter i l'expression ++i a la valeur de i+1

Opérateurs ++ et --

Opérateurs ++ et -- Qu'affiche ce programme ? int i=0 , j=0 ; for ( ; i < 5 ; i++ ) { printf("%d %d", i, j++ ) ; } printf("%d %d", --i , j-- ) ;

Opérateurs ++ et -- L'instruction i = i + 1 ; est toujours équivalente à i++; On s'interdit de réutiliser une variable sur laquelle on a appliqué ++ (ou -- ) dans une même expression, car le résultat serait indéterminé. int i=2 , j ; j = (i++) + (2 * i) ; j vaut ???? (la valeur de j dépend de l'ordre d'évaluation des opérandes de l'addition ! )

Le hasard Le hasard intervient dans de nombreux domaines de l'informatique : simulation, cryptographie, jeux .... Il est impossible de produire des nombres au hasard avec un algorithme. Tout est prévisible dans le fonctionnement d'un ordinateur. Même si c'est difficile en pratique, il est possible de connaître l'état de la mémoire après un certain temps de fonctionnement.

Le hasard On ne peut que simuler une production de nombres au hasard avec un algorithme en essayant de respecter au mieux deux propriétés essentielles : 1/ chaque nombre a la même probabilité de sortir. 2/ connaissant la suite de nombres tirés depuis de le début, il est impossible (difficile en pratique) de prévoir le prochain nombre qui va sortir. Une suite produite par un algorithme qui vérifie ces propriétés est dite pseudo-aléatoire.

Suite pseudo-aléatoire La fonction C rand() fournit un nombre peusdo-aléatoire compris entre 0 et RAND_MAX (32767 avec Dev-Cpp). La suite peusdo-aléatoire obtenue dépend d'un paramètre initial, la graine (seed) fixé par la fonction srand(). Pour des valeurs identiques de la graine la suite obtenue est toujours la même. Si on n'utilise pas srand() la graine par défaut est 1. (Ne pas utiliser srand() équivaut à faire srand(1); )

rand , srand Chaque exécution avec la même graine produit toujours la même séquence. Pour obtenir des suites différentes à chaque exécution, on peut modifier la graine à chaque fois en utilisant par exemple l'horloge de la machine : srand ( time(NULL) ) ; Pour obtenir des nombres entre 0 et N, il suffit de prendre le reste dans la division par N+1 du nombre fourni par rand : int x ; x = rand() % (N+1) ; // 0 < x < N

le temps Le temps universel coordonné (UTC) est une échelle de temps adoptée comme base du temps civil international par un grand nombre de pays. Dans les systèmes compatibles POSIX (comme le sont à peu près linux, windows, MacOS X, BSD,...) ce temps est codé par le nombre de seconde écoulées depuis le 1er janvier 1970 à 0heure 0minute 0 seconde. La valeur courante peut être obtenue par la fonction time. #include <time.h> time_t t ; t = time ( NULL ) ; printf( " %ld" , t ) ;

le temps processeur (temps CPU) La fonction clock() permet de mesurer le temps processeur réellement consommé par une portion de programme : #include <time.h> clock_t t0, t1 ; double duree ; t0 = clock() ; .... ; .....; t1 = clock() ; duree = (double) ( t1 – t0 ) / CLOCKS_PER_SEC ; printf("Duree = %f s\n", duree ); portion de programme dont on veut mesurer le temps CPU