Tableau et enregistrement en Pascal
et Premi`
ere version du jeu du puissance 4
I3 - Algorithmique et programmation
as
Architecture des Systèmes d’Information
Plan
1
Tableau
Tableau `
a une dimension
Tableau `
a n dimensions
2
Enregistrement (structure)
Instruction with. . .do
3
Puissance 4
Cahier des charges
R`
egles du jeu
Analyse
Conception pr´
eliminaire
Conception d´
etaill´
ee
D´
eveloppement
4
Conclusion
Tableau
Les tableaux en Pascal sont statiques
La taille des tableaux est fix´
ee `
a la compilation
La taille des tableaux est d´
etermin´
ee en sp´
ecifiant un intervalle
Par d´
efaut, l’utilisation d’un indice de tableau en dehors de cet
intervalle n’est pas v´
erifi´
e :
cela peut provoquer un Runtime error si la zone m´
emoire n’appartient
pas au processus (non compatible avec le concept de tests unitaires)
le mieux est d’ajouter une directive de compilation
({$RANGECHECKS ON}) qui va ajouter du code automatiquement
pour v´
erifier que l’indice est entre les bornes de d´
efinition
On utilise rarement directement les types tableaux :
Le Pascal
n’accepte pas
directement des param`
etres de type
tableau, mais il accepte des param`
etres dont le type est bas´
e sur le
type tableau
as
Architecture des Systèmes d’Information
Tableau `
a une dimension
1 / 3
D´
efinition/D´
eclaration
a r r a y [ i n d i c e D e b u t .. i n d i c e F i n ] o f T y p e D e s E l e m e n t s
avec :
indiceDebut et indiceFin sont des constantes de type scalaire
Exemple
c o n s t
MAX
= 1 0 0 ;
P R E M I E R E _ L E T T R E = ’ a ’ ;
D E R N I E R E _ L E T T R E = ’ z ’ ;
t y p e
L e t t r e
= P R E M I E R E _ L E T T R E .. D E R N I E R E _ L E T T R E ;
E n t i e r s
=
a r r a y [1.. MAX ] o f
I n t e g e r ;
N b O c c u r e n c e s =
a r r a y [ Lettre ] o f
I n t e g e r ;
Tableau `
a une dimension
2 / 3
Utilisation
On utilise une case du tableau en sp´
ecifiant l’indice de cette case
entre crochet
Exemple
p r o c e d u r e i n i t i a l i s e r E n t i e r s ( v a r t : E n t i e r s ;
val : I n t e g e r ) ;
v a r i :
I n t e g e r ;
b e g i n
f o r i :=1 t o MAX do
t [ i ]:= val
end ;
as
Architecture des Systèmes d’Information
Tableau `
a une dimension
3 / 3
Affectation
On peut affecter le contenu d’un tableau dans un autre tableau s’ils
sont de mˆ
eme type
Exemple
f u n c t i o n
c o m p t e r O c c u r e n c e s ( c h a i n e D e L e t t r e s M i n u s c u l e s : S t r i n g ) :
N b O c c u r e n c e s ;
v a r i
:
I n t e g e r ;
r e s u l t a t
: N b O c c u r e n c e s ;
u n e L e t t r e : L e t t r e ;
b e g i n
i n i t i a l i s e r N b O c c u r r e n c e s ( r e s u l t a t ) ;
f o r i :=1 t o length ( c h a i n e D e L e t t r e s M i n u s c u l e s ) do
b e g i n
u n e L e t t r e := c h a i n e D e L e t t r e s M i n u s c u l e s [ i ];
r e s u l t a t [ u n e L e t t r e ]:= r e s u l t a t [ u n e L e t t r e ] + 1 ;
end ;
c o m p t e r O c c u r e n c e s := r e s u l t a t
end ;
Tableau `
a 2 dimensions
D´
efinition/D´
eclaration
Il y a deux fa¸cons de d´
eclarer des tableaux `
a deux dimensions :
1
en consid´
erant que l’on a un tableau de tableau
a r r a y [ i n d i c e D e b u t 1 .. i n d i c e F i n 1 ] o f
a r r a y [ i n d i c e D e b u t 2 ..
i n d i c e F i n 2 ]
o f T y p e D e s E l e m e n t s
2
en sp´
ecifiant directement deux intervalles s´
epar´
es par une , :
a r r a y [ i n d i c e D e b u t 1 .. indiceFin1 , i n d i c e D e b u t 2 .. i n d i c e F i n 2 ]
o f T y p e D e s E l e m e n t s
Utilisation
On utilise une case du tableau en sp´
ecifiant entre crochet les deux
indices de cette case s´
epar´
es par un ,
as
Architecture des Systèmes d’Information
Tableau `
a n dimensions
1 / 2
Extension
Par extension on peut d´
efinir et utiliser des tableaux `
a n dimensions
Exemple `
a 3 dimensions
c o n s t
L A R G E U R
= 4;
H A U T E U R
= 4;
P R O F O N D E U R = 4;
t y p e
C o n t e n u = ( Vide , P i o n B l a n c , P i o n N o i r ) ;
P l a t e a u =
a r r a y [1.. LARGEUR ,
1.. P R O F O N D E U R ,
1.. H A U T E U R ] o f
C o n t e n u ;
Tableau `
a n dimensions
2 / 2
Utilisation
p r o c e d u r e i n t i a l i s e r P l a t e a u ( v a r p : P l a t e a u ) ;
v a r i ,j , k :
I n t e g e r ;
b e g i n
f o r i :=1 t o L A R G E U R do
f o r j :=1 t o P R O F O N D E U R do
f o r k :=1 t o H A U T E U R do
p [ i , j , k ]:= V i d e
end ;
as
Architecture des Systèmes d’Information
Enregistrement
1 / 4
Les enregistrements (record) Pascal correspondent aux structures en
algorithmique
D´
efinition/D´
eclaration
Tout comme pour les
tableaux, on utilise rarement
des variable de type
enregistrement, on d´
efinit
plutˆ
ot des types
Syntaxe :
r e c o r d
c h a m p 1 : T y p e 1
c h a m p 2 : T y p e 2
...
end ;
Exemple
t y p e
T C o m p l e x e = r e c o r d
re : R e a l ;
im : R e a l ;
end ;
Enregistrement
2 / 4
Utilisation
On acc`
ede au champ c d’une variable v de type enregistrement en
faisant suivre la variable v d’un . puis du champ c (v .c)
si le champ c est aussi de type enregistrement, on peut acc´
eder `
a ses
champs (par exemple c1) depuis v suivant le mˆ
eme principe (v .c.c1)
Exemple
f u n c t i o n
c r e e r C o m p l e x e ( p a r t i e R e e l , p a r t i e I m a g i n a i r e : R e a l ) :
T C o m p l e x e ;
v a r r e s u l t a t :
T C o m p l e x e ;
b e g i n
r e s u l t a t . re := p a r t i e R e e l ;
r e s u l t a t . im := p a r t i e I m a g i n a i r e ;
c r e e r C o m p l e x e := r e s u l t a t
end ; { c r e e r C o m p l e x e }
as
Architecture des Systèmes d’Information
Enregistrement
3 / 4
Encapsulation
Afin d’ˆ
etre facilement r´
eutilisable, les utilisateurs ne doivent pas
acc´
eder directement aux champs de l’enregistrement
Exemple
f u n c t i o n
p a r t i e R e e l l e ( c : T C o m p l e x e ) : R e a l ;
b e g i n
p a r t i e R e e l l e := c . re
end ; { p a r t i e R e e l l e }
f u n c t i o n
p a r t i e I m a g i n a i r e ( c : T C o m p l e x e ) : R e a l ;
b e g i n
p a r t i e I m a g i n a i r e := c . im
end ; { p a r t i e I m a g i n a i r e }
Enregistrement
4 / 4
Enregistrement vers chaˆıne de caract`
eres
Comme pour les tableaux, on ne peut pas afficher directement un
enregistrement
On utilise souvent une fonction qui cr´
e´
e une chaˆıne de caract`
eres `
a
partir de l’enregistrement
Exemple
f u n c t i o n
c o m p l e x e E n C h a i n e ( c : T C o m p l e x e ) : S t r i n g ;
v a r re , im :
S t r i n g ;
b e g i n
str ( p a r t i e R e e l l e ( c ) , re ) ;
str ( p a r t i e I m a g i n a i r e ( c ) , im ) ;
c o m p l e x e E n C h a i n e := re + ’ + ’ + im + ’ i ’
end ; { c o m p l e x e E n C h a i n e }
as
Architecture des Systèmes d’Information
with . . .do
L’instruction with permet d’omettre le nom de la variable de type
enregistrement, et donc acc´
eder localement directement `
a ses
champs
Exemple
f u n c t i o n
c r e e r C o m p l e x e ( p a r t i e R e e l l e , p a r t i e I m a g i n a i r e : R e a l ) :
T C o m p l e x e ;
v a r r e s u l t a t :
T C o m p l e x e ;
b e g i n
w i t h r e s u l t a t do
b e g i n
re := p a r t i e R e e l l e ;
im := p a r t i e I m a g i n a i r e ;
end ;
c r e e r C o m p l e x e := r e s u l t a t
end ; { c r e e r C o m p l e x e }
Cahier des charges
D´
evelopper un programme permettant `
a deux joueurs
humains de jouer au jeu du puissance 4. L’interface homme
machine sera en mode texte.
Exemple d’interface homme machine (IHM)
$ ./puissance4Txt | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ---1 2 3 4 5 6 7 Au joueur qui a les * de jouer :4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |*| | | | ---1 2 3 4 5 6 7 Au joueur qui a les + de jouer :3 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |+|*| | | | ---1 2 3 4 5 6 7 Au joueur qui a les * de jouer :5as
Architecture des Systèmes d’Information
Puissance 4
Puissance 4 est un jeu de soci´
et´
e combinatoire abstrait au tour
par tour, ´
edit´
e pour la premi`
ere fois en 1974 par MB (d´
etenu de
nos jours par Hasbro) et qui se joue `
a 2.
Le but est de faire une ligne de 4 pions sur une grille comptant 6
rang´
ees et 7 colonnes, les parties durant en g´
en´
eral une dizaine de
minutes.
Chaque joueur dispose de 21 pions d’une couleur (jaune ou rouge).
Tour `
a tour les joueurs posent un pion dans une colonne, le pion
coulisse jusqu’`
a sa position la plus basse dans la colonne, et c’est
`
a l’autre joueur de jouer.
Le vainqueur est le premier joueur qui aligne quatre pions de sa
couleur verticalement, horizontale ou diagonalement.
(Wikipe-dia)
M´
ethodologie
´
Etapes du projet
1
Analyse :
Identifier les types de donn´
ees propres au projet ainsi que les
op´
erations pour les utiliser
Faire une analyse descendante de la r´
esolution du probl`
eme
(faireUnePartie)
2
Conception pr´
eliminaire : donner les signatures des fonctions et
proc´
edures :
des op´
erations des types du projet
des op´
erations de l’analyse descendante
3
Conception d´
etaill´
ee :
Expliciter la conception des types de donn´
ees
Expliciter les algorithmes des fonctions et proc´
edures de la CP
as
Architecture des Systèmes d’Information
Les types de donn´
ees et leurs op´
erations
1 / 2
L’analyse du sujet fait apparaˆıtre les types de donn´
ees suivants :
Pion qui est jaune ou rouge
Contenu d’une case d’un plateau qui est soit vide soit remplie par un
pion
Plateau qui est un ensemble de case organis´
e en colonnes (type
Colonne) et lignes (type Ligne)
EtatPartie l’´
etat finale de la partie (partie gagn´
ee ou partie nulle)
Op´
eration de Pion
obtenir l’autre joueur (autreJoueur)
Entr´
ee : Pion
Sortie : Pion
Les types de donn´
ees et leurs op´
erations
2 / 2
Op´
erations de Plateau
vider le plateau (vider)
Entr´
ee : Plateau
Sortie : Plateau
obtenir le contenu d’une case (contenuCase)
Entr´
ee : Plateau, Colonne, Ligne
Sortie : Contenu
obtenir la hauteur d’une colonne (hauteurColonne)
Entr´
ee : Plateau, Colonne
Sortie : Naturel
jouer un pion dans une colonne (jouer)
Entr´
ee : Plateau, Colonne, Pion
Sortie : Plateau
savoir si on peut jouer dans une colonne : colonne totalement
rempli ? (peutJouer)
as
Architecture des Systèmes d’Information
Analyse descendante
1 / 3
faire une partie
faireUnePartie EtatPartie Pion viderPlateau Plateau Plateau afficherPlateau Plateau obtenirCoup Plateau Pion Colonne coupGagnant Plateau Colonne Booléen plateauTota-lementRempli Plateau Booléen > jouer Plateau Colonne Pion Plateau
Analyse descendante
2 / 3
coup gagnant
coupGagnant Plateau Colonne Booléen nbPionsAlignes Verticalement Plateau Colonne Ligne Naturel nbPionsAlignes Horizontalement Plateau Colonne Ligne Naturel nbPionsAlignes Dialgonalement Plateau Colonne Ligne Naturel hauteurColonne Plateau Colonne 0..NB_LIGNES nbPionsAlignes Dialgonalement GaucheADroite Plateau Colonne Ligne Naturel nbPionsAlignes Dialgonalement DroiteAGauche Plateau Colonne Ligne Naturelas
Architecture des Systèmes d’Information
Analyse descendante
3 / 3
totalementRempli
plateauTotalement Rempli Booléen hauteurColonne Plateau Colonne 0..NB_LIGNES PlateauConception pr´
eliminaire
1 / 2
Op´
erations de Pion
fonction autreJoueur (unJoueur : Pion) : Pion
Op´
erations de Plateau
proc´
edure vider (S unPlateau : Plateau)
fonction contenuCase (unPlateau : Plateau, col : Colonne, lig : Ligne) : Contenu
fonction hauteurColonne (unPlateau : Plateau, col : Colonne) : 0..NB LIGNES
proc´
edure jouer (E/S unPlateau : Plateau,E col : Colonne, unPion : Pion)
fonction peutJouer (unPlateau : Plateau, col : Colonne) : Booleen
as
Architecture des Systèmes d’Information
Conception pr´
eliminaire
2 / 2
Op´
erations pour jouer au puissance 4
proc´
edure faireUnePartie (E afficher : AfficherPlateau , obtenirCoupJaune,
obtenirCoupRouge : ObtenirCoup,S etatPartie : EtatPartie, quiAGagne : Pion)
fonction coupGagnant (unPlateau : Plateau, col : Colonne) : Booleen
fonction plateauTotalementRempli (unPlateau : Plateau) : Booleen
fonction nbPionsAlignesVerticalement (unPlateau : Plateau, col : Colonne, lig : Ligne) :
Naturel
bpr´
econdition(s)
0 < lig et lig ≤ hauteurColonne(unPlateau, col )
fonction nbPionsAlignesHorizontalement (unPlateau : Plateau, col : Colonne, lig : Ligne) :
Naturel
bpr´
econdition(s)
0 < lig et lig ≤ hauteurColonne(unPlateau, col )
fonction nbPionsAlignesDiagionalement (unPlateau : Plateau, col : Colonne, lig : Ligne) :
Naturel
bpr´
econdition(s)
0 < lig et lig ≤ hauteurColonne(unPlateau, col )
fonction nbPionsAlignesDiagionalementDroiteAGauche (unPlateau : Plateau, col : Colonne,
lig : Ligne) : Naturel
bpr´
econdition(s)
0 < lig et lig ≤ hauteurColonne(unPlateau, col )
fonction nbPionsAlignesDiagionalementGaucheADroite (unPlateau : Plateau, col : Colonne,
lig : Ligne) : Naturel
Conception d´
etaill´
ee - Constantes et Types
Constantes
Constante NB COLONNES = 7
Constante NB LIGNES = 6
Constante NB PIONS ALIGNES POUR GAGNER = 4
Types
Type EtatPartie = {partieGagnee, partieNulle}
Type Contenu = {vide,pionJaune,pionRouge}
Type Pion = pionJaune..pionRouge
Type Colonne = 1..NB COLONNES
Type Ligne = 1..NB LIGNES
Type Plateau = Structure
contenu : Tableau[1..NB COLONNES][1..NB LIGNES] de Contenu
hauteurColonne : Tableau[1..NB COLONNES] de Naturel
as
Architecture des Systèmes d’Information
Conception d´
etaill´
ee - Op´
erations sur les types
Op´
erations du type Plateau
proc´
edure vider (S lePlateau : Plateau)
D´
eclaration
i : Colonne
j : Ligne
debut
pour i ←1 `
a NB COLONNES faire
lePlateau.hauteurColonne[i] ← 0
pour j ←1 `
a NB LIGNES faire
lePlateau.contenu[i][j] ← vide
finpour
finpour
fin
Exercices
Donnez les algorithmes des fonctions et proc´
edures : contenuCase,
hauteurColonne, jouer, peutJouer
Conception d´
etaill´
ee - Puissance 4
1 / 3
faireUnePartie
proc´
edure faireUnePartie (S etatPartie : EtatPartie, quiAGagne : Pion)
D´
eclaration
lePlateau : Plateau, joueurCourant : Pion, coup : Colonne
debut
vider(lePlateau)
joueurCourant ← pionJaune
afficher(lePlateau)
repeter
coup ← obtenirCoup(lePlateau,joueurCourant)
jouer(lePlateau,coup,joueurCourant)
afficher(lePlateau)
joueurCourant ← autreJoueur(joueurCourant)
jusqu’a ce que coupGagnant(lePlateau,coup) ou totalementRempli(lePlateau)
si coupGagnant(lePlateau,coup) alors
etatPartie ← partieGagnee
quiAGagne ← autreJoueur(joueurCourant)
sinon
etatPartie ← partieNulle
finsi
as
Architecture des Systèmes d’Information
Conception d´
etaill´
ee - Puissance 4
2 / 3
totalementRempli
fonction plateauTotalementRempli (unPlateau : Plateau) : Booleen
D´
eclaration
resultat : Booleen, i : Colonne
debut
i ← 1
resultat ← Vrai
tant que resultat et i≤NB COLONNES faire
resultat ← hauteurColonne(unPlateau,i)=NB LIGNES
i ← i+1
fintantque
retourner resultat
fin
Conception d´
etaill´
ee - Puissance 4
3 / 3
coupGagnant
fonction coupGagnant (unPlateau : Plateau, col : Colonne) : Booleen
debut
retourner nbPionsAlignesVerticalement(unPlateau,col,hauteurColonne(unPlateau,col))
≥NB PIONS ALIGNES POUR GAGNER
ou nbPionsAlignesHorizontalement(unPlateau,col,hauteurColonne(unPlateau,col))
≥NB PIONS ALIGNES POUR GAGNER
ou nbPionsAlignesDiagionalement(unPlateau,col,hauteurColonne(unPlateau,col))
≥NB PIONS ALIGNES POUR GAGNER
as
Architecture des Systèmes d’Information
D´
eveloppement en Pascal
1 / 9
Renomage des types
Pr´
efixer chaque type par un T
Organisation du programme
D´
eclarer les constantes et types
D´
eclarer les fonctions et proc´
edures (utilisation du mot cl´
e forward)
pour ´
eviter les utilisations avant les d´
eclarations
D´
efinir les fonctions et proc´
edures
M´
ethodologie de d´
eveloppement
Commencer par coder les op´
erations de bases des types, puis les
op´
erations de l’analyse descendante (du bas vers le haut)
Apr`
es chaque codage d’une fonction ou proc´
edure, on compile
D´
eveloppement en Pascal
2 / 9
D´
eclaration des types et constantes
1 program P u i s s a n c e 4 T x t ; 2 3 c o n s t 4 N B _ L I G N E S = 6; 5 N B _ C O L O N N E S = 7; 6 N B _ P I O N S _ A L I G N E S _ P O U R _ G A G N E R = 4; 7 8 t y p e 9 T C o n t e n u = ( vide , p i o n J a u n e , p i o n R o u g e ) ; 10 T P i o n = p i o n J a u n e .. p i o n R o u g e ; 11 T C o l o n n e = 1.. N B _ C O L O N N E S ; 12 T L i g n e = 1.. N B _ L I G N E S ; 13 T P l a t e a u = r e c o r d 14 c o n t e n u : a r r a y [1.. NB_COLONNES ,1.. N B _ L I G N E S ] o f T C o n t e n u ; 15 h a u t e u r C o l o n n e : a r r a y [1.. N B _ C O L O N N E S ] o f I n t e g e r ; 16 end ; 17 T E t a t P a r t i e = ( p a r t i e _ g a g n e e , p a r t i e _ n u l l e ) ; 18 19 20 f u n c t i o n o b t e n i r C o u p H u m a i n ( l e P l a t e a u : T P l a t e a u ; j o u e u r : T P i o n ) : T C o l o n n e ; f o r w a r d ; 21 p r o c e d u r e a f f i c h e r ( l e P l a t e a u : T P l a t e a u ) ; f o r w a r d ;
as
Architecture des Systèmes d’Information
D´
eveloppement en Pascal
3 / 9
D´
eclaration des fonctions et proc´
edures
25 f u n c t i o n a u t r e J o u e u r ( j o u e u r : T P i o n ) : T P i o n ; 26 b e g i n 27 c a s e joueur o f 28 p i o n J a u n e : a u t r e J o u e u r := p i o n R o u g e ; 29 p i o n R o u g e : a u t r e J o u e u r := p i o n J a u n e ; 30 end { case } 31 end ; 32 33 p r o c e d u r e vider ( v a r l e P l a t e a u : T P l a t e a u ) ; 34 v a r 35 i : T C o l o n n e ; 36 j : T L i g n e ; 37 b e g i n 38 f o r i :=1 t o N B _ C O L O N N E S do 39 b e g i n 40 l e P l a t e a u . h a u t e u r C o l o n n e [ i ] : = 0 ; 41 f o r j :=1 t o N B _ L I G N E S do 42 l e P l a t e a u . c o n t e n u [ i , j ]:= v i d e ; 43 end 44 end ; { v i d e r } 45 46 f u n c t i o n c o n t e n u C a s e ( l e P l a t e a u : T P l a t e a u ; c o l o n n e : T C o l o n n e ; l i g n e : T C o l o n n e ) : T C o n t e n u ; 47 b e g i n 48 c o n t e n u C a s e := l e P l a t e a u . c o n t e n u [ colonne , l i g n e ] 49 end ; { c o n t e n u C a s e }
D´
eveloppement en Pascal
4 / 9
Fonctions et proc´
edures de la logique m´
etier
51 f u n c t i o n h a u t e u r C o l o n n e ( l e P l a t e a u : T P l a t e a u ; c o l o n n e : T C o l o n n e ) : I n t e g e r ; 52 b e g i n
53 h a u t e u r C o l o n n e := l e P l a t e a u . h a u t e u r C o l o n n e [ c o l o n n e ] 54 end ; { h a u t e u r C o l o n n e }
55
56 p r o c e d u r e jouer ( v a r l e P l a t e a u : T P l a t e a u ; c o l o n n e : T C o l o n n e ; pion : TPion ) ; 57 b e g i n 58 inc ( l e P l a t e a u . h a u t e u r C o l o n n e [ c o l o n n e ]) ; 59 l e P l a t e a u . c o n t e n u [ colonne , l e P l a t e a u . h a u t e u r C o l o n n e [ c o l o n n e ] ] : = p i o n 60 end ; { j o u e r } 61 62 f u n c t i o n p e u t J o u e r ( l e P l a t e a u : T P l a t e a u ; c o l o n n e : T C o l o n n e ) : B o o l e a n ; 63 b e g i n 64 p e u t J o u e r := h a u t e u r C o l o n n e ( l e P l a t e a u , c o l o n n e ) < N B _ L I G N E S 65 end ; { p e u t J o u e r } 66 67 f u n c t i o n p l a t e a u T o t a l e m e n t R e m p l i ( u n P l a t e a u : T P l a t e a u ) : B o o l e a n ; 68 v a r i : T C o l o n n e ; 69 b e g i n 70 i : = 1 ; 71 p l a t e a u T o t a l e m e n t R e m p l i := True ; 72 w h i l e p l a t e a u T o t a l e m e n t R e m p l i and (i <= N B _ C O L O N N E S ) do 73 b e g i n 74 p l a t e a u T o t a l e m e n t R e m p l i := h a u t e u r C o l o n n e ( u n P l a t e a u , i ) = N B _ L I G N E S ; 75 inc ( i )
as
Architecture des Systèmes d’Information
D´
eveloppement en Pascal
5 / 9
Fonctions et proc´
edures de la logique m´
etier
79 f u n c t i o n n o m b r e P i o n s A l i g n e s V e r t i c a l e m e n t ( u n P l a t e a u : T P l a t e a u ; c o l o n n e : T C o l o n n e ; l i g n e : T L i g n e ) : I n t e g e r ; 80 f u n c t i o n n b P i o n s A l i g n e s V e r t i c a l e m e n t ( u n P l a t e a u : T P l a t e a u ; p i o n R e f : T P i o n ; colonne , ligne , d i r e c t i o n , b o r n e : I n t e g e r ) : I n t e g e r ; 81 v a r 82 r e s u l t a t , i : I n t e g e r ; 83 b e g i n 84 i := l i g n e ; 85 r e s u l t a t : = 0 ;
86 w h i l e (i < > borne ) and ( c o n t e n u C a s e ( unPlateau , colonne , i ) = p i o n R e f ) do 87 b e g i n 88 i := i + d i r e c t i o n ; 89 inc ( r e s u l t a t ) ; 90 end ; 91 n b P i o n s A l i g n e s V e r t i c a l e m e n t := r e s u l t a t -1; 92 end ; { n b P i o n s A l i g n e s V e r t i c a l e m e n t } 93 b e g i n 94 n o m b r e P i o n s A l i g n e s V e r t i c a l e m e n t := n b P i o n s A l i g n e s V e r t i c a l e m e n t ( u n P l a t e a u , c o n t e n u C a s e ( u n P l a t e a u , colonne , l i g n e ) , colonne , ligne , -1 ,0)
95 + n b P i o n s A l i g n e s V e r t i c a l e m e n t ( u n P l a t e a u , c o n t e n u C a s e ( u n P l a t e a u , colonne , l i g n e ) , colonne , ligne ,1 , N B _ L I G N E S +1) +1;
D´
eveloppement en Pascal
6 / 9
Fonctions et proc´
edures de la logique m´
etier
159 f u n c t i o n c o u p G a g n a n t ( u n P l a t e a u : T P l a t e a u ; c o l o n n e : T C o l o n n e ) : B o o l e a n ; 160 b e g i n
161 c o u p G a g n a n t :=( n o m b r e P i o n s A l i g n e s V e r t i c a l e m e n t ( u n P l a t e a u , colonne , h a u t e u r C o l o n n e ( u n P l a t e a u , c o l o n n e ) ) = N B _ P I O N S _ A L I G N E S _ P O U R _ G A G N E R )
162 o r ( n o m b r e P i o n s A l i g n e s H o r i z o n t a l e m e n t ( unPlateau , colonne , h a u t e u r C o l o n n e ( unPlateau , c o l o n n e ) ) = N B _ P I O N S _ A L I G N E S _ P O U R _ G A G N E R ) 163 o r ( n o m b r e P i o n s A l i g n e s D i a g o n a l e m e n t G a u c h e A D r o i t e ( unPlateau , colonne , h a u t e u r C o l o n n e ( u n P l a t e a u , c o l o n n e ) ) = N B _ P I O N S _ A L I G N E S _ P O U R _ G A G N E R ) 164 o r ( n o m b r e P i o n s A l i g n e s D i a g o n a l e m e n t D r o i t e A G a u c h e ( unPlateau , colonne , h a u t e u r C o l o n n e ( u n P l a t e a u , c o l o n n e ) ) = N B _ P I O N S _ A L I G N E S _ P O U R _ G A G N E R ) ; 165 end ; { c o u p G a g n a n t }
as
Architecture des Systèmes d’Information
D´
eveloppement en Pascal
7 / 9
Fonctions et proc´
edures de la logique m´
etier
167 p r o c e d u r e f a i r e U n e P a r t i e ( v a r e t a t P a r t i e : T E t a t P a r t i e ; q u i A G a g n e : TPion ) ; 168 v a r 169 l e P l a t e a u : T P l a t e a u ; 170 j o u e u r C o u r a n t : T P i o n ; 171 c o u p : T C o l o n n e ; 172 b e g i n 173 v i d e r ( l e P l a t e a u ) ; 174 j o u e u r C o u r a n t := p i o n J a u n e ; 175 a f f i c h e r ( l e P l a t e a u ) ; 176 r e p e a t 177 c o u p := o b t e n i r C o u p H u m a i n ( l e P l a t e a u , j o u e u r C o u r a n t ) ; 178 j o u e r ( l e P l a t e a u , coup , j o u e u r C o u r a n t ) ; 179 a f f i c h e r ( l e P l a t e a u ) ; 180 j o u e u r C o u r a n t := a u t r e J o u e u r ( j o u e u r C o u r a n t ) ; 181 u n t i l c o u p G a g n a n t ( l e P l a t e a u , c o u p ) o r p l a t e a u T o t a l e m e n t R e m p l i ( l e P l a t e a u ) ; 182 i f c o u p G a g n a n t ( l e P l a t e a u , c o u p ) t h e n 183 b e g i n 184 e t a t P a r t i e := p a r t i e _ g a g n e e ; 185 q u i A G a g n e := a u t r e J o u e u r ( j o u e u r C o u r a n t ) ; 186 end e l s e 187 e t a t P a r t i e := p a r t i e _ n u l l e 188 end ; { j o u e r }
D´
eveloppement en Pascal
8 / 9
Fonctions et proc´
edures de l’IHM
199 p r o c e d u r e a f f i c h e r ( l e P l a t e a u : T P l a t e a u ) ; 200 v a r 201 i : T C o l o n n e ; 202 j : T L i g n e ; 203 c : S t r i n g ; 204 b e g i n 205 f o r j := N B _ L I G N E S downto 1 do 206 b e g i n 207 f o r i :=1 t o N B _ C O L O N N E S do 208 b e g i n 209 w r i t e ( ’| ’) ; 210 i f c o n t e n u C a s e ( l e P l a t e a u , i , j ) = v i d e t h e n 211 w r i t e ( ’ ’) 212 e l s e 213 w r i t e ( p i o n E n C h a i n e ( c o n t e n u C a s e ( lePlateau ,i , j ) ) ) ; 214 end ; 215 w r i t e l n ( ’| ’) ; 216 end ; 217 f o r i :=1 t o N B _ C O L O N N E S do 218 w r i t e ( ’ -- ’) ; 219 w r i t e l n ( ’ - ’) ; 220 f o r i :=1 t o N B _ C O L O N N E S do 221 b e g i n 222 str ( i , c ) ; 223 w r i t e ( ’ ’+ c ) ;
as
Architecture des Systèmes d’Information
D´
eveloppement en Pascal
9 / 9
Programme principal
246 v a r 247 e t a t F i n a l e : T E t a t P a r t i e ; 248 q u i A G a g n e : T P i o n ; 249 b e g i n 250 f a i r e U n e P a r t i e ( e t a t F i n a l e , q u i A G a g n e ) ; 251 i f e t a t F i n a l e = p a r t i e _ g a g n e e t h e n 252 b e g i n 253 i f q u i A G a g n e = p i o n J a u n e t h e n 254 w r i t e l n ( ’ Vous avez gagne !! ’) 255 e l s e256 w r i t e l n ( ’J ’ ’ ai gagne !! ’) 257 end e l s e
258 w r i t e l n ( ’ Part ie nulle ’) 259 end .