Організація розвязку задач на сучасній ЕОМ

Етапи підготовки до розв'язання задачі на комп'ютері: вибір числового методу, розробка ефективного алгоритму рішення і побудова блок-схеми, складання та перевірка правильності програми, підрахунок і обробка результатів. Поняття алгоритмічної мови.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 08.12.2010
Размер файла 540,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

NEXT I

Також EXIT DO

Якщо із WHILE/WEND потрібно вийти , то обрамляють конструкцію циклом DO/LOOP і виходять EXIT DO . Також із SELECT.

30 INPUT A

IF A>100 THEN PRINT "Це багато" : GOTO 30

IF A=100 THEN GOTO 300

PRINT A/100 : GOTO 30

300 …..

або

DO

INPUT A

IF A<100 THEN

PRINT A/100

ELSE IF A>100 THEN

PRINT "Це багато"

END IF : LOOP WHILE A<>100

Замість цього

DO

SELECT CASE A

CASE IS<100 : PRINT A/100

CASE IS>100 : PRINT "Багато"

CASE IS=100 : EXIT DO

END SELECT

LOOP

3. Умовна передача управління

а) Простий умовний оператор

IF L THEN S

L-логічний вираз . Якщо він істинний , то виконується оператор S , якщо хибний, то виконується наступний оператор,

a S пропускається

S - один або декілька операторів через " : "

Наприклад:

x=0 Блочний

START :

x=x+1

IF x<20 THEN

GO TO PRINTOUT

END IF

END

PRINTOUT :

PRINT "x=";x

GO TO START

або

INPUT "Два числа", А , В

IF A>B THEN PRINT "A>B"

IF B>A THEN PRINT "A<B"

Замість IF X<>Y AND B<>0 THEN GO TO 500

можна ----- | | ----- THEN 500

або ----- | | ----- GO TO 500

або

REM N!

10 READ N

F=1 : K=1

30 F=F*K

IF K<N THEN K=K+1 : GO TO 30

PRINT N,F

IF N<7 GO TO 10

DATA 3,5,7

END

б) Повний умовний оператор

Використовується коли перевіряється одна або дві умови в програмі

IF L THEN S ELSE S1 в одному рядку

Ці оператори можна вкладати один в одного . В ролі L записується або логічний вираз або арифметичний . Якщо арифметичний , то ціла частина порівнюється з нулем.

Якщо не дорівнює нулю , то THEN , якщо =0 , то ELSE.

IF A=B THEN ? "рівні" ELSE IF A>B THEN ? "більше" ELSE ? "менше"

Як правильно "розгалужують?"

m0 : INPUT A стара структура

ON A GOSUB m1,m2,m3,m3,m4,m4,m4

GO TO m5

m1 : Зручніше

… INPUT A

RETURN SELECT CASE A

m2 : CASE IS =1

… …

RETURN x=y*z

m3 : …

… CASE IS =2

RETURN …

m4 : CASE IS =3,4

RETURN CASE 5 TO 7

m5 : …

END SELECT

в) Блочний умовний оператор

IF/END IF

IF<умова>THEN-(більше ніяких записів)

блок операторів

EXIT IF

ELSE IF<умова>THEN

<блок операторів>

EXIT IF

ELSE IF<умова>THEN

<блок операторів>

EXIT IF

Якщо всі фрагменти хибні, то управління передається на наступний фрагмент ELSE<блок операторів>

END IF

Оператор EXIT-використовується для реалізації виходу із структурних блоків до закінчення виконання всіх операторів. Форма оператора EXIT залежить від вигляду блоку із якого здійснюється вихід і від версії мови.

Для IF-EXIT IF

Для FOR-EXIT FOR

Для WHILE-EXIT WHILE

Після виходу управління передається оператору,що йде за останнім оператором відповідного структурного блоку.

Наприклад:

IF X<0 THEN

IF Z<>0 THEN GO TO 123

Y=0

EXIT IF

123 y= -1

ELSE IFX<10 THEN

Y=1

PRINT SPC(3);X

ELSE IF X<100 THEN

Y = 3

PRINT SPC(2); X

ELSE IF X<1000 THEN

Y=3

PRINT SPC(1);X

Якщо ці умови не виконуються, то управління предається на наступний оператор

ELSЕ

Y=4

PRINT X

END IF

Приклади:

Повний умовний оператор

CLS

DO

INPUT"ВВЕДІТЬ ЧИСЛО > = 0 і <1000:", X

IF X>=0 AND Х<1000 THEN EXIT DO ELSE PRINT "ПОВТОРІТЬ ВВІД"

LOOP

Блочний умовний оператор

DO

INPUT "ВВЕДІТЬ ЧИСЛО...",X

IF X>= 0 AND X<1000 THEN

EXIT DO

ELSE

PRINT "ПОВТОРІТЬ"

END IF

Повний умовний

IF X<10 THEN Y=1 ELSE IF X< 100 THEN Y=2

ELSE Y=3 PRINT"ЧИСЛО МАС"; Y;"ЗНАКІВ"

Блочний умовний

IF X<10 THEN

Y=1

ELSE IF X<100 THEN

Y=2

ELSE

Y=3

END IF

PRINT "ЧИСЛО МАС"; Y; "ЗНАКІВ"

Якщо потрібно здійснити перевірку більш складних умов ніж так/ні краще використовувати селективний умовний оператор

SELECT/END SELECT

EXIT SELECT В QB НЕМАЄ

Селективний умовний оператор

SELECT CASE <вираз вибору>

Арифметичний або символьний, значення якого порівнюється із списками перевірок

CASE <СПИСОК ПЕРЕВІРОК 1>

<блок операторів> будь-яка послідовність операторів

CASE <список перевірок 2>

<блок операторів>

CASE ELSE

<блок операторів>

END SELECT

Наприклад:

SELECT CASE x

Case<10, >50

PRINT "УВАГА"

CASE -20 TO -5, 100 TO 200

PRINT "АВАРІЯ"

CASE ELSE

PRINT "НОРМА"

END SELECT

Якщо істинне то виконується. Менша границя записується першою.

В Квік -Бейсіку порівняння записується

CASE IS <10, >50

Елементи списку перевірок 3-х типів в селективному операторі такі:

- вираз

- вираз ТО вираз

- I$ вираз із знаками логічних відношень

<= >= …

CASE -1 TO -5 НЕПРАВИЛЬНА, ПОТРІБНО

CASE -5 TO -1

INPUT TEST VALUE

SELECT CASE TEST VALUE

CASE 1, 3, 5, 7

PRINT "НЕПАРНЕ"

CASE 2, 4, 6, 8

PRINT "ПАРНЕ"

CASE I$ <1

PRINT "ДУЖЕ МАЛЕ"

CASE I$ >9

PRINT "ВЕЛИКЕ"

CASE ELSE

PRINT "НЕ ЦІЛЕ ЗНАЧЕННЯ"

END SELECT МОЖНА І ТАК

CASE 1 TO 4, 7 TO 9, 11, 13, I$ > MAX

Якщо вираз вибору задовільняє декільком умовам перевірок CASE, то виконується 1 блок операторів. Блоки SELECT CASE можуть бути вкладеними.

Приклад:

Розпізнавання натискування різних клавіш

CONST DOWN=80, UP=72, LEFT=75, RIGHT=77

CONST ESC=27, ENTER=13

CONST HOME=71,ENDKEY=79, PgDn=81,PgUp=73

DO

Натискання клавіши

DO

CHOISE$=INKEY$

LOOP WHILE choise$= " "

IF LEN (choise$)=1 THEN Len-довжина, кількість символів даного рядка

Клавіші ASCII

SELECT CASE ASC (choise$) LEN ("Рядок")=5

ASC-код із таблиці ASCII, що відповідає першому символу в символьному виразі:ASC(символьний вираз)

CASE ESC

PRINT "ESC"

END

CASE ENTER

PRINT "ENTER"

CASE IS<32,127

PRINT " Управляючі коди"

CASE 48 TO 57

PRINT "Великі букви"; choise$

CASE 97 TO 122,160 TO 175,224 TO 241

PRINT "малі букви";choise$

CASE 176 TO 223

PRINT "символ псевдографіки";choise$

CASE ELSE

PRINT "знак пунктуації";choise$

END SELECT

ELSE

перетворення розширеного коду

choise$=RIGHT$(choise$,1) дає правий один символ

SELECT CASE choise$

CASE CHR$(DOWN) дає рядок 1-ого символу, ASCII код якого є аргументом

PRINT "стрілка вниз"

CASE CHR$(UP)

PRINT "стрілка вверх"

CASE CHR$(PgDn)

PRINT "PgDn"

CASE CHR$(ENDKEY)

PRINT "END"

CASE CHR$(RIGHT)

PRINT "Стрілка направо"

CASE ELSE

BEEP

END SELECT

END IF

LOOP

Циклічна структура

3-й вид структури - циклічний, має такі оператори : FOR / NEXT, WHILE / WEND, DO / LOOP

Оператор циклу FOR/NEXT

Організація циклічного виконання операторів, що повторюються до тих пір поки змінна циклу не досягне заданого значення, здійснюється оператором циклу.

FOR< зміна циклу > = X TOY [STEPZ]

< тіло циклу >

NEXT< змінна циклу >

де змінна циклу - деяка змінна цілого типу або дійсної звичайної точності;

X, Y, Z - арифметичні вирази, значення яких є початковим значенням змінної циклу, кінцевим значенням та приростом (кроком) змінної циклу, відповідно;

Тіло циклу - рядки програми з операторами, що виконуються в циклі.

Виконання оператору циклу починається з присвоєння змінній циклу вказаного початкового значення. Потім виконуються оператори, що складають тіло циклу. В результаті виконання оператора NEXT до біжучого значення змінної циклу додається приріст (крок), після чого отримане значення порівнюється з кінцевим значенням. Якщо значення змінної циклу буде більшим за кінцеве значення, то цикл закінчується і управління передається оператору, що йде за оператором NEXT. Якщо ні, то будуть знову виконуватись оператори тіла циклу. Так виконується оператор циклу, якщо крок додатній. Якщо ж крок відємний, то в ході виконання циклу значення змінної циклу зменшується і вихід із циклу відбудеться тоді, коли змінна циклу стане меншою за кінцеве значення. Фрагмент STEP можна опустити, якщо крок = 1. Вивід перших 11 стовпців трикутника Паскаля. Кожний елемент трикутника є сумою 2-х елементів зліва від нього.

CLS

CONST maxcol = 11

DIM A ( maxcol, maxcol )

FOR m=1 TO maxcol

верхня і нижня границі =1

A(m,1)=1: A(m,m)=1

NEXT m

FOR m=3 TO maxcol

FOR n=2 TO m-1

A(m,n)=A(m-1,n-1)+A(m-1,n)

NEXT n

NEXT m

вивід з середини екрану

startrow=13

FOR m=1 TO maxcol

col=6-m

row=startrow

FOR n=1 TO m

LOCATE row,col :PRINT A(m,n)

row= row+2

NEXT n

PRINT : startrow=startrow-1

NEXT m

Якщо параметри циклу задані не константами, а більш складними арифметичними виразами, то перед початком циклу визначається їх значення і далі вони не коректуються (не змінюються), навіть якщо в тілі циклу змінюється значення змінних, що входять в ці вирази. Тіло циклу не виконується ні разу, якщо X > Y для Z >0 і X > Y для Z >0.

Для економії часу виконання програми змінну циклу та параметри варто задавати за допомогою змінних цілого типу.

При достроковому виході із циклу за умовою значення змінної циклу зберігається. При нормальному виході значення змінної = останньому (кінцевому) значенню плюс крок.

F = 1

FOR K = 1 TO N, STEP 1 можна опустити step 1

F = F*K

NEXT K k можна не писати

;

Розглянемо обчислення суми 20 елементів масиву X={X1,X2,…,X20}, тобто

Задачу можна розвязати послідовним сумуванням

S1=X1; S2=S1+X2; S3=S2+X3; S20=S19+X20;

Рекурентна формула для обчислення суми будь-якого числа N елементів матиме вигляд

S0=0

Sk =S k-1 +X k, де k=1,2,…,N

S=0 : S=S=X(k), де другий оператор потрібно виконати N разів

OPTION BASE 1OPTION BASE 1

DIM X (20)DIM X(20)

S=0S=0

K=1абоFOR K = 1 TO 20 STEP 1

18 S=S+X(K)S = S +X(K)

K=K+1NEXT K

IF K<=20 THEN 18

Добуток

Рекурентна формула Po=1; Pk=Pk-1 *ak

OPTION BASE = 1

DIM X(20)

P=1

FOR K=1 TO 20

P=P*K

NEXT K

ВКЛАДЕНІ ЦИКЛИ

FOR i=1 TO 5

FOR j=0 TO -10 step -2

FOR K=5.5 TO 10.5 STEP .5

NEXT k

NEXT j

FOR l=2 TO 20 step 2

NEXT l

NEXT I

Внутрiшнiй цикл повинен знаходитися повністю в тiлі зовнішнього циклу, передача управління ззовні всередину циклу поза оператором FOR недопустима.

Можна достроково закінчити виконання циклу оператором EXIT FOR.

Цикл WHILE-WEND

Якщо наперед невідоме число повторення циклу, незаданий однозначно крок зміни параметру циклу або виконується цикл з нестандартними , непередбаченими умовами завершення, то зручніше користуватися не умовними операторами в середині циклу, а спеціальним оператором WHILE-WEND, який забезпечує роботу циклу із закінченням за умовою.В операторі WHILE використовуються арифметичні вирази. В цьому випадку виконання циклу повторяється до тих пір поки значення виразу буде відмінним від нуля.

WHILE <арифметичний вираз>

< Тіло циклу >

WEND

Наприклад N=5

F=1 :K=1N = 5

WHILE N-KWHILE N - K

F=F*K

K=K+1

WEND обчислення 5!

Вихід із циклу - рівність нулю арифметичного виразу. Достроковий вихід - EXIT WHILE - в QB неможливий.

Є ще більш потужні оператори циклу DO/LOOP.

Цикли DO/LOOP

У оператора DO/LOOP є два можливих формати:

1) DO

< тіло циклу >

LOOP WHILE або UNTIL <логічний вираз >

2) DO WHILE або UNTIL <логічний вираз >

< тіло циклу >

LOOP.

У 1) варіанті спочатку виконуються оператори, що складають тіло циклу, після чого проводиться перевірка умов повторення циклу. Таким чином цей цикл виконується завжди бодай один раз.

У 2) варіанті спочатку проводиться перевірка умов повторення циклу і якщо вони не виконуються, цикл не виконується ні один раз.

Фрагменти WHILE і UNTIL містять умови, що визначають вихід із циклу або його повторення. В конструкції WHILE записується умова, хибність якої означає вихід із циклу. Хибність логічного виразу в конструкції UNTIL означає повторення циклу.

Приклад: вивести на екран числа від 9 до 6.

Модульна структура.

Модуль - це окрема, повністю незалежна від інших, частина Вашої програми. Кожний модуль має головну частину. В ній описуються процедури і функції модуля операторами DECLARE, CONST. Один із модулів є головним. Він містить так звану точку входу, з якої розпочинається виконання програми. В кожній програмі один головний модуль. До нього можна підєднати 1 або декілька допоміжних модулів.

Переваги модульного програмування:

Так як допоміжні модулі - це окремі файли програми, то в них виносяться процедури і функції, які використовуються одночасно в декількох програмах. Таким чином Ви збираєте програму із готових блоків (модулів);

Якщо Ви доповнюєте або виправляєте якусь процедуру або функцію із допоміжного модуля, то всі виправлення стають автоматично доступними всім вашим програмам, які використовують ці модулі;

Зосередження допоміжних модулів в одному місці полегшує відшукання необхідного фрагменту тексту і уникання повторів.

В складі модуля можна виділити такі самостійні блоки: функції DEFFN, процедури SUB і FUNCTION.

В мові QB можна контролювати область дії змінних і констант. Вона може бути:

глобальною

локальною

сумісно використовуваною

Змінна чи константа вважається глобальною, якщо вона визначена на рівні модуля. Щоб її зробити глобальною потрібно добавити атрибут SHARED при описанні змінної оператором DIM, REDIM або COMMON. Для констант достатньо CONST.

Локальні змінні і константи існують тільки в модулі або процедурі, де вони використовуються. Якщо не обявлено щось інше, то всі змінні в кожному модулі вважаються локальними. Якщо змінна з цим іменем використовується в іншому модулі, то QB вважає її новою змінною. При вході в процедуру чи функцію значення змінних зануляється.

Якщо ж ви хочете, щоби значення змінних не занулялись, то потрібно добавити ключове слово STATIC при описанні процедури і тоді змінні будуть зберігатися між викликами процедур.

Кількість параметрів в процедурах бажано звести до min. Найбільш оптимальним є 7 ( "правило кіно", якщо більше 7 дійових осіб, то глядачеві важко запамятувати)

Використання INCLUDE - файлів

Виділити {SHIFT+стрілки} оператори програми що треба перенести в INCLUDE-файл;

DECLARE, CONST, DEF тип FN і перенести їх в буфер (SHIFT+DEL).

- Створити новий файл {ALT-F, C}, як INCLUDE - файл і перенести в нього вміст буферу (SHIFT - INS ).

В головну частину всіх модулів програми добавити директиву $INCLUDE: імя файлу, що включається .

Статья II. Оператор-функції.

Раздел 2.01 Розглянемо лінійну форму оператор-функції.

Раздел 2.02 DEF FN (x)=E

- записується без пропуску з FN

- ідентифікатор, X - список формальних параметрів, що розділяються комами, тобто імена фіктивних змінних, що резервують місце в памяті для фактичних

значень. Фактичні значення повинні бути обчислені до моменту виконання функції,

E - вираз, який визначає, які дії виконує дана функція.

Операндами в E є формальні параметри із списку X. Операндами можуть бути і інші змінні, елементи масивів, функції. Тип результату сумісний з типом імені функції (або текстовий, або числовий).

Обчислення значення виразу відбувається в момент звернення до функції . Звернення здійснюється за допомогою вказання імені функції FN зі списком уже фактичних параметрів A: FN (A)

Число фактичних і формальних параметрів повинно співпадати : кожне значення фактичного параметру буде підставлене замість відповідного формального параметру. При цьому повинна бути сумісність за типами. Фактичні параметри можна задавати виразами.

DEF FNSTRAP(A,B,H)=0.5*(A+B)*H

20 INPUT "верхня основа трапеції" ; ATR INPUT "нижня основа трапеції " ; BTR

INPUT "висота трапеції" ; HTR

PRINT "площа трапеції " ; FNSTRAP(ATR, BTR, HTR)

IF FNSTRAP(ATR, BTR, HTR) 0 THEN GOTO 20

В якості аргумента не можуть бути масиви, записи або символьні рядки фіксованої довжини.

функція FN$ перетворює будь - яке число в символьний рядок і забирає початковий пропуск.

DEF FNs$(a): FNs$(a)=LTRIM$(STR$(a)) (підрівняти, зібрати,left )

A=100: PRINT"" ; STR$(a) ;"" STRING дає символьне представлення числа, чи числового виразу.

A=100 PRINT">"; FNS$(a); ""

A#=100: PRINT">"; FNS$(a#);

A%=100: PRINT">"; FNS$(a%);

A&=100: PRINT">"; FNS$(a&);

END FN

Результат

>100<

>100<

>100<

>100<

PR%=50000

PRINT"прибуток склав"+STR$(PR%)+".00 грн."

Результат

Прибуток склав 50000.00 гривнів.

При виконанні функції вказані значення підставляються замість формальних параметрів тільки в даній функції і ніде інде, навіть якщо в програмі зустрічаються змінні з тими ж іменами, що у формальних параметрів. Якщо у вираз , який визначає оператор - функцію, входять які-небудь не фіктивні змінні , то при обчисленні функції використовують їх біжучі значення. Тип і точність результату визначається іменем функції.

Наприклад : DEF FNSC (X,Y)=A*(X^2+Y^2) задає алгоритм обчислення суми квадратів двох чисел, помножених, на деяке біжуче значення A.

Звернення до функції FNSC(B,C); B,C - фактичні параметри.

В операторі DEF FNдля визначення функції можна використовувати тільки один рядок. В мові QUICK-BASIC взаємне розташування виклику функції та її описання немає значення.

Блочна форма оператор - функції.

DEF FN<імя> [(<список параметрів>)]

[LOCAL<список змінних>] Не зберігають значень мір викликами

[STATIC<список змінних>] Зберігають свої значення між викликами функції

[SHARED<список змінних>] глобальні

<оператор>

.....................

[EXIT DEF] - дозволяє вийти із функції не чекаючи її кінця.

.....................

[FN<імя>=<вираз>] якщо не присвоюється ніяке значення то FN=0

…………….

END DEF

DEF FNLOG10 (x)

FNLOG10 = LOG(x)/LOG (10)

END DEF

INPUT "введіть число"; N

PRINT 10,0^FNLOG10 (N)

END

Площа трикутника

DEF FNSTRE (A,B,C)

STATIC P

IF A=0 OR B=0 OR C=0 THEN EXIT DEF P=(A+B+C)/2

FNSTRE= SQR (P*(P-A)*(P-B)*(P-C))

END DEF функція INPUT "довжини сторін трикутника"; A,B,C S=FNSTRE(A,B,C)

PRINT "площа трикутника"; S

END

Функція не може викликати сама себе , тобто бути рекурсивною. Може викликатися із того модуля , де вона визначена, з інших - ні DEF FN не перевіряє тип передаваного числового аргументу. Краще використовувати FUNCTION/END FUNCTION.

Підпрограми

Будь-яка сукупність операторів може бути виділена в підпрограму. Підпрограма може розташовуватись в будь-якому місці програми. Початок програми визначається номером рядка, або міткою. Вони вказують на те місце, куди повинно бути передане управління при викликові підпрограми оператором GOSUB. Повернення до місця виклику на оператор, наступний за викликом підпрограми, відбувається при виконанні оператора RETURN.

Формат оператора такий:

GOSUB <покажчик>

Покажчик - це номер рядка або мітка.

Підпрограма може містити декілька операторів RETURN, якщо повернення потрібно здійснювати із різних точок підпрограми.

Для захисту від помилкового входу в підпрограму перед її першим оператором варто розмістити один із операторів: GOTO, STOP, END або RETURN попередньо підпрограми.

Підпрограма може викликатись із декількох точок програми

RETURN <покажчик>

після виконання управління передається в указаний рядок Наприклад:

Два квадратних рівняння

10 N=1

20 Read A,B,C

30 GOSUB 90

40 PRINT "X1"; X1, "X2="; X2

50 N=N+1

60 IF N>2 THEN 80 ELSE 20

70 DATA 1.4, 5.2 , .7 , 2.6, 4.8 , 1.1

80 END

90 R=SQR (B^2-4*A*C)

100 X1= (-B+R)/(2*A)

110 X2= (-B-R)/(2*A)

120 RETURN

GOSUB і RETURN повинні знаходитись в одному модулі. Це застарівша конструкція. Краще процедури SUB або FUNCTION і функція FN.

GOSUB можна застосовувати всередині SUB і FUNCTION.

SUB TestSUB (X%)

SELECT CASE X%

CASE IS=1: y%=x% : GOSUB DRAWRESULT

CASE IS=2 : y%=x%^2 GOSUB DRAWRESULT

CASE IS=3 : y%=x%^4 GOSUB DRAWRESULT

END SELECT

END SUB

DRAWRESULT :

IF y%=0 THEN BEEP : RETURN

LOCATE 11,10: PRINT y%

RETURN

Процедури

SUB / END SUB - ця конструкція дозволяє описати набір операторів, що виконуеться при викликові із будь - якого місця програми. На відміну від FN, що обчислює тільки одне значення, SUB обчислює значення декількох змінних або масивів. Процедура може розташуватися в будь- якому місці програми. Допускається рекурсивний виклик процедури.

SUB<імя> [(<змінна>[(n)][,<змінна>[(n)]…)]

[LOCAL<СПИСОК ЗМІННИХ>]

[STATIC СПИСОК ЗМІННИХ >] підвищує швидкість виконання процедури [SHARED <СПИСОК ЗМІННИХ >]

<оператори>

[EXIT SUB]

<оператори>

END SUB

Формальні - параметри тільки імена змінних та масивів з ()

Імя - імя процедури довжиною до 40 символів. В процедуру можна передати не більше 16 параметрів.

Імя масиву задається з пустими дужками. Всередині SUB не можна визначити процедури SUB і FUNCTION , функції DEF FN , а також використовувати оператори GO SUB , GOTO, RETURN для входу в процедуру або виходу із процедури.

STATIC означає, що всі змінні , локальні для SUB, є статичними. Їх значення зберігаються між викликами. Не використовується в рекурсіях.

Виклик процедури відбувається за допомогою

CALL <імя> [(<змінна>[()] [, <змінна>…)]

Кількість і тип фактичних параметрів при викликові процедур повинні співпадати з кількістю та типом формальних параметрів.

Фактичні параметри в процедурі передаються за значенням, або за зсилкою . Ними можуть бути константи, вирази, імена змінних або масивів з пустими дужками.

Наприклад:

1) SUB DRUKR (A$(1), ROZM)

SHARED N()

LOCAL i

DIM N (ROZM), A$ (ROZM)

FOR i=1 TO ROZM

PRINT N (i), A$(i)

NEXT i

END SUB

CALL DURKR(IM$(),DL )

2) x=1

y=1

CALL add(x,y)

PRINT x,y

END

SUB add(x,y)

x=x+1

y=y+1

END SUB

Модулі (оператор CHAIN)

Нами були розглянуті способи організації програми, коли всі її частини знаходяться в оперативнiй памяті Крім цього, в Бейську можна збирати програми iз модулiв у виглядi файлiв на зовнішніх носіях (машинних дисках) за допомогою оператора CHAIN шляхом завантаження модуля в основну памяті і передані йому управління.

CHAIN "<імя файлу>"

CHAIN "P2.exe"

В результаті модуль, що знаходиться в даному файлі , завантажується в оперативну память, й потім виконується .

3) DECLARE SUB Trans Matrix(A%(),B%()) Обявити процедуру Trans Matrix

всі змінні цілі

DEFINT A-Z

резервує масив для матриці A і транспонованої матриці B D

IM Matrix1 (5,5),

matrix 2 (5,5)

1-ша матриця заповнюється числами від 1 до 25

start=1

FOR i=1 TO 5

FOR j=1 TO 5

Matrix 1 (I ,j)=start

Start= start+ 1

NEXT j

NEXT I

CLS

Виводиться початкова матриця

PRINT "початкова матриця" : PRINT пропуск рядка

FOR I=1 TO 5

FOR j=1 TO 5

PRINT USING "##" ; Matrix 1 (I, j)

NEXT j

PRINT

NEXT I PRINT Транспонування матриці викликом

CALL Trans Matrix ( Matrix 1(), matrix 2())

Вивід транспонованої Матриці

PRINT "транспонована матриця" : PRINT

FOR I= 1 TO 5

FOR j= 1 TO 5

PRINT USING "##" ; matrix 2 (I; j);

NEXT j

PRINT

NEXT i

SUB Trans Matrix (a(),b())

ця процедура транспонує матрицю a ()

результат запишеться в матрицю b()

визначається розмірність матриці

вважається що матриця квадратна

Kil = U BOUND(a)

FOR i=1 TO kil

FOR j=1 TO kil

B(j, I)= a (I, j)

NEXT J

NEXT I

END SUB

Результат

Початкова матриця

Транспонована матриця

Процедура FUNCTION

Процедура FUNCTION імя [(параметри)]

[оператори]

імя = вираз

[оператори]

END FUNCTION

Будь - яка змінна , що не входить в список параметрів є локальною.

Рекурсивні процедури FUNCTION

FUNCTION FACTORIAL # (n%) рекурсивна процедура

IF n% > 0 THEN

FACTORIAL # = n% * FACTORIAL (n%-1)

ELSE

FACTORIAL # =1 0!=1

END IF

END FUNCTION

DECLARE FUNCTION_FACTORIAL # (n%) програма

FORMAT$ = " # # _!=# # # # # # # # # #"

DO

INPUT "введіть число від 0 до 20 або -1 для виходу" ; Num %

IF Num% >= 0 AND Num%<= 20 THEN

PRINT USING FORMAT$ ; Num%; FAKTORIAL# (Num%)

END IF

LOOР WHILE Num%>= 0

END

Потрібно обовязково передбачити умови виходу.

Графічні засоби

Точки (пікселі) розташовуються на екрані у вигляді прямокутної матриці, утворюючи горизонтальні рядки та вертикальні стовпці. Відрахунок стовпців (координата х) ведеться зліва направо, а рядків (координата у) - зверху вниз. Крайня верхня ліва точка має координати (0,0). В правому нижньому куті розташовується точка з координатами (319*199) або (639*199). Точка, що світиться, характеризується яскравістю та кольором. Кількість точок залежить від роздільної здатності екрану та адаптера, що застосовується. Графічні адаптери CGA, EGA, VGA, HDA.

Установка режиму роботи дисплея проводиться оператором SCREEN [<режим>][<колір>]

Режим - 0(текстовий),1,2, 7,8,910,11,12,13

Колір - 0 або 1, він включає або виключає кольорове зображення. За винятком 1 ця опція ігнорується. В режимі 1 значення опції <колір>=0 означає використання кольорового зображення. Для режиму 0 - навпаки.

У всіх версіях Бейсіка є оператори Window, View, та функція PMAP, що дозволяє перевизначити абсолютні координати точок на екрані дисплея, а значить змінити вигляд інформації, що виводиться на екран.

Графічні оператори

CLS, CIRCLE, COLOR, LINE, PALETTE USING, PAINT, PRESET, PSET

Оператор CLS [0|1|2]

CLS - стирання екрану. Все зображення з екрану стирається, екран зафарбовується в фоновий колір, а останньою викресленою точкою вважається точка в центрі екрану.

1 - очищає тільки графічний екран, 2 - очищає тільки текстовий, залишаючи останній рядок, 0 - очищає і текст, і графіку.

Оператор COLOR

COLOR - управління кольором графічного зображення

COLOR [<фон >] [<палітра >] для SCREEN 1

COLOR [<передній план>] [<фон>] для SCREEN 7-10

COLOR [<передній план>] для SCREEN 12,13 . Фон відсутній. Його можна установити шляхом присвоєння номеру кольору атрибуту 0 оператором PALETTE. Наприклад, щоб зробити фоновий колір світло-фіолетовим (8224), потрібно вжити PALETTE 0,8224.

В режимах 2 і 11 використання COLOR викликає помилку. При SCREEN 11 для установки кольору потрібно використати оператор PALETTE. Параметр палітра приймає значення 0 або 1.

Палітра 0 - {0, 1, 2, 3}

фон зел черв коричн (золотистий )

Палітра 1 - {0, 1, 2, 3}

фон гол пурп коричн

Для режимів екрану SCREEN 12 і 13 задається тільки колір переднього плану. Для 12 - від 0 до 15 і для 13 від 0 до 255

7 і 8 - значення номеру кольору переднього плану від 1 до 15,а фону від 0 до 15

9 - передній план від 1 до15 (або від 1 до 3 при 64К екранної памяті),а фон від 0 до 63 (або від 1 до 15 при 64К)

10- передній план від 0 до 3 {1-сірий, 2-мерехтить, 3-яскраво білий} фон від 0 до 8 (0 - чорний, 1-мерехтить, 2-яяскраво мерехтить, 4-срібний, 5-мерехтить від сірого до яскраво білого, 6-яскраво мерехтить, 7-мерхтить від сірого до яскраво білого, 8-яскраво-білий).

Оператор LINE - викреслювання ліній або прямокутника на екран.

LINE [[STEP] (X1,Y1)] - [STEP] (X2,Y2)[, [<колір >] [,B[F]] [,<маска>]]]

(X1,Y1), (X2,Y2) -- координати точок екрану. Якщо X1, Y1 опущені, то беруться координати останньої накресленої точки.

При STEP значення координат розглядаються відносними.

CLS

SCREEN

COLOR

LINE (60, 120) - (10, 5), 1

LINE (10, 5) - (5, 70), 2

або LINE (60, 120) - (10, 5), 1

LINE - (50, 70), 2

Прямокутник (квадрат)

LINE (70, 80) - (80, 90), 2 , BF - контур щоб зафарбувати весь квадрат потрібно добавити F

LINE (5, 10) - (25, 25)

LINE (25, 25) - (75, 75)

або LINE - STEP (50, 50)

LINE (40, 40) - STEP (50, 50)

або LINE (40, 40) - (90, 90)

Маска дозволяє будувати різні перервані (дискретні) лінії.

&HFAFA (1111 1010 1111 1010) 0 - точка не фарбується

1 - точка фарбується

&HAAAA (1010 1010 1010 1010)

<маска> не повина використовуватись сумісно з B i F

колір переднього (із палітри)

Діагональ екрану

LINE (0, 0) - (639, 199)

LINE (X1, Y1)- (X2, Y2),,,&HFAFA

Оператори PSET [STEP] (X, Y) [, <колір>] і PRESET [STEP] (X,Y) [, <колір>]- зображення точки в указаній позиції (X, Y) - координати позиції екрану, куди повинна бути поставлена точка, за допомогою кольору; <колір > - ціле число, що відповідає атрибуту кольору із допустимого діапазону заданого режиму екрану (із палітри). Фрагмент [STEP] вказує, що координати точки є відносними і відраховуються від останньої зображеної точки. В результаті виконання операторів PSET i PRESET в указаній позиції на екрані появиться точка указаного кольору. Відрізняються ці оператори тим, що при відсутності параметру <колір > оператор PSET ставить точку кольором переднього плану, а оператор PRESET - кольором фону.

SCREEN 1 320x200

PSET (10, 10)

FOR i=1 TO 100 пунктирна горизонтальна лінія

PSET STEP (2, 0), 2 точками червоного кольору

NEXT i

FOR y=102 TO 1 STEP -2 витирання накресленої лінії

PRESET (y, 10)

NEXT y

Оператор CIRCLE [STEP] (X,Y), <радіус> [,<колір>] [,[<початок>], [<кінець>] [,<сплющеність>]] - малювання кола або еліпсу

(X, Y) - координати центру еліпсу, які можуть задаватись в абсолютних та відносних значеннях.

STEP - ця опція вказує на відносність координат щодо останньої накресленої точки. Після креслення еліпсу останньою точкою вважається центр еліпсу.

<радіус> - великий радіус еліпсу (кола)

<колір> - ціле число, що задає колір, яким буде накреслено еліпс

<початок> і <кінець> - можуть приймати значення від -2П до +2П. По умовчанню <початок> = 0 радіан, а <кінець> = 2П радіан, <сплющеність> - числовий вираз, що дорівнює відношенню вертикальної осі еліпсу до горизонтальної. Ця величина = (5/6 для SCREEN 1). Оператор CIRCLE розміщує еліпс на екрані так, що його осі паралельні до осей системи координат.

Параметри <початок> і <кінець> задають кути в радіанній мірі. Кути відраховуються від горизонтальної осі проти годинникової стрілки. Дуга малюється від точки, що відповідає першому вказаному кутові, до точки, що відповідає другому кутові. Якщо задається відємне значення кута, то для побудови дуги береться абсолютне значення кута, а відповідна крайня точка дуги зєднується відрізком прямої лінії з центром еліпсу. Для нуля треба задати мале відємне число - -0,001

CIRCLE (100, 100), 50,,0, - 1.57 пропущений колір

Оператор PALETTE, PALETTE USING

PALETTE, PALETTE_USING - заміна кольорів, що складають палітру (EGA, VGA).

PALETTE [<атрибут>, <колір>]

PALETTE USING <імя масиву> [<номер першого елементу>]

<атрибут> -- номер кольору, що є в графічних операторах (LINE, PSET, CIRCLE), і який треба поміняти на інший колір, що вказується параметром <колір>.

<імя масиву> -- імя масиву що містить номери кольорів, які будуть надані атрибутом кольору. Якщо для якогось атрибуту колір не змінюється, то елемент масиву =-1. Якщо параметрів немає , то стандартні кольори. Ці оператори дозволяють створювати кольорові ефекти на екрані, без перемальовування зображень.

PALETTE 2, 4 заміна кольору всіх точок екрану з 2 на 4

PALETTE повернення до стандартної палітри кольорів

Оператор PAINT

PAINT -- зафарбовування області екрану.

PAINT [STEP] (X, Y) [, [<колір>] [, <контур>] [, <фон>]]

[STEP] -- вказує на те, що координати початкової точки забарвлення (X, Y) є відносними.

(X, Y) -- координати внутрішньої точки замкнутої області, яку потрібно замалювати.

<колір> -- ціле число, що відповідає атрибуту кольору або CHR$(&Hnn)+CHR$(&Hnn)+... довжиною до 64 байтів для задання текстури малюнку.

<контур> -- ціле число, що відповідає кольору контуру границі області забарвлення.

<фон> -- символьний вираз із 2-х символів, що використовується для уточнення границі малюнку при замальовуванні області екрану текстурою. При виконанні PAINT задана область екрану зафарбовується в указаний колір. Границі області повинні б попередньо бути накреслені і їх колір вказується параметром <контур>. Зафарбовану область утворюють всі точки, до яких можна перейти від точки (X, Y) рухаючись тільки по горизонталі і вертикалі так, щоб не пересікати точок з кольором контуру.

Оператор VIEW

VIEW [[SCREEN][(Х1,У1)-(X2,Y2)[,<колір>][,<контур>]]] - визначає прямокутну область на екрані (віртуальному)

(X1,Y1)-(X2,Y2) - координати лівого верхнього та правого нижнього кутів прямокутної області екрану (віртуального вікна).

Контур - будь-який числовий вираз, тоді прямокутна область буде обрамлена по краю одинарною лінією. Якщо SCREEN немає, то всі координати точок, використані в графічних операторах, зсуваються відносно лівого верхнього кута. Якщо є, то координати абсолютні. Якщо

VIEW (10,15) - (200,300), то

PSET (20,20) буде креслити точку з координатами (30, 35).

Оператор VIEW без параметрів визначає прямокутну область рівну всьому екрану VIEW можна використовувати для створення ефекту переміщення обєкта. Для цього потрібно переміщати прямокутну область, малюючи зображення тим же оператором:

SCREEN 1

FOR I=1 TO 50

VIEW (I,I)-(150,150): GO SUB 100

NEXT I

END

100 CIRCLE (50,50), 30, 1

FOR I=1 TO 100

NEXT I

Статья III. CLS

RETURN рух кола.

Оператор WINDOW

WINDOW [[SCREEN](X1, Y1)-(X2, Y2)] -- пере визначення координат точок екрану.

(X1, Y1), (X2, Y2) -- координати, що присвоюються кутовим протилежним точкам прямокутної області екрану (прямокутна область визначається оператором VIEW). Відповідно змінюються координати всіх решт точок екрану. Якщо опція SCREEN опущена, то створюється декартова система координат, тобто координатами лівої нижньої точки стають (X1, Y1), а координати верхньої точки (X2, Y2). При наявності SCREEN - (X1, Y1) - ліва верхня точка, а (x2,y2) - права нижня. Підрозуміваємо, що (x1,y1) менші за (x2,y2), якщо ні, то вони переставляються автоматично WINDOW (100,1)-(1,100) виконується як WINDOW (1,1)-(100,100)

Змінюючи діапазон координат, що визначається оператором WINDOW, можна змінювати масштаб обєктів, що виводяться на екран одним і тим же графічним оператором. Так при збільшенні діапазону координат зображуваний обєкт зменшується і навпаки

SCREEN 2 640*200

X= 100: DELTA = 10

FOR I = 1 TO 10

DO WHILE X < 200 AND X > 10

X = X + DELTA

CLS

WINDOW (-X,-X)-(X,X)

CIRCLE (0,0),80,1

LOOP

NEXT I

WINDOW - в 2 рази зменшує швидкість виводу графіки на екран

Функція PMAP

PMAP (<координати>,<режим>) - перетворення координатами точки на екрані.

<координати> - координата точки, що повинна бути перетворена:

SCREEN 2

WINDOW SCREEN (100,100) - (200,200)

X=PMAP (100,0) X=0

Y=PMAP (100,1) Y=0

X=PMAP (639,2) X=200

Y =PMAP (199,3) Y=200

0 - перетворення координати Х із системи координати визначеної оператором Window, в абсолютну координату точки на екрану.

1 - Y.

2 - перетворення абсолютні координату Х точки на екрані в систему координат, що визначає Window.

Програма для побудови ліній функції Y=kx

X ={0 до 200}

K ={0,1 до 1,0}

DATA 0.1, 0.2, 0.3 0.4 0.5

DATA 0.6, 0.7, 0.8, 0.9, 1.0

DEF FNLIN (K,X) = K*X

SCREEN 2

For I=1 to 10

READ A(I)

NEXT I

LINE (0,0) - (255,0),1

LINE (0,0) - (0,191),1

X0 =0

XK =200

FOR I=1 TO 10

LINE (X0, FNLIN(A(i),X0))-(XK,FNLIN(A(i),XK)),1

NEXT I

END

Мови графічного виводу

Макромова графічного виводу включає ряд операторів, які використовуються для конструювання зображень: рух вверх, вниз, наліво, направо з малюванням ліній або без, зміна кольору, повороти та зміна масштабу. Ці можливості реалізуються за допомогою оператора DRAW. Отож,

Оператор DRAW <рядок> - створення зображень за допомогою мови графічного виводу (DRAW - креслити).

<рядок> - рядок символів, що містить команди мови графічного виводу.

Команди руху

"Un" або "U=" + VARPTR$(A%) - рух вверх;

"Dn" або "D=" + VARPTR$(A%) - рух вниз;

"Ln" або "L=" + VARPTR$(A%) - рух наліво;

"Rn" або "R=" + VARPTR$(A%) - рух направо;

"En" або "E=" + VARPTR$(A%) - рух по діагоналі вверх і направо;

"Fn" або "F=" + VARPTR$(A%) - рух по діагоналі вниз і направо;

"Gn" або "G=" + VARPTR$(A%) - рух по діагоналі вниз і наліво;

"Hn" або "H=" + VARPTR$(A%) - рух по діагоналі вверх і наліво;

"Мх,у" "М="+ VARPTR$(A%) + ",="+ VARPTR$(В%) - рух до точки.

n - віддаль проходження в точках екрану. При цьому кількість пройдених точок на екрані буде дорівнювати значенню n помноженому на масштабний коефіцієнт, що задається командою S. По умовчанню S =1.

х,у - координати точки. Малюнок на папері і малюнок перенесений по координатно на екран не співпадають, тому що горизонтальний розмір екрану більший за вертикальний 4/3 рази і крім того роздільна здатність екрану різна вздовж горизонтальної і вертикальної осей. Для врахування цих спотворень вводяться для різних режимів такі коефіцієнти

1

2

7

8

9

11,12

13

EGA

5/6

5/12

5/6

5/12

35/48

VGA

5/6

5/12

5/6

5/12

35/48

1/1

5/6

DRAW "R15U40G60"

Або

А=15: В=40: С=60

DRAW "R=" + VARPTR$(A) + "U=" + VARPTR$(B) + "G=" + VARPTR$(C)

Модифікація команд руху

Перед будь-якою командою руху може бути написаний префікс, який модифікує команду. Префікси такі:

В - рухатись, але не малювати точок;

N - рухатись, але в кінці повернутись в початкову точку.

DRAW "R60D80L60U80BR30BD70NE25NH25"

Команди повороту А і ТА. Накреслені ліній повертаються на заданий кут, при цьому фігури автоматично перетворюються так, щоб їх лінійні розміри не спотворювалися при повороті.

An - установлює кут повороту n х 90, де n = 0,1,2,3…

ТАn - кут дорівнює n градусів -360о? n?+360о. Якщо n - додатнє, то поворот проти годинникової стрілки, якщо відємне, то за годинниковою стрілкою.

SCREEN 1

FOR i = 0 TO 360 STEP 20

DRAW "TA="+VARPTR$(i)+"NU50"

NEXT i

Команди задання кольору - Сn і Рn,m.

Сn - надає накресленим зображенням номер кольору, який дорівнює n. Допустимі значення параметру n залежать від режиму екрану. По умовчанню використовується колір попереднього плану.

Рn,m - замальовує фігуру в колір з номером n. Границею зафарбованої фігури вважається найближча замкнута лінія кольору m. Малювання розпочинається з точки, що була намальована останньою.

SCREEN 1

N = 2: M = 1

N$ = VARPTR$(N)

M$ = VARPTR$(M)

DRAW "C="+N$+"D60R60U60L60BF10P=" + M$ + ",=" + N$

Команди установки масштабу - Sn

n - 1?255. Коефіцієнт зміни масштабу зображення приймається як n/4. Після задання масштабу віддалі, що задані в командах руху множаться на масштабний коефіцієнт. По умовчанню він = 1, тобто n=4.

SCREEN 1

FOR i = 4 TO 16 STEP 4

DRAW "S=" + VARPTR$(i) + "BH70D40R50U40L50"

NEXT i

Команди виконання підрядка "X" + VARPTR$(A$)

По цій команді малюнок будується у відповідності з командами, що містяться в указаній рядковій (символьній) змінній

SCREEN 1

A$ = "D60R60U60L60"

DRAW "C1X" + VARPTR$(A$) + "BR100C2X" + VARPTR$(A$)

Створення динамічних зображень

Імітація руху обєктів на екрані дисплея може бути реалізована за допомогою операторів GET i PUT.

GET - запамятовування заданої прямокутної області екрану в масиві.

GET (Х1,У1) - (Х2,У2), <масив>

(Х1,У1) - (Х2,У2) - координати двох точок прямокутної області екрану, розташованих в протилежних кутах по діагоналі;

масив - імя масиву, в який заноситься інформація про зміст вказаної області екрану.

GET заносить в масив інформацію про колір точок, що знаходяться в прямокутній області екрану. Масив може мати будь-який тип і будь-яку розмірність. Інформація розташовується побайтно. Кількість байтів необхідних для запамятовування кольорів всіх точок прямокутної області висотою n і шириною р визначається формулою 4 + INT ((р * В + 7) / 8) * n

В - число бітів, необхідних для запису номеру кольору точки при вибраному режимі роботи екрану.

Режими

1

2

7,8

9=64К

9>64К

10

11

12

13

Кіл-кість бітів на піксель

2

1

4

2

4

2

1

4

8

Х1 кратність

4

8

2

2

4

4

8

2

Швидкість використання оператора GET залежить від кратності координат Х1. (Х1,У1) (40,80) в режимі 1 (100 х 100)прямокутник.

Кількість байтів 4 + INT ((100 * 2 + 7)/8) * 100 = 2504

Цілочисельний масив розмірності 1252 елементів.

Дійсний масив (4 байти) розмірності 626 елементів.

DIM A(626)

SCREEN 1

GET (40,80) - (139,179), A

PUT - вивід на екран зображення записаного в числовому масиві.

PUT (х,у), <масив>[<режим>]

(х,у) - координати верхнього лівого кута прямокутної області, куди має бути розміщено зображення із числового масива.

Масив - імя масиву, в якому міститься необхідне зображення.

Режим - параметр, що визначає спосіб виводу зображення на екран. Ним може бути PSET, PRESET, XOR, OR, AND.

Перенесення зображення із масиву на екран починається із вказаної точки (х,у).

PSET - в цьому режимі нове зображення заміщає те зображення, що було на екрані.

PRESET - дає негативне зображення.

Режими AND, OR, XOR дозволяють отримати комбінацію зображення на екрані та зображення, що переноситься із масиву.

При відсутності режиму установлюється режим XOR. При цьому режимі розміщення одного і того ж зображення два рази в одне і те саме місце на складний фон відновлює фон без всяких змін. Використовуючи цю властивість, можна отримати ефект руху зображення за допомогою такої послідовності дій:

- розмістити зображуваний обєкт на екран в режимі XOR;

- затримати на деякий час зображення на екрані (тобто стерти);

- повторно розмістити обєкт в режимі XOR;

- задати координати нового місця розташування обєкту і повторити описану послідовність дій.

Рух кульки по екрану

DIM B% (125)

(640x200) SCREEN 12 640 x 200

Rem (4+INT((41*1+7)/8)*41= 250

CIRCLE (20,20), 18, 1 , , , 5/12

PAINT (20,20), 1

GET (0,0)-(40,40), B%

X=0: Y=0: DELTA X=2: DELTA Y=1

DO WHILE NOT INSTANT

X=X+DELTA X : Y=Y+DELTA Y натиснута клавіша -1 не натиснута -0

Rem Хибність логічного виразу означає вихід із циклу

IF X<1 OR X>590 THEN

DELTA X= -DELTA X

BEEP `подача звукового сигналу на частоті 800 Гц на протязі 0,25 сек.

END IF

IF Y<1 OR Y>150 THEN

DELTA Y = - DELTA Y

BEEP

END IF

PUT (X,Y) , B% , PSET

LOOP

DELAY - задання паузи

DELAY <інтервал>

Інтервал - арифметичний вираз, значення якого дорівнює тривалості паузи в секундах.

Оператор зупиняє розрахунок програми на вказаний час, а потім виконується наступний оператор . Точність задання паузи - 0,054 сек.

BEEP або PRINT CHR $ (7)

SOUND

1. Після того як картина сформована та записана за допомогою GET в ОП компютера її не потрібно програмувати заново. Користуючись оператором PUT , картину завжди можна вивести на екран дисплея , перемістити або стерти її образ в памяті . Ці операції використовуються з високою швидкістю, що і забезпечує можливість побудови рухомих зображень.

2. Якщо образ картинки записаний за допомогою GET в память, його можна потім переписати в файл для подальшого використання.

3. Діючи тим же методом, що користуються художники- мультиплікатори, за допомогою операторів GET і PUT можна створювати ілюзію руху. Мультиплікатори досягають цього ефекту, накладаючи одну на одну картинки, намальовані на прозорій плівці. Оператори GET і PUT також дозволяють формувати на екрані "нашаровані " зображення

Практично можливості операторів GET і PUT обмежуються тільки фантазією та часом програміста. GET і PUT взаємно доповнюють одне одного. За допомогою PUT на екран виводиться вміст масиву памяті, в якому зберігається образ зображення. GET, навпаки, запамятовує цей образ в масиві.

Ці оператори використовуються в такій послідовності: спочатку якимось способом на екрані малюється картинка, потім вона записується за допомогою GET в масив памяті і нарешті оператор PUT повертає її на екран.

Щоб ефективно застосовувати пару GET і PUT необхідно розібратися як здійснюється перенесення інформації про зображення в масив памяті і як ця інформація знову перетворюється в зображення на екрані.

По мірі того як на екрані дисплея малюється картинка, в памяті графічного адаптера формується її образ у вигляді послідовності двійкових кодів. При роботі в режимі стандартної роздільної здатності стан кожного пікселя екрану відбиває вміст двох бітів памяті. Піксель - це кольорова пляма, яка може мати, покрайній мірі, 4 кольори, і щоб їх закодувати, потрібно 2 біти (0 - колір фону, що рівносильно зникненню пікселя; 1, 2, 3 - коди кольорів ).

При виконанні GET послідовність бітів, що відповідає пікселям, що є в намальованій області екрану, яка задається двома парами координат, розбивається на байти даних (по 8 в одному). Ці байти переписуються в масив, що названий в операторі GET, елементи якого мають формат, що визначається типом масиву.

Малювання узору

DEFINT A - Z

графічний режим 640 x 350 x 16 кольорів

SCREEN 9

FOR I=1 TO 600

FOR J=1 TO 15

COLOR J

LINE (71*J,25) - (I*50, 725)

NEXT J

NEXT I

FOR I = 600 TO 1 STEP - 1

FOR J = 1 TO 15

COLOR J

LINE (71*J,25) - (I*50, 725)

NEXT J

NEXT I

DO

LOOP WHILE INKEY$ = ""

CONST PI = 3.141593

SCREEN 12 640 x 480

CIRCLE (320, 100), 200,, - PI , - PI/2

CIRCLE STEP (-100, -42), 100

еліпс

CIRCLE STEP (0, 0), 100, , , , 5/25

LOCATE 25,1: PRINT "натисніть будь-яку клавішу";

DO

LOOP WHILE INKEY$ = ""

PAINT

рожева рибка з бірюзовим хвостом

CONST PI = 3.1415926536

CLS

SCREEN 1

CIRCLE (190,100), 100, 1 , , , .3 тіло

CIRCLE (265,92), 5 ,1 , , , .7 око

PAINT (190,100), 2, 1 зафарбовування тіла

LINE (40,120) - STEP (0, -40) , 2 хвіст

LINE - STEP (60, 20) , 2

LINE - STEP (-60, 20) , 2

PAINT (50,100), 1, 2 зафарбовує хвіст

CIRCLE (250,100), 30, 0, PI - 3/4, PI - 5/4, 1.5 жабри

FOR Y = 90 TO 110 STEP 4

LINE (40,Y) - (52, Y) , 0 зафарбовування хвоста

NEXT Y

Робота з клавіатурою.

Для роботи з клавіатурою є функції INKEY$, INPUT$, та оператори KEY, KEY(n), INPUT, LINE INPUT, функція INSTAT. При викликові функції INKEY$ аргументи не вказуються. Ця функція буде давати черговий символ введений з клавіатури без видачі його на екран. Коди і відповідні клавіші є в таблицях. В ході виконання функції компютер не переходить в стан чекання натискування клавіші і тому якщо до цього моменту не натиснута ні одна клавіша, функція INKEY$ дає пустий рядок. При натиснутій клавіші з якимось символом ця функція дає рядок ,що складається з одного символу. Якщо натиснута управляюча ,функціональна клавіша чи комбінація клавіш, то функція дає рядок із двох символів. Перший байт в цьому випадку дорівнює значенню &H00, а другий -розширеному коду клавіатури. INKEY$- ввід символів з клавіатури, зручне пристосування ,яке дозволяє писати програми ,що не заставляють користувача вводити дані з клавіатури. Користувачеві потрібно лише підвести курсор до обєкту та натиснути певну клавішу, а програма доробить все решта. Ще одна особливість -якщо користувач все-таки вимушений вводити дані з клавіатури. то по крайній мірі йому не потрібно натискувати клавішу ENTER Змінна INKEY$ "перехоплює" кожний код, що вводиться, перш ніж відповідний символ засвітиться на екрані. Вивід символу затримується до тих пір, поки користувач сам його не зініціює. Не важко зробити так, щоби деякі із символів, що попадають в INKEY$,викликали певні реакції, а решту ігнорувались .Щоб використати можливості INKEY$, потрібно спочатку присвоїти її вміст іншій змінній, наприклад IN$=INKEY$

Нова змінна потім аналізується:

1.Якщо IN$-рядок нульової довжини, то ні одна клавіша не натискувалась. В цьому випадку здійснюється повернення до оператора присвоєння . (1)

2.Якщо IN$-рядок із одного символу, то його код відповідає останній натиснутій клавіші.

3.Якщо IN$- рядок із 2-х символів, то це означає, що натискувалась якась із управляючих, функціональних клавіш або комбінація клавіш.

Приклад: перевірка чи була введена з клавіатури буква "Р."

SCREEN 0,1:CLS:LOCATE 10,10

PRINT "Введіть літеру Р"

20 IN$=INKEY$

IF LEN(IN$)>1 OR IN$ <>"P" GOTO 20 LEN - довжина рядка

40 CLS: LOCATE 10,10

PRINT "Поздоровляю!"

END

CHR$ - символ згідно коду ASCII n =0 - 255

100 WHILE NOT INSTAT рівність нулю означає вихід із циклу

LOCATE 5,10: PRINT "Натисніть клавішу"

WEND

I=I+2

LOCATE 6,1:PRINT INKEY$

IF I <80 THEN 100

Оскільки виконання функції INKEY$ не передбачає чекання натискування клавіші, то для контролю стану клавіатури ця функція багаторазово викликається в циклі поки не появиться результат.

PRINT "Для продовження натисніть будь-яку клавішу"

10 IF INKEY$="-" THEN GOTO 10

IF I$ ="," OR I$ ="<" THEN DS=DS-1: GOTO 1 зменшення розмірів

IF I$ ="." OR I$ =">" THEN DS=DS+1: GOTO 1 збільшення розмірів

IF I$ = "x" OR I$="X" THEN GOSUB 5

IF I$=CHR$(0) +"H" THEN IO=IO-2

INPUT $(n)- читання заданої кількості символів з клавіатури. Ця функція дає рядок символів , що вводяться з клавіатури, кількість яких визначає аргумент цієї функції. Символи, що вводяться на екрані не видно. При виконанні цієї функції зраховуються всі символи , що були введені, включаючи управляючі.

10 A$=INPUT$(з)

A%=VAL(A$)

IF A%=0 THEN PRINT "повторіть ввід": GOTO 10

VAL - числова форма представлення значення символьної змінної

INSTAT - функція отримання інформації про стан клавіатури. Вона викликається без аргументу і = 1, якщо хоч раз була натиснута якась клавіша і = 0, якщо не натискувалась ніразу ніяка клавіша. Ця функція не очищає буфер клавіатури і тому вона буде давати значення 1 до тих пір поки буфер не очиститься іншою функцією або оператором, наприклад оператором INPUT. KEY-установка та відображення значень функціональних клавіш та визначення комбінацій клавіш, що спонукають передачу управління.

KEY{ ON |OFF| LIST }

KEY n, < рядок > n =1 - 10

KEY n, CHR$ < маска > +CHR$< код сканування > n = 15 - 20

n - числовий вираз, значення якого визначає номер функціональної клавіші, якщо воно значиться від 1 до 10.Якщо від 15 до 20, то воно визначає номер, який присвоюється комбінації клавіш.

<рядок> - будь-який символьний вираз довжиною до 15 символів, значення якого надається функціональній клавіші, а параметр <маска> - цілий вираз в межах від 0 до 255, що визначає комбінацію клавіш управління (Ctrl, Caps lock, Num lock, Alt, Left Shift, Right Shift)

<код сканування> - 1 - 83. Цей параметр задає алфавітно - цифрову клавішу, що натискується одночасно з клавішами управління, що задаються маскою. Коди приведені в таблиці

Так, якщо маска = 12 то повинні бути натиснуті клавіші Ctrl і Alt і триматись поки не буде натиснута клавіша, що задається кодом сканування.

KEY 18 , CHR$(8) + CHR$(18)

ALT + E

Тут визначається комбінація клавіш, яка потім може бути використана для передачі управління за допомогою оператора ON KEY (n) при одночасному натискуванні клавіш ALT та E.

KEY 5, "SYSTEM" + CHR$(13)

Цей оператор присвоює функціональній клавіші F5 рядок символів SYSTEM +ENTER і це буде сприйнято до негайного виконання.

Оператор KEY ON викликає значення функціональної клавіші на екрані в 25 рядку .При ширині екрану в 40 символів даються значення перших 5 функціональних клавіш, а при 80 - 10 клавіш. Оператор видає видає перших 6 символів.

KEY OFF - скасовує вивід на екран значень функціональних клавіш.

KEY LIST - виводить на екран значення всіх 10 функціональних клавіш і видає всі 15 символів .Дія функціональної клавіші відміняється при наданні їй порожнього рядка.

Якщо при виконанні функції INKEY$ натискується функціональна клавіша, то моделюється послідовний ввід символів, що складають рядок, приписаний цій клавіші і функція буде дорівнювати наступному символу значення цієї функціональної клавіші при зверненні до неї.

KEY(n) - управління слідкуванням за функціональними клавішами, клавішами управління курсором або заданими комбінаціями клавіш.

KEY(n) { ON OFF STOP }

n=1 - 20 , 1 - 10 - функціональні клавіші

11= курсор ^ , 12 - <; 13 - > ; 14 - v; 15 - 20 - задаються комбінації клавіш оператором KEY.

Оператор KEY(n) ON активізує програми обробки натискування функціональних клавіш, клавіш управління курсором та заданих комбінацій клавіш.

Сама програма обробки визначається оператором ON KEY.

KEY (n) STOP - відкладає виконання програми

KEY (n) OFF - події повязані з натискуванням клавіш не запамятовуються і не обробляються.

KEY (11) ON: KEY (12) ON: KEY (13) ON: KEY (14) ON

ON KEY (11) GOSUB 100

ON KEY (12) GOSUB 110

ON KEY (13) GOSUB 120

ON KEY (14) GOSUB 130

Якщо в ході виконання програми була визначена і активізована програма обробки, то перед виконанням кожного оператора перевіряється чи була натиснута відповідна клавіша і тільки тоді здійснюється перехід до рядка вказаного в таблиці .

ON KEY (n)

Трьохмірні обєкти в текстовому режимі .

Використання графічного режиму приводить до зниження швидкодії. Так в текстовому режимі (80х25) необхідно 2000 знакомісць на екрані , а в графічному (640 х 480) - потрібно оперувати з 307200 елементами зображення і це без урахування кольору. Використовуючи наведені приклади можна надати текстовій програмі ефект "обємності ",не використовуючи повільний графічний режим .

Обємні кнопки .

При створенні ефекту обємних кнопок застосовується такий прийом .Виводиться кнопка білим кольором (N7) з тінню із символів - і - .При натисненні на неї кнопка стає яскраво - білого кольору (N15), зсувається на 1 символ вправо, тінь щезає .В такому стані кнопка залишається натиснутою ~0.5 секунд.


Подобные документы

  • Розробка, налагоджування, тестування і документування програми на мові високого рівня С++ при рішенні на комп'ютері прикладної інженерної задачі. Використання принципів модульного і структурного програмування, зображення алгоритму у вигляді блок-схеми.

    курсовая работа [1,1 M], добавлен 07.08.2013

  • Загальна характеристика застосування верстатів з числовим програмним управлінням. Разгляд етапів та особливостей складання керуючої програми. Вимоги до алгоритму розв’язку задачі. Побудова блок-схеми алгоритму. Опис програмного забезпечення, вибір мови.

    курсовая работа [1,4 M], добавлен 24.05.2015

  • Визначення і розв’язання задачі Коші для звичайних диференціальних рівнянь першого порядку методом Ейлера, алгоритм розв’язання, похибка при вирішенні. Складання блок-схеми. Реалізація алгоритму у середовищі Borland Pascal. Результат роботи програми.

    курсовая работа [264,0 K], добавлен 20.08.2010

  • Розв’язання нелінійних алгебраїчних рівнянь методом дихотомії. Вирішення задачі знаходження коренів рівняння. Розробка алгоритму розв’язання задачі і тестового прикладу. Блок-схеми алгоритмів основних функцій. Інструкція користувача програмою мовою С++.

    курсовая работа [2,0 M], добавлен 24.09.2010

  • Метод розв’язків рівнянь більш високих порядків. Вибір методу розв'язання задачі Коші. Методи розв'язання крайових задач розглядаються на прикладі звичайного диференціального рівняння другого порядку. Вибір методу інструментальних засобів вирішення задач.

    курсовая работа [132,0 K], добавлен 03.12.2009

  • Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.

    курсовая работа [1,3 M], добавлен 23.06.2010

  • Алгоритми розв’язання задач у вигляді блок–схем. Використання мови програмування MS VisualBasic for Application для написання програм у ході вирішення задач на одномірний, двовимірний масив, порядок розв’язання задачі на використання символьних величин.

    контрольная работа [742,9 K], добавлен 27.04.2010

  • Побудова блок-схеми алгоритму проста вставка. Програмна реалізація алгоритму, опис результатів. Особливості обліку ітерації масивів. Відсортування даних за допомогою програми Turbo Pascal. Аналітична оцінка трудомісткості, графічне представлення.

    контрольная работа [570,1 K], добавлен 21.05.2014

  • Постановка та описання алгоритму розв’язання задачі про оптимальне призначення, формулювання вимог. Обґрунтування вибору засобів програмування. Розробка структури програми та системи її візуалізації, тестування та верифікація, оцінка ефективності.

    курсовая работа [1,1 M], добавлен 12.05.2013

  • Використання мови програмуванння Java при виконанні "задачі лінійного програмування": її лексична структура і типи даних. Методи розв’язання задачі. Особливості логічної структури програми, побудова її зручного інтерфейсу за допомогою симплекс методу.

    курсовая работа [437,9 K], добавлен 24.01.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.