Académique Documents
Professionnel Documents
Culture Documents
MOUOMEN E
Plan du cours
Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique
Plan du cours
Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique
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
Suite...
Passage à l’échelle
Manipuler de plus grandes quantités de données
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 ?
Suite...
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
Plan du cours
Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique
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;
};
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;
}
Les structures
Déclaration d’une variable ayant pour type une structure
Syntaxe :
nomStructure nomVariable;
Exemple :
Etudiant et1;
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
Exemple :
cout << "Et-" << et1.num_etudiant << " : " << et1.nom << " " << et1.prenom << endl;
Les structures
Affectation sur les structures
Syntaxe :
nomStructure nomVariable1 = {champ1, champ2, champ3, champ4};
nomStructure nomVariable2;
nomVariable2 = nomVariable1;
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;
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);
Plan du cours
Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique
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
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
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;
Syntaxe :
vector <type> nomTableau;
Exemple :
t . a t ( 0 ) = 1;
t . a t ( 1 ) = 4;
Raccourci
Déclaration, allocation et initialisation :
vector<int> t = {1, 4, 5, 8, 5, 9,2, 7, 3,5};
Exercice
Construire un tableau de 1000 entiers et l’initialiser avec 0 dans chacune
des cases du tableau
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;
Exercice
Construction
1 Déclaration
2 Allocation du premier tableau
3 Allocation des tableaux de chaque ligne
4 Initialisation
/ / Declaration
vector<vector<int> > tab2D;
/ / Allocation
tab2D = vector<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;
/ / Declaration
vector<vector<int> > tab2D;
/ / Allocation
tab2D = vector<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;
// 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;
}
// 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;
}
Plan du cours
Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
Notions d’algorithmique
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;
}
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;
}
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;
}
Exercice
Exercice
Plan du cours
Rappels et introduction
Les structures
Les tableaux
Les fonctions sur les structures et les tableaux
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"}
};
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;
}
Trier un tableau
Trier un tableau
Trier un tableau
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;
}
Exercice
Exercice
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