Dans ce dernier exemple nous cherchons à donner un apercu de l'utilisation des segments dans Castem2000. Il s'agit de construire le triangle de Pascal (le pivot initial n'est pas forcement égal à 1). Chaque ligne est représentée par un segment. On veut pouvoir avoir accés directement à la n-iéme ligne. La strucure de notre objet triangle de Pascal peut etre :
SEGMENT MPASC
INTEGER ILIGN(L)
ENDSEGMENT
SEGMENT LIGN
REAL*8 XLIGN(M)
ENDSEGMENT
POINTEUR LIG1.LIGN
Le tableau ILIGN contient la valeur des pointeurs sur le segment LIGN et les valeurs sont dans le tableau XLIGN
Le premier sous-programme crée un triangle de pascal avec XUN comme pivot et avec LI lignes, et le second sous programme écrira un objet triangle de Pascal reçu en argument.
SUBROUTINE SP11 (XUN,LI,IRET)
IMPLICIT REAL*8(A-H,O-Z)
SEGMENT MPASC
INTEGER ILIGN(L)
ENDSEGMENT
SEGMENT LIGN
REAL*8 XLIGN(M)
ENDSEGMENT
POINTEUR LIG1.LIGN
L = LI
SEGINI MPASC
IRET = MPASC
IF ( LI.EQ.0) THEN
SEGDES MPASC
RETURN
ENDIF
M=1
SEGINI LIGN
XLIGN(1)= XUN
ILIGN(1)=LIGN
DO 1 I=2,LI
M= I
SEGINI LIG1
ILIGN(I)= LIG1
LIG1.XLIGN(1) = XUN
LIG1.XLIGN(I) = XUN
DO 2 KO = 1,I-2
LIG1.XLIGN(KO+1) = XLIGN(KO) + XLIGN(KO+1)
2 CONTINUE
SEGDES LIGN
LIGN=LIG1
1 CONTINUE
SEGDES LIGN
SEGDES MPASC
RETURN
END
SUBROUTINE SP2(IPASC)
IMPLICIT REAL*8(A-H,O-Z)
SEGMENT MPASC
INTEGER ILIGN(L)
ENDSEGMENT
SEGMENT LIGN
REAL*8 XLIGN(M)
ENDSEGMENT
POINTEUR LIG1.LIGN
MPASC=IPASC
SEGACT MPASC
DO 1 I=1,ILIGN(/1)
LIGN= ILIGN(I)
SEGACT LIGN
WRITE(6,*) (XLIGN(K),K=1,XLIGN(/1))
SEGDES LIGN
1 CONTINUE
SEGDES MPASC
RETURN
END