85 lines
1.4 KiB
Text
85 lines
1.4 KiB
Text
DEFINE PTR="CARD"
|
|
DEFINE PAIR_SIZE="4"
|
|
DEFINE PAIR_COUNT="1"
|
|
|
|
TYPE Pair=[PTR name,value]
|
|
|
|
BYTE ARRAY pairs(100)
|
|
BYTE count=[0]
|
|
|
|
PTR FUNC GetItemAddr(INT index)
|
|
PTR addr
|
|
|
|
addr=pairs+index*PAIR_SIZE
|
|
RETURN (addr)
|
|
|
|
PROC PrintArray()
|
|
INT i
|
|
Pair POINTER p
|
|
|
|
Put('[)
|
|
FOR i=0 TO count-1
|
|
DO
|
|
IF i>0 THEN Put(' ) FI
|
|
p=GetItemAddr(i)
|
|
PrintF("(%S,%S)",p.name,p.value)
|
|
OD
|
|
Put(']) PutE()
|
|
RETURN
|
|
|
|
PROC Append(CHAR ARRAY n,v)
|
|
Pair POINTER dst
|
|
|
|
dst=GetItemAddr(count)
|
|
dst.name=n
|
|
dst.value=v
|
|
count==+1
|
|
RETURN
|
|
|
|
PROC InitData()
|
|
Append("Warsaw","Poland")
|
|
Append("Prague","Czech Republic")
|
|
Append("London","United Kingdom")
|
|
Append("Paris","France")
|
|
Append("Madrit","Spain")
|
|
Append("Berlin","Germany")
|
|
Append("Rome","Italy")
|
|
Append("Moscow","Russia")
|
|
Append("Budapest","Hungary")
|
|
RETURN
|
|
|
|
PROC Sort()
|
|
INT i,j,minpos
|
|
CHAR ARRAY tmp
|
|
Pair POINTER p1,p2
|
|
|
|
FOR i=0 TO count-2
|
|
DO
|
|
minpos=i
|
|
FOR j=i+1 TO count-1
|
|
DO
|
|
p1=GetItemAddr(minpos)
|
|
p2=GetItemAddr(j)
|
|
IF SCompare(p1.name,p2.name)>0 THEN
|
|
minpos=j
|
|
FI
|
|
OD
|
|
|
|
IF minpos#i THEN
|
|
p1=GetItemAddr(minpos)
|
|
p2=GetItemAddr(i)
|
|
tmp=p1.name p1.name=p2.name p2.name=tmp
|
|
tmp=p1.value p1.value=p2.value p2.value=tmp
|
|
FI
|
|
OD
|
|
RETURN
|
|
|
|
PROC Main()
|
|
InitData()
|
|
PrintE("Array before sort:")
|
|
PrintArray() PutE()
|
|
|
|
Sort()
|
|
PrintE("Array after sort:")
|
|
PrintArray()
|
|
RETURN
|