Cours de Programmation Informatique - Concepts de Base 2024-2025

Summary

Ce document est un cours de programmation, se concentrant sur les concepts de base en informatique. Il couvre des sujets tels que l'histoire de l'informatique, les algorithmes, la résolution de problèmes, les paradigms de programmation, le débugage et les structures de données, illustrés avec différentes langues de programmation. Ce document s'adresse aux étudiants des premier cycles universitaire.

Full Transcript

Programmations : Concepts de base - Théorie Cours Général Bachelier en informatique– Finalité Télécommunications et réseaux – Bloc 1. Rédigé par : Desmet Erwin – [email protected] Année académique 2024-2025 Table des matières S...

Programmations : Concepts de base - Théorie Cours Général Bachelier en informatique– Finalité Télécommunications et réseaux – Bloc 1. Rédigé par : Desmet Erwin – [email protected] Année académique 2024-2025 Table des matières Séance 1 : Introduction à l'Informatique et Son Importance.......................... 10 Objectifs de la Séance........................................................................... 10 Introduction........................................................................................ 10 1. Histoire de l'Informatique.................................................................. 10 Évolution Historique........................................................................... 10 Innovations Clés et Leurs Effets sur la Société....................................... 11 2. Applications et Rôles de l'Informatique................................................ 12 Santé.............................................................................................. 12 Finance............................................................................................ 12 Éducation......................................................................................... 13 Divertissement.................................................................................. 13 3. Qu'est-ce qu'un Programme ?............................................................ 13 Définition......................................................................................... 13 Exemples de Programmes................................................................... 14 Langages de Programmation............................................................... 14 4. Cycle de Développement Logiciel........................................................ 16 Analyse............................................................................................ 16 Conception....................................................................................... 17 Implémentation................................................................................. 17 Test................................................................................................. 18 Maintenance..................................................................................... 18 5. Résumé et Conclusion....................................................................... 19 6. Matériel Supplémentaire.................................................................... 19 Séance 2 : Notions Fondamentales de l'Informatique................................... 20 Objectifs de la Séance........................................................................... 20 Introduction........................................................................................ 20 1. Qu'est-ce qu'un Algorithme ?............................................................. 20 Définition......................................................................................... 20 Importance des Algorithmes............................................................... 20 Exemples d'Algorithmes..................................................................... 21 Comparaison des Algorithmes de Tri.................................................... 23 2. Résolution de Problèmes.................................................................... 25 Approche Systématique...................................................................... 25 Exemples Concrets............................................................................ 25 3. Paradigmes de Programmation........................................................... 30 Définition et Types............................................................................. 30 Quand Utiliser Quel Paradigme ?.......................................................... 31 2 Année académique 2024-2025 4. Notions de Mémoire et Gestion de la Mémoire....................................... 32 Types de Mémoire............................................................................. 32 Gestion de la Mémoire........................................................................ 32 Importance de la Gestion de la Mémoire............................................... 32 5. Le débugage.................................................................................... 33 Introduction...................................................................................... 33 Types d'Erreurs................................................................................. 33 Outils de Débugage........................................................................... 34 Bonnes Pratiques de Débugage........................................................... 35 6. Résumé et Conclusion................................................................... 36 7. Matériel Supplémentaire............................................................... 36 8. Exercice complémentaire.............................................................. 37 Séance 3 : Concepts de Base de la Programmation...................................... 40 Objectifs de la Séance........................................................................... 40 Introduction........................................................................................ 40 1. Variables et Types de Données........................................................... 40 Définition d'une Variable..................................................................... 40 Types de Données............................................................................. 40 Langages Typés Statistiquement vs Dynamiquement.............................. 41 Variables Globales et Locales.............................................................. 41 Déclaration et Initialisation de Variables............................................... 42 Opérateurs....................................................................................... 43 2. Structures de Contrôle...................................................................... 44 Conditions (if, elif, else)..................................................................... 44 Boucles (for, while, do-while).............................................................. 44 Utilisation des Boucles et Conditions Ensemble...................................... 46 3. Fonctions et Procédures..................................................................... 47 Définition d'une Fonction.................................................................... 47 Déclaration d'une Fonction.................................................................. 47 Appel d'une Fonction.......................................................................... 47 Retour de Valeur............................................................................... 47 Variables Locales et Globales dans les Fonctions.................................... 48 Les paramètres................................................................................. 49 Le passage par valeur ou référence d’un paramètre................................ 50 4. Conclusion.................................................................................. 54 5. Matériel Supplémentaire............................................................... 54 Séance 5 : Structures de Données Fondamentales....................................... 55 Objectifs de la Séance........................................................................... 68 3 Année académique 2024-2025 Introduction........................................................................................ 68 1. Tableaux et Listes............................................................................. 68 Concepts de Base.............................................................................. 68 Exemples et Exercices........................................................................ 69 2. Piles et Files.................................................................................... 70 Concepts de Base.............................................................................. 70 Exemples et Exercices........................................................................ 71 3. Listes Chaînées, Arbres, Graphes : concepts de bases............................ 72 Listes Chaînées :............................................................................... 72 Arbres :........................................................................................... 73 Graphes :......................................................................................... 74 Exemples et Exercices........................................................................ 74 4. Gestion de la Mémoire....................................................................... 76 Concepts de Base.............................................................................. 76 Allocation Statique............................................................................. 76 Allocation Dynamique......................................................................... 76 Différences entre les Langages............................................................ 76 Exemples et Exercices........................................................................ 77 5. Conclusion.................................................................................. 78 6. Matériel Supplémentaire............................................................... 78 Séance 6 : Bonnes Pratiques de Programmation.......................................... 79 Objectifs de la Séance........................................................................... 79 Introduction........................................................................................ 79 1. Conventions de Codage..................................................................... 79 PEP 8 : Style Guide for Python Code..................................................... 79 Conventions en C#............................................................................ 81 Conventions en Java.......................................................................... 82 2. Documentation et Commentaires........................................................ 83 Importance de la Documentation......................................................... 83 Types de Commentaires..................................................................... 83 Utilisation des Docstrings (PEP 257)..................................................... 84 3. Outils et Méthodologies..................................................................... 88 Introduction à Git.............................................................................. 88 Concepts Clés :................................................................................. 88 Outils de Linters et Formateurs de Code............................................... 88 Linters............................................................................................. 88 Fonctionnement des Linters :.............................................................. 89 Formateurs de Code.......................................................................... 89 4 Année académique 2024-2025 Fonctionnement des Formateurs de Code :............................................ 90 4. Résumé et Conclusion....................................................................... 90 5. Matériel Supplémentaire.................................................................... 90 Séance 7 : Utilisation des Frameworks et Bibliothèques................................ 92 Objectifs de la Séance........................................................................... 92 Introduction........................................................................................ 92 1. Bibliothèques vs Frameworks............................................................. 92 Définition et différences...................................................................... 92 Exemples concrets............................................................................. 93 2. Principes d'Utilisation des Frameworks................................................. 93 Pourquoi utiliser un framework............................................................ 93 Avantages des frameworks................................................................. 93 3. Exemples de Frameworks Populaires................................................... 94 Frameworks web............................................................................... 94 Frameworks back-end........................................................................ 95 Comparaison des Frameworks Back-End............................................... 96 Frameworks front-end........................................................................ 97 Comparaison des Frameworks Front-End.............................................. 99 Frameworks de tests.......................................................................... 99 Comparaison des Frameworks de Tests............................................... 100 4. Outils de tests................................................................................. 101 Comparaison des Outils de Tests........................................................ 101 5. Concepts de Base de DevOps............................................................ 102 Définition de DevOps........................................................................ 102 6. Intégration Continue et Déploiement Continu (CI/CD)........................... 102 Définition et Principe......................................................................... 102 6. Qu'est-ce qu’un ORM ?.....................................................................103 Avantages des ORM..........................................................................103 Exemples d'ORM Populaires............................................................... 103 Comparaison des Outils de Bases de Données...................................... 105 7. Introduction aux IDEs......................................................................105 Importance des IDEs........................................................................ 105 Exemples d'IDEs populaires............................................................... 105 Comparaison des IDEs...................................................................... 106 8. Résumé et Conclusion...................................................................... 107 9. Matériel Supplémentaire................................................................... 107 Séance 8 : Introduction à l'Intelligence Artificielle et Outils d'IA.................... 109 Objectifs de la Séance.......................................................................... 109 5 Année académique 2024-2025 Introduction.......................................................................................109 1. Concepts de Base de l'Intelligence Artificielle....................................... 109 Définition de l'IA.............................................................................. 109 Types d'IA.......................................................................................109 LLM : Large Language Model.............................................................. 109 2. Apprentissage Automatique.............................................................. 110 Apprentissage supervisé.................................................................... 110 Apprentissage non supervisé..............................................................110 Apprentissage par renforcement.........................................................110 Apprentissage Profond (Deep Learning)............................................... 111 Réseau de Neurones.........................................................................111 3. Outils d'IA Générative...................................................................... 112 Introduction à ChatGPT et DALL-E....................................................... 112 4. Bonnes Pratiques pour Utiliser les IA..................................................112 Intégration dans les études et la programmation.................................. 112 Cas d'utilisation pratiques.................................................................. 112 5. Prompt Engineering et Utilisation de GitHub Copilot.............................. 113 Qu'est-ce que le Prompt Engineering................................................... 113 Exemples de Prompts Efficaces........................................................... 113 Règles pour un Bon Prompt Engineering.............................................. 113 Exemple de Prompt Complexe............................................................ 115 Utilisation de GitHub Copilot............................................................... 115 6. Limitations et Considérations Éthiques................................................ 115 Limitations......................................................................................115 Considérations éthiques.................................................................... 116 7. Résumé et Conclusion...................................................................... 116 8. Matériel Supplémentaire................................................................... 117 Séance 9 : Concepts Avancés de Programmation........................................ 119 Objectifs de la Séance.......................................................................... 119 Introduction.......................................................................................119 1. Gestion des Erreurs et Exceptions...................................................... 119 Types d'erreurs : rappel.................................................................... 119 Gestion des exceptions en Python....................................................... 119 Bonnes Pratiques.............................................................................. 120 2. Programmation Concurrente et Parallèle............................................. 120 Concepts de Base............................................................................. 120 Threads vs Processus........................................................................ 120 Synchronisation et Communication entre Threads................................. 121 6 Année académique 2024-2025 Programmation Parallèle : Synchrone vs Asynchrone............................. 122 Multicœur et Multithreading............................................................... 122 3. Programmation Fonctionnelle Avancée................................................ 123 Fonctions de Première Classe............................................................. 123 4. Introduction aux Bases de Données et SQL......................................... 124 Concepts de Base des Bases de Données.............................................124 Introduction à SQL........................................................................... 124 Comparatif SQL vs NoSQL.................................................................124 Types de Bases de Données NoSQL..................................................... 124 Introduction aux Systèmes de Gestion de Bases de Données (SGBD)....... 124 Types de SGBD................................................................................125 Comparatif des SGBD........................................................................ 125 5. Optimisation et Performance............................................................. 126 Techniques de Base.......................................................................... 126 Exemples Concrets...........................................................................127 Tableau Comparatif des Techniques d'Optimisation................................ 127 6. Programmation Cloud-Native............................................................. 128 Définition........................................................................................128 7. Résumé et Conclusion...................................................................... 129 8. Matériel Supplémentaire................................................................... 129 Séance 10 : Un peu de tout en programmation informatique........................ 130 Objectifs de la Séance.......................................................................... 130 Introduction.......................................................................................130 2. Programmation Embarquée............................................................... 130 Concepts de Base............................................................................. 130 Applications Courantes...................................................................... 130 Microcontrôleurs............................................................................... 131 Micro-ordinateurs.............................................................................131 Raspberry Pi....................................................................................131 Arduino...........................................................................................132 Comparatif Micro-ordinateurs............................................................. 132 Autres Micro-ordinateurs................................................................... 133 Systèmes d'Exploitation pour Systèmes Embarqués............................... 134 Langages de Programmation pour Systèmes Embarqués........................ 134 Fournisseurs et Plateformes............................................................... 135 2. Sécurité by Design........................................................................... 135 Concepts de Base............................................................................. 135 Principes de Développement Sécurisé.................................................. 135 7 Année académique 2024-2025 3. Méthodes de Développement............................................................ 136 Frontend First..................................................................................136 Backend First...................................................................................136 API First..........................................................................................137 Comparatif des Méthodes de Développement........................................ 137 Exemples Concrets : Authentification et Autorisation............................. 137 4. BYOD (Bring Your Own Device).......................................................... 137 Avantages de BYOD..........................................................................138 Défis et Solutions............................................................................. 138 5. Bonnes Pratiques en Développement Sécurisé..................................... 138 Principes de Sécurité......................................................................... 138 Outils et Techniques......................................................................... 139 6. Résumé et Conclusion...................................................................... 140 7. Lectures Recommandées.................................................................. 140 Séance 11 : Introduction à la Sécurité Informatique................................... 142 Objectifs de la Séance.......................................................................... 142 Introduction.......................................................................................142 1. Concepts de Base de la Sécurité Informatique..................................... 142 Cryptographie.................................................................................. 142 Chiffrement..................................................................................... 142 Différences entre Chiffrement Symétrique et Asymétrique...................... 143 Hachage..........................................................................................143 Authentification et Autorisation........................................................... 144 Stéganographie................................................................................ 144 2. Bonnes Pratiques de Sécurité pour les Développeurs............................ 144 Gestion des Mots de Passe.................................................................144 Validation des Entrées....................................................................... 145 Gestion des Cookies et des Tokens...................................................... 145 Comparatif entre Cookies et Tokens.................................................... 146 Quand Utiliser Cookies ou Tokens....................................................... 146 3. Utilisation et Comparaison des Moyens de Stockage de Données............ 146 Introduction..................................................................................... 146 Comparaison des Moyens de Stockage................................................ 147 Détails des Moyens de Stockage......................................................... 148 4. Exemples Concrets et Exercices......................................................... 150 Implémenter un Chiffrement de Données Simple..................................150 Mettre en Place une Authentification Basique........................................ 151 Utilisation de la Stéganographie.......................................................... 151 8 Année académique 2024-2025 5. Résumé et Conclusion...................................................................... 152 6. Matériel Supplémentaire................................................................... 152 9 Année académique 2024-2025 Séance 1 : Introduction à l'Informatique et Son Importance Objectifs de la Séance  Comprendre l'histoire et l'impact de l'informatique sur la société.  Identifier les applications et les rôles de l'informatique dans divers domaines.  Définir ce qu'est un programme informatique.  Connaître les étapes du cycle de développement logiciel. Introduction Bienvenue à cette première séance du cours d'initiation à l'informatique. Aujourd'hui, nous allons plonger dans les fondements de l'informatique, découvrir comment elle a évolué de l'ère des dinosaures électroniques à l'ère des smartphones, et comprendre son impact sur notre société. Nous aborderons également ce qu'est un programme informatique et les étapes du cycle de développement logiciel. Prêts à devenir des Indiana Jones du monde numérique ? C'est parti ! 1. Histoire de l'Informatique Évolution Historique L'informatique a une riche histoire qui remonte à plusieurs siècles. Voici quelques étapes clés, sans machine à remonter le temps, mais presque :  L'Antiquité : Les premiers dispositifs de calcul comme l'abaque ont été utilisés pour effectuer des calculs simples. Imaginez des comptables romains en toge manipulant des boules d'un abaque pour calculer les impôts de César. Source : Wikipedia - Abaque.  17ème et 18ème siècles : Blaise Pascal invente la Pascaline, une des premières machines mécaniques de calcul. Pendant ce temps, Leibniz se dit "Pourquoi pas moi ?" et crée une machine à calculer capable de multiplier et de diviser. Source : Wikipedia - Pascaline.  19ème siècle : Charles Babbage conçoit la "machine analytique", le grand-père des ordinateurs. Ada Lovelace, souvent considérée comme la première programmeuse, écrit des algorithmes pour cette machine. Oui, avant même que le mot "programmation" n'existe ! Source : Computer History Museum - Charles Babbage.  Début du 20ème siècle : Alan Turing propose la "machine de Turing", un modèle théorique de calcul qui forme la base de l'informatique théorique. Pas de rapport avec les films de science-fiction, mais presque. Source : Stanford Encyclopedia of Philosophy - Turing Machine. 10 Année académique 2024-2025  1940s : Les premiers ordinateurs électroniques comme l'ENIAC (Electronic Numerical Integrator and Computer) sont développés pour des applications militaires et scientifiques. Imaginez un ordinateur qui prenait toute une pièce pour faire des calculs que votre smartphone peut faire en un clin d'œil. Source : Wikipedia - ENIAC.  1950s-1960s : Émergence des langages de programmation comme Fortran (1957) et COBOL (1959), qui permettent de programmer les premiers ordinateurs de manière plus efficace. Source : Wikipedia - Fortran, Wikipedia - COBOL.  1970s-1980s : Popularisation des micro-ordinateurs et des PC avec des entreprises comme Apple (Apple II, 1977) et IBM (IBM PC, 1981). Steve Jobs et Bill Gates entrent en scène, et le reste, comme on dit, appartient à l'histoire. Source : Wikipedia - Apple II, Wikipedia - IBM PC.  1990s à aujourd'hui : L'essor d'Internet, des smartphones, des réseaux sociaux, et des technologies d'intelligence artificielle transforme profondément la société. Des emails aux emojis, nous sommes tous connectés, tout le temps. Source : Wikipedia - Internet, Wikipedia - Smartphone. Innovations Clés et Leurs Effets sur la Société Les innovations en informatique ont transformé de nombreux aspects de notre vie quotidienne, parfois pour le meilleur, parfois pour nous donner envie de jeter notre ordinateur par la fenêtre.  Communication : Internet, email, et réseaux sociaux ont révolutionné la manière dont nous communiquons. Par exemple, l'email a remplacé une grande partie du courrier postal (désolé, facteur). Les réseaux sociaux comme Facebook et Twitter permettent de rester en contact avec des amis et de partager des informations instantanément. Source : Pew Research Center - Social Media Fact Sheet.  Commerce : L'e-commerce, avec des géants comme Amazon et Alibaba, permet aux consommateurs d'acheter des biens et des services en ligne. Les paiements en ligne via PayPal et autres services ont simplifié les transactions financières. Maintenant, on peut acheter un réfrigérateur tout en restant en pyjama. Source : Statista - E-commerce worldwide.  Santé : Les systèmes de gestion des informations médicales, l'imagerie médicale avancée (comme les scanners et les IRM), et les logiciels d'aide au diagnostic ont amélioré la qualité et l'efficacité des soins de santé. Oui, même votre médecin utilise un logiciel pour vous dire que vous devez boire plus d'eau. Source : WHO - eHealth.  Éducation : Les plateformes d'apprentissage en ligne comme Coursera, Khan Academy, et les MOOC (Massive Open Online Courses) rendent l'éducation accessible à un public mondial. Désormais, vous pouvez apprendre le japonais ou la physique quantique depuis votre canapé. Source : Educause - 7 Things You Should Know About MOOCs. 11 Année académique 2024-2025  Divertissement : Les jeux vidéo, les plateformes de streaming comme Netflix et Spotify, et les technologies de réalité augmentée et virtuelle offrent de nouvelles formes de divertissement. Plus besoin de quitter la maison pour aller au cinéma ou au concert. Source : Newzoo - Global Games Market Report. 2. Applications et Rôles de l'Informatique L'informatique est omniprésente et joue un rôle crucial dans divers domaines, un peu comme le sel dans la cuisine. Voici quelques exemples : Santé  Systèmes de gestion des informations médicales : Les dossiers médicaux électroniques (DME) permettent une gestion efficace des données des patients. Par exemple, le système Epic est largement utilisé dans les hôpitaux américains. Imaginez un médecin avec une tablette au lieu d'une montagne de papiers. Source : Epic Systems - Healthcare Software.  Imagerie médicale et diagnostics assistés par ordinateur : Les technologies comme les scanners, l'IRM, et les logiciels d'aide au diagnostic permettent des diagnostics plus précis et rapides. Parce que voir à travers les gens, c'est quand même pratique. Source : Radiopaedia - MRI.  Recherche biomédicale et bio-informatique : Le séquençage génétique et l'analyse de grandes quantités de données médicales aident à la recherche de nouvelles thérapies et médicaments. Transformer les Big Data en Big Health. Source : Nature - The impact of bioinformatics on genomics. Finance  Systèmes de transactions bancaires et financières : Les banques en ligne et les applications de paiement mobile (comme PayPal et Venmo) permettent des transactions financières rapides et sécurisées. Plus besoin de faire la queue à la banque ! Source : Wikipedia - Online banking.  Trading algorithmique : Utilisation d'algorithmes pour le trading à haute fréquence, où des transactions sont exécutées en fractions de seconde. Imaginez des robots qui jouent à la bourse plus vite que vous ne pouvez dire "Wall Street". Source : Investopedia - Algorithmic Trading.  Analyse des risques et des marchés : Les outils d'analyse financière et de gestion des risques aident les institutions financières à prendre des décisions informées. Parce que prédire les marchés, c'est un peu comme prédire la météo, mais avec plus d'argent en jeu. Source : Bloomberg - Financial Analytics. 12 Année académique 2024-2025 Éducation  Plateformes d'apprentissage en ligne : Les MOOCs et autres plateformes comme Coursera et Khan Academy rendent l'éducation accessible à un public mondial. Votre professeur de mathématiques est maintenant sur YouTube. Source : Coursera, Khan Academy.  Outils de gestion scolaire : Les systèmes d'information pour les établissements scolaires aident à la gestion des horaires, des notes, et des communications entre enseignants et élèves. Plus besoin de chercher des feuilles volantes pour savoir où est le cours suivant. Source : PowerSchool.  Ressources pédagogiques interactives : Les logiciels éducatifs et les applications d'apprentissage permettent une interaction accrue et un apprentissage personnalisé. Parce que chaque élève est unique, même si les profs en doutent parfois. Source : EdTech Magazine - Educational Software. Divertissement  Jeux vidéo : Les jeux vidéo comme Minecraft et Fortnite offrent des expériences interactives et immersives. Parce que parfois, il faut bien sauver le monde virtuel. Source : Minecraft, Fortnite.  Plateformes de streaming : Les services comme Netflix et Spotify permettent l'accès instantané à une vaste bibliothèque de contenu vidéo et musical. Votre télécommande est maintenant un portail vers des marathons de séries. Source : Netflix, Spotify.  Réalité augmentée et virtuelle : Les applications AR et VR offrent de nouvelles façons d'interagir avec le contenu numérique. Quand le monde réel devient trop ennuyeux, passez à la réalité augmentée ! Source : Oculus VR. 3. Qu'est-ce qu'un Programme ? Définition Un programme informatique est une suite d'instructions écrites dans un langage de programmation, qui est exécutée par un ordinateur pour accomplir une tâche spécifique. Un programme transforme les données d'entrée en données de sortie en suivant des étapes définies. Pensez à une recette de cuisine : les ingrédients sont les données d'entrée, la recette est le programme, et le plat final est le résultat. 13 Année académique 2024-2025 Exemples de Programmes Les programmes informatiques se manifestent sous de nombreuses formes dans notre vie quotidienne. Voici quelques exemples courants :  Traitement de texte (Microsoft Word) : Permet de créer, éditer et formater des documents texte. Ce logiciel inclut des fonctionnalités comme la vérification orthographique, les options de formatage avancées, et la possibilité d'inclure des images et des graphiques. Source : Microsoft Word.  Navigateurs web (Google Chrome, Firefox) : Permet de naviguer sur Internet. Les navigateurs web interprètent le code HTML, CSS et JavaScript pour afficher des pages web. Ils gèrent également les cookies et autres données de navigation. Source : Google Chrome, Firefox.  Applications mobiles (WhatsApp, Instagram) : Applications pour la communication et le partage de contenu. WhatsApp permet d'envoyer des messages, des appels vocaux et vidéo, tandis qu'Instagram se concentre sur le partage de photos et de vidéos. Source : WhatsApp, Instagram.  Jeux vidéo (Minecraft, Fortnite) : Jeux interactifs pour le divertissement. Minecraft permet aux utilisateurs de construire et d'explorer des mondes virtuels en blocs, tandis que Fortnite est un jeu de bataille royale où les joueurs se battent pour être le dernier survivant. Source : Minecraft, Fortnite. Langages de Programmation Les programmes sont écrits dans des langages de programmation, qui sont des langages formels composés de règles et de syntaxes permettant de donner des instructions à un ordinateur. Voici quelques exemples de langages de programmation populaires :  Python : Connu pour sa simplicité et sa lisibilité, Python est largement utilisé pour le développement web, la science des données, l'automatisation, et plus encore. o Exemple : Programme pour additionner deux nombres. 14 Année académique 2024-2025  JavaScript : Principalement utilisé pour le développement web, JavaScript permet de rendre les pages web interactives. o Exemple : Programme pour afficher un message lorsqu'un bouton est cliqué.  Java : Utilisé pour le développement d'applications d'entreprise, les applications Android, et plus encore. o Exemple : Programme pour afficher "Bonjour, le monde!".  C++ : Utilisé pour le développement de logiciels systèmes, les jeux vidéo, et les applications nécessitant une haute performance. o Exemple : Programme pour afficher "Bonjour, le monde!". 15 Année académique 2024-2025 4. Cycle de Développement Logiciel Le cycle de développement logiciel comprend plusieurs étapes cruciales, chacune ayant son importance pour garantir la qualité et l'efficacité du produit final. C'est un peu comme construire une maison : vous ne commencez pas par le toit. Voici les principales étapes : Analyse L'analyse est la première étape du cycle de développement logiciel. Elle consiste à comprendre et à définir les besoins et les exigences du projet.  Identification des besoins et des exigences : Cette phase implique la collecte d'informations auprès des parties prenantes pour comprendre ce qu'elles attendent du logiciel. Cela peut inclure des entretiens, des questionnaires, et des études de cas. Les exigences peuvent être fonctionnelles (ce que le logiciel doit faire) et non fonctionnelles (comment le logiciel doit le faire, par exemple en termes de performance, de sécurité). o Exemple : Une application de gestion de bibliothèque pourrait avoir des exigences fonctionnelles telles que la capacité à ajouter de nouveaux livres, à enregistrer des prêts et des retours, et à générer des rapports d'inventaire. o Source : IEEE Software Engineering Standards.  Étude de faisabilité et analyse de rentabilité : Évaluer si le projet est réalisable techniquement et économiquement. Cette phase peut inclure une analyse SWOT (forces, faiblesses, opportunités, menaces) et une analyse coût-bénéfice. o Exemple : Pour une startup développant une nouvelle application mobile, l'étude de faisabilité pourrait évaluer la viabilité technique de l'application, les coûts de développement, et le potentiel de marché. 16 Année académique 2024-2025 Conception La conception est l'étape où les développeurs planifient la structure et l'architecture du logiciel. C'est comme dessiner les plans de votre future maison avant de commencer à construire.  Modélisation et architecture du logiciel : Définir la structure du logiciel, y compris les composants principaux et leur interaction. Cela peut inclure des diagrammes UML (Unified Modeling Language) pour visualiser les composants et les flux de données. o Exemple : Pour une application web, la modélisation pourrait inclure un diagramme de classes montrant les relations entre les différents modèles de données (utilisateurs, produits, commandes).  Définition des spécifications techniques : Documenter les fonctionnalités du logiciel et les exigences techniques. Cela peut inclure des spécifications de l'interface utilisateur, des API (interfaces de programmation d'applications), et des bases de données. o Exemple : Pour une API RESTful, les spécifications techniques pourraient inclure les points de terminaison disponibles, les méthodes HTTP supportées (GET, POST, PUT, DELETE), et les formats de réponse attendus (JSON, XML). Implémentation L'implémentation est l'étape où les développeurs écrivent le code source du logiciel. C'est le moment de sortir vos claviers et de commencer à coder.  Codage des fonctionnalités : Écrire le code pour implémenter les fonctionnalités définies dans les spécifications techniques. Les développeurs utilisent des environnements de développement intégrés (IDE) pour écrire, tester et déboguer le code. o Exemple : Pour une fonctionnalité de connexion utilisateur, l'implémentation pourrait inclure le développement d'une interface de connexion, la vérification des identifiants d'utilisateur, et la gestion des sessions utilisateur. o Source : Clean Code: A Handbook of Agile Software Craftsmanship.  Utilisation de bonnes pratiques de codage : Suivre les standards de programmation et les bonnes pratiques pour assurer la qualité du code. Cela peut inclure l'utilisation de conventions de nommage, l'écriture de tests unitaires, et la documentation du code. o Exemple : Utiliser PEP 8 pour les conventions de style en Python, écrire des tests unitaires avec pytest, et documenter le code avec des docstrings. 17 Année académique 2024-2025 Test Le test est l'étape où le logiciel est vérifié pour s'assurer qu'il fonctionne correctement et répond aux exigences définies. C'est comme tester la plomberie et l'électricité de votre maison avant d'y emménager.  Vérification et validation du logiciel : Tester le logiciel pour s'assurer qu'il fonctionne comme prévu. Cela peut inclure des tests unitaires, des tests d'intégration, des tests système, et des tests d'acceptation par les utilisateurs. o Exemple : Pour une application de gestion de bibliothèque, les tests pourraient inclure des tests unitaires pour vérifier les fonctionnalités individuelles (par exemple, ajouter un livre), des tests d'intégration pour vérifier l'interaction entre les composants (par exemple, prêt et retour de livres), et des tests d'acceptation par les utilisateurs pour s'assurer que le logiciel répond aux besoins des utilisateurs finaux.  Détection et correction des bugs : Identifier et corriger les erreurs et les anomalies dans le code. Cela peut inclure l'utilisation de débogueurs, l'analyse des journaux d'erreurs, et la collaboration avec les testeurs pour reproduire et corriger les problèmes. o Exemple : Pour une fonctionnalité de recherche dans une application web, la détection et la correction des bugs pourraient inclure la résolution des problèmes de performances, la correction des erreurs de logique dans les requêtes de recherche, et l'amélioration de l'expérience utilisateur. Maintenance La maintenance est l'étape où le logiciel est mis à jour et amélioré après sa mise en production. Parce que même la meilleure maison a besoin de quelques réparations et améliorations au fil du temps.  Mise à jour et amélioration du logiciel : Ajouter de nouvelles fonctionnalités, améliorer les performances, et corriger les bugs signalés par les utilisateurs. Cela peut inclure la refactorisation du code pour améliorer sa lisibilité et sa maintenabilité, et la mise en œuvre de mises à jour de sécurité pour protéger contre les vulnérabilités. o Exemple : Pour une application mobile, les mises à jour pourraient inclure l'ajout de nouvelles fonctionnalités basées sur les retours des utilisateurs, l'amélioration de la performance de l'application pour une meilleure expérience utilisateur, et la correction des bugs signalés par les utilisateurs.  Support technique et gestion des incidents : Assurer le support pour les utilisateurs et résoudre les problèmes rencontrés. Cela peut inclure la gestion des tickets d'incident, la communication avec les utilisateurs pour comprendre leurs problèmes, et la mise en place de solutions temporaires ou permanentes pour résoudre les incidents. 18 Année académique 2024-2025 o Exemple : Pour un service en ligne, le support technique pourrait inclure la réponse aux questions des utilisateurs, la résolution des problèmes de connexion, et la gestion des interruptions de service. 5. Résumé et Conclusion En résumé, cette séance a couvert les bases de l'informatique, son histoire, ses applications diverses, la définition d'un programme, et les étapes du cycle de développement logiciel. Ces connaissances fondamentales vous serviront de base pour comprendre et apprécier les concepts plus avancés que nous aborderons dans les séances suivantes. Vous êtes maintenant prêts à entrer dans le monde fascinant de l'informatique, un monde où les bits et les octets règnent en maîtres ! 6. Matériel Supplémentaire  Lectures recommandées : o "Computer Science: An Overview" de J. Glenn Brookshear o "Introduction to the History of Computing" de Gerard O'Regan  Vidéos : o "History of Computers: Timeline" (YouTube) o "The Future of Computing" par le MIT 19 Année académique 2024-2025 Séance 2 : Notions Fondamentales de l'Informatique Objectifs de la Séance  Comprendre ce qu'est un algorithme et son importance.  Apprendre les bases de la résolution de problèmes.  Découvrir les différents types de paradigmes de programmation.  Introduction aux notions de mémoire et de gestion de la mémoire. Introduction Bienvenue à la deuxième séance du cours d'initiation à l'informatique ! Aujourd'hui, nous allons plonger dans les notions fondamentales qui vous permettront de naviguer dans le monde merveilleux des algorithmes, des paradigmes de programmation, et des mystères de la mémoire informatique. En gros, nous allons découvrir pourquoi votre ordinateur fait ce qu'il fait sans se transformer en grille-pain. 1. Qu'est-ce qu'un Algorithme ? Définition Un algorithme est une suite finie et ordonnée d'instructions permettant de résoudre un problème ou d'accomplir une tâche. Pensez à une recette de cuisine : chaque étape vous guide pour transformer des ingrédients bruts en un délicieux gâteau. En informatique, ces "ingrédients" sont les données, et le "gâteau" est le résultat que vous souhaitez obtenir. Importance des Algorithmes Les algorithmes sont essentiels en informatique pour plusieurs raisons : 1. Efficacité : Un bon algorithme peut résoudre un problème rapidement et avec un minimum de ressources. Par exemple, chercher un mot dans un dictionnaire avec une méthode de recherche efficace est beaucoup plus rapide que de feuilleter chaque page. 2. Réutilisabilité : Une fois qu'un algorithme est conçu, il peut souvent être utilisé dans différents contextes. Par exemple, un algorithme de tri peut être utilisé pour organiser des listes de noms, de numéros de téléphone, ou de produits. 3. Fiabilité : Des algorithmes bien conçus produisent des résultats corrects et prévisibles. Cela est crucial pour des applications sensibles comme le contrôle aérien ou les transactions bancaires. 20 Année académique 2024-2025 Exemples d'Algorithmes Exemple 1 : Tri à Bulles (Bubble Sort) L'algorithme de tri à bulles est un moyen simple de trier une liste. Il fonctionne en comparant chaque paire d'éléments adjacents et en les échangeant s'ils sont dans le mauvais ordre.  Algorithme : 1. Parcourir la liste. 2. Comparer chaque paire d'éléments adjacents. 3. Échanger les éléments si nécessaire. 4. Répéter jusqu'à ce que la liste soit triée.  Code : Exemple 2 : Recherche Linéaire La recherche linéaire consiste à parcourir une liste d'éléments et à vérifier un par un si un élément correspond à la valeur recherchée.  Algorithme : 1. Parcourir chaque élément de la liste. 2. Comparer chaque élément à la valeur recherchée. 3. Si l'élément correspond, retourner sa position. 4. Si aucun élément ne correspond, retourner une indication d'échec.  Code : 21 Année académique 2024-2025 Exemple 3 : Années Bissextiles Les années bissextiles sont des années comptant un jour supplémentaire (29 février) afin de compenser le fait que l'année solaire n'est pas exactement de 365 jours. Un algorithme simple permet de déterminer si une année est bissextile.  Algorithme : 1. Si l'année est divisible par 4, passer à l'étape suivante. 2. Si l'année est divisible par 100, passer à l'étape suivante. 3. Si l'année est divisible par 400, alors c'est une année bissextile. 4. Sinon, ce n'est pas une année bissextile.  Code : Exemple 4 : Calendrier Russe Le calendrier julien, utilisé en Russie jusqu'en 1918, est légèrement différent du calendrier grégorien utilisé aujourd'hui. L'algorithme pour convertir une date julienne en date grégorienne nécessite de comprendre ces différences.  Algorithme : 1. Identifier la différence de jours entre les calendriers. 2. Ajuster la date julienne en conséquence.  Code : 22 Année académique 2024-2025 Exemple 5 : Algorithme de Tri par Insertion Le tri par insertion est un autre algorithme de tri. Il fonctionne en construisant graduellement la liste triée en insérant chaque nouvel élément à sa place correcte.  Algorithme : 1. Commencez avec une liste triée vide. 2. Insérez chaque nouvel élément à la position correcte dans la liste triée.  Code : Comparaison des Algorithmes de Tri Comparer les algorithmes de tri permet de comprendre pourquoi certains sont préférables à d'autres dans certaines situations. Tri à Bulles vs Tri par Insertion  Complexité : La complexité temporelle du tri à bulles et du tri par insertion est O(n2)O(n^2)O(n2) dans le pire des cas. Cependant, le tri par insertion peut être plus efficace sur des listes presque triées.  Efficacité : Le tri à bulles est souvent moins efficace en pratique car il nécessite plus d'échanges d'éléments.  Simplicité : Les deux algorithmes sont simples à implémenter, mais le tri par insertion tend à être légèrement plus performant. 23 Année académique 2024-2025 Tri Fusion (Merge Sort) Pour illustrer une alternative plus efficace, considérons le tri fusion. C'est un algorithme de tri diviser-pour-régner qui divise la liste en sous-listes, les trie, puis fusionne les sous-listes triées.  Complexité : La complexité temporelle du tri fusion est O(nlog n)O(n \log n)O(nlogn) dans le pire des cas.  Efficacité : Le tri fusion est généralement plus rapide que le tri à bulles et le tri par insertion pour les grandes listes.  Code : En comparaison, le tri fusion est bien plus efficace pour les grandes listes, tandis que le tri à bulles et le tri par insertion peuvent être utiles pour des listes petites ou presque triées. La sélection de l'algorithme de tri dépend donc du contexte et des caractéristiques des données à trier. 24 Année académique 2024-2025 2. Résolution de Problèmes Approche Systématique La résolution de problèmes est une compétence clé en informatique. Voici une approche systématique pour vous aider à résoudre les problèmes comme un pro (ou au moins comme un bon amateur) : 1. Comprendre le problème : Lisez attentivement l'énoncé du problème et identifiez ce qui est demandé. Si vous cherchez à réparer un ordinateur en panne, commencez par vérifier s'il est branché. 2. Planifier la solution : Divisez le problème en sous-problèmes plus petits et plus gérables. Créez un plan d'attaque étape par étape. 3. Écrire l'algorithme : Rédigez l'algorithme qui décrit la solution de manière claire et précise. Pensez à chaque détail, comme si vous expliquiez la recette du tiramisu à quelqu'un qui n'a jamais cuisiné. 4. Implémenter le code : Traduisez l'algorithme en code dans un langage de programmation. Soyez précis et méthodique. 5. Tester et déboguer : Exécutez le code et testez-le avec différents jeux de données pour vous assurer qu'il fonctionne correctement. Si ça ne marche pas, cherchez les erreurs (aussi connues sous le nom de "bugs") et corrigez-les. Exemples Concrets Exemple 1 : Additionner une Liste de Nombres Problème : Écrire un programme qui additionne tous les éléments d'une liste. 1. Comprendre le problème : Vous devez additionner les nombres dans une liste donnée. 2. Planifier la solution : Utiliser une boucle pour parcourir la liste et additionner chaque élément à une variable de somme. 3. Écrire l'algorithme : o Initialiser une variable de somme à 0. o Boucler sur chaque élément de la liste. o Ajouter chaque élément à la variable de somme. 4. Implémenter le code : 25 Année académique 2024-2025 5. Tester et déboguer : Vérifiez le résultat avec différentes listes (par exemple, des listes vides, des listes avec des nombres négatifs). Exemple 2 : Trouver le Maximum d'une Liste Problème : Écrire un programme qui trouve le maximum dans une liste de nombres. 1. Comprendre le problème : Vous devez identifier le plus grand nombre dans une liste. 2. Planifier la solution : Parcourir la liste et garder une trace du plus grand nombre rencontré. 3. Écrire l'algorithme : o Initialiser une variable max à la première valeur de la liste. o Boucler sur chaque élément de la liste à partir du deuxième. o Si un élément est supérieur à max, mettre à jour max avec cet élément. 4. Implémenter le code : 5. Tester et déboguer : Essayez avec des listes de longueurs différentes, y compris des listes avec des valeurs négatives. 26 Année académique 2024-2025 Exemple 3 : Inverser une Chaîne de Caractères Problème : Écrire un programme qui inverse une chaîne de caractères. 1. Comprendre le problème : Vous devez renverser l'ordre des caractères dans une chaîne. 2. Planifier la solution : Utiliser une boucle pour construire une nouvelle chaîne en ajoutant les caractères de la chaîne d'origine en commençant par la fin. 3. Écrire l'algorithme : o Initialiser une nouvelle chaîne vide. o Boucler sur la chaîne d'origine en commençant par la fin. o Ajouter chaque caractère à la nouvelle chaîne. 4. Implémenter le code : 5. Tester et déboguer : Essayez avec des chaînes de longueurs différentes, y compris des chaînes vides et des chaînes avec des caractères spéciaux. 27 Année académique 2024-2025 Exemple 4 : Vérifier si une Chaîne est un Palindrome Problème : Écrire un programme qui vérifie si une chaîne est un palindrome (se lit de la même manière dans les deux sens). 1. Comprendre le problème : Vous devez déterminer si une chaîne est la même lorsqu'elle est lue à l'envers. 2. Planifier la solution : Comparer la chaîne d'origine à sa version inversée. 3. Écrire l'algorithme : o Inverser la chaîne. o Comparer la chaîne d'origine et la chaîne inversée. 4. Implémenter le code : 5. Tester et déboguer : Essayez avec des chaînes de longueurs différentes et des chaînes contenant des espaces et des majuscules. 28 Année académique 2024-2025 Exemple 5 : Tri par Insertion Problème : Écrire un programme qui trie une liste de nombres en utilisant l'algorithme de tri par insertion. 1. Comprendre le problème : Vous devez réorganiser les éléments d'une liste dans l'ordre croissant. 2. Planifier la solution : Utiliser une boucle pour parcourir la liste, en déplaçant chaque élément à sa position correcte. 3. Écrire l'algorithme : o Parcourir la liste à partir du deuxième élément. o Comparer chaque élément avec les éléments précédents et le placer à sa position correcte. 4. Implémenter le code : 5. Tester et déboguer : Essayez avec des listes de différentes tailles et des valeurs en désordre. 29 Année académique 2024-2025 3. Paradigmes de Programmation Définition et Types Les paradigmes de programmation sont des styles ou des approches pour structurer et écrire du code. Ils sont comme les styles de danse : chacun a ses propres mouvements et règles, mais tous peuvent créer quelque chose de beau (ou de fonctionnel, au moins). Voici les principaux paradigmes :  Programmation impérative : Donne des instructions sur "comment" faire les choses, étape par étape. o Exemple : Langages comme C, Python (paradigme impératif) python  Programmation déclarative : Spécifie "quoi" faire, sans détailler comment le faire. o Exemple : Langages comme SQL, Haskell sql  Programmation orientée objet : Organise le code en objets qui contiennent des données et des méthodes. o Exemple : Langages comme Java, C++, Python (paradigme orienté objet) python 30 Année académique 2024-2025  Programmation fonctionnelle : Utilise des fonctions comme blocs de construction fondamentaux, en évitant les états et les effets de bord. o Exemple : Langages comme Lisp, Scala, Python (paradigme fonctionnel) python Quand Utiliser Quel Paradigme ? Choisir un paradigme de programmation dépend souvent du type de problème que vous essayez de résoudre et de vos préférences personnelles (comme choisir entre le tango et la salsa).  Programmation impérative : Idéale pour les algorithmes simples et les tâches séquentielles.  Programmation déclarative : Parfaite pour les requêtes de base de données et les configurations, où vous décrivez le résultat souhaité.  Programmation orientée objet : Utile pour les systèmes complexes nécessitant une structure modulaire et réutilisable.  Programmation fonctionnelle : Efficace pour les calculs mathématiques, les transformations de données, et les applications nécessitant une gestion robuste des états. 31 Année académique 2024-2025 4. Notions de Mémoire et Gestion de la Mémoire Types de Mémoire La mémoire informatique est l'endroit où les données sont stockées pendant que le programme s'exécute. Voici les principaux types de mémoire :  Mémoire vive (RAM) : Mémoire volatile utilisée pour stocker les données et les instructions du programme en cours d'exécution. Pensez à la RAM comme à votre bureau : plus vous avez de place, plus vous pouvez étaler vos papiers et travailler efficacement. Mais tout disparaît quand vous éteignez l'ordinateur.  Mémoire de stockage (disque dur, SSD) : Mémoire non volatile utilisée pour stocker les données à long terme. C'est comme votre armoire de bureau, où vous rangez les papiers importants que vous voulez garder. Gestion de la Mémoire La gestion de la mémoire est essentielle pour éviter que votre programme ne consomme toutes les ressources disponibles, un peu comme éviter de remplir votre maison de piles de papier jusqu'au plafond.  Allocation dynamique : Permet de réserver de la mémoire pendant l'exécution du programme. En Python, cela se fait automatiquement, mais dans des langages comme C, vous devez gérer cela vous-même avec malloc() et free(). o Exemple en C :  Garbage collection : En Python, un processus appelé garbage collector récupère automatiquement la mémoire non utilisée, évitant ainsi les fuites de mémoire. C'est comme un service de nettoyage qui passe régulièrement pour s'assurer qu'il n'y a pas de désordre inutile. Importance de la Gestion de la Mémoire Une bonne gestion de la mémoire permet d'assurer que les programmes fonctionnent efficacement sans épuiser les ressources du système. Une mauvaise gestion de la mémoire peut entraîner des ralentissements, des plantages, et des comportements imprévisibles. En d'autres termes, si vous laissez traîner vos chaussettes partout, ne soyez pas surpris de trébucher un jour ! 32 Année académique 2024-2025 5. Le débugage Introduction Le débugage est une étape cruciale dans le développement logiciel, permettant d'identifier et de corriger les erreurs dans le code. Les erreurs peuvent survenir pour diverses raisons, comme des fautes de frappe, une logique incorrecte ou des problèmes d'intégration. Une bonne maîtrise des techniques de débugage améliore non seulement la qualité du code, mais aussi la productivité du développeur. Types d'Erreurs 1. Erreurs Syntaxiques : o Ces erreurs se produisent lorsque le code ne respecte pas les règles de syntaxe du langage de programmation. o Exemple en Python : Erreur : SyntaxError: EOL while scanning string literal 2. Erreurs d'Exécution : o Ces erreurs surviennent lorsque le programme est en cours d'exécution et se heurte à une condition inattendue. o Exemple en Python : Erreur : ZeroDivisionError: division by zero 3. Erreurs Logiques : o Le programme s'exécute sans planter, mais produit des résultats incorrects en raison d'une logique erronée. o Exemple en Python : 33 Année académique 2024-2025 Outils de Débugage 1. Débogueurs Intégrés Les Environnements de Développement Intégrés (IDEs) tels que PyCharm, Visual Studio Code, Eclipse et IntelliJ fournissent des débogueurs intégrés avec des fonctionnalités puissantes. Exemple avec Visual Studio Code :  Points d'arrêt (Breakpoints) : Permettent d'arrêter l'exécution du programme à une ligne spécifique pour inspecter l'état du programme.  Pas à pas (Step Over, Step Into, Step Out) : Permet de naviguer à travers le code ligne par ligne.  Inspection des Variables : Affiche les valeurs des variables en cours d'exécution.  Console de Débugage : Permet d'exécuter des commandes pendant l'arrêt du programme. 2. Impression de Log (Logging) Utiliser des instructions de log pour suivre le flux d'exécution et les valeurs des variables. Cela peut aider à identifier où et pourquoi une erreur se produit. Exemple en Python avec le module logging : 3. Outils de Débogage en Ligne de Commande PDB (Python Debugger) PDB est le débogueur intégré de Python, accessible via la ligne de commande. Il permet de définir des points d'arrêt, d'examiner les variables, et de contrôler l'exécution du programme. Exemple en Python : 34 Année académique 2024-2025 4. Débogage à Distance Les outils comme remote-pdb pour Python permettent de déboguer des applications s'exécutant sur des serveurs distants. Exemple en Python : Bonnes Pratiques de Débugage 1. Isoler le Problème : o Réduisez la portée du problème en isolant la partie du code qui cause l'erreur. o Utilisez des tests unitaires pour vérifier les différentes parties du code de manière indépendante. 2. Comprendre l'Erreur : o Lisez et comprenez les messages d'erreur fournis par le compilateur ou l'interpréteur. o Utilisez des outils comme Stack Overflow et la documentation pour obtenir des informations supplémentaires. 3. Reproduire l'Erreur : o Essayez de reproduire l'erreur de manière cohérente. Cela peut aider à comprendre les conditions qui causent l'erreur. 4. Utiliser des Logs : o Ajouter des logs pour suivre le flux d'exécution et les valeurs des variables clés. o Utiliser des niveaux de log (DEBUG, INFO, WARNING, ERROR, CRITICAL) pour catégoriser les informations. 5. Debugger Pas à Pas : o Utilisez les fonctionnalités de pas à pas pour examiner comment l'état du programme change au fur et à mesure de l'exécution. 35 Année académique 2024-2025 6. Résumé et Conclusion En résumé, cette séance a couvert les notions fondamentales de l'informatique : les algorithmes, la résolution de problèmes, les paradigmes de programmation, et la gestion de la mémoire. Ces concepts sont les briques de base de tout programme informatique et vous permettront de naviguer dans le monde du développement logiciel avec plus de confiance. Vous êtes maintenant prêts à écrire des programmes qui ne transforment pas votre ordinateur en grille-pain ! 7. Matériel Supplémentaire  Lectures recommandées : o "Introduction to Algorithms" par Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein o "The Pragmatic Programmer" par Andrew Hunt et David Thomas  Vidéos : o "Algorithms 101" (YouTube) o "Understanding Memory in Computers" par Techquickie (YouTube) 36 Année académique 2024-2025 8. Exercice complémentaire Introduction Aujourd'hui, nous allons nous attaquer à un problème historique et pratique : la conversion de dates du calendrier julien au calendrier grégorien. Cette conversion est importante car ces deux calendriers ont été utilisés à différentes époques et dans différents pays. Par exemple, la Russie a utilisé le calendrier julien jusqu'en 1918, alors que la plupart des pays européens avaient déjà adopté le calendrier grégorien. Contexte Historique Calendrier Julien Le calendrier julien a été introduit par Jules César en 45 av. J.-C. Il comporte une année de 365 jours avec une année bissextile de 366 jours tous les quatre ans. Cependant, il introduit une légère erreur : l'année solaire réelle est environ 11 minutes plus courte que 365,25 jours, ce qui entraîne un décalage d'environ 3 jours tous les 400 ans. Calendrier Grégorien Pour corriger cette erreur, le pape Grégoire XIII a introduit le calendrier grégorien en 1582. Ce calendrier ajuste les années bissextiles en excluant les années divisibles par 100 mais pas par 400. Par exemple, 1600 est une année bissextile, mais 1700, 1800 et 1900 ne le sont pas. Différence Entre les Calendriers En 1582, le passage du calendrier julien au calendrier grégorien a entraîné la suppression de 10 jours pour aligner les dates. Ainsi, le 4 octobre 1582 (julien) a été suivi du 15 octobre 1582 (grégorien). Aujourd'hui, la différence entre les deux calendriers est de 13 jours. Décomposition du Problème Pour convertir une date du calendrier julien au calendrier grégorien, nous allons suivre les étapes suivantes : 1. Comprendre la différence en jours entre les deux calendriers. 2. Ajouter cette différence à la date julienne pour obtenir la date grégorienne. Algorithme de Conversion Étape 1 : Comprendre la Différence Actuellement, la différence entre le calendrier julien et le calendrier grégorien est de 13 jours. Étape 2 : Ajouter la Différence Pour une date donnée en calendrier julien, nous devons ajouter 13 jours pour obtenir la date en calendrier grégorien. 37 Année académique 2024-2025 Implémentation en Python Nous allons écrire une fonction convert_to_gregorian qui prend une date en calendrier julien au format "dd-mm-yyyy" et retourne la date correspondante en calendrier grégorien. Code Explications du Code 1. Importation des modules nécessaires : Nous importons datetime pour manipuler les dates et timedelta pour ajouter des jours. 2. Définir le format de la date : Nous définissons le format de la date en "jour-mois-année". 3. Conversion de la date julienne en objet datetime : Nous utilisons strptime pour convertir la date julienne en un objet datetime. 38 Année académique 2024-2025 4. Définir la différence en jours : Nous définissons la différence de 13 jours entre les calendriers. 5. Ajouter la différence pour obtenir la date grégorienne : Nous ajoutons 13 jours à la date julienne pour obtenir la date grégorienne. 6. Retourner la date grégorienne sous forme de chaîne formatée : Nous formatons la date grégorienne en chaîne pour l'affichage. Tester l'Algorithme Nous avons inclus quelques tests pour vérifier que notre fonction fonctionne correctement. Vous pouvez ajouter d'autres tests avec différentes dates pour valider davantage l'algorithme. Conclusion Nous avons appris à convertir une date du calendrier julien au calendrier grégorien en comprenant la différence entre les deux calendriers et en ajoutant cette différence à la date julienne. Cette méthode simple mais efficace peut être utilisée pour des conversions historiques ou pour comprendre des événements ayant eu lieu à des périodes différentes. 39 Année académique 2024-2025 Séance 3 : Concepts de Base de la Programmation Objectifs de la Séance  Comprendre les concepts de base de la programmation.  Apprendre à utiliser les variables et les types de données.  Découvrir les structures de contrôle : boucles et conditions.  Introduction aux fonctions et aux procédures. Introduction Bienvenue à cette troisième séance du cours d'initiation à l'informatique ! Aujourd'hui, nous allons plonger dans les concepts fondamentaux de la programmation, ceux qui vous permettront de commencer à écrire vos propres programmes et à comprendre comment ils fonctionnent. Préparez-vous à explorer les mystères des variables, des boucles, des conditions et des fonctions ! Une majorité des codes présentés dans cette section sont en Java. 1. Variables et Types de Données Définition d'une Variable Une variable est un conteneur qui permet de stocker des données dans un programme. Vous pouvez imaginer une variable comme une boîte avec une étiquette, où l'étiquette est le nom de la variable et le contenu de la boîte est la valeur de la variable. Les variables sont essentielles car elles permettent de manipuler et de stocker des informations de manière flexible. Types de Données Les types de données déterminent quel genre de valeurs une variable peut contenir et quelles opérations peuvent être effectuées sur ces valeurs. Voici quelques types de données courants :  Nombres entiers (int) : Représentent des valeurs numériques entières. o Exemple : x = 5  Nombres à virgule flottante (float) : Représentent des valeurs numériques avec des décimales. o Exemple : pi = 3.14  Chaînes de caractères (str) : Représentent des séquences de caractères, souvent utilisées pour le texte. o Exemple : nom = "Alice" 40 Année académique 2024-2025  Booléens (bool) : Représentent des valeurs de vérité, soit True soit False. o Exemple : is_student = True Langages Typés Statistiquement vs Dynamiquement Les langages de programmation peuvent être typés statiquement ou dynamiquement :  Typage statique : Le type de chaque variable doit être déclaré explicitement et ne peut pas changer. Cela permet une détection précoce des erreurs. Exemple de langages : C, Java. java  Typage dynamique : Le type des variables est déterminé au moment de l'exécution, et une même variable peut contenir différents types de données à différents moments. Exemple de langages : Python, JavaScript. javascript Variables Globales et Locales Les variables peuvent avoir une portée différente en fonction de l'endroit où elles sont déclarées :  Variables locales : Déclarées à l'intérieur d'une fonction ou d'un bloc de code, elles ne sont accessibles que dans ce contexte. 41 Année académique 2024-2025  Variables globales : Déclarées en dehors de toutes les fonctions, elles sont accessibles dans tout le programme. Déclaration et Initialisation de Variables La déclaration et l'initialisation d'une variable peuvent varier selon le langage de programmation. Par exemple, en C, vous devez déclarer le type de la variable avant de l'utiliser. c Dans des langages comme Python, la déclaration et l'initialisation se font en une seule étape sans spécifier le type de la variable. Exemples 1. Utilisation d'un entier : 2. Utilisation d'un flottant : 3. Utilisation d'une chaîne de caractères : 4. Utilisation d'un booléen : 42 Année académique 2024-2025 Opérateurs Arithmétiques  Addition (+) : 5 + 3 = 8  Soustraction (-) : 5 - 3 = 2  Multiplication (*) : 5 * 3 = 15  Division (/) : 6 / 3 = 2  Modulo (%) : 5 % 3 = 2 Logiques  ET logique (&&) : true && false = false  OU logique (||) : true || false = true  NON logique (!) : !true = false Relationnels  Égal à (==) : 5 == 5 = true  Différent de (!=) : 5 != 3 = true  Inférieur à () : 5 > 3 = true  Inférieur ou égal à (= 3 = true 43 Année académique 2024-2025 2. Structures de Contrôle Conditions (if, elif, else) Les structures conditionnelles permettent d'exécuter du code seulement si certaines conditions sont vraies. En Java, les conditions sont définies avec if, else if et else. Syntaxe en Français  if (si) : Utilisé pour vérifier une condition.  else if (sinon si) : Utilisé pour vérifier une autre condition si la première est fausse.  else (sinon) : Utilisé pour exécuter du code si aucune des conditions précédentes n'est vraie. Boucles (for, while, do-while) Les boucles permettent de répéter une série d'instructions un certain nombre de fois ou jusqu'à ce qu'une condition soit remplie. Boucle for La boucle for est utilisée pour itérer sur une séquence (liste, tableau). 44 Année académique 2024-2025 Boucle while La boucle while continue d'exécuter son bloc de code tant qu'une condition est vraie. Boucle do-while La boucle do-while est similaire à la boucle while, mais elle garantit que le bloc de code est exécuté au moins une fois avant que la condition soit vérifiée. Exemples de Structures de Contrôle 1. Condition simple : 2. Boucle for : 45 Année académique 2024-2025 3. Boucle while : 4. Boucle do-while : Utilisation des Boucles et Conditions Ensemble Les boucles et les conditions peuvent être combinées pour résoudre des problèmes plus complexes. Par exemple, calculer la somme des nombres pairs dans un tableau. 46 Année académique 2024-2025 3. Fonctions et Procédures Définition d'une Fonction Une fonction est un bloc de code réutilisable qui effectue une tâche spécifique. Les fonctions permettent de structurer votre code, de le rendre plus lisible et de réduire la redondance. Déclaration d'une Fonction En Java, les fonctions sont définies à l'aide du mot-clé public, private ou protected, suivi du type de retour, du nom de la fonction et de parenthèses contenant éventuellement des paramètres. Appel d'une Fonction Pour utiliser une fonction, il suffit de l'appeler en utilisant son nom et en fournissant les arguments nécessaires. Retour de Valeur Une fonction peut également renvoyer une valeur à l'aide du mot-clé return. 47 Année académique 2024-2025 Variables Locales et Globales dans les Fonctions  Variables locales : Les variables déclarées à l'intérieur d'une fonction ne sont accessibles que dans cette fonction.  Variables globales : Les variables déclarées en dehors de toutes les fonctions sont accessibles partout dans le programme. Exemples 1. Fonction sans retour : 2. Fonction avec retour : 3. Fonction avec paramètres : 48 Année académique 2024-2025 Les paramètres Les paramètres des fonctions sont des variables spéciales utilisées pour passer des informations aux fonctions. Lorsqu'une fonction est appelée, les valeurs réelles passées à la fonction sont appelées arguments. Types de Paramètres 1. Paramètres Positionnels : Les valeurs sont passées aux paramètres dans l'ordre dans lequel ils sont définis. 2. Paramètres Nommés (ou Keyword Arguments) : Les valeurs sont passées aux paramètres en utilisant le nom du paramètre, ce qui permet de les passer dans n'importe quel ordre. 3. Paramètres par Défaut : Les paramètres peuvent avoir des valeurs par défaut. Si aucun argument n'est fourni pour ces paramètres, les valeurs par défaut sont utilisées. 4. On peut aussi passer un nombre de paramètre variable mais ceci devient trop avancés pour nous Importance des Paramètres Les paramètres permettent aux fonctions de :  Recevoir des données pour traitement.  Rendre les fonctions réutilisables pour différentes données d'entrée.  Simplifier le code en réduisant la redondance. Bonnes Pratiques  Utiliser des noms de paramètres clairs et significatifs.  Éviter les fonctions avec trop de paramètres ; utiliser des structures de données (comme les dictionnaires) pour les regrouper si nécessaire.  Documenter les fonctions et leurs paramètres pour améliorer la lisibilité du code. 49 Année académique 2024-2025 Exemple : Le passage par valeur ou référence d’un paramètre Passage par Valeur En programmation, le passage par valeur signifie que lorsque vous passez un argument à une fonction, une copie de cette valeur est faite. Ainsi, les modifications apportées à la variable à l'intérieur de la fonction n'affectent pas la variable d'origine en dehors de la fonction. Sortie : Dans cet exemple, la valeur de a en dehors de la fonction incrementer_valeur reste inchangée, car x est passé par valeur. Passage par Référence Le passage par référence signifie que lorsque vous passez un argument à une fonction, vous passez une référence à l'emplacement mémoire de la variable. Ainsi, les modifications apportées à la variable à l'intérieur de la fonction affectent également la variable d'origine en dehors de la fonction. Exemple : 50 Année académique 2024-2025 Sortie : Dans cet exemple, la liste ma_liste en dehors de la fonction ajouter_element est modifiée, car liste est passé par référence. Distinction entre Types Immuables et Muables En Python, les types de données immuables (comme les nombres, les chaînes de caractères et les tuples) sont passés par valeur, tandis que les types de données muables (comme les listes, les dictionnaires et les ensembles) sont passés par référence. Exemple avec type immuable : Sortie : Chaine à l’intérieur de la fonction : Texte original ajoutée Chaine à l’extérieur de la fonction : Texte original Exemple type muable : Sortie : Dictionnaire à l’interieur de la fonction : { ’clé’ :’valeur’} Dictionnaire à l’extérieur de la fonction : { ’clé’ :’valeur’} 51 Année académique 2024-2025 Conclusion Comprendre la différence entre le passage par valeur et le passage par référence est essentiel pour écrire des fonctions robustes et prévisibles. En général, les objets immuables en Python sont passés par valeur, tandis que les objets muables sont passés par référence. Cela affecte la manière dont vous manipulez les données à l'intérieur de vos fonctions et peut avoir des implications importantes sur le comportement de votre code. Exercices Pratiques Pour mettre en pratique ce que nous avons appris, voici quelques exercices : Exercice 1 : Vérification de l'Âge Écrivez un programme qui demande à l'utilisateur son âge et affiche un message en fonction de la tranche d'âge (mineur, adulte, senior). 52 Année académique 2024-2025 Exercice 2 : Calcul de la Factorielle Écrivez une fonction factorielle(int n) qui calcule la factorielle de n (n!) en utilisant une boucle for. Exercice 3 : Somme des Éléments d'une Liste Écrivez une fonction sommeListe(int[] liste) qui prend un tableau de nombres et retourne leur somme. 53 Année académique 2024-2025 Exercice 4 : Vérification de Nombre Premier Écrivez une fonction estPremier(int n) qui vérifie si un nombre n est premier. 4. Conclusion Nous avons couvert les concepts de base de la programmation, y compris les variables, les types de données, les structures de contrôle et les fonctions. Ces éléments constituent les blocs de construction fondamentaux de tout programme informatique. En comprenant et en maîtrisant ces concepts, vous serez mieux préparés à aborder des sujets plus avancés et à développer vos propres programmes. 5. Matériel Supplémentaire  Lectures recommandées : o "Automate the Boring Stuff with Python" par Al Sweigart o "Python Crash Course" par Eric Matthes  Vidéos : o "Python for Beginners" (YouTube) o "Learn Python Programming" par Corey Schafer (YouTube) 54 Année académique 2024-2025 Séance 4 : Résolution de Problèmes Informatiques par la Logique Objectifs de la Séance  Apprendre à aborder et à décomposer des problèmes informatiques simples.  Utiliser des jeux et des énigmes simples pour développer la pensée logique et algorithmique.  Appliquer des techniques de résolution de problèmes à des scénarios concrets.  Comprendre et analyser les besoins à partir d'énoncés et de descriptions. Introduction La résolution de problèmes est une compétence essentielle en informatique. Elle permet de structurer la pensée, d'aborder des problèmes complexes et de trouver des solutions efficaces. Cette séance vous aidera à développer votre logique et à appliquer des techniques de résolution de problèmes à des scénarios concrets. 1. Principes de la Résolution de Problèmes 1. Définir le problème : Comprendre clairement ce qui doit être résolu. o Exemple : "Compter les occurrences de chaque nombre dans une liste." 2. Décomposer le problème en sous-problèmes : Diviser le problème en parties plus petites et plus gérables. o Exemple : "Lire chaque nombre dans la liste, puis compter combien de fois chaque nombre apparaît." 3. Identifier les solutions possibles : Trouver différentes approches pour résoudre chaque sous-problème. o Exemple : "Utiliser une boucle pour parcourir la liste et un dictionnaire pour stocker les occurrences." 55 Année académique 2024-2025 2. Compréhension des Énoncés et Besoins Identifier les Mots-Clés 1. Lisez attentivement l'énoncé : Relevez les mots-clés et les phrases importantes. o Exemple : "Compter les occurrences de chaque nombre dans une liste." Comprendre les Phrases Complexes 1. Décomposez les phrases longues en segments plus petits : o Exemple : "Compter les occurrences" et "dans une liste." Exercice Pratique 1. Énoncé : "Créer un algorithme qui compte le nombre de fois que chaque lettre apparaît dans une phrase." o Mots-clés : "compte", "lettre", "phrase." o Compréhension : Il faut parcourir la phrase et compter chaque lettre. Exemple sur une mini histoire Histoire : Dans une salle de classe lumineuse et équipée de technologies modernes, Monsieur Martin se tient devant un tableau interactif. Il se tourne vers ses étudiants, un sourire encourageant sur le visage. "Bonjour à tous! Aujourd'hui, nous allons combiner nos connaissances en mathématiques avec un peu de programmation. Nous allons analyser un texte pour voir combien de fois chaque lettre apparaît. Cela nous aidera à comprendre les bases de la programmation et à développer nos compétences en analyse de données." Il se dirige vers son ordinateur et affiche un texte simple sur le tableau interactif. "Voici le texte que nous allons analyser," dit-il en pointant vers l'écran. "Notre objectif est de compter combien de fois chaque lettre apparaît dans ce texte et de présenter ces informations de manière claire." Il divise les étudiants en petits groupes et leur demande d'ouvrir leurs ordinateurs portables. Chaque groupe doit écrire un programme simple pour accomplir la tâche. Monsieur Martin passe de groupe en groupe, offrant des conseils et des encouragements. "Commencez par lire le texte et créez une structure de données pour stocker le nombre de fois que chaque lettre apparaît," explique-t-il à un groupe. "Ensuite, parcourez chaque caractère du texte et mettez à jour vos comptes." 56 Année académique 2024-2025 Les étudiants travaillent avec enthousiasme, certains écrivant du code pour la première fois. Ils rencontrent des défis, mais avec l'aide de Monsieur Martin, ils apprennent à les surmonter. Après un certain temps, les groupes commencent à terminer leurs programmes. Monsieur Martin demande à chaque groupe de présenter ses résultats. Un par un, les groupes affichent des graphiques montrant la fréquence des lettres. "Regardez ces résultats," dit Monsieur Martin en affichant un graphique au tableau. "Nous pouvons voir quelles lettres sont les plus fréquentes dans notre texte. C'est un excellent exemple de comment la programmation peut nous aider à analyser et à comprendre des données." Les étudiants sont impressionnés par ce qu'ils ont accompli. Ils se rendent compte que la programmation n'est pas seulement une compétence technique, mais aussi un outil puissant pour résoudre des problèmes et analyser des informations. "Je suis très fier de vous tous," conclut Monsieur Martin. "Vous avez fait un excellent travail aujourd'hui. Continuez à explorer et à apprendre. La programmation peut ouvrir de nombreuses portes pour vous." Les étudiants quittent la classe avec un sentiment de satisfaction et d'enthousiasme, prêts à affronter de nouveaux défis et à découvrir davantage sur le monde fascinant de la programmation. Analyse :  Mots-clés : "compter les lettres", "texte", "afficher les informations."  Décomposition : o Lire le texte. o Compter chaque lettre. o Afficher le résultat. Plan de Résolution : 1. Lire le Texte : Utiliser une fonction pour lire le texte. 2. Compter les Lettres : Utiliser une boucle pour parcourir chaque lettre et un dictionnaire pour stocker les occurrences. 3. Afficher le Résultat : Parcourir le dictionnaire et afficher chaque lettre avec son compte. 57 Année académique 2024-2025 3. Jeux et Énigmes pour Développer la Pensée Logique Énigme du Fermier Énigme : Un fermier doit traverser une rivière avec un loup, une chèvre et un chou. Il a un bateau, mais il ne peut transporter que deux à la fois. Si le loup est laissé seul avec la chèvre, il la mangera. Si la chèvre est laissée seule avec le chou, elle le mangera. Comment le fermier peut-il faire traverser tous les

Use Quizgecko on...
Browser
Browser