Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Tłumaczenie: mgr Jerzy Wałaszek

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Dodatek E

Przykładowe programy

SPIS TREŚCI

Dodatek E: Przykładowe programy

Rozdział ten zawiera przykładowe programy, które demonstrują możliwości ZX Spectrum.

Pierwszy z nich żąda podania daty, a następnie wyliczy dzień tygodnia odpowiadający tej dacie.

    10 REM zamiana daty na dzien tygodnia
    20 DIM d$(7,6): REM dni tygodnia
    30 FOR n=1 TO 7: READ d$(n): NEXT n
    40 DIM m(12): REM dlugosci miesiecy
    50 FOR n=1 TO 12: READ m(n): NEXT n
  100 REM odczyt daty
  110 INPUT "dzien?";day
  120 INPUT "miesiac?";month
  130 INPUT "rok (tylko 20 wiek)?";year
  140 IF year<1901 THEN PRINT "20-ty wiek rozpoczyna sie od 1901": GO TO 100
  150 IF year>2000 THEN PRINT "20-ty wiek konczy sie na 2000": GO TO 100
  160 IF month<1 THEN GO TO 210
  170 IF month>12 THEN GO TO 210
  180 IF year/4-INT(year/4)=0 THEN LET m(2)=29: REM rok przestepny
  190 IF day>m(month) THEN PRINT "Ten miesiac ma tylko "; m(month);" dni.": GO TO 500
  200 IF day>0 THEN GO TO 300
  210 PRINT "To bzdury. Wpisz date."
  220 GO TO 500
  300 REM zamienia date na liczbe dni od poczatku stulecia
  310 LET y=year-1901
  320 LET b=365*y+INT (y/4): REM liczba dni do poczatku roku
  330 FOR n=1 TO month 1: REM dodajwaj poprzednie miesiace
  340 LET b=b+m(n): NEXT n
  350 LET b=b+day
  400 REM zamienia na dzien tygodnia
  410 LET b=b-7*INT (b/7)+1
  420 PRINT day;"-";month;"-";year
  430 FOR n=6 TO 3 STEP -1: REM usuwa koncowe spacje
  440 IF d$(b,n) <> " " THEN GO TO 460
  450 NEXT n
  460 LET e$=d$(b, TO n)
  470 PRINT" bylo w "; e$;"."
  500 LET m(2)=28: REM przywroc luty
  510 INPUT "jeszcze raz?", a$
  520 IF a$="n" THEN GO TO 540
  530 IF a$ <> "N" THEN GO TO 100
  1000 REM dni tygodnia
  1010 DATA "Pon", "Wto", "Sro"
  1020 DATA "Czw", "Pia", "Sob", "Nie"
  1100 REM dlugosci miesiecy
  1110 DATA 31, 28, 31, 30, 31, 30
  1120 DATA 31, 31, 30, 31, 30, 31

Ten program obsługuje jardy, stopy i cale.

    10 INPUT "jardy?",yd,"stopy?",ft, "cale?",in
    40 GO SUB 2000: REM wypisz wartosci
    50 PRINT '" = ";
    70 GO SUB 1000: REM przeliczanie
    80 GO SUB 2000: REM wypisz wartosci przeliczone
    90 PRINT
  100 GOTO 10
1000 REM podprogram do przeliczania yd, ft, in na normalna postac dla jardow, stop i cali
1010 LET in=36*yd+12*ft+in: REM teraz wszystko jest w calach
1030 LET s=SGN in: LET in=ABS in: REM pracujemy z wartoscia dodatnia, przechowujac znak w s
1060 LET ft=INT (in/12): LET in=(in-12*ft)*s: REM teraz in jest dobrze
1080 LET yd=INT (ft/3)*s: LET ft=ft*s-3*yd: RETURN
2000 REM podprogram wypisujace yd, ft i in
2010 PRINT yd;"yd";ft;"ft";in;"in";: RETURN

Oto program do tworzenia heksagramów w I Ching (chińska Księga Przemian). (Niestety, tworzy on wynik do góry nogami, lecz możesz się tym nie przejmować.)

    5 RANDOMIZE
  10 FOR m=1 TO 6: REM dla 6 rzutow
  20 LET c=0: REM inicjujemy monete na 0
  30 FOR n=1 TO 3: REM dla 3 monet
  40 LET c=c+2+INT (2*RND)
  50 NEXT n 60: PRINT " ";
  70 FOR n=1 TO 2
  80 PRINT "_ _ _";
  90 IF c=7 THEN PRINT " ";
100 IF c=8 THEN PRINT " ";
110 IF c=6 THEN PRINT "X";: LET c=7
120 IF c=9 THEN PRINT "0";: LET c=8
130 PRINT "_ _ _ ";
140 NEXT n
150 PRINT
160 INPUT a$
170 NEXT m: NEW

 

By z tego skorzystać, wpisz program i uruchom go, a następnie naciśnij ENTER pięć razy, aby otrzymać dwa heksagramy. Wyszukaj je w chińskiej Księdze Przemian. Tekst wyjaśni sytuację oraz odpowiednie toki działań dla niej, a ty musisz się głęboko zastanowić, aby odkryć związek pomiędzy tą wróżbą a swoim życiem. Naciśnij ENTER szósty raz, a program wymaże się, abyś się tym lekkomyślnie nie bawił.

Wielu ludzi stwierdzi, że te teksty są zawsze bardziej odpowiednie, niż można by się było spodziewać po zwykłym przypadku; może tak również być z komputerem ZX Spectrum, chociaż ogólnie komputery są raczej bezdusznymi stworzeniami.

Oto program w odgadywanie zwierząt. Wymyślasz sobie jakieś zwierzę, a komputer stara się odgadnąć, co to jest, zadając ci pytania, na które odpowiedzią może być tylko "yes" lub "no". Jeśli o jakimś zwierzęciu jeszcze nie słyszał, to prosi cię, abyś podał mu pytanie, które będzie mógł wykorzystać przy następnej grze, aby zgadnąć to zwierzę. (Programu nie tłumaczę, pozostanie w wersji oryginalnej).

      5 REM Pangolins
    10 LET nq=100: REM number of questions and animals
    15 DIM q$(nq,50): DIM a(nq,2): DIM r$(1)
    20 LET qf=8
    30 FOR n=1 TO qf/2 1
    40 READ q$(n): READ a(n,1): READ a(n,2)
    50 NEXT n
    60 FOR n=n TO qf-1
    70 READ q$(n): NEXT n
  100 REM start playing
  110 PRINT "Think of an animal.","Press any key to continue."
  120 PAUSE 0
  130 LET c=1: REM start with 1st question
  140 IF a(c,1)=0 THEN GO TO 300
  150 LET p$=q$(c): GO SUB 910
  160 PRINT "?": GO SUB 1000
  170 LET in=1: IF r$="y" THEN GO TO 210
  180 IF r$="Y" THEN GO TO 210
  190 LET in=2: IF r$="n" THEN GO TO 210
  200 IF r$<>"N" THEN GO TO 150
  210 LET c=a(c,in): GO TO 140
  300 REM animal
  310 PRINT "Are you thinking of"
  320 LET P$=q$(c): GO SUB 900: PRINT "?"
  330 GO SUB 1000
  340 IF r$="y" THEN GO TO 400
  350 IF r$="Y" THEN GO TO 400
  360 IF r$="n" THEN GO TO 500
  370 IF r$="N" THEN GO TO 500
  380 PRINT "Answer me properly when I'm","talking to you.": GO TO 300
  400 REM guessed it
  410 PRINT "I thought as much.": GO TO 800
  500 REM new animal
  510 IF qf>nq-1 THEN PRINT "I'm sure your animal is very", "interesting,
  but I don't have","room for it just now.": GO TO 800
  520 LET q$(qf)=q$(c): REM move old animal
  530 PRINT "What is it, then?": INPUT q$(qf+1)
  540 PRINT "Tell me a question which dist ","inguishes between "
  550 LET p$=q$(qf): GO SUB 900: PRINT " and"
  560 LET p$=q$(qf+1): GO SUB 900: PRINT " "
  570 INPUT s$: LET b=LEN s$
  580 IF s$(b)="?" THEN LET b=b-1
  590 LET q$(c)=s$(TO b): REM insert question
  600 PRINT "What is the answer for"
  610 LET p$=q$(qf+1): GO SUB 900: PRINT "?"
  620 GO SUB 1000
  630 LET in=1: LET io=2: REM answers for new and old animals
  640 IF r$="y" THEN GO T0 700
  650 IF r$="Y" THEN GO TO 700
  660 LET in=2: LET io=1
  670 IF r$="n" THEN GO TO 700
  680 IF r$="N" THEN GO TO 700
  690 PRINT "That's no good. ": GO TO 600
  700 REM update answers
  710 LET a(c,in)=qf+1: LET a(c,io)=qf
  720 LET qf=qf+2: REM next free animal space
  730 PRINT "That fooled me."
  800 REM again?
  810 PRINT "Do you want another go?": GO SUB 1000
  820 IF r$="y" THEN GO TO 100
  830 IF r$="Y" THEN GO TO 100
  840 STOP
  900 REM print without trailing spaces
  905 PRINT " ";
  910 FOR n=50 TO 1 STEP -1
  920 IF p$(n)<>" " THEN GO TO 940
  930 NEXT n
  940 PRINT p$(TO n);: RETURN
1000 REM get reply
1010 INPUT r$: IF r$="" THEN RETURN
1020 LET r$=r$(1): RETURN
2000 REM initial animals
2010 DATA "Does it live in the sea",4,2
2020 DATA "Is it scaly",3,5
2030 DATA "Does it eat ants",6,7
2040 DATA "a whale", "a blancmange", "a pangolin", "an ant"

Ten program rysuje flagę Wielkiej Brytanii.

    5 REM flaga Wielkiej Brytanii
  10 LET r=2: LET w=7: LET b=1
  20 BORDER 0: PAPER b: INK w: CLS
  30 REM czarne na spodzie ekranu
  40 INVERSE 1
  50 FOR n=40 TO 0 STEP -8
  60.PLOT PAPER 0;7,n: DRAW PAPER 0;241,0
  70 NEXT n: INVERSE 0
100 REM wrysuj biale fragmenty Sw. Jerzego
110 FOR n=0 TO 7
120 PLOT 104+n,175: DRAW 0,-35
130 PLOT 151-n,175: DRAW 0,-35
140 PLOT 151-n,48: DRAW 0,35
150 PLOT 104+n,48: DRAW 0,35
160 NEXT n
200 FOR n=0 TO 11
210 PLOT 0,139-n: DRAW 111,0
220 PLOT 255,139-n: DRAW 111,0
230 PLOT 255,84+n: DRAW -111,0
240 PLOT 0,84+n: DRAW 111,0
250 NEXT n
300 REM Sw. Andrzej
310 FOR n=0 TO 35
320 PLOT 1+2*n,175-n: DRAW 32,0
330 PLOT 224-2*n,175-n: DRAW 16,0
340 PLOT 254-2*n,48+n: DRAW-32,0
350 PLOT 17+2*n,48+n: DRAW 16,0
360 NEXT n
370 FOR n=0 TO 19
380 PLOT 185+2*n,140+n: DRAW 32,0
390 PLOT 200+2*n,83-n: DRAW 16,0
400 PLOT 39-2*n,83-n: DRAW 32,0
410 PLOT 54-2*n,140+n: DRAW -16,0
420 NEXT n
425 REM wypelnij dodatkowe kawalki
430 FOR n=0 TO 15
440 PLOT 255,160+n: DRAW 2*n-30,0
450 PLOT 0,63-n DRAW 31-2*n,0
460 NEXT n
470 FOR n=0 TO 7
480 PLOT 0,160+n: DRAW 14 2*n,0
485 PLOT 255,63-n: DRAW 2*n-15,0
490 NEXT n
500 REM czerwone pasy
510 INVERSE 1
520 REM St George
530 FOR n=96 TO 120 STEP 8
540 PLOT PAPER r;7,n: DRAW PAPER r;241,0
550 NEXT n
560 FOR n=112 TO 136 STEP 8
570 PLOT PAPER r;n,168: DRAW PAPER r;0,-113
580 NEXT n
600 REM Sw. Patryk
610 PLOT PAPER r;170,140: DRAW PAPER r;70,35
620 PLOT PAPER r;179,140: DRAW PAPER r;70,35
630 PLOT PAPER r;199,83: DRAW PAPER r;56,-28
640 PLOT PAPER r;184,83: DRAW PAPER r;70,-35
650 PLOT PAPER r;86,83: DRAW PAPER r;-70,-35
660 PLOT PAPER r;72,83: DRAW PAPER r;-70,-35
670 PLOT PAPER r;56,140: DRAW PAPER r;-56,28
680 PLOT PAPER r;71,140: DRAW PAPER r;-70,35
690 INVERSE 0: PAPER 0: INK 7

Jeśli nie pochodzisz z Wysp Brytyjskich, to narysuj swoją własną flagę  polska jest szczególnie prosta, jeśli pominiemy orła.  Flagi trójkolorowe są dosyć łatwe, chociaż niektóre kolory  przykładowo pomarańczowy we fladze irlandzkiej — mogą sprawiać trudność (wykorzystaj wtedy grafikę definiowaną przez użytkownika do utworzenia znaku zbudowanego z szachowniczki punktów, dobierając odpowiednio kolor tła i tuszu, możemy uzyskać przybliżony odcień). Jeśli jesteś Amerykaninem, to być może znajdziesz zastosowanie dla znaku *.

Oto program do gry w szubieniczkę. Jeden gracz wprowadza słowo, a drugi stara się je odgadnąć w skończonej liczbie prób.

      5 REM szubieniczka
    10 REM ustawiamy ekran
    20 INK 0: PAPER 7: CLS
    30 LET x=240: GO SUB 1000: REM narysuj czlowieka
    40 PLOT 238,128: DRAW 4,0: REM usta
  100 REM ustaw slowo
  110 INPUT w$: REM slowo do odgadniecia
  120 LET b=LEN w$: LET v$=" "
  130 FOR n=2 TO b: LET v$=v$+" "
  140 NEXT n: REM v$=slowo dotad odgadniete
  150 LET c=0: LET d=0: REM zgaduj i licz pomylki
  160 FOR n=0 TO b-1
  170 PRINT AT 20,n;" ";
  180 NEXT n: REM zamiast liter zapisz spacje
  200 INPUT "Odgadnij litere ";g$
  210 IF g$="" THEN GO TO 200
  220 LET g$=g$(1): REM tylko pierwsza litera sie liczy
  230 PRINT AT 0,c;g$
  240 LET c=c+1: LET u$=v$
  250 FOR n=1 TO bL REM uaktualnij odgadywane slowo
  260 IF w$(n)=g$ THEN LET v$(n)=g$
  270 NEXT n
  280 PRINT AT l9,0;v$
  290 IF v$=w$ THEN GO TO 500: REM slowo odgadniete
  300 IF v$<>u$ THEN GO TO 200: REM litera byla zla
  400 REM narysuj nastepny fragment szubienicy
  410 IF d=8 THEN GO TO 600: REM powieszony
  420 LET d=d+1
  430 READ x0,y0,x,y
  440 PLOT x0,y0: DRAW x,y
  450 GO TO 200
  500 REM wolny czlowiek
  520 LET x=240: GO SUB 1000
  530 PLOT 238,128: DRAW 4,0: REM usta
  540 OVER 0: REM przerysuj czlowieka
  550 LET x=146: GO SUB 1000
  560 PLOT 143,129: DRAW 6,0, PI/2: REM usmiech
  570 GO TO 800
  600 REM powies czlowieka
  610 OVER 1: REM wymaz podloge
  620 PLOT 255,65: DRAW -48,0
  630 DRAW 0,-48: REM otworz zapadnie
  640 PLOT 238,128: DRAW 4,0: REM wymaz usta
  650 REM rusz konczynami
  655 REM rece
  660 PLOT 255,117: DRAW -15,-15: DRAW -15,15
  670 OVER 0
  680 PLOT 236,81: DRAW 4,21: DRAW 4, 21
  690 OVER 1: REM nogi
  700 PLOT 255,66: DRAW -15,15: DRAW -15,-15
  710 OVER 0
  720 PLOT 236,60: DRAW 4,21: DRAW 4,-21
  730 PLOT 237,127: DRAW 6,0,-PI/2: REM zmarszczenie brwi
  740 PRINT AT 19,0;w$
  800 INPUT "jeszcze? ";a$
  810 IF a$="" THEN GO TO 850
  820 LET a$=a$(1)
  830 IF a$="n" THEN STOP
  840 IF a$="N" THEN STOP
  850 RESTORE: GO TO 5
1000 REM narysuj czlowieka w kolumnie x
1010 REM glowa
1020 CIRCLE x,132,8
1030 PLOT x+4,134: PLOT x-4,134: PLOT x,131
1040 REM cialo
1050 PLOT x,123: DRAW 0,-20
1055 PLOT x,101: DRAW 0,-19
1060 REM nogi
1070 PLOT x-15,66: DRAW 15,15: DRAW 15,-15
1080 REM rece
1090 PLOT x-15,117: DRAW 15,-15: DRAW 15,15
1100 RETURN
2000 DATA 120,65,135,0,184,65,0,91
2010 DATA 168,65,16,16,184,81,16,-16
2020 DATA 184,156,68,0,184,140,16,16
2030 DATA 204,156,-20,-20,240,156,0,-16

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.