• Aucun résultat trouvé

[PDF] Les éléments de base du langage Pascal | Cours informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Les éléments de base du langage Pascal | Cours informatique"

Copied!
39
0
0

Texte intégral

(1)

Tableau et enregistrement en Pascal

et Premi`

ere version du jeu du puissance 4

I3 - Algorithmique et programmation

(2)

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

eveloppement

4

Conclusion

(3)

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

(4)

as

Architecture des Systèmes d’Information

Tableau `

a une dimension

1 / 3

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 ;

(5)

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 ;

(6)

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 ;

(7)

Tableau `

a 2 dimensions

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 ,

(8)

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 ;

(9)

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 ;

(10)

as

Architecture des Systèmes d’Information

Enregistrement

1 / 4

Les enregistrements (record) Pascal correspondent aux structures en

algorithmique

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 ;

(11)

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 }

(12)

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 }

(13)

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 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 }

(14)

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 }

(15)

Cahier des charges



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 :5

(16)

as

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)

(17)

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

(18)

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

(19)

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)

(20)

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

(21)

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 Naturel

(22)

as

Architecture des Systèmes d’Information

Analyse descendante

3 / 3

totalementRempli

plateauTotalement Rempli Booléen hauteurColonne Plateau Colonne 0..NB_LIGNES Plateau

(23)

Conception 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

(24)

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

(25)

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

(26)

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)

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

(27)

Conception d´

etaill´

ee - Puissance 4

1 / 3

faireUnePartie

proc´

edure faireUnePartie (S etatPartie : EtatPartie, quiAGagne : Pion)

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

(28)

as

Architecture des Systèmes d’Information

Conception d´

etaill´

ee - Puissance 4

2 / 3

totalementRempli

fonction plateauTotalementRempli (unPlateau : Plateau) : Booleen

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

(29)

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

(30)

as

Architecture des Systèmes d’Information

eveloppement en Pascal

1 / 9

Renomage des types

Pr´

efixer chaque type par un T

Organisation du programme

eclarer les constantes et types

eclarer les fonctions et proc´

edures (utilisation du mot cl´

e forward)

pour ´

eviter les utilisations avant les d´

eclarations

efinir les fonctions et proc´

edures

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

(31)

eveloppement en Pascal

2 / 9

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 ;

(32)

as

Architecture des Systèmes d’Information

eveloppement en Pascal

3 / 9

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 }

(33)

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 )

(34)

as

Architecture des Systèmes d’Information

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;

(35)

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 }

(36)

as

Architecture des Systèmes d’Information

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 }

(37)

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 ) ;

(38)

as

Architecture des Systèmes d’Information

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 e

256 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 .

(39)

Conclusion

Crit`

eres d’un bon programme

lisible

7

3

fiable

7

3

maintenable

3

eutilisable

7

portable

7

correct (preuve)

7

efficace (complexit´

e)

3

Références

Documents relatifs

création graphique : direction mutualisée de la communication de chambéry et grand chambéry- tc-création graphique : direction mutualisée de la communication de chambéry et

- 1 : défauts réversibles : l’arbre peut naturellement cicatriser ou le défaut peut facilement être éliminé par intervention humaine (enlèvement du bois mort).. - 2 :

Comment identifier au moins douze bonnes pièces à l’issue de deux pesées faites avec une balance Roberval à deux plateaux?. Pour les plus courageux : quel est le nombre

Avec les n j cases marqu´ ees en colonne j, on peut former n j (n j − 1)/2 paires de cases ou de lignes ; aucune de ces paires de lignes ne doit se reproduire dans une autre

Pour déterminer une base orthonormée d’un sous-espace vectoriel muni du produit scalaire euclidien il suffit d’utiliser la fonction QR , accessible dans le sous-menu Avancé du

Pour les dérivations de branchement à puissance surveillée, le CCPI doit être à proximité immédiate du distributeur à courant assigné 400 A ou à l’origine de la

En cas de doute quant à savoir si une matière est infectieuse ou non, ou quant à la catégorie dans laquelle elle doit être incluse, on peut obtenir de l'aide en communiquant avec

(2014) ont cultivé les deux souches dans un chémostat contenant un milieu de culture favorable pour le développement de ces dernières.. Les auteurs n’ont détecté aucune