You are on page 1of 15

Chapitre N1 : Structures de donnes & Structures simples

Les structures de donnes et les structures simples


A. Les structures de donnes
I. Les constantes
1. Dfinition
Une constante est une donne connue. Sa valeur reste inchange tout le long dun
programme (ou dun algorithme).
Exemples :

E = 2.718281
Pi = 3.14
Trouve = faux
Val = 20

2. Caractristiques
Une constante est caractrise par :
Son nom : un identificateur unique

Sa valeur

3. Dclaration en algorithme et en pascal


Dclaration en algorithme
Objet

Type/Nature

Rle

Nom de la constante

Constante = valeur de la constante

Rle de la constante

Dclaration en pascal
CONST constante1 = valeur 1 ;
constante 2 = valeur 2 ;

constante N = valeur N ;
Remarques :
La valeur de la constante nous renseigne sur son type : rel, entier, boolen,

On utilise les constantes pour rendre le programme plus lisible et plus facilement
modifiable

Activit : Dclarer une constante message de valeur "Bonne chance".


Dclaration en algorithme
Objet

Type/Nature

Rle

message

Constante = "Bonne chance"

--

En pascal :
Const message = Bonne chance ;
Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

II. Les variables


1. Dfinition
Une variable est un objet dont la valeur est susceptible dtre modifie dans le temps. Elle est
caractrise par :
(1) Son nom : un identificateur unique
(2) Son type
(3) Son contenu
Remarques : Les identificateurs
Un identificateur est un mot que le programmeur choisit librement et qui lui permet de
nommer son programme, ses donnes (constante, variables, )
Les caractres autoriss pour construire un identificateur sont :
(1) Les lettres majuscules et minuscules non accentues.
(2) Les chiffres
(3) Le caractre de soulignement _ (tir bas)
Un identificateur ne peut commencer que par une lettre
Il est conseill de choisir des noms didentificateurs vocateurs
Exemples :
(1) Les identificateurs suivants sont corrects : Classe, ELEVE1 ; nombre_d_eleves ;
(2) Par contre ceux-ci sont incorrects :
Elve 1 (lettre accentue non admise)
Nombre_dlves (lapostrophe est interdite)
1ereclasse (on ne peut pas commencer par un chiffre)
2. Dclaration en algorithme et en pascal
Dclaration en algorithme
Objet

Type/Nature

Rle

Nom de la variable

Type de la variable

Rle de la variable

Dclaration en pascal
VAR

variable 1 : type1 ;
variable 2 : type 2 ;

variable N : type N ;

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

Remarques :
(1) Variable 1, variables 2, , variable N sont les identificateur des variables intervenant dans
le programme (ou lalgorithme) et type 1, type 2, , et type N sont les identificateurs de
leurs types respectifs.$
(2) On peut regrouper ensemble les variables dclares sous le mme type.
Exemple :
Var i, j, k: integer;
Note: real;
Ch: string;
(3) Lors de la dclaration dune variable, le compilateur rserve dans la mmoire vive (RAM)
un certain espace (appel la taille de la variable) pour stocker la valeur future de cette
variable. Suivant le type de celle-ci lespace rserv ne sera pas de tout le mme. Ainsi
pour une variable de type entier, on rserve un espace de 2 octets alors quun rel
occupe 8 octets.
Application :
Soit le programme pascal suivant :
Programme premier exemple ;
Uses wincrt ;
Conste cfficient : 3 ;
Begin
Writeln(Donner trois notes entires) ;
Readln (a, b, c) ;
M := (a+b+c)/coefficient;
Writeln(La moyenne est :, M) ;
End ;
Questions :
1) Corriger le programme ci-dessus
2) Dclarer les variables utilises.

III. Les types de donnes standard


Le type nous renseigne sur la valeur affecter la variable et sur lensemble des oprateurs
quon peut appliquer sur la variable en question.

III.1. Les types numriques

1) Le type entier :
La mmoire vive de lordinateur ntant pas infinie et par consquent lensemble des entiers
nest pas gal Z . Si une variable est dclare sous un type entier cela signifie que ses valeurs
possibles sont les entiers appartenant un certain intervalle [Minint, Maxint].
Lensemble des entiers appartient lintervalle [-32768, 32767].
Il existe des sous types du type entier : entier court, entier long,
Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

Chaque sou type indique un sous ensemble particulier de lensemble des nombres entiers.
Type dentier

Identificateur

Intervalle

Taille

Entier

Integer

-32768..32767

2 octets

Entier court

Shortint

-128..127

1 octet

Octet

Byte

0..255

1 octet

Entier long

Longint

-2147483648..2147483647

4 octets

Mot

Word

0..65535

2 octets

Remarques :
(1) Les oprateurs arithmtiques quon peut appliquer sur une variable de type entier sont :
laddition (+), la soustraction (-), la multiplication (*), la division entire (div), le reste de
la division entire (mod) et le changement de signe (-).
(2) Les oprateurs relationnels sont : <, >, , , , =
(3) Dclaration en pascal : Var nom de la variable : integer ;
2) Le type rel :
Comme pour les entiers, lensemble des nombres rels informatiques nest pas \ , cest un
ensemble fini
Les valeurs dune variable de type rel sont donc dlimites par un intervalle de validit
(correspondant cette fois un espace de 8 octets).
Dans le langage pascal, tout rel est codifi par : un chiffre autre que 0 prcd du signe si
le nombre est ngatif puis un point (qui correspond notre virgule) suivi de dix chiffres et
dun exposant positif ou ngatif deux chiffres prcd de la lettre E.
Exemples :
Le nombre 12,5 est mmoris par pascal sous la forme : 1.2500000000E+01 (quil faut le
comprendre 1,25.101). Cette criture est appele criture scientifique des nombres (ou criture
virgule flottante)
Par contre le nombre 1/3 est mmoris sous la forme 3.3333333333E-01 (quil faut
comprendre 3, 3333333333.10-1)
Remarques :
(1) Nous ne sommes pas obligs dadopter cette criture dans la conception de nos
programmes. A condition dutiliser le point la place de la virgule et la lettre E pour
lexposant.

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

(2) Les oprateurs arithmtiques quon peut appliquer sur une variable de type rel sont :
laddition (+), la soustraction (-), la multiplication (*), la division (/) et le changement de
signe (-).
(3) Les oprateurs relationnels sont : <, >, , , =, (En pascal : <, >, <=, >=, <>, =)
(4) Dclaration en pascal : Var nom de la variable : real ;$
Activit : soient les dclarations suivantes :
Const max = 1000 ;
Var x, y : real ;
A, B, C : integer ;
Complter le tableau ci-dessous, dans le cas dinvalidit, donner une justification.
Expression
C := A mod B

Valide ?

Rsultat/Justification

C :=(990 - max) div A


C :=A mod y
X := A / B
X := A mod (A / B)
C := (max 990) div A
C := A mod 0
X := A div B

III.2. Le type boolen :


1. Prsentation :

Une variable dclare sous le type boolen est dite boolenne . Elle ne peut prendre que
deux valeurs possibles : vrai (true) ou faux (false).
Les oprateurs possibles applicables sur les variables boolennes sont :
La ngation NON (NOT)
La conjonction ET (AND)
La disjonction OU (OR)
Le OU exclusif OUex (XOR)
Activit :
Soient P et Q deux variables boolennes, complter les tableaux de vrit suivants :
P
Vrai
Faux
Lyce Secondaire Errafha Mnihla

NON (P)

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

Vrai

Vrai
Fau
x
Fau
x

Vrai
Fau
x
Fau
x

NON (P)

NON (Q)

P ET Q

P OU Q

P OUex Q

Vrai

Remarques :
(1) Classement des oprateurs selon lordre de priorit dcroissante :
NOT
*, /, div, mod, AND
+, -, OR
<, <= , =, <>, >=, >
(2) Les oprateurs se trouvant entre parenthses sont prioritaires
2. Dclaration en algorithme et en pascal:
Objet
Nom de la variable

Type/Nature
Boolen

Rle
Rle de la variable

Type/Nature
Boolen

Rle
---

Var nom de la variable : boolean ;


Exemple :
Objet
OK
Var OK : boolean ;

III.3. Le type caractre :


1. Prsentation :
Une variable de type caractre a comme valeur un des 256 caractres connus : lettres
minuscules, lettres majuscules, lettres accentues, chiffres, caractres spciaux ($, %, ).
La valeur dune variable de type caractre est donne par le caractre lui mme encadr par
deux guillemets en algorithme et par deux apostrophes en pascal.
Exemples :
"A", 'a', '2', "",

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

Remarques :
(1) Chaque caractre possde un code appel : Code ASCII (American Standard Code for
Information Interchange)
(2) Le caractre "" est un caractre (caractre vide)
(3) Une variable de type caractre ne peut contenir quun seul caractre
(4) Les caractres sont classs selon leurs codes ASCII. ("A"<"B"<"C"<"D"<"E"<<"Z")
(5) Exemple : Code ("A") = 65, Code ("a") =97
(6) Les oprateurs relationnels sur les caractres sont : <, >, , , =,
2. Dclaration en algorithme et en pascal :
Objet
Nom de la variable

Type/Nature
Caractre

Rle
Rle de la variable

Type/Nature
Caractre

Rle
---

Var nom de la variable : char ;


Exemple :
Objet
C
Var

C : char ;

3. Les fonctions prdfinies sur les caractres : (activit)

III.4. Le type chane de caractres :


1. Prsentation :

Une chane de caractres est une suite de n caractres (0 n 255).


Si n = 0 alors la chane est dite vide.
Exemple : "informatique", "programme", sont des chanes de caractres.
Remarques :
(1) Le caractre de position i dans une chane de caractre ch est not, en algorithme et en
pascal, par ch [i]
(2) Exemple : si ch = "informatique" alors ch [1] = "i" ; ch [3] = "f" ;
2. Dclaration en algorithme et en pascal :
Objet
Nom de la variable

Type/Nature
Chane de caractres

Rle
Rle de la variable

Var nom de la variable : String ;

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

Exemple :
Objet
CH

Type/Nature
Chane de caractres

Rle
---

En pascal :
Var

CH : String ;

Remarques :
(1) Si on dclare une variable de type chane de caractres de la manire suivante :
Var CH : String ; Le compilateur rserve 256 octets dans la RAM pour stocker les caractres
de la chane CH mme si la chane contient un nombre de caractres infrieur 256.
(2) Au moment de la dclaration dune chane CH, on peut fixer le nombre maximal des
caractres qui constituent la chane CH de la manire suivante :
Objet
Nom de la variable

Type/Nature
Chane de n caractres

Rle
Rle de la variable

Var nom de la variable : String [nombre de caractres] ;


Exemple :
Objet
CH
Var

Type/Nature
Chane de 30 caractres

Rle
---

CH : String [30] ;

3. Les fonctions prdfinies sur les chanes : voir page 26


4. Les procdures prdfinies sur les chanes : voir page 26
Application :
Donner le rsultat dexcution des instructions suivantes.
Instructions

Rsultats

A "L" + "informatique"

A=

B " un " + CHR (ORD ("a") + 4)

B=

C CONCAT ("esti", "mation")

C=

D SOUS-CHAINE ("gourmande", 5,5)

D=

EFFACE (B, POS ("e", B), 1)

B=

E CONCAT (" ", SOUS-CHAINE (C, 1, 3))

E=

D[2] "o"

D=

B CONCAT (B, " ", D, " ", SOUS-CHAINE (D, 4, 2), " ")

B=

A CONCAT (A, E, " ", B, A [5] +A [3], "c", SOUS-CHAINE (C, 7,4))

A=

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

III.5. Les types numrs


1. Prsentation :

Un type numr permet de reprsenter des valeurs en les numrant laide de leurs noms.
Une variable de type numr ne peut stocker quune seule valeur possible parmi une liste
finie de valeurs (au maximum 256).
Exemple :
Couleur = (Rouge, Bleu, Vert)
Saison = (Automne, Hiver, Printemps)
2. dclaration en algorithme et en pascal :
Objet
Nom de la variable
En pascal :

Type/Nature
Liste des valeurs

Rle
Rle de la variable

Type Nom_du_type = (valeur1, valeur2, ) ;


Var nom de la variable : Nom_du_type ;
Exemple :
Objet
Col
saison

Type/Nature
Rouge, Bleu, Vert
Automne, Hiver, Printemps, Ete

Rle
---

Type Couleur = (Rouge, Bleu, Vert) ;


Saison = (Automne, Hiver, Printemps, Ete) ;
Var Col : Couleur ;
S : Saison ;
Remarques :
(1) Les valeurs dun type numr sont ordonnes selon leur ordre de dclaration. Chaque
valeur numr correspond un numro (0, 1, 2, ).
(2) Exemple : Rouge porte le numro 0, Bleu a le numro 1 et Vert a le numro 2.
(3) Les oprateurs relationnels sur le type numr sont : <, >, , , =,
(4) Une valeur dun type numr ne peut pas paratre dans plus quune dclaration de type
numre. Exemple : type jours = (Lundi, mardi, mercredi, jeudi) ;
Joursf = (Lundi, dimanche) ;
Cette criture est invalide, car la valeur Lundi apparat dans les deux dclarations.
(5) On ne peut pas comparer deux valeurs appartenant deux types numrs diffrents.
Exemple : on peut crire Rouge < Bleu mais non Dimanche > Rouge
(6) Les fonctions prdfinies :

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

10

Exemples :
Soient les dclarations pascal suivantes :
Type jour = (lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche) ;
Var jour_courant, demain : jour ;
On peut utiliser les fonctions prdfinies suivantes :
Jour_courant :=mercredi ;
Ord (jour_courant) = 3
Ord (demain) = 4
Succ (jour_courant) = jeudi
Pred (jour_courant) = mardi
Jour_courant := dimanche ;
Succ (jour_courant) est non dfinit / Dduire alors le rle de chaque fonction.
(7) On ne peut ni lire, ni crire une variable de type numr. Pour lafficher, on peut utiliser
une instruction case par exemple.

III.6. Les types utilisateurs (intervalles)


1. Dclaration en algorithme et en pascal :

Un type utilisateur est type dfinit par le programmeur lui-mme.


Type
Nom du type = borne_inf ..borne_sup
Objet
Nom de la variable

Type/Nature
Nom du type

Rle
Rle de la variable

Type nom du type = borne_inf .. borne_sup ;


Var nom de la variable : nom du type ;
Exemples :
Type
Notes_possibles = 0 .. 20
Objet

Type/Nature

Rle

Note

Notes_possibles

---

Type notes_possibles = 0..20 ;


Var note : notes_possibles ;

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

11

III.7. Les tableaux

1. Les tableaux une dimension :


a) Dfinition :
Un tableau unidimensionnel (ou vecteur) est une structure de donnes permettant de ranger
(regrouper) un nombre fini dlments de mme type.
Un vecteur est caractris par :
Son nom (un identificateur unique. Exemple : T, V, U, )
Sa taille (nombre dlments. Exemple : 20, 30, 100, )
Son type (le type des lments quil contient. Exemple : entier, rel, caractres, )
b) Dclaration en algorithme et en pascal (premire formulation) :
Objet
Nom du tableau

Type/Nature
Tableau de taille de type

Rle
Rle du tableau

Var nom du tableau : array [indmin .. indsup] of type ;

Exemple :
Objet

Type/Nature

Moyenne

Tableau de 30 rels

Rle
Pour stocker les moyennes
des lves

Var Moyenne: array [1..30] of real ;


c) Dclaration (deuxime formulation) :
Type
Nom du type = tableau de taille et de type
Objet
Nom de la variable

Type/Nature
Nom du type

Rle
Rle de la variable

Type nom du type = array [indmin .. indsup] of type ;


Var nom de la variable : nom du type ;
Exemple :
Type
Tab = tableau de 20 entiers
Objet
T

Lyce Secondaire Errafha Mnihla

Type/Nature
Tab

Rle
---

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

12

Type Tab = array [1.. 20] of integer ;


Var T: Tab;
2. Les tableaux deux dimensions (les matrices) :
a) Prsentation :
Un tableau deux dimensions peut tre simul une grille de n lignes et de m colonnes.
Les lments stocks dans ce type de tableau sont de mme type.
b) Dclaration en algorithme et en pascal (premire formulation) :
Objet
Nom du tableau

Type/Nature
Tableau de taille de type

Rle
Rle du tableau

Var nom du tableau : array [indmin1 .. indsup1 , indmin2..insup2] of type ;


c) Dclaration (deuxime formulation) :
Type
Nom du type = tableau de taille et de type
Objet
Nom de la variable

Type/Nature
Nom du type

Rle
Rle de la variable

Type nom du type = array [indmin1 .. indsup1 , indmin2..indup2] of type ;


Var nom de la variable : nom du type ;
Exemple:
Type jeu = array [1..8 , 1..8] of integer ;
Matrice = array [1..3 , 1..3] of real;
Var

echec: jeu;
M: matrice;

Remarques :
(1) Un lment du tableau est repr par le numro de la ligne et le numro de la colonne.
Exemple : M [i, j] avec i et j compris entre 1 et 3.
(2) Sur les lments dun tableau, on peut effectuer les mmes oprations et excuter les
mmes instructions que sur nimporte quelle variable du mme type :
Lire : Ecrire ("entrer coordonnes"), Lire (M [1,1])
Ecrire : Ecrire (M [1,3])
Affecter : M [1,2] 1.6
Effectuer un calcul : trace M [1,1] +M [2,2] + M [3,3]
Comparer : Si M [1,3] = M [2,3] Alors
Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

13

(3) Si T et U sont deux tableaux de mme type alors linstruction T U transfre en bloc
tout le tableau U dans le tableau T. Cette opration est appele affectation de transfert
(4) Les lments dun tableau nont pas de valeurs par dfaut. Il faut penser les initialiser
avant de les utiliser.
(5) En dehors de laffectation de transfert, aucune instruction nest utilisable pour un tableau
en bloc. Ainsi linitialisation dun tableau T 0 ne peut pas se faire par linstruction T
0. De mme, on ne peut pas utiliser les instructions crire et lire pour afficher ou lire un
tableau T en entier.
(6) Laffichage ou la lecture des lments dun tableau se fait un par un.

B. Les structures simples


I. Introduction
Activit :
Soit lalgorithme suivant :
0) Dbut exercice
1) Ecrire ("entrer un entier : "), Lire (x)
2) Ecrire ("entrer un autre entier :"), Lire (y)
3) M (x + y) / 2
4) Ecrire ("la moyenne de ", x, " et ", y, " est : ", M)
5) Fin exercice
Questions :
1) Quelles sont les structures de donnes utilises ?
2) Quelles sont les actions utilises pour : faire entrer les deux entiers, pour calculer M et
pour afficher le rsultat ?
3) Quappelle-t-on alors une structure simple ?
Dfinition :
Une structure simple peut tre soit :
Une instruction de lecture (entre, saisie) de donnes
Une instruction dcriture (sortie, affichage) de rsultat
Une affectation (modification du contenu dune variable)

II. Lopration dentre (Lecture/Read)


1. Prsentation
Linstruction qui permet lutilisateur dentrer (lire ou saisir) des valeurs au clavier (entre
standard) (ou autre source dentre) sappelle opration de lecture (ou dentre).

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

14

La valeur lue sera affecte (recopie) (dune manire interne) la case mmoire de la
variable : cest une affectation implicite (indirecte).
2. Syntaxe en analyse, en algorithme et en pascal :
Syntaxe en analyse

Syntaxe en algorithme

Syntaxe en pascal

Variable = donne

Lire (Variable)

Read (variable) ;

Remarques :
(1) Ds que le compilateur rencontre une instruction de lecture, lexcution sarrte en
attendant que lutilisateur saisisse une valeur pour la variable puis il valide la saisie par la
touche Entre. Aprs la validation, le compilateur passe linstruction suivante.
(2) On peut regrouper plusieurs variables dans la mme instruction, dans ce cas la lecture se
fait variable par variable. Les valeurs entres seront affectes aux variables successives.
Exemple : Lire (var1, var2, , var n)
(3) La procdure ReadLn effectue, aprs la lecture des donnes, un passage la ligne.
Exemple : Readln (x, y, z) ;
(4) Par souci de clart nous ferons toujours prcder les lectures de donnes par un message
qui demande lutilisateur quil doit entrer.
Exemple : note = donne <==> Ecrire ("entrer une note :"), Lire (note)
(5) En pascal, les instructions successives sont spares par des points virgules.
(6) Le point virgule : pour ne pas se tromper, il suffit de se souvenir que le point virgule ne
dsigne pas la fin dune ligne ou dune instruction mais quil spare deux instructions
successives.

III. Lopration de sortie (Ecriture/Write)


1. Prsentation
Linstruction qui permet dafficher (dcrire ou de sortir) des rsultats (texte ou des valeurs)
lcran (sortie standard) (ou autre priphrique de sortie) sappelle opration de sortie.
2. Syntaxe en algorithme et en pascal :
Afficher ?
Texte
Contenu dune variable
Texte + Contenue de variable

Lyce Secondaire Errafha Mnihla

Syntaxe en algorithme
Ecrire ("Texte")
Ecrire (variable)
Ecrire ("Texte", variable)

Syntaxe en pascal
Write (Texte) ;
Write (variable) ;
Write (Texte, variable);

Prof : Mahmoud Ezzeddine

Chapitre N1 : Structures de donnes & Structures simples

15

Remarques :
(1) On peut afficher le rsultat dune expression par : Ecrire (expression).
Exemples : Ecrire (x/2-1), Ecrire (X>Y),
(2) Afficher un mlange : Ecrire (a, "+", b, "+", c, "=", m)
(3) La procdure WriteLn permet deffectuer un retour la ligne aprs laffichage dun
rsultat.
(4) Les procdures write et writeln permettent des effets de mise en page : il suffit de faire
suivre le nombre ou la variable afficher dindications de mise en page. Ces indications
scrivent :
Write (variable : champ : nombre des dcimaux) ;
O champ = espace rserv pour laffichage des chiffres, virgule comprise
Exemple :
Si x est une variable relle ayant pour valeur 10-6, linstruction write (x : 8 : 6) affichera
0.000001 (essayer avec dautres valeurs sur machine pour voir la diffrence)

IV. Lopration daffectation


1. Dfinition
Laffectation est linstruction qui permet dattribuer (affecter) une valeur une variable ou de
modifier la valeur quelle a dj. Sa syntaxe est :
Syntaxe en algorithme
Variable expression
Remarques :

Syntaxe en pascal
Variable := expression

(1) Expression : est une expression arithmtique dont la valeur sera affecte la variable.
(2) Il doit y avoir une comptabilit entre le type de la variable et celui de lexpression.
(3) Exemples :
Exemples

Commentaires

Note 12

Affecte Note la valeur 12

XY

Affecte X la valeur de la variable Y

X 3*Y+1

Calcule la valeur de 3*Y+1 et lattribue X

Z exp (y-1)

Calcule la valeur y-1 puis son exponentielle et


attribue sa valeur Z

K K+1

Ajoute 1 la valeur de K (incrmentation)

K K-1

Diminuer la valeur de K de 1 (dcrmentation)

Lyce Secondaire Errafha Mnihla

Prof : Mahmoud Ezzeddine

You might also like