Informatique, Algorithmique, Programmation, etc. CPEL2 [email protected] 2014/2015 1 Informatique ? ● Mot valise créé en 1962: INFORMATION + AUTOMATIQUE ● En français moderne: science du traitement de l'information par un ordinateur [email protected] 2014/2015 2 Ordinateur ? ● ● ● Un ordinateur est une super machine à calculer Mot issu du vocabulaire religieux (« qui met de l'ordre dans le monde... ») Comparé à un humain, cette machine: – A une mémoire constituée de cases (ou variables) – Fait très vite ce qu'on lui dit – Peut traiter beaucoup d'informations grâce à des algorithmes ou des programmes [email protected] 2014/2015 3 Algorithme ? ● ● ● Abou Jafar Muhammad Ibn Musa al-Khuwarizmi (9ème siècle) « algorismus » (16ème siècle) En français moderne: programme que doit exécuter l'ordinateur [email protected] 2014/2015 4 Ecrire un algorithme ou un programme... ● ● Suite d'instructions à exécuter Mais parfois il y a un bug : – À cause d'une panne de l'ordinateur – Plutôt en général à cause d'un fonctionnement non prévu par le programmeur [email protected] 2014/2015 5 Un exemple amusant - Lightbot [email protected] 2014/2015 6 Un autre exemple : Scratch [email protected] 2014/2015 7 Des milliers de langages de programmation... ● Facilité de prise en main ● ● Vitesse d'exécution ● Langages « graphiques » (Scratch,Logo) Langages interprétés (Python, Visual Basic, PHP, langages TI/CASIO) Langages compilés (C/C++, Java, Ada, Fortran) Langage assembleur En théorie, tout algorithme peut être traduit d'un langage à un autre [email protected] 2014/2015 8 Apprendre à programmer... 1. Trouver un problème à résoudre ! 2. Imaginer une solution en tenant compte des capacités de l'ordinateur 3. Traduire sous forme de programme dans l'ordinateur 4. Tester et faire tester son programme 5. Si ça ne marche pas… repartir à l'étape 2 ! [email protected] 2014/2015 9 Que peut faire l'ordinateur ? ● ● ● ● Déplacer un objet dans une variable Consulter la valeur d'une variable Calculer, comparer Etc. (voir les blocs Scratch) [email protected] 2014/2015 10 Exemples de problèmes à résoudre... ● Trouver le plus petit objet parmi un ensemble d'objets Difficile Facile [email protected] 2014/2015 11 Algorithme pour trouver le plus petit parmi un ensemble d'objets ● On définit une variable posMin = 1 ● On regarde chaque objet qui reste: ● – Si cet objet est plus petit que celui en position posMin, alors on met sa position dans posMin – On passe à l'objet suivant A la fin la variable posMin contient la position de l'objet le plus petit... ● Essayons avec des étudiants, puis avec Scratch ● On peut aussi faire une simulation d'exécution [email protected] 2014/2015 12 Exemples de problèmes à résoudre ● Mettre des objets dans le bon ordre (ou trier) [email protected] 2014/2015 13 Algorithme pour trier 1. On définit une variable pos = 1 2. On cherche le plus petit objet à partir de la position pos 3. On l'échange avec la case située en position pos 4. Si il y a encore des objets à traiter, alors on repart à l'étape 2 après avoir ajouté 1 à pos 5. A la fin, l'ensemble est trié ! [email protected] 2014/2015 14 Version Scratch [email protected] 2014/2015 15 Ca devient un peu compliqué… mais il ne faut pas craquer [email protected] 2014/2015 16 Programme mystère ? [email protected] 2014/2015 17 Le C/C++ ● Langage très courant (90 % des jeux !) ● Des nouveautés importantes par rapport à Scratch : – Les nombres sont typés (int pour les nombres entiers, float pour les nombres à virgule, char pour les caractères, ...) – Quelques lignes un peu mystérieuses à ajouter au début... – On programme avec un éditeur de texte et un terminal – Se référer à l'aide mémoire ! [email protected] 2014/2015 18 Un premier exemple en C/C++ #include <stdlib.h> #include <iostream> using namespace std; int main() { int valeur1, valeur2; int reponse; srand(time(NULL)); valeur1 = rand()%10; valeur2 = rand()%10; cout<<"Quel est le résultat de "<<valeur1<< " fois "<<valeur2<<" ?"<<endl; cin>>reponse; while (reponse != (valeur1*valeur2)) { cout<<"Non ! Quel est le résultat de "<<valeur1<< " fois "<<valeur2<<" ?"<<endl; cin>>reponse; } cout<<"Bravo !"<<endl; } [email protected] 2014/2015 19 Environnement Linux [email protected] 2014/2015 20 Traduction en C/C++ d'un programme Scratch [email protected] 2014/2015 21 Les points à retenir : ● ● ● ● ● Attention aux bornes d'une liste (ou vecteur) qui vont de 0 à n-1 Les accolades, virgules, parenthèses, ... ne sont pas toujours obligatoires : les utiliser quand même Le but est d'écrire un programme lisible En TP ne pas hésiter à repartir d'un ancien programme pour le modifier Mise en application avec le tri par insertion... [email protected] 2014/2015 22 Corriger un programme-mystère à l'aide du compilateur #include <stdlib.h> using namespace std; int main() int liste[6] int i; for (i = 0; i < 6; i++) { liste[i] = rand()%100; cout>>liste[i]>>endl; } i == 0; while (i <= 6) { if ((i%2) = 1) j = list[i]; list[i] = j+; cout<<"Element " i " devient "<<liste[i]; } i=i+2; } [email protected] 2014/2015 23 Tri à bulles ! [email protected] 2014/2015 24