instructiunea WINDOW.Are inteles doar in modul grafic.Coordonatele
səhifə 19/20 tarix 06.08.2018 ölçüsü 1,91 Mb. #67460
instructiunea WINDOW.Are inteles doar in modul grafic.Coordonatele
x1y1 definesc coltul NV al dreptunghiului iar x2y2 coltul SE al
dreptunghiului (ferestrei de ecran) in care se vor face proiectiile
Optional dreptunghiul poate fi umplut cu o culoare desemnata prin
(culoare=nr0-3)si eventual se poate incadra prin trasarea unei
frontiere daca parametrul (frontiera) este diferit de 0.Optiunea
SCREEN arata ca toate coordonatele grafice se vor calcula relativ
la intregul ecran(absolut) iar in caz contrar se vor calcula
relative la dreptunghiul descris.
-forma VIEW [SCREEN](x1,y1)-(x2,y2),(culoare),(frontiera)
-exemplu ................
120 CLS:SCREEN 2
130 VIEW:REM-vizorul 1 ocupa tot ecranul
140 VIEW (10,10)-(300,180):REM al doilea vizor
150 CLS
160 LINE (0,0)-(310,190),1
170 LOCATE 1,11:PRINT "vizorul doi"
180 VIEW SCREEN (50,50)-(250,150),,1:REM vizorul 3
190 CLS:REM se sterge doar vizorul 3
200 LINE(300,0)-(0,199),1
210 LOCATE 9,9:PRINT "Vizorul trei"
220 VIEW SCREEN (80,80)-(200,125),,1:REM vizorul 4
230 CLS
240 CIRCLE (150,100),20,1
250 LOCATE 11,9:PRINT "VIZORUL PATRU"
-expresii asociate;
VIEW PRINT,WINDOW
VIEW PRINT
-enunt
-Determina limitele unei ferestre de text stabilita intre numerele
de linie (linie 1) si (linie 2) care pot fi numere cu valori de
la 1-24.Toate functiile de scriere,pozitionare,editare,defilare au
loc in aceasta fereastra.
-forma VIEW PRINT (linie 1) TO (linie 2)
-exemplu 10 SCREEN 0:REM-se creaza o fereastra de 6 linii
20 VIEW PRINT 1 TO 5
-expresii asociate;nu sint
-154-
WAIT -enunt
-Suspenda executia programului in timpul monitorizarii unuia
din porturile calculatoruluidesemnat prin (port=nr 0-65535).
Parametrii n si m pot avea valori de la 0 la 255 si reprezinta
operatiile ce se efectueaza asupra unui sir de caractere primit
la portul desemnat.Astfel se opereaza operatia XOR cu expresia
intreaga m si apoi operatia AND cu n dupa care se reia citirea
datelor de la port.Daca rezultatul este diferit de zero,executia
continua cu urmatoarea instructiune iar in caz contrar se ia
valoarea 0.Se utilizeaza pentru comunicatii (sau pentru blocarea
portului de comunicatii in lipsa unei parole)
-forma WAIT(port),(n),[m]
-exemplu 100 WAIT 32,2
-expresii asociate;nu sint
WHILE...WEND
-enunt
-Executa operatiile dalimitate intre WHILE si WEND de un numar
repetat de ori atit timp cit conditia specificata prin (conditie)
este adevarata.Daca parametrul (conditie) este o expresie numerica
atunci se considera ca valorile diferite de zero sint adevarate iar
pentru zero conditia este falsa (nu este indeplinita).
-forma WHILE (conditie)..........WEND
-exemplu 10 REM executa suma primelor zece numere
20 LET a=0
30 LET b=0
40 WHILE b<11
50 LET S=a+b:LET b=b+1
60 PRINT S
70 WEND
-expresii asociate; nu sint
WIDTH LPRINT
-enunt
-Defineste lungimea liniei de tiparire la imprimanta prin parametrul
(dimensiune=numar intreg cu valoarea 0-255)
-forma WIDTH LPRINT (dimensiune)
-exemplu WIDTH LPRINT (80)
-expresii asociate;nu sint
WIDTH -enunt
-Determina lungimea unei linii de adresa prin parametrul (dimensi-
une=nr 0-255) pentru un dispozitiv(obiect) sau un fisier care
urmeaza a fi identificat ulterior prin (numar canal).Practic
determina numarul maxim de caractere pentru fiecare linie de
adresa ca se trimite la un periferic sau intr-un fisier.
-forma WIDTH(obiect),(dimensiune)
cu (obiect)::=(dispozitiv)|(numar canal)
dispozitiv poate fi;
SCRN(ecran),LPT1,LPT2,LPT3(imprimante),COM1,COM2,COM3,COM4(porturi
de comunicatie)
-exemplu 10 WIDTH 3:PRINT "123456789"
-expresii asociate;nu sint
-155-
WINDOW
-enunt
-Defineste coordonatele unei ferestre de ecran prin x1,y1 si x2,y2
care desemneaza colturile de NV si SE ale ferestrei.Coordonatele
definite de programator se numesc coordonate universale in timp ce
marginile ecranului sint coordonate fizice.In coordonate universale
se pot executa desene si grafice care depasesc cu mult marginile
ecranului.Coordonatele fizice pentru SCREEN 2 sint 0,0 si 199,639.
Se accepta orice valori atit timp cit x1 nu este egal cu x2 si
y1 este diferit de y2.Daca nu se specifica nici un parametru pentru
WINDOW se trece din nou in coordonate fizice(marginile ecranului)
Enuntul WINDOW permite efectuarea efectelor de ZOOM si TIMBRU adica
de marire sau micsorare a imaginilor.
-forma WINDOW[SCREEN](x1,y1)-(x2,y2)
-exemplu 10 WINDOW (-10,-20)-(30,40)
20 VIEW (40,60)-(100,120)
30 LINE (-5,-12)-(25,37)
sau 10 SCREEN 2:CLS
20 WINDOW (-6,-6)-(6,6)
30 CIRCLE (4,4),5,1
40 REM-cercul este vizibil doar partial
50 WINDOW (-100,-100)-(100,100)
60 CIRCLE (4,4),5,1
70 REM -cercul este mic
80 END
-expresii asociate;
VIEW
WRITE -enunt
-Scrie pe ecran valorile din (lista de expresii)utilizind virgula
(,) pe post de separator si ghilimelele(") pentru incadrarea
sirurilor de caractere alfanumerice (litere).Dupa fiecare linie
de adresa executa automat salt la linia urmatoare.
-forma WRITE(lista de expresii)
-exemplu 10 LET A=10:LET B=20:LET C$="abcdefg"
20 WRITE A,B,C$
-expresii asociate;
READ,WRITE#
WRITE# -enunt
-Scrie date intr-un fisier secvential desemnat prin (numar canal)
Datele din (lista de expresii) pot fi separate prin virgula(,)
sau punct si virgula (;) si incadrate intre ghilimele daca sint
caractere alfanumerice(litere).
-forma WRITE#(numar canal),(lista de expresii)
-exemplu 10 LET A=1.23
20 LET B$="abcde"
30 WRITE #1,A,B$
-expresii asociate;
INPUT#,READ,WRITE
Pentru toate definitiile limbajului GW-BASIC notiunea de enunt se
suprapune cu cea de instructiune.
-156-
SINTEZA GW-BASIC
COMENZI:AUTO,BLOAD,BSAVE,CHDIR,CLEAR,CONT,DELETE,EDIT,FILES,GWBASIC,
KILL,LCOPY,LIST,LLIST,LOAD,MERGE,MKDIR,NAME,NEW,RENUM,RESET,
RMDIR,RUN,SAVE,SHELL,SYSTEM,TRON,TROFF,
ENUNTURI(INSTRUCTIUNI):CALL,CHAIN,COMnON\OFF\STOP,COMMON,DATE$,DEF FN,
DEF SEG,DEF USR,DEFINT,DEFSNG,DEFDBL,DEFSTR,DIM,END,ENVIRON,
ERASE,ERROR,FOR\NEXT,GOSUB\RETURN,GOTO,IF...GOTO...ELSE,
IF...THEN...ELSE,KEY\ON\OFF\STOP,LET,MID,ON COMn GOSUB,ON ERROR\
GOTO,ON...GOSUB,ON...GOTO,ON KEYn GOSUB,0N PLAYn GOSUB,ON TIMERn\
GOSUB,OPTION BASE,PLAY,PLAY\ON\OFF\STOP,POKE,RANDOMIZE,REM,
RESTORE,RESUME,STOP,SWAP,TIME,TIMER\0N\OFF\STOP,WAIT,WHILE\WEND,
ENUNTURI(INTRARE-IESIRE cu transfer de date):BEEP,CIRCLE,CLOSE,CLS,COLOR,
DATA,DRAW,FIELD,GET,INPUT,INPUT#,IOCTL,LINE,LINE INPUT,LINE INPUT#
LOCATE,LPRINT,LPRINT USING,LSET/RSET,ON TIMERn GOSUB,OPEN,OPEN COM,
OUT,PAINT,PRESET,PRINT,PRINT USING,PRINT#,PRINT# USING,PSET,PUT,
READ,RESET,SCREEN,SOUND,VIEW,VIEW PRINT,WIDTH,WINDOW,WRITE,WRITE#
FUNCTII:ABS,ATN,CDBL,CINT,COS,CSNG,EXP,FIX,INT,LOG,RND,SGN,SIN,SQR,TAN,
FUNCTII SIR:ASC,CVI,CVS,CVD,INSTR,LEN,VAL
FUNCTII(INTRARE-IESIRE):CSRLIN,EOF,ERDEV,ERR,ERL,FRE,INP,LOC,LOF,LPOS,
PEEK,PLAY,PMAP,POINT,POS,SCREEN,TIMER,USR,VARPTR
FUNCTII TIP SIR:CHR$,LEFT$,MID$,RIGHT$,SPACE$,STRING$
FUNCTII(INTRARE-IESIRE TIP SIR):DATE$,ENVIRON$,ERDEV$,HEX$,INKEY$,INPUT$,
IOCTL$,MKI$,MKS$,MKD$,OCT$,SPC,STR$,TAB,TIME$,VARPTR$
REGULI GENERALE DE EDITARE SI DEPANARE
Fiecare linie de program trebuie numerotata.Numarul de linie este
cuprins intre 0-65535.O linie contine o instructiune sau mai multe sepa-
rate prin (:).Variabilele se definesc prin litere si/sau cifre (primele
40 sint semnificative) si pot fi siruri,nr intregi,nr reale in simpla sau
dubla precizie.Dupa numele variabilei $=sir,%=intregi,!=simpla precizie,
#=dubla precizie.Variabilele se declara explicit prin DEFINT,DEFSTR,
DEFSNG,DEFDBL.Orice variabila poate fi indexata.Nr max pentru variabile
indexate este 255.Nr max de elemente/dimensiune=32767.Operatorii aritme-
tici sint:+,-,*,/,^.Operatorii de relatie sint:=,<,>,<=,=>,>=,=<,<>,><.
Operatorii logici sint:NOT,AND,OR,XOR,IMP,EQV.Functii aritmetice:ABS,INT,
SQR,EXP,LOG,RND,SGN,COS,SIN,TAG,ATN.Functii de intrare:INKEY$,INPUT$,INP,
POS,LPOS,PEEK.Functii disponibile:FREE,USR,VARPTR,LOC,EOF,SWAP.Cicluri
de operatii:FOR...NEXT,WHILE...WEND.Salturi peste linii:GOTO,IF...THEN,
IF...GOTO,ON...GOTO,ON ERROR GOTO.Operatii intrare/iesire disc:SAVE,LOAD,
OPEN,CLOSE,INPUT,LINE INPUT,PRINT,PRINT USING,WRITE,GET,PUT,KILL,NAME.
Comenzi suplimentare grafice:VIEWPORT,WINDOW,MOVE,RMOVE,DRAW,RDRAW,ROTATE
Dupa scrierea unei linii se tasteaza ENTER.Se pot utiliza majuscule sau
minuscule.Stergerea memoriei se face cu NEW,a ecranului cu CLS,a liniilor
cu DELETE.CLEAR initializeaza variabilele la zero.LIST listeaza programul.
Programele din memorie se incarca cu LOAD.Programele se lanseaza cu RUN.
STOP sau ESC intrerupe programul CONT il continua iar END il inchide.
-157-
EXEMPLE DE PROGRAME SI JOCURI IN LIMBAJ BASIC
EXERCITIU PENTRU FORMARE DE TABELE
10 CLS
20 PRINT "Introduceti numarul de produse"
30 INPUT P
40 DIM T(12,P)
50 FOR K=1 TO P
60 PRINT "Introduceti cantitatile de produse"
70 INPUT A(K)
80 NEXT K
90 PRINT "Introduceti luna (in cifre 1,2....12)"
100 INPUT L
110 FOR K=1 TO P
120 PRINT "LUNA";L;"PRODUSUL NUMARUL";K;
130 PRINT "CANTITATEA";A(K)
140 NEXT K
Observatie;exercitiul contine mai multe variabile notate cu P,K,L si
mai multe constante alfanumerice de gen text cum sint "LUNA","PRODUSUL
NUMARUL" si "CANTITATEA".Ca regula generala,orice valaore numerica sau
caracter grafic din program care pastreaza aceesi marime sau forma in
tot programul poarta numele de constanta iar cele care pot primi sau
in urma unor operatii urmeaza sa primeasca valori diferite in timpul
executiei programului poarta numele de variabile.Pentru introducerea
de constante si variabile numerice se utilizeaza ca identificatori
cifre si litere iar pentru introducerea de constante si variabile de
tip text sau reprezentari grafice se utilizeaza litere si cifre urmate
de semnul $.
EXERCITIU PENTRU CALCULUL DE PERMUTARI SI COMBINARI
10 PRINT "PERMUTARI SI COMBINARI"
20 PRINT "Introduceti numarul total de elemente"
30 INPUT N
40 PRINT "Introduceti numarul de elemente din subgrupa"
50 INPUT D
60 LET P=1
70 LET C=1
80 FOR I=N-D+1 TO N
90 LET P=P*I
100 NEXT I
110 FOR J=2 TO D
120 LET C=C*J
130 NEXT J
140 PRINT "Sint posibile";p;"Permutari"
150 PRINT "si";P/C;"Combinari"
160 END
Observatie;cele doua bucle for...next executa cite o serie de operatii
echivalente cu scrierea unui numar factorial (unele programe au functie
directa pentru numerele factoriale).In mod similar se pot calcula si
reprezenta grafic functii cu un domeniu definit de valori.
-158-
JOC DE ZARURI
5 CLS
10 PRINT "JOC DE ZARURI TIP POKER "
15 PRINT "NR1";"NR2";"NR3";"NR4";"NR5"
20 LET A=INT(RND*6+1)
30 LET B=INT(RND*6+1)
40 LET C=INT(RND*6+1)
50 LET D=INT(RND*6+1)
60 LET E=INT(RND*6+1)
69 PRINT "**************************"
70 PRINT A;B;C;D;E
71 PRINT "**************************"
80 PRINT "Doriti sa schimbati numerele?Pentru NU tastati 0 altfel
tastati 1,2 sau 3 numere"
81 INPUT w:PRINT "Alegeti numerele pe care le schimbati,cu virgula
intre ele"
82 IF w=0 THEN 91
83 IF w=1 THEN 86
84 IF w=2 THEN 87
85 IF w=3 THEN 90
86 INPUT x:GOTO 91
87 INPUT x,y:GOTO 91
90 INPUT x,y,z
91 LET L=A
92 LET M=B
93 LET N=C
94 LET O=D
95 LET P=E
100 IF x=1 OR y=1 OR z=1 THEN LET L=0
110 IF x=2 OR y=2 OR z=2 THEN LET M=0
120 IF x=3 OR y=3 OR z=3 THEN LET N=0
130 IF x=4 OR y=4 OR z=4 THEN LET O=0
140 IF x=5 OR y=5 OR x=5 THEN LET P=0
150 REM-Se opereaza modificarile pentru numerele selectate
160 IF L=0 THEN LET L=INT(RND*6+1)
170 IF M=0 THEN LET M=INT(RND*6+1)
180 IF N=0 THEN LET N=INT(RND*6+1)
190 IF O=0 THEN LET O=INT(RND*6+1)
200 IF P=0 THEN LET P=INT(RND*6+1)
208 PRINT "Formatia finala este"
209 PRINT "****************************************"
210 PRINT L;M;M;O;P
211 PRINT "****************************************"
220 PRINT "CONTINUATI? pentru DA tastati 1 pentru nu 0"
230 INPUT s
240 IF s=1 THEN GOTO 5
250 END
-159-
ARIA UNUI POLIGON
10 PRINT "Calculul ariei pentru un poligon neregulat"
20 PRINT "Se incadreaza aria dorita cu un dreptunghi impartit in
patratele cu latura de o unitate"
30 PRINT "Se descrie fiecare punct din marginea poligonului prin
numarul de patratele in jos si lateral (coordonate)"
40 PRINT "Se calculeaza aria prin formula:"
50 PRINT "A=(x1+x2)*(y1-y2)/2+(x2+x3)*(y2-y3)/2+....+(xn+x1)*(yn-y1)/2"
60 PRINT "In formula n reprezinta numarul de puncte descrise iar x este
numarul de patratele in sus si y nr patratele la dreapta
pentru fiecare punct descris."
70 PRINT "Introduceti numarul de puncte descrise"
80 INPUT n
90 PRINT "Introduceti coordonatele fiecarui punct cu virgula intre ele"
95 PRINT "Prin x introduceti numarul de patratele in sus si prin y
numarul de patratele la dreapta in dreptunghiul grila"
100 FOR x=1 TO n
110 INPUT a(x),b(x)
120 NEXT x
130 PRINT "Aria de calculat este descrisa prin punctele cu coordonatele:"
140 FOR x=1 TO n
150 PRINT a(x),b(x)
160 NEXT x
170 FOR x=1 TO n-1
180 LET q=q+(a(x)+a(x+1))*(b(x)-b(x+1))
190 NEXT x
200 LET w=q+(a(n)+a(1))*(b(n)-b(1))
210 LET S=ABS(w/2)
220 PRINT "Aria poligonului este:"
230 PRINT S
240 PRINT "unitati (patratele)"
250 END
VOLUMUL BUTOIULUI
5 CLS
10 PRINT "Volumul butoiului"
15 PRINT "Daca nu se cunoaste raza se masoara perimetrul si
se imparte la 2x3,14"
20 PRINT "V=3,14xhx[d/2+2/3(D/2-d/2)]^2(^2=ridicare la patrat)"
30 PRINT "Introduceti inaltimea butoiului h= ?cm"
40 INPUT h
50 PRINT "Introduceti raza mare= ?cm"
60 INPUT R
70 PRINT "Introduceti raza mica= ?cm"
80 INPUT d
100 DEF FNV(h,R,d)=4*R*R*h*3.14/36+12*d*R*h*3.14/36+9*d*d*h*3.14/36
110 PRINT "Volumul butoiului este de ;";FNV(h,R,d);"cm cubi"
120 PRINT "sau";FNV(h,R,d)/1000;"litri"
130 END
-160-
JOC LOTO
10 PRINT "JOC LOTO"
20 PRINT "Introduceti numerele preferate de la 1 la 45"
30 PRINT "Introduceti primul numar"
40 INPUT A
50 PRINT "Introduceti al doilea numar"
60 INPUT B
70 PRINT "Introduceti al treilea numar"
80 INPUT C
90 PRINT "Introduceti al patrulea numar"
100 INPUT D
110 PRINT "Introduceti ultimul numar"
120 INPUT E
125 PRINT "Numerele alese sint:"
130 PRINT A;B;C;D;E
140 LET x=INT(RND*45+1)
150 LET y=INT(RND*45+1)
160 LET z=INT(RND*45+1)
170 LET q=INT(RND*45+1)
180 LET w=INT(RND*45+1)
190 IF x=y OR x=z OR x=q OR x=w THEN 140
200 IF y=x OR y=z OR y=q OR y=w THEN 150
210 IF z=x OR z=y OR z=q OR z=w THEN 160
220 IF q=x OR q=y OR q=z OR q=w THEN 170
230 IF w=x OR w=y OR w=z OR w=q THEN 180
235 PRINT "Numerele extrase sint"
240 PRINT x;y;z;q;w
250 IF x=A OR x=B OR x=C OR x=D OR x=E THEN LET L=x
260 IF y=A OR y=B OR y=C OR y=D OR y=E THEN LET M=y
270 IF z=A OR z=B OR z=C OR z=D OR z=E THEN LET N=z
280 IF q=A OR q=B OR q=C OR q=D OR q=E THEN LET O=q
290 IF w=A OR w=B OR w=C OR w=D OR w=E THEN LET P=w
300 PRINT "Aveti urmatoarele numere cistigatoare"
310 PRINT L;M;N;O;P
320 PRINT "Doriti sa continuati? pt DA TASTATI 1 pt NU 0"
330 INPUT K
340 IF K=1 THEN GOTO 10
350 END
EXERCITIU GRAFIC
5 CLS
10 FOR x=0 TO 6 STEP 28*36/3650
20 FOR y=0 TO 10 STEP 1/60
30 PLOT 200+150*SIN(x),200+150*COS(x)
40 PLOT 200+150*SIN(x)+50*SIN(y),200+150*COS(x)+50*COS(y)
50 NEXT y
60 NEXT x
In exercitiul de mai sus modificati pe rind valorile numerice si
observati modificarile produse in imaginea grafica.
-161-
NUMARUL DE ZILE DINTRE DOUA DATE
10 PRINT "Numarul de zile dintre doua date"
20 PRINT "Introduceti prima data"
30 PRINT "Ziua"
40 INPUT Z1
50 PRINT "Luna"
60 INPUT L1
70 PRINT "Anul"
80 INPUT A1
90 LET x=INT(365.25*A1)+30*(L1-1)+Z1
100 IF L1=2 THEN LET x=x+1
110 IF L1=3 THEN LET x=x-1
120 IF L1=6 OR L1=7 THEN LET x=x+1
130 IF L1=8 THEN LET x=x+2
140 IF L1=9 OR L1=10 THEN LET x=x+3
150 IF L1=11 OR L1=12 THEN LET x=x+4
160 PRINT "data 1=";x;"zile de la CHRISTOS"
170 PRINT "Introduceti a doua data"
180 PRINT "Ziua"
190 INPUT Z2
200 PRINT "Luna"
210 INPUT L2
220 PRINT "Anul"
230 INPUT A2
240 LET y=INT(365.25*A2)+30*(L2-1)+Z2
250 IF L2=2 THEN LET y=y+1
260 IF L2=3 THEN LET y=y-1
270 IF L2=6 OR L2=7 THEN LET y=y+1
280 IF L2=8 THEN LET y=y+2
290 IF L2=9 OR L2=10 THEN LET y=y+3
300 IF L2=11 OR L2=12 THEN LET y=y+4
310 PRINT "data 2=";y;"zile de la CHRISTOS"
320 LET N=y-x
330 PRINT "Numarul de zile dintre cele doua date (data2-data1) este="
340 PRINT N
350 PRINT "Continuati? pentru DA tastati 1"
360 INPUT q
370 IF q=1 THEN GOTO 10
380 END
CEAS ELECTRONIC
10 FOR h=0 TO 24
20 FOR m=0 TO 60
30 FOR s=0 TO 60
40 PRINT "CEAS ELECTRONIC"
50 PRINT "ora minut secunda"
60 PRINT h;TAB(5)m;TAB(10)s
70 FOR x=0 TO 750:NEXT x
80 CLS
90 NEXT s
100 NEXT m
110 NEXT h
120 GOTO 30
130 CLEAR:GOTO 10
(pentru reglarea ceasului in linia 70 se modifica 750(nr mai mic/mai mare)
Dostları ilə paylaş: