Programmation en Service ILIA Faculté Polytechnique de Mons - Moodle UMONS
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Programmation en Mohammed BENJELLOUN Service ILIA (Informatique, Logiciel & Intelligence Artificielle) Faculté Polytechnique de Mons Mohammed.Benjelloun@umons.ac.be 2020-2021 M. BENJELLOUN : BaB1 2020-2021 - 1 - UMONS
Objectifs Être capable de construire des bons programmes Des programmes : corrects, efficaces, robustes, relativement faciles à comprendre, à modifier et à maintenir. → → Programmer de manière modulaire Qualités attendues d'un programme Clarté, Simplicité, Efficacité, Modularité, Extensibilité. Lors des séances de exercices, où la présence est obligatoire comme aux TPs, un complément de matière sera abordé. On ne peut donc considérer, le syllabus et ce document comme complets. Pré-requis : Aucun Microsoft VISUAL STUDIO COMMUNITY (2019) GRATUIT M. BENJELLOUN : BaB1 2020-2021 - 2 - UMONS
Organisation du cours En 1ere et 2d TP4 5% 1ere Théorie : 50% et Pratique 50% Tests 5% Examen 90% TH PRQ Labos et Exercices Obligatoires M. BENJELLOUN : BaB1 2020-2021 - 3 - UMONS
Organisation du cours … https://moodle.umons.ac.be/ Utilisation du débuggeur Vidéos Syllabus.pdf Codes sources Document C++ Programmes ‘’Environnement logiciel’’ Transp. Info I Note relative à l’organisation de l’examen pratique Énoncé des TPs 120 tests formatifs sur C++ Préparez les TPs C'est en forgeant que l'on devient forgeron, et c'est en programmant que euh... Peut-être … M. BENJELLOUN : BaB1 2020-2021 - 5 - UMONS
Syllabus Codes Ce qu’il faut au moins retenir : L’affectation d’un tableau à un autre est interdite de la manière suivante : int TabA[]= {1,2,3} , TabB[]={5,6,7}; TabA = TabB; … Chapitre 10: Quelques erreurs à éviter Int i,j , Correction → int i, j ; M. BENJELLOUN : BaB1 2020-2021 - 6 - UMONS
UMONS - Faculté Polytechnique Service d’ILIA Syllabus Codes Travaux Pratiques de Structures de données et algorithmes par Mohammed BENJELLOUN Avec la participation de : E. Malengreau, M. El Adoui, Ce qu’il faut au moins retenir : O. Debauche Y. Amkrane L’affectation d’un tableau à un autre est interdite de la manière suivante : A. Guttadauria int TabA[]= {1,2,3} , TabB[]={5,6,7}; TabA = TabB; … Année académique 2019-2020 Chapitre 10: Quelques erreurs à éviter Int i,j , Correction → int i, j ; M. BENJELLOUN : BaB1 2020-2021 - 7 - UMONS
Organisation des TP Consignes Préparez les TPs Si malgré la préparation du TP, vous n’avez pas terminé à la fin de la séance, vous devrez le continuer seul et poser vos éventuelles questions avant le TP suivant. Vous pouvez venir nous les poser directement, durant les ateliers du mercredi ou les poser via le forum du cours. Cette remarque est valable pour tous les travaux pratiques de ce cours. Pour rappel, les travaux pratiques sont obligatoires. Nos Emails : Mohammed.Benjelloun@umons.ac.be Edith.malengreau@umons.ac.be ... But TP1: manipuler les principales instructions de base → Séance Exercice 1 Microsoft VISUAL STUDIO COMMUNITY (2017, 2019) GRATUIT M. BENJELLOUN : BaB1 2020-2021 - 8 - UMONS
Organisation des TP Introduction Consignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TP 1 Instructions de base 1.1 Objectifs de la séance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Rappels syntaxiques . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . 1.3 Le jeu de l’urne (TP1_1). . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Le jeu du nombre caché (TP1_2). .. . . . . . . . . . . . . . . . . 1.5 Pour ceux qui ont terminé: Polynôme du second degré (TP1_3) TP 2 Tableaux et instruction switch 2.1 Objectifs de la séance . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Rappels théoriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Application (TP2_1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Pour ceux qui ont terminé: Calculer l’erreur absolue (TP2_2) TP 3 Les Fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Objectifs de la séance . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Rappels théoriques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Application . . . . . . . . . . . . . . . . . . . . . . M. BENJELLOUN : BaB1 2020-2021 - 9 - UMONS
➢TP1_1 Le jeu de l’urne Le jeu de l’urne (cours théorique) consiste à tirer au sort 2 boules dans une urne. - si les boules sont de même couleur, on remet une boule noire dans l'urne - sinon, on remet une boule verte Le jeu se termine lorsqu'il ne reste plus qu'une boule dans l'urne. Sa couleur? NV 0, NN 0, NV+NN 1 Quelle est la couleur de la dernière boule connaissant les nombres initiaux NV et NN? M. BENJELLOUN : BaB1 2020-2021 - 10 - UMONS
1.4 Le jeu du nombre caché (TP1_2) Écrire un programme qui choisira un nombre entier aléatoire compris entre 0 et 100, puis le fera deviner à l’utilisateur au moyen d’essais successifs : – le programme demandera au joueur d’entrer un nombre ; si le joueur devine le bon nombre, il a gagné, le programme lui affiche « Bravo, c’est trouvé ! » et s’arrête. – si le joueur ne donne pas le bon nombre, le programme lui précise « Trop petit » ou « Trop grand », puis lui demande un autre essai, jusqu’à ce que le joueur trouve. Dans un premier temps, le nombre à deviner sera saisi au clavier et sera nommé chifAcher. Pour vous aider, voici le début du programme : 1 # include 2 using namespace std ; 3 void main () { 4 int chiffre , chifAcher ; / / chifAcher : c’est le chiffre que l’on cherche 5 cout chifAcher ; 7 cout
1.5 Pour ceux qui ont terminé (TP1_3) Écrire un programme C++ qui calcule les racines d’un polynôme du second degré à coefficients réels. Examinez toutes les possibilités (racines réelles, complexes, doubles, infinité ou inexistence de solutions). ax2 + bx + c = 0 1 si a=b=c=0 // infinité de solutions 2 si a=b=0 et c !=0 // aucune solution 3 si a=0, b !=0 et c !=0 // racine réelle de valeur -c/b 4 si a!=0 , b !=0 et c !=0 5 delta = b*b - 4.0* a*c 6 si delta =0 // racine double 7 racine1 = racine2 = -b /(2* a) 8 sinon si delta > 0 //2 racines réelles 9 temp = sqrt ( delta ) 10 racine1 = (-b + temp ) /(2* a) 11 racine2 = (-b - temp ) /(2* a) 12 afficher ( racine1 ) 13 afficher ( racine2 ) 14 sinon // 2 racines complexes conjuguées 15 temp = sqrt (- delta ) 16 reel = -b /2* a imag = temp /2* a 17 afficher ("z1 = reel + imag *i") 18 afficher ("z2 = reel - imag *i") M. BENJELLOUN : BaB1 2020-2021 - 12 - UMONS
➢TP4 4.3.1 Première étape Écrire un programme qui traite un vecteur de nombres entiers et de taille maximale égale à vingt (taille max = 20) et qui gère en boucle le menu ci-dessous composé de 7 opérations. Les opérations 5 à 7 seront communiquées lors de la séance de travaux pratiques. 1. Saisie du vecteur et affichage de ses données. 2. Calcul (1 seule fonction) et affichage du minimum et du maximum du vecteur. 3. Échange de position maximum → minimum et affichage du vecteur. 4. Ajout d’un élément au milieu du vecteur et affichage du vecteur. 5. ………………………………… 6. ………………………………… 7. ………………………………… 8. Quitter. Consignes … M. BENJELLOUN : BaB1 2020-2021 - 13 - UMONS
Examen pratique: TPs Exercices Voir exemples fin du chapitre 8 ….. + 4 dans Moodle …. …. Note relative à l’organisation de …. l’examen pratique d’Informatique : Moodle M. BENJELLOUN : BaB1 2020-2021 - 14 - UMONS
Qualité d’un programme Architecture claire (conception répondant aux spécifications ) Algorithmes suite d'instructions permettant de résoudre un problème en un nombre fini d'instructions et un temps fini d'exécution. Structures de données “Comment organiser au mieux l’information dans un programme ?” Tableaux !! Listes !!! Structures !! Classes !? Réutilisabilité Tests de robustesse (identifier les comportements problématiques ) Documentation M. BENJELLOUN : BaB1 2020-2021 - 15 - UMONS
(suite finie d’opérations élémentaires) (langage) (pseudo-code/organigramme) { char Rep; Ce programme doit gérer en boucle Rep = ‘X’ ; le menu suivant : cout
Pourquoi utiliser C++ ? un langage relativement propre, des objets pour structurer, gestion précise de la mémoire, un peu moins rapide que C mais plus rapide que Java ou Python, un grand nombre de librairies disponibles. M. BENJELLOUN : BaB1 2020-2021 - 17 - UMONS
Pourquoi utiliser C++ ? Quel langage de programmation apprendre pour créer un jeu vidéo ? • C et C++ : les langages de référence. Très efficaces, ils sont toutefois difficiles à apprendre. • C# : fortement inspiré du C++ et du Java, mais également complexe à apprendre. • Java : légèrement plus facile à apprendre, mais un peu moins performant. • Python : très facile à apprendre, mais moins performant. Quel langage de programmation apprendre pour se lancer dans l’intelligence artificielle ? • Python : • C++ : • Java : • Prolog : M. BENJELLOUN : BaB1 2020-2021 - 18 - UMONS
Moi, ingénieur… que vais-je bien pouvoir faire ? Pour commencer, ?? programmer: Y = X2, Z = X3 et BaB1FPMs M. BENJELLOUN : BaB1 2020-2021 - 19 - UMONS
Pour commencer Fonction main() de type void ou int Identificateurs (nom variables, …) Types de données (entier, réel, …) Variables : déclarations et initialisations Entrées /sorties : cin et cout Directives préprocesseur M. BENJELLOUN : BaB1 2020-2021 - 20 - UMONS
Pour commencer Tout programme doit avoir un point d’entrée nommé main() void main() // Ceci est un commentaire sur 1 seule ligne { /* Ceci est un commentaire sur plusieurs lignes pour signaler qu’il s’agit de notre premier programme qui est vide on placera ici une liste d’instructions en C++ */ } int main() // La fonction ‘main()’ peut être précédée par int au lieu de void { Type_de_donnée Donnée; // Déclaration des identificateurs/variables Instruction 1; /* Le programme principal commençant par main() Instruction 2; peut contenir des instructions se terminant par ‘ ; ’ */ .. . return 1; // Si on utilise int main(), il faut retourner un entier (p.e: return 1) } M. BENJELLOUN : BaB1 2020-2021 - 21 - UMONS
Pour commencer Un identificateur ne peut pas être un mot réservé du langage : Les mots réservés du langage C++ doivent être écrits en minuscules. M. BENJELLOUN : BaB1 2020-2021 - 22 - UMONS
Pour commencer Les identificateurs nomment les objets C++ (fonctions, variables ...). Le C++ est sensible à la case (case sensitive; distingue les minuscules des majuscules) Exemple: AB, Ab, ab sont des identificateurs valides et tous différents. Identificateurs valides : xx y1 somme_5 _position Noms Prog_1_V0 Identificateurs invalides : 3eme commence par un chiffre x#y caractère non autorisé (#) no-commande caractère non autorisé (-) taux change caractère non autorisé (espace) M. BENJELLOUN : BaB1 2020-2021 - 23 - UMONS
Pour commencer Types de données en langage C++ Type de donnée Signification Plage de valeurs acceptée char Caractère -128 à 127 unsigned char Caractère non signé 0 à 255 short int Entier court -32 768 à 32 767 unsigned short int Entier court non signé 0 à 65 535 int Entier -32 768 à 32 767 -2 147 483 648 à 2 147 483 647 unsigned int Entier non signé 0 à 65 535 0 à 4 294 967 295 long int Entier long -2 147 483 648 à 2 147 483 647 unsigned long int Entier long non signé 0 à 4 294 967 295 float Flottant (réel) -3.4*10-38 à 3.4*1038 double Flottant double -1.7*10-308 à 1.7*10308 long double Flottant double long -3.4*10-4932 à 3.4*104932 bool Booléen Prend deux valeurs : 'true' et 'false' mais une conversion implicite (valant 0 ou 1) est faite par le compilateur lorsque l'on affecte un entier. M. BENJELLOUN : BaB1 2020-2021 - 24 - UMONS
Pour commencer void main() { int X, Y; // déclaration de deux variables X et Y. Instruction se termine par ‘;’ float racine = 1.2; // déclaration et initialisation de la variable ‘racine’ de type float X= 5; // initialisation de la variable X à 5 // affectation de la valeur de -X à Y. Donc Y = -5 Y= -X; } Variables : déclarations Initialisations/Affectations Syntaxe : Type identificateur1, id2,…. ; int i=9; ou int i(9); int i; Exemples: char c1, c2, c3 ; i=9; int i, j, var_ent ; float f, variable ; char c1= 'A'; ou char c1('A’); ou double D, Mavariable ; char c1; c1= 'A'; M. BENJELLOUN : BaB1 2020-2021 - 25 - UMONS
Pour commencer void main() { int X, Y; // déclaration de deux variables X et Y. Instruction se termine par ‘;’ float racine = 1.2; // déclaration et initialisation de la variable ‘racine’ de type float X= 5; // initialisation de la variable X à 5 // affectation de la valeur de -X à Y. Donc Y = -5 Y= -X; } Les entrées /sorties : cin et cout (saisie clavier/affichage écran) • cout, le flux standard de sortie, habituellement associé à l'écran, Syntaxe : cout var1 >> var2 >> var3 … ; 7 M. BENJELLOUN : BaB1 2020-2021 - 26 - UMONS
Pour commencer void main() { int X, Y; // déclaration de deux variables X et Y. Instruction se termine par ‘;’ float racine = 1.2; // déclaration et initialisation de la variable ‘racine’ de type float X= 5; // initialisation de la variable X à 5 // affectation de la valeur de -X à Y. Donc Y = -5 Y= -X; } #include // Directive préprocesseur/ Pour utiliser cout et cin using namespace std; void main( ) { int X, Y; cout > X ; // Attend une saisie de X au clavier Y = - X ; cout
Moi, ingénieur… que vais-je bien pouvoir faire ? Pour commencer, j’aimerais programmer: Y = X2, Z = X3 et #include // pour cout et cin #include // pour sqrt( ) using namespace std; Variables : déclarations void main() { int X, Y, Z ; // variables Syntaxe : Type identificateur1, id2,…. ; float racine; cout > X; Y= X * X ; // X² int i=9; ou int i; … i=9; Z= Y * X ; // X³ racine = sqrt(X); cout
Moi, ingénieur… que vais-je bien pouvoir faire ? Pour commencer, j’aimerais programmer: Y = X2, Z = X3 et #include // pour cout et cin Directives du préprocesseur #include // pour sqrt( ) accès avant la compilation using namespace std; Exemples de librairies standards: void main() { int X, Y, Z ; // variables (ceci est un commentaire) Gestion des Entrées-Sorties standard float racine; cout > X; Traitement de chaînes de caractères Y= X * X ; // X² Z= Y * X ; // X³ racine = sqrt(X); Contrôler les paramètres d'affichage cout
Merci BaB1FPMs M. BENJELLOUN : BaB1 2020-2021 - 30 - UMONS
Pour commencer Les entrées /sorties : cin et cout Formatage de la présentation → écran cout
Pour commencer Les entrées /sorties : cin et cout Formatage de la présentation → écran cout
Pour commencer Fonction main() de type void ou int Identificateurs (nom variables, …) Types de données (entier, réel, …) Variables : déclarations et initialisations Entrées /sorties : cin et cout Directives préprocesseur M. BENJELLOUN : BaB1 2020-2021 - 33 - UMONS
#include using namespace std; Exercice void main() { int x=5; float y; const int W = 6 ; cout
Les opérateurs Les opérateurs arithmétiques : +, -, /, … Les opérateurs de comparaison : >, =,
Les opérateurs arithmétiques Le C++ propose les opérateurs suivants : + addition - soustraction * multiplication / division % modulo (reste de la division entière ) % ne peut être utilisé qu'avec des entiers 7/2 3 7.0/2 7/2.0 7.0/2.0 3.5 M. BENJELLOUN : BaB1 2020-2021 - 36 - UMONS
Les opérateurs arithmétiques Le C++ propose les opérateurs suivants : + addition - soustraction * multiplication / division % modulo (reste de la division entière ) % ne peut être utilisé qu'avec des entiers Modulo : C=A%B; C = 4%2 = 0; 5%2 = 1; 8%3= 2; C=A%2 Si C=0 alors A est pair sinon Si C=1 A est impair M. BENJELLOUN : BaB1 2020-2021 - 37 - UMONS
Les opérateurs arithmétiques Le C++ propose les opérateurs suivants : + addition - soustraction * multiplication / division % modulo (reste de la division entière ) % ne peut être utilisé qu'avec des entiers … void main() { int i = 6, j = 4, k; float f = 6.0, g = 4.0, h; k = i / j; // k= 6/4 = 1 h = f / g; // h = 6.0/4.0 = 1.5 h = i / j; // h = 6/4 = 1.0 } M. BENJELLOUN : BaB1 2020-2021 - 38 - UMONS
Les opérateurs Les opérateurs arithmétiques : +, -, /, … Les opérateurs de comparaison : >, =,
Les opérateurs de comparaison < plus petit plus grand >= plus grand ou égal == égal ! != différent Le résultat d'une expression logique est un booléen. Il vaut true si elle est vraie et false sinon. Réciproquement, toute valeur non nulle est considérée comme vraie et la valeur nulle comme fausse. Les opérateurs logiques && et ! || ou (non exclusif) ! non M. BENJELLOUN : BaB1 2020-2021 - 40 - UMONS
Contractions d'opérateurs Pour += -= *= /= %= &= |= ^= = a += 15; i *= j + 5; a = a + 15; i = i * (j + 5); Incrément et décrément int i = 5, j = 4; ++ incrément : i++ ou ++i est équivalent à i += 1 ou i = i + 1 i++; // i vaudra 6 - - décrément --j; // j vaudra 3 ++i; // i vaudra 7 j++; // j vaudra 4 j++; // j vaudra 5 j += i ; // j vaudra 5 + 7 M. BENJELLOUN : BaB1 2020-2021 - 41 - UMONS
Les structures de contrôle Alternative: if-else Itérations: for, while, do-while Rupture de Contrôle: break, continue, return … Choix Multiple: switch-case M. BENJELLOUN : BaB1 2020-2021 - 42 - UMONS
Les structures de contrôle programme programme oui non Condition vraie oui Condition non Bloc vraie d’instructions Bloc 1 Bloc 2 d’instructions d’instructions Bloc Suite du d’instructions programme oui Condition vraie non Suite du programme Suite du programme if-else while do-while M. BENJELLOUN : BaB1 2020-2021 - 43 - UMONS
Les décisions - if … else Selon qu’une certaine condition est vérifiée ou non, on exécutera une ou plusieurs instructions. programme if (Condition vraie) if ( X==Y) { oui Condition non { X= X+1; vraie BLOC 1 D'INSTRUCTIONS Y= Y+2; } } Bloc 1 Bloc 2 d’instructions d’instructions else else { { X = X-1 ; BLOC 2 D'INSTRUCTIONS Y = Y-2 ; } } Suite du programme if (Condition vraie) if (a
Les décisions - if sans else if (Condition vraie) oui non Condition vraie { instruction 1; Bloc 1 instruction 2; d’instructions instruction 3; … instruction N; } Suite du programme if (Condition vraie) if ( temperature > 70.0) instruction 1; cout
Les décisions – if emboîtés if ( ) if ( ) else if () else if () else if () else if () else if () else if () else else ◼ else est associé avec le if le plus proche if(i >= 0) if(i >= 0) { if(i > 1000) cout 1000) cout
Les décisions – if emboîtés exemple #include using namespace std; int main() { int a, b; cout > a; cout > b; if (a > b) cout
Les décisions - if … else exemple int i = -1; if(i < 0){ i
Les décisions - if … else exemple int i = 1; if(i < 0) { cout
Les décisions - if … else exemple int i = 1; if(i < 0) cout
Les structures de contrôle Alternative: if-else Itérations: for, while, do-while Rupture de Contrôle: break, continue, return … Choix Multiple: switch-case M. BENJELLOUN : BaB1 2020-2021 - 51 - UMONS
Les itérations – for #include using namespace std; void main() { int nb_f=0; action; nb_f++; action; nb_f++; … action; nb_f++; … } M. BENJELLOUN : BaB1 2020-2021 - 52 - UMONS
Les itérations – for #include using namespace std; void main() { int nb_f=200; action; nb_f--; action; nb_f--; action; nb_f--; … } M. BENJELLOUN : BaB1 2020-2021 - 53 - UMONS
Les itérations – for #include #include using namespace std; using namespace std; void main() { void main() { int nb_f=0; int nb_f=200; action; action; nb_f++; nb_f--; action; action; nb_f++; nb_f--; action; action; nb_f++; nb_f--; … … } } : évaluée 1 seule fois en début de boucle : évaluée avant chaque itération. for (;;) Si vrai alors les { instructions de la boucle sont exécutées ; Sinon } la boucle est terminée évaluée à la fin de chaque itération M. BENJELLOUN : BaB1 2020-2021 - 54 - UMONS
Les itérations – for #include #include using namespace std; using namespace std; void main() { void main() { int nb_f=0; int nb_f=200; action; action; nb_f++; nb_f--; action; action; nb_f++; nb_f--; action; action; nb_f++; nb_f--; … … } } for (nb_f = 0; nb_f 0; nb_f--) { action; action; } for (nb_f = 0; nb_f 0; ){ action; action; nb_f ++; nb_f--; } } M. BENJELLOUN : BaB1 2020-2021 - 55 - UMONS
Les itérations – for La boucle for est une structure de contrôle de programmation qui permet de répéter l'exécution d’une ou plusieurs actions. for (i = 0; i
while = Tant que ... Faire ... Boucle pré-testée tant que (expression vraie) tant que, pas jusqu’à ce que ! faire { BLOC D'INSTRUCTIONS } Organigramme: Syntaxe: while (Condition vraie) int i=1, Som=0; oui Condition non { while (i
while = Tant que ... Faire ... Exemples i=1; Interieur 1 while(i
while = Tant que ... Faire ... Exemples i=1; Interieur 1 while(i
do while = REPETER … tant que (garantit l’exécution au moins une fois) programme do Bloc { /* bloc d'instructions */ d’instructions ............; ............; oui Condition non } while (Condition vraie); vraie Suite du programme int j = 5; j = 5 do { j = 4 cout
Les itérations for( init ; (Condition vraie); itération) for (i = 0; i
Les structures de contrôle Alternative: if-else Itérations: for, while, do-while Rupture de Contrôle: break, continue, return … Choix Multiple: switch-case M. BENJELLOUN : BaB1 2020-2021 - 62 - UMONS
Vous pouvez aussi lire