' Neagu Rares Florian 

' Grade 8

' Cygnus Computer

' Junior Division 5  Language QBASIC

' Contest #4 : ACSL Stacks And Queues

'

'

'

'

'

DECLARE FUNCTION doall$ ()

DECLARE FUNCTION STACK$ ()

DECLARE FUNCTION queue$ ()

DECLARE FUNCTION strtonum! (x$)

DIM SHARED a$

a1$ = doall$

a2$ = doall$

a3$ = doall$

a4$ = doall$

a5$ = doall$

PRINT a1$

PRINT a2$

PRINT a3$

PRINT a4$

PRINT a5$

 

FUNCTION doall$

a$ = "ABCDE"

INPUT ; "", soq$

IF (soq$ = "S") THEN doall$ = STACK$

IF (soq$ = "Q") THEN doall$ = queue$

PRINT ""

END FUNCTION

 

FUNCTION queue$

lol$ = "TEST"

WHILE LEFT$(lol$, 3) <> "PRT"

INPUT ; ",", lol$

'PRINT ""

IF LEFT$(lol$, 3) <> "SWH" THEN lolnum = strtonum(MID$(lol$, 5, LEN(lol$) - 4))

SELECT CASE LEFT$(lol$, 3)

CASE "POP"

a$ = RIGHT$(a$, LEN(a$) - lolnum)

'PRINT a$

CASE "PSH"

a$ = a$ + RIGHT$(lol$, 1)

'PRINT a$

CASE "DUP"

a$ = a$ + LEFT$(a$, lolnum)

'PRINT a$

CASE "SWP"

' abcdeabcde -> decab

leftul$ = RIGHT$(a$, lolnum)

rightul$ = LEFT$(a$, lolnum)

FOR i = 1 TO lolnum

        MID$(a$, i, 1) = MID$(rightul$, i, 1)

NEXT i

j = 1

FOR i = LEN(a$) - lolnum + 1 TO LEN(a$)

        MID$(a$, i, 1) = MID$(leftul$, j, 1)

        j = j + 1

NEXT i

'PRINT ""

'PRINT a$

'PRINT ""

'PRINT leftul$

'PRINT rightul$

CASE "SWH"

queue$ = STACK$

GOTO 1

END SELECT

'PRINT ""

WEND

queue$ = LEFT$(a$, strtonum(MID$(lol$, 5, LEN(lol$) - 4)))

1

'PRINT ""

END FUNCTION

 

FUNCTION STACK$

lol$ = "TEST"

WHILE LEFT$(lol$, 3) <> "PRT"

INPUT ; ",", lol$

'PRINT ""

IF LEFT$(lol$, 3) <> "SWH" THEN lolnum = strtonum(MID$(lol$, 5, LEN(lol$) - 4))

SELECT CASE LEFT$(lol$, 3)

CASE "POP"

a$ = LEFT$(a$, LEN(a$) - lolnum)

'PRINT a$

CASE "PSH"

a$ = a$ + RIGHT$(lol$, 1)

'PRINT a$

CASE "DUP"

a$ = a$ + LEFT$(a$, lolnum)

'PRINT a$

CASE "SWP"

' abcdeabcde -> decab

leftul$ = LEFT$(a$, lolnum)

rightul$ = RIGHT$(a$, lolnum)

FOR i = 1 TO lolnum

        MID$(a$, i, 1) = MID$(rightul$, i, 1)

NEXT i

j = 1

FOR i = LEN(a$) - lolnum + 1 TO LEN(a$)

        MID$(a$, i, 1) = MID$(leftul$, j, 1)

        j = j + 1

NEXT i

'PRINT ""

'PRINT a$

'PRINT ""

'PRINT leftul$

'PRINT rightul$

CASE "SWH"

STACK$ = queue$

GOTO 2

END SELECT

'PRINT ""

WEND

STACK$ = RIGHT$(a$, strtonum(MID$(lol$, 5, LEN(lol$) - 4)))

2

'PRINT ""

END FUNCTION

 

FUNCTION strtonum (x$)

numar = 0

FOR i = 1 TO LEN(x$)

        numar = numar * 10 + ASC(MID$(x$, i, 1)) - ASC("0")

NEXT i

strtonum = numar

END FUNCTION