Vous êtes sur la page 1sur 49

Introduction à l’informatique

Chap 5 : tableaux, structures et algorithmes

MOUOMEN E

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 1


Cours 5 : tableaux, structures et algorithmes

Plan du cours

Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique

Peip1/PeipC Introduction à l’informatique Année 2020 − 2021 2


Cours 5 : tableaux, structures et algorithmes Rappels et introduction

Plan du cours

Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique

Peip1/PeipC Introduction à l’informatique Année 2020 − 2021 3


Cours 5 : tableaux, structures et algorithmes Rappels et introduction

Rappels

Pour le moment on a vu :
Les types et les opérations
i n t , f l o a t , double, c h a r , s t r i n g , bool
Les instructions :
• Lecture et écriture : cout et c i n s
• Déclaration de variable : type v a r i a b l e ;
• Affectation : v a r i a b l e = exp ression ;
• Instruction conditionnelle : i f ( c o n d i t i o n ) { . . . } e l s e { . . . }
• Instructions itératives : while, d o . . . while, f o r
Les fonctions

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 4


Cours 5 : tableaux, structures et algorithmes Rappels et introduction

Suite...

Et maintenant, pour aller plus loin ?


Gérer des données plus complexes
Définir ses propres formats de données

Passage à l’échelle
Manipuler de plus grandes quantités de données

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 5


Cours 5 : tableaux, structures et algorithmes Rappels et introduction

Suite...

Exemple :
Créer un annuaire des étudiants de l’Université
Nom, prénom, sexe, numéro d’étudiant, adresse email
→ comment organiser les informations ? comment les grouper ?

Stocker les informations de tous les étudiants de la promo


Stocker les informations de plus de 100 étudiants
→ comment stocker ces données ? Doit-on créer 100 variables ?

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 6


Cours 5 : tableaux, structures et algorithmes Rappels et introduction

Suite...

Et maintenant, pour aller plus loin ?


Gérer des données plus complexes
D´efinir ses propres formats de donn´ees
⇒ Structure :
Bas´ee sur les types de bases + les autres structures
Correspond `aune entit´e logique

Passage à l’échelle
Manipuler de plus grandes quantit´es de donn´ees
⇒ Tableau :
Stocke un grand nombre de donn´ees
Permet d’y accéder plus facilement

Peip1/PeipC Introduction à l’informatique Année 2020 − 2021 7


Cours 5 : tableaux, structures et algorithmes Les structures

Plan du cours

Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique

Peip1/PeipC Introduction à l’informatique Année 2020 − 2021 8


Cours 5 : tableaux, structures et algorithmes Les structures

Les structures

Structure : type de données composé


Chaque composante est appelée champ

Le type de chaque champ peut-étre :


Un type de base
Une autre structure précédemment définie

Exemple pour l’annuaire :


Etudiant
Chaınes de caractère : nom, prénom, email
Caractère : sexe (M, F)
Entier : numéro d’étudiant

Peip1/PeipC Introduction à l’informatique Année 2020 − 2021 9


Cours 5 : tableaux, structures et algorithmes Les structures

Les structures
Définition d’une structure pour les types de base
Syntaxe :
s truc t nomStructure{
type1 nomChamp1;
type2 nomChamp2;
type3 nomChamp3;
// . . .
};

Exemple :
s truc t Etudiant {
s t r i n g nom;
s t r i n g prenom;
char sexe;
i n t num_etudiant;
s t r i n g email;
};

Attention ! Il ne faut pas oublier le ; `a la fin

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 10


Cours 5 : tableaux, structures et algorithmes Les structures

Les structures
Les définitions des structures sont généralement placées en dehors de la
fonction main, après les include et avant les fonctions.
#include <iostream>
using namespace s t d;

s t r uct nomStructure{
type1 nomChamp1;
type2 nomChamp2;
type3 nomChamp3;
// . . .
};

i n t main()
{
// . . .

return 0;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 11


Cours 5 : tableaux, structures et algorithmes Les structures

Les structures
Déclaration d’une variable ayant pour type une structure
Syntaxe :
nomStructure nomVariable;

Exemple :
Etudiant et1;

Initialisation d’une structure


Syntaxe :
nomVariable.nomChamp1 = expression;
nomVariable.nomChamp2 = autreExpression;
Exemple :
Etudiant et1;
et1.nom = "MOUO";
et1.prenom = "Thomas";
et1.sexe = ’M’;
et1.num_etudiant = 14916;
et1.email = "fmouomene@.fr";

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 12


Cours 5 : tableaux, structures et algorithmes Les structures

Les structures
Déclaration + initialisation d’une structure
Syntaxe :
nomStructure nomVariable = {champ1, champ2, champ3, / * . . . * / } ;

Exemple :
Etudiant et2 = {"Dupond", "Marie", ’ F ’ , 1827, "marie.dupond@u-psud.fr"};

les champs doivent ˆetre dans le bon ordre et avoir le bon type

Accès à un champ d’une structure


Syntaxe :
autreVariable = nomVariable.nomChamp1

Exemple :
cout << "Et-" << et1.num_etudiant << " : " << et1.nom << " " << et1.prenom << endl;

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 13


Cours 5 : tableaux, structures et algorithmes Les structures

Les structures
Affectation sur les structures
Syntaxe :
nomStructure nomVariable1 = {champ1, champ2, champ3, champ4};
nomStructure nomVariable2;

nomVariable2 = nomVariable1;

L’affectation effectue une copie compl`ete de la structure


Exemple : qu’affiche ce programme ?
Etudiant et2 = {"Dupond", "Marie", ’ F ’ , 1827, "marie.dupond@u-psud.fr"};
Etudiant et_cp;

et_cp = et2;
et_cp.nom = "blabla";
et_cp.num_etudiant = 0;

cout << "Et- " << et2.num_etudiant << " : " << et2.nom << " " << et2.prenom << endl;
cout << "Et- " << et_cp.num_etudiant << " : " << et_cp.nom << " " << et_cp.prenom << endl;

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 14


Cours 5 : tableaux, structures et algorithmes Les structures

Exercice

Point 2D
Définir une structure qui représente un point dans un repère 2D (avec
abscisse x et ordonnée y)
Ecrire une fonction qui calcule la distance entre deux points
Ecrire un programme principal qui demande `a l’utilisateur de saisir 2
points et afficher la distance entre ces deux points
Pour rappel :
distance(A, B) = √ (xA −x B) 2 + (y A —yB )2
Pour la racine carrée :
#include<cmath>
racine = s q r t (nombre);

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 15


Cours 5 : tableaux, structures et algorithmes Les tableaux

Plan du cours

Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique

Peip1/PeipC Introduction à l’informatique Année 2020 − 2021 16


Cours 5 : tableaux, structures et algorithmes Les tableaux

Les Tableaux
Objectif
Stocker un grand nombre de données
Permettre d’y accéder plus facilement

Définitions
Un tableau est une valeur composite formée de plusieurs valeurs du
même type T.
T T T ... t.at(i) ... T T T

0 1 2 i N-3 N-2 N-1

Une valeur (ou él´ément) d’un tableau t est désignée par son indice i
dans le tableau, on la note t . a t ( i )
En C++, indice est un entier entre 0 et N-1, ou`Nest le nombre
d’éléments du tableau.
Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 17
Cours 5 : tableaux, structures et algorithmes Les tableaux

Les tableaux

Exemple
Tableau d’entiers

1 4 5 8 5 9 2 7 3 5

0 1 2 3 4 5 6 7 8 9

Dans l’exemple que vaut ?


) t.at(0) ?
) t.at(4) ?
) t.at(1) ?
) t.at(2) ?
L’ordre et les répétitions sont importantes !

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 18


Cours 5 : tableaux, structures et algorithmes Les tableaux

Les tableaux

Exemple en C++
vector<int> t ;
t = vector<int> ( 10) ;
t . a t ( 0 ) = 1;
t . a t ( 1 ) = 4;
t . a t ( 2 ) = 5;
t . a t ( 3 ) = 8;
t . a t ( 4 ) = 5;
t . a t ( 5 ) = 9;
t . a t ( 6 ) = 2;
t . a t ( 7 ) = 7;
t . a t ( 8 ) = 3;
t . a t ( 9 ) = 5;

cout << t . a t ( 5 ) + t . a t ( 8 ) << endl;

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 19


Cours 5 : tableaux, structures et algorithmes Les tableaux

Construction des tableaux


Déclaration d’un tableau
Librairie pour les tableaux de type vector :
#include <vector>

Syntaxe :
vector <type> nomTableau;

Exemple : déclaration d’un tableau d’entiers


vector<int> t ;

Exemple : déclaration d’un tableau de booléens


vector<bool> tabBool;

Pour creuser : v e c t o r < . . . > est un template

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 20


Cours 5 : tableaux, structures et algorithmes Les tableaux

Construction des tableaux


Allocation d’un tableau
Syntaxe :
nomTableau = vector<type> ( t a i l l e ) ;

Exemple : allocation d’un tableau de 10 entiers


t = vector<int> ( 10) ;

Ne définit pas la valeur des éléments stockés dans t

Initialisation d’un élément du tableau


Syntaxe :
nomtableau.at(indice) = expression;

Exemple :
t . a t ( 0 ) = 1;
t . a t ( 1 ) = 4;

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 21


Cours 5 : tableaux, structures et algorithmes Les tableaux

Construction des tableaux


À retenir
Une variable de type tableau se construit en trois étapes :
1 Déclaration (créer la variable)

2 Allocation (réserver la place dans la mémoire)

Sans elle : faute de segmentation


3 Initialisation (définir ce qu’il y a dans la mémoire réservée) Sans
elle : n’importe quoi dans la mémoire (comme avec les autres
variables)

Raccourci
Déclaration, allocation et initialisation :
vector<int> t = {1, 4, 5, 8, 5, 9,2, 7, 3,5};

Introduit par la norme C++ 2011


Rq: ici, la taille est déduite automatiquement
Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 22
Cours 5 : tableaux, structures et algorithmes Les tableaux

Exercice
Construire un tableau de 1000 entiers et l’initialiser avec 0 dans chacune
des cases du tableau

Construire un tableau de 1000 entiers et l’initialiser avec l’index de la case


dans chacune des cases du tableau

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 23


Cours 5 : tableaux, structures et algorithmes Les tableaux

Utilisation des tableaux


Syntaxe
t . a t ( i ) s’utilise comme une variable usuelle
Exemple :
/ / Exemple d’acc`es en lecture
x = t.at(2) + 3 * t.at(5);
y = - t.at(3);

/ / Exemple d’acc`es en ´ecriture


t . a t ( 4 ) = 2 + 3*x;
c i n s >> t . a t ( 6 ) ;

Accès avec vérifications


Le programme g´en´erera une erreur si on essaye d’accéder au tableau avec
un index en dehors du tableau
- si i est plus grand que N-1, ou` N est la taille du tableau
- si i est négatif

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 24


Cours 5 : tableaux, structures et algorithmes Les tableaux

Utilisation des tableaux

Attention : en C++, il existe aussi un accès sans


vérification
Il est noté t [ i ] (vous retrouverez souvent cette notion sur internet)
Le comportement de t [ i ] n’est pas spéc i fi é si i est négatif ou plus
grand que N-1, avec N est la taille du tableau
Source n◦ 1 des trous de sécurité !
Utilisez la notion avec vérifications : t . a t ( i ) au lieu de t [ i ] !

Rq : il existe aussi des tableaux qui proviennent du C, on ne les utilisera pas.

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 25


Cours 5 : tableaux, structures et algorithmes Les tableaux

Affectations de tableaux vector


Exemple : qu’affiche ce programme ?
vector<int> t 1 = { 1 , 2 ,3,4,5};
cout << " t 1 . a t ( 0) = " << t 1 . a t ( 0) << endl;
cout << " t 1 . a t ( 4) = " << t 1 . a t ( 4) << endl;

vector<int> t 2;
t 2 = t 1;
t 2 . a t ( 0) = -222;
cout << " t 1. a t ( 0) = " << t 1 . at ( 0) << endl;
cout << " t 1. a t ( 4) = " << t 1 . at ( 4) << endl;
cout << " t 2. a t ( 0) = " << t 2 . at ( 0) << endl;
cout << " t 2 . a t ( 4) = " << t 2 . a t ( 4) << endl;

Lors d’une affectation, le contenu d’un vector est copié!


Différent de Java, Python, ou des tableaux de type C

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 26


Cours 5 : tableaux, structures et algorithmes Les tableaux

Les tableaux vector


Tableaux de taille dynamique
(contrairement au tableau de type C)

On dispose donc de fonctionnalit´es pour :


Connaitre la taille du tableau
t.size();

Changer la taille du tableau


t.resize( 15) ;

Ajouter un élément supplémentaire `a la fin du tableau


(cela augmente la taille du tableau de 1)
t.push_back(23);

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 27


Cours 5 : tableaux, structures et algorithmes Les tableaux

Exercice

Ecrire un programme qui demande `al’utilisateur de saisir autant de notes


qu’il le souhaite :
Demander `a l’utilisateur d’entrer une note
Demander `al’utilisateur de saisir un caractère pour savoir s’il veut continuer
ou non (’ o ’ ⇒ continuer et arrêter sinon)
Puis qui affiche les notes saisies sur la même ligne

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 28


Cours 5 : tableaux, structures et algorithmes Les tableaux

Tableaux à deux dimensions

Tableau `a 2 dimensions : tableau de tableaux


Syntaxe :
vector<vector<type> > tab2D;

l’espace est important ici, sinon c’est opérateur >>


Utilisation :
tab2D.at(i).at(j);

Construction
1 Déclaration
2 Allocation du premier tableau
3 Allocation des tableaux de chaque ligne
4 Initialisation

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 29


Cours 5 : tableaux, structures et algorithmes Les tableaux

Tableaux à deux dimensions


Exemple : grille de morpion

/ / Declaration
vector<vector<int> > tab2D;

/ / Allocation
tab2D = vector<vector<int> > ( 3 ) ;

/ / Allocation des sous-tableaux;


tab2D.at(0) = vector<int> ( 3 ) ;
tab2D.at(1) = vector<int> ( 3 ) ;
tab2D.at(2) = vector<int> ( 3 ) ;

// Initialisation
tab2D.at(0).at(0) = 1;tab2D.at(0).at(1) = 2;tab2D.at(0).at(2) = 0;
tab2D.at(1).at(0) = 1;tab2D.at(1).at(1) = 1;tab2D.at(1).at(2) = 1;
tab2D.at(2).at(0) = 0;tab2D.at(2).at(1) = 2;tab2D.at(2).at(2) = 2;

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 30


Cours 5 : tableaux, structures et algorithmes Les tableaux

Tableaux à deux dimensions


Exemple : grille de morpion (version alternative)

/ / Declaration
vector<vector<int> > tab2D;

/ / Allocation
tab2D = vector<vector<int> > ( 3 ) ;

/ / Allocation des sous-tableaux;


f o r ( i n t i = 0 ; i < tab2D.size() ; i + + ) {
tab2D.at(i) = vector<int> ( 3 ) ;
}

// Initialisation
tab2D.at(0).at(0) = 1;tab2D.at(0).at(1) = 2;tab2D.at(0).at(2) = 0;
tab2D.at(1).at(0) = 1;tab2D.at(1).at(1) = 1;tab2D.at(1).at(2) = 1;
tab2D.at(2).at(0) = 0;tab2D.at(2).at(1) = 2;tab2D.at(2).at(2) = 2;

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 31


Cours 5 : tableaux, structures et algorithmes Les tableaux

Tableaux à deux dimensions


Exemple : grille de morpion
/ / Declaration + Allocations + I n i t i a l i s a t i o n
vector<vector<int> > morpion1 = { { 0 , 1 , 2 } , { 2 , 1 , 2 } , { 1 , 1 , 0 } } ;
vector<vector<int> > morpion2 = {
{1, 2, 0},
{1, 1, 1},
{0, 2, 2}
};

// Utilisation
f o r ( i n t i = 0 ; i<morpion2.size() ; i + + ) {
f o r ( i n t j = 0; j<morpion2.at( i).size() ; j + + ) {
i f ( m o r p i o n 2 .a t ( i ) .a t ( j) == 1){cout << " X " ; }
els e i f ( m o r p i o n 2 .a t ( i ) . a t ( j ) == 2){cout << "O";}
else{cout << " " ; }
}
cout << endl;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 32


Cours 5 : tableaux, structures et algorithmes Les tableaux

Tableaux à deux dimensions


Exemple : grille de morpion
/ / Declaration + Allocations + I n i t i a l i s a t i o n
vector<vector<int> > morpion1 = { { 0 , 1 , 2 } , { 2 , 1 , 2 } , { 1 , 1 , 0 } } ;
vector<vector<int> > morpion2 = {
{1, 2, 0},
{1, 1, 1},
{0, 2, 2}
};

// Utilisation
f o r ( i n t i = 0 ; i<morpion2.size() ; i + + ) {
f o r ( i n t j = 0; j<morpion2.at( i).size() ; j + + ) {
i f ( m o r p i o n 2.a t ( i ) .a t ( j) == 1){cout << " X " ; }
els e i f ( m o r p i o n 2.a t ( i ) . a t ( j ) == 2){cout << "O";}
else{cout << " " ; }
}
cout << endl;
}

Que fait ce programme ?


Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 32
Cours 5 : tableaux, structures et algorithmes Les fonctions sur les structures et les tableaux

Plan du cours

Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 33


Cours 5 : tableaux, structures et algorithmes Les fonctions sur les structures et les tableaux

Fonctions

Structures et tableaux
Les structures et les tableaux peuvent ˆetre passés en paramètres d’une
fonction
Les structures et les tableaux peuvent aussi étre la valeur de retour
d’une fonction
Exemple :
bool numEstPlusGrand(Etudiant et 1, Etudiant et 2) {
return et1.num_etudiant >= et2.num_etudiant;
}

Que fait la fonction ?

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 34


Cours 5 : tableaux, structures et algorithmes Les fonctions sur les structures et les tableaux

Fonctions

Structures et tableaux
Exemple :
void afficheTab(vector<int> t ab) {
cout << " [ " ;
f o r ( i n t k = 0; k<t ab.s ize( ) ; k++){
cout << " " << tab.at( k) ;
}
cout << " ] " << endl;
}

Que fait la fonction ?

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 35


Cours 5 : tableaux, structures et algorithmes Les fonctions sur les structures et les tableaux

Fonctions
Structures et tableaux
Exemple :
vector<Etudiant> creeTableauEtudiant(int nombre){
vector<Etudiant> resultat;
resultat = vector<Etudiant> (nombre);
for ( i n t k = 0; k < nombre ; k++){
resultat.at(k) = {"ADefinir", " " , ’ F ’ , 1000+k, "@u-psud.fr"};
}
return resultat;
}

i n t main()
{
vector<Etudiant> annuaireVide = creeTableauEtudiant(10);
f o r ( i n t i = 0; i < annuaireVide.size() ; i + + ) {
cout << "Et - " << annuaireVide.at(i).num_etudiant << " : "
<< annuaireVide.at(i).nom << " " << annuaireVide.at(i).prenom << endl;
}

Que fait la fonction ?

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 36


Cours 5 : tableaux, structures et algorithmes Les fonctions sur les structures et les tableaux

Exercice

Créer un tableau de caractères


Écrire une fonction qui :
prend en paramètre une taille t et un caractère c
rend un tableau de taille t initialisé avec c dans tous les cases
Ecrire le programme principal qui appelle cette fonction et qui affiche
le tableau ainsi cr éé

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 37


Cours 5 : tableaux, structures et algorithmes Les fonctions sur les structures et les tableaux

Exercice

Diviser un tableau en deux


E´crire une fonction qui divise un tableau d’entiers en deux tableaux de
taille identique (´eventuellement `a 1 près si la taille est impaire)
Ecrire le programme principal qui divise un tableau en deux et affiche
les deux sous tableaux (On pourra ré-utiliser la fonction
afficherTab)

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 38


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Plan du cours

Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 39


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Annuaire
Exemple de l’annuaire des ´etudiants de l’Université
Combiner structures et tableaux

vector<Etudiant> annuaire = {
{"Dumond", "Kevin", ’M’, 45562, "kdumond@u-psud.fr"},
{"Lopez", "Rachel", ’ F ’ , 11223, "rlopez@u-psud.fr"},
{"Shibata", "David", ’M’, 22225, "dshibata@u-psud.fr"},
{"Dupuis", "Jean", ’M’, 66754, "jdupuis@u-psud.fr"},
{"Martin", "Aurelie", ’ F ’ , 54321, "amartin@u-psud.fr"},
{"Houatcha", "Paul", ’M’, 55223, "phouatcha@u-psud.fr"},
{ " T u r tin " , "Jacques", ’M’, 34521, "jturtin@u-psud.fr"},
{"Hertirp" , "Hassan", ’M’, 98765, "hhertirp@u-psud.fr"},
{ " P la ta " , " J u l i e " , ’ F ’ , 12385, "jplata@u-psud.fr"},
{ " T i l l " , "Bob", ’M’, 45321, "btill@u-psud.fr"}
};

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 40


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Rechercher un élément dans un tableau

Exercice : retrouver un ´etudiant dans l’annuaire `apartir de son nom


Etudiant r es u lta t;
s t r i n g nom_recherche;
cout << "Entrez l e nom de l’etudiant recherche: " ;
c i n s >> nom_recherche;

f o r ( i n t k=0; k<annuaire.size(); k=k+1) {


i f (annuaire.at(k).nom == nom_recherche) {
r es u lta t = annuaire.at(k);
}

Est-ce que l’on est obligé de toujours parcourir tout le tableau ?

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 41


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Rechercher un élément dans un tableau


Exercice : retrouver un ´etudiant dans l’annuaire `apartir de son nom
Autre solution :

bool trouve = f a l s e ;
i n t k=0;
while (k<annuaire.size() and not trouve) {
i f (annuaire.at(k).nom == nom_recherche) {
resultat = annuaire.at(k);
trouve = true;
}
k = k+1;
}
if(trouve){
cout << "Et-" << resultat.num_etudiant << " : " \
<< resultat.nom << " " << resultat.prenom << endl;
}
else{
cout << "Etudiant non trouve" << endl;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 42


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Trier un tableau

Nombreuses solutions pour trier un tableau


Plus ou moins performantes
Plus ou moins complexes
Exemple: tri `a bulle, tri rapide (quick sort), tri fusion,
etc.

Tri par insertion


Une méthode simple pour trier
C’est le tri du Joueur de carte

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 43


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Trier un tableau

Tri par insertion


Les éléments `a trier sont donnés un par un
Le premier ´el´ement est une liste triée de longueur 1
On range le second ´elément avant ou apr`es le premier ´el´ement,on
obtient une liste tri´ee de longueur 2
Et ainsi de suite :
1 On prend l’élément suivant à trier (et on le sauvegarde)
2 Tant qu’il est plus petit que les ´eléments d´ej`a tri´es, on le décale vers le
début du tableau
3 Quand il est supérieur ou égal à un élément déjà trié, on l’insert dans la
liste juste après cet élément.

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 44


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Trier un tableau

Tri par insertion en C++

vector<int> t = { 8 , 5 , 9 , 3 , 14, 1 , 25, 4 } ;

i n t i , j , en_cours;
f o r ( i = 0; i < t . s i z e ( ) ; i + + ) {
en_cours = t . a t ( i ) ;
f o r ( j = i ; j>0 and t . a t ( j - 1 ) > en_cours; j - - ) {
t.at(j) = t.at(j-1);
}
t . a t ( j ) = en_cours;
}

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 45


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Exercice

Trier l’annuaire par numéro d’ étudiants croissants

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 46


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Exercice

Trier l’annuaire dans l’ordre alphabétique des noms des étudiants

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 47


Cours 5 : tableaux, structures et algorithmes Notions d’algorithmique

Conclusion
Aspect scientifique de l’informatique
Notion de langage de programmation
Stockage et organisation des données
1. Codage des données
2. Type, variables, structure et tableaux
Algorithmique et traitement des données
1 . Affectations
2 . Instructions conditionnelle (if) et itératives (boucles)
3 . Fonctions

Aspect technologique : langage C++


Attention : nous n’avons vu qu’un sous ensemble de C++ !
Pas de programmation orient´e objet, templates, etc.

Peip1/PeipC Introduction à l’informatique Année 2022 − 2023 48

Vous aimerez peut-être aussi