Використання мови програмування Visual Basic для
вирішення математичних завдань h2>
Атестаційна робота з інформатики за 2005 - 2006
навчальний год.Кравченко Валерії учениці 10
Г класу Ліцею № 1 p>
2006 p>
Visual Basic h2>
В
моїй попередній роботі «Комп'ютерне моделювання руху тіл» розглядалися
можливості мови програмування QBasic для вирішення математичних
(професійних) завдань в умовах навчання учнів середніх шкіл та
професійних училищ. p>
Подальше
розвиток програмування призвело до появи нових програм адаптованих до
операційній системі Windows, і зокрема до появи Visual Basic. У даній
роботі я постараюся показати основні відмінності та переваги Visual Basic. p>
Так що ж таке Visual Basic? h2>
Перед
початківцями програмістами завжди постає одне й те ж питання, а саме, який
мова програмування вибрати? На чому програмувати? Звичайно краще починати з
легкого і в той же час потужного мови - Visual Basic (VB). Вивчивши прийоми
програмування на VB, можна без особливих зусиль вивчити інші мови, такі як
Pascal, C + + та ін p>
Слово
"БЕЙСІК" (BASIC) - "базовий, основний" - створене з
початкових букв англійського виразу "Універсальний мова символічного
кодування для початківців ". Це" для початківців "довго викликало
зневага програмістів, причому подібне нехтування не зникло до цих
пір, незважаючи на наявність професійних видань VB. p>
Перший
IMB PC мав 16-розрядний Бейсік - BASICA, розроблений IBM, а потім
витиснений майкрософтскім GW-BASIC і QUICK-BASIC. В останньому була прибрана
нумерація рядків і доданий компілятор, що перетворює Бейсік програму в
повноцінний exe файл. Нарешті в 1992р. фірмою Microsoft був випущений VB 1.0 --
дуже проста мова програмування для Windows 3.1. Потім були випущені VB
3.0, VB 4.0, VB 5.0 і нарешті VB 6.0. Останні дві версії мало чим відрізняються,
в шостої версії покращено ядро і додано кілька нових функцій. Існує
ще мова макросів для додатків Microsoft Office (Word, Excel і т.п.). Він
називається VBA (Visual Basic for Application). З його допомогою можна маніпулювати
додатками Office. p>
Програми
написані на Visual Basic відрізняються від звичайних програм тим, що вимагають
для своєї роботи бібліотеку msvbvmX0.dll, яка має бути присутня у
каталозі WindowsSystem. У ролі X виступає версія компілятора VB. Для VB5 --
msvbvm50.dll, для VB6 - msvbvm60.dll. Ці бібліотеки йдуть в комплекті з WinME
(обидві) і Win98 (тільки msvbvm50.dll), і природно з більш новими версіями цих
ОС. p>
Середа
Visual Basic може з успіхом використовуватися початківцями користувачами для
пізнання секретів програмування і захоплюючих занять по створенню
нескладних (спочатку) програм і, в той же час, надає потужні
інструменти розробки досвідченим програмістам. Розвинена довідкова система
дозволить при побудові програми та роботі в Visual Basic знайти вихід з будь-якої
ситуації і отримати відповідь на будь-яке питання. Починати працювати з Visual Basic
можна практично з будь-яким рівнем підготовки. p>
Що може Visual Basic? h2>
В
принципі, можливості Visual Basic нічим не обмежені. Ви можете розширювати
можливості VB допомогою використання додаткових функцій. Visual Basic
дозволяє використовувати бібліотеки динамічного компонування (DLL бібліотеки),
які також можуть широко розширити можливості Visual Basic. Ці бібліотеки
можуть бути написані на будь-якій мові програмування. p>
На
VB можна написати будь-яку програму, від обслуговуючих рутинні операції введення
даних, до складних інформаційних і комунікаційних систем. У США 60%
програмних продуктів написані на VB. Є звичайно дуже невеликі обмеження,
наприклад, на VB не можна написати повноцінну DLL бібліотеку, драйвер пристрою
VXD, також у VB можна використовувати асемблер. p>
Встановлення та налаштування VB h2>
Установка
Visual Basic не відрізняється особливою складністю, все стандартно. У процесі
інсталяції необхідно вказати компоненти, які будуть встановлені на
комп'ютер. Якщо на жорсткому диску є місце, то краще вибрати всі компоненти,
щоб потім їх не довелося додавати. Тут слід відзначити те, що версія VB
5.0 поставляється з файлами допомоги (приблизно 15Мб), а допомога для VB 6.0 йде в
комплекті з MSDN, який поставляється на трьох дисках. Тому якщо у вас
шоста версія, записана на одному диску, то будьте впевнені, допомоги там не
буде. Але цілком можна взяти допомогу від п'ятої версії і використовувати її для VB
6.0. Після установки VB перезавантажте комп'ютер. P>
Отже,
комп'ютер перезавантажено. Перед роботою з VB його необхідно налаштувати. Для цього
запустіть VB (Пуск-> Програми-> Microsoft Visual Basic 6.0-> Visual
Basic 6). Необхідно зайти в меню Tools-> Options, встановити галочку
"Require Variable Declaration". Це позбавить від зайвих помилок при
автоматичному визначенні змінних. Далі на вкладці Editor Format, у списку
Font необхідно вказати Courier New Cyr. Якщо цього не зробити, то VB не буде
коректно відображати кирилицю. Також бажано встановити колір
зарезервованих слів в яскраво-синій. Для цього вибрати в списку Code Colors
Keyword Text і в полі Foreground вказати яскраво-синій колір (сьомий знизу). От і
все! Visual Basic готовий до роботи! P>
Структура проекту VB h2>
В
Visual Basic будь-який проект складається з однієї або декількох так званих форм,
кожна з яких вирішує якесь завдання і складається з наступних файлів: p>
-файл
форми (розширення frm) - це звичайний ASCII текстовий файл, в якому записаний
весь код, поміщений у форму, а також властивості усіх поміщених на форму
елементів управління і самої форми теж. p>
-файл
форми (розширення frx), містить бінарну інформацію (наприклад картинку в
PictureBox). P>
-файл
проекту (розширення vbp), містить інформацію про проект p>
-в
файлі (розширення vbw) міститься інформація про робочої області проекту
(workspace). p>
Це
необхідний мінімум. (Хоча, бувають і виключення, наприклад, коли в проекті не
використовуються форми. Тоді замість frm файлу, буде bas файл.) P>
Далі
наводить додаткові файли, які можуть бути підключені до проекту: p>
файл
кожного модуля (розширення bas) Це текстовий файл. p>
файл
кожного модуля класів (розширення cls). Це текстовий файл. p>
файл
кожного додаткового елемента керування (розширення ctl) Це теж текстовий
файл. p>
файл
ресурсів (розширення res) p>
інші
файли (ocx, tlb, і т.д. ..) p>
Запам'ятовувати
призначення всіх цих файлів не обов'язково, досить запам'ятати 2 файлу:
frm-файл, в якому зберігаються код форми і властивості усіх поміщених на цю форму
елементів управління. І bas-файл - модуль. У ньому можуть бути оголошені
глобальні змінні, константи, функції і т.д. Коротше, тільки код. Без
елементів управління. p>
середу розробки VB h2>
Для
того щоб зрозуміти, як проектувати інтерфейс, необхідно розібрати середовище розробки
Visual Basic. Запустити VB. У вікні (Мал. 1) необхідно вказати тип
проекту - "Standart EXE" і натиснути ОК. p>
p>
Рис.
1 p>
На
екрані з'явиться таке вікно (Рис 2). p>
В
лівій частині розташована панель з доступними елементами управління, з якою
можна перетягувати потрібні елементи на форму. У центрі знаходиться форма (вікно),
іншими словами робоча область активного застосування. Назва нової форми - Form1.
Вгорі розташована панель інструментів середовища розробки. Праворуч розташовані
вікна проекту (Project) і властивостей поточного об'єкта (Properties). p>
p>
Рис.2 p>
Головне
перевага роботи з об'єктами в тому, що об'єкти забезпечують програмний
код, який вже не потрібно писати розробнику. Йому просто потрібно встановити
властивості об'єкта і викликати методи об'єкту, щоб спонукати об'єкт виконати
необхідні функції. Деякі властивості можна відредагувати тільки в період
виконання програми (RunTime). Багато об'єктів мають однакові властивості.
Наприклад, властивість Caption. У форми (Form) Caption - це заголовок вікна, а у
елемента мітки (Label) - це текст всередині позначки. p>
Для
того, щоб оцінити різницю між VB і QBasic, згадаємо рішення задачі польоту
ядра (Додаток 1). Наприклад: щоб намалювати лінію в QBasic, яка
відповідала б сітці координат, необхідно кожну точку, лінію, межі,
положення напису, колір описувати відповідними операторами. У VB цей
процес значно спрощується, достатньо в лівій частині робочої форми викликати
відповідні елементи управління. Для початку проведемо пару ліній і розмістимо
на формі два скрол (вертикальний-Vscroll і горизонтальний --
Hscpoll), щоб вийшла приблизно картинка, як показано на рис. 3. Причому
вибравши той чи інший p>
p>
Рис.3. p>
елемент,
відзначивши його мишкою, в правій частині форми активується вікно Properties, в
якому можна переглянути параметри елементів і змінити їх. Причому це може
стосуватися як кольору, розмірів, положення так і числових величин. Якщо, при цьому
клікнути мишкою по робочій області форми відкриється зміст форми (Рис.4), в
даному випадку поки не заповнений. p>
p>
Рис.4. p>
Але
не слід забувати, що все що знаходиться на робочій області форми міститься
у файлі form1.frm і в міру роботи з формою вміст файлу буде мінятися. p>
Щоб
запустити форму необхідно натиснути RunStart або просто F5. Вихід - RunEnd. p>
Рішення
завдань у VB p>
Рішення
завдання польоту ядра (Додаток 1), почнемо з визначення необхідних умов,
які повинні бути відображені на екрані: p>
Положення
мети прив'язати до положення горизонтального скрол (HScroll); p>
Завдання
кута стрільби прив'язати до положення вертикального скрол (VScroll); p>
Максимально
відобразити найбільш важливі числові параметри. p>
Рішення
першого пункту почнемо з установки параметрів для горизонтального скрол виділивши
HScroll і активувавши властивості поточного об'єкта (Properties-HScroll). Припустимо,
що задана максимальна дальність мети відповідає 15000 м, тоді
максимальне значення скрол також повинно відповідати 15000 м. Змінимо в
графі MAX величину 32767 на 15000 (Рис.5). А в графі MousePointer встановити
значення 7-Size NS. Переглянути що з цього вийшло можна увійшовши через F5. p>
Виведемо
на екран значення скрол, яка і буде визначати дальність до цілі. Для
цього в лівій частині в панелі управління елементів виберемо елемент Label і розмістимо його в будь-якій частині робочої області.
Виділимо тепер горизонтальний скрол і гукнемо його мишкою. Активується вікно
Project1 (зміст форми). Між рядків: Private Sub HScroll1_Change () і End
Sub введемо нові дані: p>
Label1
= HScroll1 p>
Cls p>
X1 = Label1 * 0.55 + 500 p>
Line (X1, 4300) - (X1 + 100, 4450),
11, BF p>
Загальний
вид запису представлений на рис. 6. P>
p>
p>
Рис.
5. P>
Рис.
6. P>
При
цьому треба враховувати різницю в масштабах координати Х1 і значення HScroll. Їх
узгодження забезпечується виразом: p>
X1
= Label1 * 0.55 + 500 p>
В
принципі, для кожного конкретного випадку, значення коефіцієнтів (0,55 та 500)
можуть бути різними і вимагають індивідуального підбору. p>
Оператор
CLS забезпечує обнулення зображення цілі після кожного звернення до HScroll. P>
Другим
кроком буде редагування вертикального скрол (VScroll). Для цього створимо і
розмістимо на робочій області елемент управління Label 2. Виберемо VScroll і в
властивості об'єкта (Properties-VScroll) змінимо значення параметра MAX і Value
на 80, що буде відповідати максимальному куті стрілянини в 80 градусів і
початкового стану вертикального скрол в нижній частині шкали. У графі Mouse
Pointer можна встановити значення 9-Size WE. А щоб нижнє положення курсору
VScroll1, що наведено елементом Label2 відповідало 0, необхідно,
активувавши вікно Properties для VScroll1 і записати у зміст форми: p>
Private Sub VScroll1_Change () p>
Label2 = 80 - VScroll1 p>
End
Sub p>
Загальний
вид змісту форми представлений на Рис. 7. P>
p>
Рис.
7. P>
Наступним
кроком буде введення активної кнопки, натиснувши на яку здійснюватиметься
старт (Пуск, Постріл). Для цього на панелі управління виберемо новий елемент
Command1 і встановлюємо його в будь-якому зручному місці
робочої області форми. При цьому у властивостях елементу Properties-Command1 в
рядку Caption пропишемо нове ім'я «Start». Активувавши зміст форми запишемо
для елемента Command1 наступні рядки, що взяті з вже вирішеною завдання польоту
ядра в QBasic (Додаток 1), правда поки без урахування опору повітря: p>
Private Sub Command1_Click () p>
x0 = 480 p>
y0 = 4440 p>
X2 = x0 p>
Y2 = y0 p>
v = 150 p>
g = 9.8 p>
a = Label2 p>
f = a * 3.14/180 p>
100 q = 0.0001 p>
t = t + q p>
s = v * t * Cos (f) * 2 p>
h = (v * t * Sin (f) - (g * t ^ 2) /
2) * 5.5 p>
Line (X2, Y2) - (x0 + s, y0 - h), 14 p>
X2 = x0 + s p>
Y2 = y0 - h p>
If h <0 Then GoTo 200 p>
GoTo
100 p>
200
End Sub p>
Значення
координат х0 і у0 (початкова точка старту) підбираються індивідуально. p>
В
Загалом, на цьому, завдання можна вважати виконаною. На рисунку 8 і 9 відображений
загальний вигляд форми. p>
Для
більшої наочності можна вести ще ряд елементів, змінити колір, ввести коефіцієнт
опору повітря. Як варіант, у додатку 2 показано зміст файла form *. frm
, Для даного випадку, а рис. 10 і рис. 11 відображає загальний вигляд форми. P>
p>
Рис.
8. P>
p>
Рис.
9 p>
p>
Рис.
10 p>
p>
Рис.
11 p>
Використання таймера в VB h2>
В
більшості випадків вирішуються завдання у тій чи іншій мірі прив'язані до реального
часу. У VB так само при вирішенні завдань можна використовувати час - таймер,
причому таймерів може бути кілька, вони можуть працювати як разом, так і
по черзі, при цьому один процес вирішення може зупинятися, а інший --
починатися. p>
В
запропонованому прикладі (Додаток 3), вирішена задача наведення в ручну ракети
(ПТУРС) на ціль. Для вирішення завдання використані п'ять таймерів, причому дане
рішення не є найбільш вдалим і має ряд похибок. Але для одержання
початкових навичок у програмуванні в VB цілком прийнятний. Загальний вигляд форми
представлений на Рис. 12. P>
p>
Рис.12. p>
Особливістю
складання, у цьому випадку, програми є те, що на самому початку
вказується перелік елементів, які, так чи інакше, залежать від таймерів: p>
Private Sub Form_Load () p>
Label1.Caption = 0 p>
Label2.Caption = 0 p>
Label3.Caption = 0 p>
Label4.Caption = 0 p>
Label5.Caption = 0 p>
Label6.Caption = 0 p>
Label13.Caption = 0 p>
Label15.Caption = 0 p>
Label17.Caption = 0 p>
End Sub p>
Перший
таймер (Private Sub Timer1_Timer ()), запускається відразу після початку програми,
так як за замовчуванням у властивостях елементу Timer1 у графі interval встановлена
1, що відповідає 1мл.сек. При цьому положення цілі (танка) починає змінюватися
у відповідності із записом: p>
Label1.Caption = Label1.Caption +
Timer1.Interval p>
a
= Label1.Caption p>
Timer1
працює до тих пір, поки ракета не вийде за боковий вівтар 13000 або не потрапить до
мета: p>
If X0> 13000 Then
Timer1.Interval = 0 p>
If Label17.Caption <150 Then
Timer1.Interval = 0 p>
Решта
таймери в початковий момент відключені, тобто для кожного таймера в графі interval
встановлений 0. p>
Робота
таймер, 3 починається після натискання кнопки ПУСК: p>
Private Sub Command1_Click () p>
Rem старт ПТУРС p>
Timer3.Interval
= 1 p>
End
Sub p>
Політ
ракети описується таким блоком: p>
T = Timer3.Interval p>
Rem Політ ПТУРС p>
X1 = V * T * Cos (f - Rnd * 0.1) p>
Y1 = V * T * Sin (f + Rnd * 0.1) p>
Label5.Caption = (Label5.Caption +
X1) p>
Label4.Caption = (Label4.Caption +
Y1) p>
Label6.Caption = 12000 - a * k p>
X0 = Label5.Caption p>
Y0
=-Label4.Caption p>
Початковий
кут стрільби задається положенням скрол і може змінюватися в межах від 25 до
-15. Положення скрол, за замовчуванням, у властивостях встановлено як: max 40; value
10. p>
А рядок: p>
Label3.Caption = (25 - VScroll1) p>
визначає,
що початковий кут стрільби Label3.Caption = 15. p>
Таймер
2 починає працювати, якщо висота польоту ПТУРС стає менше -50, тобто
снаряд врізався в землю: p>
If Y0> 50 Then Timer2.Interval =
1, p>
при
запускається тільки програма вибуху: p>
Private Sub Timer2_Timer () p>
Rem: фе?? ерверк p>
Rem:
a кут розльоту p>
Rem:
r радіус розльоту, n кількість осколків p>
Rem:
коефіцієнти 1 і 4 визначають ширину і висоту розльоту p>
X1 = Label5.Caption p>
Y1 =-Label4.Caption p>
r = 200 p>
n = 500 p>
Dim x (10), y (10) p>
Randomize (Label2.Caption) p>
For i = 1 To 2 p>
a = -6.28 * Rnd/2 p>
rn = r * Rnd p>
xc = X1 + 400 + rn * 1.5 * Cos (a) p>
yc = Y1 + 5600 + rn * 5 * Sin (a) p>
PSet (xc, yc), & HFFFF80 * Rnd +
& HC0C0FF * Rnd p>
Next p>
If Label1.Caption> 200 Then
Timer2.Interval = 0 p>
End
Sub p>
При
це таймер 3 зупиниться при подальшому опусканні снаряди до -100: p>
If Y0> 100 Then Timer3.Interval
= 0 p>
При
досягненні мети ракети по дальності: p>
If Label5.Caption> 11500 --
(Label1.Caption) Then Timer4.Interval = 1 p>
починає
працювати таймер 4. У цьому випадку перевіряється висота польоту, і якщо вона менша
200 включається таймер 5: p>
Private Sub Timer4_Timer () p>
If Label4.Caption <200 Then
Timer5.Interval = 1 p>
End
Sub p>
Запускається
програма вибуху: p>
Private Sub Timer5_Timer () p>
X0 = Label5.Caption p>
Y0 =-Label4.Caption p>
r = 100 p>
n = 100 p>
Dim x (100), y (100) p>
Randomize (Label2.Caption) p>
For i = 1 To 5 p>
a = -6.28 * Rnd/2 p>
rn = r * Rnd p>
xc = X0 + 400 + rn * 3 * Cos (a) p>
yc = Y0 + 5600 + rn * 5 * Sin (a) p>
PSet (xc, yc), & HFFFF80 * Rnd +
& HC0C0FF * Rnd p>
Next p>
End
Sub p>
І
якщо зберігається тенденція до зниження снаряда, то таймер 1 зупиняється: p>
If Label17.Caption <150 Then
Timer1.Interval = 0 p>
Мета
вражена (Рис.13). p>
p>
Рис.13 p>
Висновок h2>
Таким
чином, мова програмування Visual Basic, наочно дозволяє змоделювати
фізичний процес, отримати конкретні результати і навики. Відмінною
особливістю VB, є можливість роботи його безпосередньо в середовищі Windows,
що значно підвищує наочність, барвистість програми і гнучкість в її
застосуванні. p>
Необхідно
ще раз підкреслити, що створювані об'єкти одразу ж забезпечені програмним
кодом і для них прийнятний метод перетягування, що досить поширено
Windows. P>
Отже,
отримані навички дозволять надалі самостійно вирішувати завдання різної
складності, розширити набутий досвід і поглибити свої знання в питаннях
програмування. p>
Список літератури h2>
Кравченко
В. Програмування. «Комп'ютерне моделювання руху тіл». Навчально --
дослідницька робота учнівської 9 класу м. Кунгур 2005 - 30 с. p>
Дж.
Радер., К. Міллсап. Бейсик для персонального комп'ютера фірми IBM: Пер. з англ.
- М.: Радіо і зв'язок, 1991. - 30 л.: Ил. P>
Р.
Мкдона. Основи мікрокомп'ютерних обчислень: Пер. с англ./Т. Г. Микільської; Під
ред. В. Ф. Шальгіна. - М.: Висш. Школа., 1989. - 272 с.: Ил. P>
Завдання
і вправи з програмування: Практ. Посібник для ПТУ/Под ред. А. Я. Савельева.
Кн. 2. Важка промисловість і транспорт/В. Е. Алексєєв, А.С. Ваулин. - 2-е
изд., доп. - М.: Висш. шк., 1989-112 с.: ил. p>
А.
В. Перишкін., Е. М. Гутник. Фізика. 10 кл.: «Учеб. для общеобразоват. учеб.
закладів - М.: Дрофа, 2002. p>
І.
Д. Помбрік, Н. А. Шевченко. Аеродинаміка. Изд. третє, виправлене і
доповнене. М., Військове видавництво, 1972 - 96 с.: СПД p>
Г.
І. Свєтозаровим. ОСНОВИ ПРИКЛАДНОЇ ІНФОРМАТИКИ. Розділ: Опис мови
Турбо-Бейсік. Довідковий посібник. P>
http://www.codenet.ru/progr/vbasic/first.php p>
http://vb.hut.ru/vbnovice/lessons.htm p>
http://vbzero.narod.ru/loading.htm p>
http://vbzero.narod.ru/site.htm p>
http://vbzero.narod.ru/project.htm p>
http://www.tam.ru/guide/
p>
http://www.codenet.ru/progr/vbasic/menu/vbhelp_01.php p>
Додаток 1 h2>
REM
ЯДРО p>
5
INPUT «Ввести кут стрілянини від 5 до 80 град»; a p>
7 IF a <5 THEN 10 p>
IF a> 80 THEN 20 p>
GOTO
40 p>
10
INPUT «Кут повинен бути> = 5"; a p>
GOTO
7 p>
20
INPUT «Кут повинен бути <= 80»; a p>
GOTO
7 p>
40
INPUT «Ввести дальність до цілі від 200 до 5000 м»; l p>
45 IF l <200 THEN 50 p>
IF l> 5000 THEN 60 p>
GOTO
70 p>
50
INPUT «Відстань до цілі має бути> = 200»; l p>
GOTO
45 p>
60
INPUT «Відстань до мети повинно бути <= 5000»; l p>
GOTO
45 p>
70
INPUT «Для пострілу натиснути F1»; enter p>
REM
побудова координат p>
SCREEN
9: p>
x0
= 50 p>
y0
= 300 p>
x1
= 600 p>
y1
= 50 p>
x2
= 50 p>
y2
= 300 p>
REM
координата Y p>
LINE (x0, y0) - (x0, y1), 12 p>
LOCATE 18, 4: PRINT "250" p>
LOCATE 14, 4: PRINT "500" p>
LOCATE 10, 4: PRINT "750" p>
LOCATE 6, 4: PRINT "1000" p>
LINE (48, 245) - (52, 245), 11 p>
LINE (48, 190) - (52, 190), 11 p>
LINE (48, 135) - (52, 135), 11 p>
LINE (48, 80) - (52, 80), 11 p>
REM координата X p>
LINE (x0, y0) - (x1, y0), 12 p>
LOCATE 23, 19: PRINT "1000" p>
LOCATE 23, 31: PRINT "2000" p>
LOCATE 23, 44: PRINT "3000" p>
LOCATE 23, 56: PRINT "4000" p>
LOCATE 23, 69: PRINT "5000" p>
LINE (150, 302) - (150, 298), 11 p>
LINE (250, 302) - (250, 298), 11 p>
LINE (350, 302) - (350, 298), 11 p>
LINE (450, 302) - (450, 298), 11 p>
LINE (550, 302) - (550, 298), 11 p>
REM МЕТА p>
LINE (x0 + l/10, 299) - (x0 + l/10
+ 5, 299), 10 p>
LINE
(x0 + l/10, 298) - (x0 + l/10 + 5, 298), 10 p>
REM
свідчення p>
LOCATE 1, 6: PRINT "V m/s" p>
LOCATE 2, 6: PRINT "H m" p>
LOCATE 2, 24: PRINT "S m" p>
LOCATE 1, 24: PRINT "T s" p>
80 KEY (1) ON p>
ON KEY (1) GOSUB 90 p>
GOTO 80 p>
REM політ p>
90
v = 200 p>
g
= 9.8 p>
f
= A * 3.14/180 p>
100
q = .01 p>
t
= T + q p>
REM
k коефіцієнт опору повітря p>
k = .016 p>
vs = v * COS (f) - (k - k/(k + v *
COS (f ))) p>
vh = v * SIN (f) - (k - k/(k + v *
SIN (f ))) p>
s = vs * t * 2 p>
h = (vh * t - (g * t ^ 2)/2) * 5.5 p>
v = SQR (vs ^ 2 + vh ^ 2) p>
LINE (x2, y2) - (x0 + s/20, y0 - h /
25), 14 p>
x2 = x0 + s/20 p>
y2 = y0 - h/25 p>
LOCATE 1, 12: PRINT v p>
LOCATE 2, 12: PRINT h/5.5 p>
LOCATE 2, 28: PRINT s/2 p>
LOCATE 1, 28: PRINT t p>
IF h <0 THEN 200 p>
GOTO 100 p>
200 REM вибух p>
r = 30 p>
n = 500 p>
REM:
a кут розльоту p>
REM:
r радіус розльоту, n кількість осколків p>
REM:
коефіцієнти 0.5 і 1 визначають ширину і висоту розльоту p>
DIM x (n), y (n) p>
RANDOMIZE (TIMER) p>
FOR I = 1 TO n p>
a = -6.28 * RND/2 p>
rn = r * RND p>
xc = x2 + rn * .5 * COS (a) p>
yc = y2 + rn * 1 * SIN (a) p>
PSET (xc, yc), 9 + 9 * RND p>
PRESET (x (i), y (i)) p>
NEXT p>
END p>
Додаток b> 2 b> p>
VERSION 5.00 p>
Begin VB.Form Form1 p>
BackColor = & H8000000D & p>
BorderStyle = 1 'Fixed Single p>
Caption = "Form1" p>
ClientHeight = 7770 p>
ClientLeft = 45 p>
ClientTop = 435 p>
ClientWidth = 8670 p>
FillColor = & H00C0FFFF & p>
LinkTopic = "Form1" p>
MaxButton = 0 'False p>
MinButton = 0 'False p>
ScaleHeight = 7770 p>
ScaleWidth = 8670 p>
StartUpPosition = 3 'Windows Default p>
Begin VB.CommandButton Command1 p>
Caption = "Пуск" p>
Height = 495 p>
Left = 720 p>
TabIndex = 2 p>
Top
= 5280 p>
Width = 1215 p>
End p>
Begin VB.VscrollBar Vscroll1 p>
Height = 1935 p>
Left = 240 p>
Max
= 80 p>
MousePointer = 9 'Size W E p>
TabIndex = 1 p>
TabStop = 0 'False p>
Top
= 2400 p>
Value = 80 p>
Width = 255 p>
End p>
Begin VB.HscrollBar Hscroll1 p>
Height = 255 p>
Left = 240 p>
Max
= 15000 p>
Min
= 10 p>
MousePointer = 7 'Size N S p>
TabIndex = 0 p>
Top
= 4800 p>
Value = 100 p>
Width = 8295 p>
End p>
Begin VB.Label Label9 p>
Caption = "Помилка" p>
Height = 375 p>
Left = 2160 p>
TabIndex = 11 p>
Top
= 5400 p>
Width = 975 p>
End p>
Begin VB.Line Line1 p>
X1
= 600 p>
X2
= 600 p>
Y1
= 4680 p>
Y2
= 480 p>
End p>
Begin VB.Label Label8 p>
Caption = "0" p>
Height = 375 p>
Left = 3120 p>
TabIndex = 10 p>
Top
= 5400 p>
Width = 1095 p>
End p>
Begin VB.Label Label7 p>
Caption = "Дальність" p>
Height = 375 p>
Left = 2160 p>
TabIndex = 9 p>
Top
= 5880 p>
Width = 975 p>
End p>
Begin VB.Label Label6 p>
Caption = "кут (градус)" p>
Height = 375 p>
Left = 4800 p>
TabIndex = 8 p>
Top
= 5880 p>
Width = 975 p>
End p>
Begin VB.Label Label5 p>
Caption = "дист (м)" p>
Height = 375 p>
Left = 4800 p>
TabIndex = 7 p>
Top
= 5400 p>
Width = 975 p>
End p>
Begin VB.Label Label4 p>
Caption = "Label4" p>
Height = 15 p>
Left = 5040 p>
TabIndex = 6 p>
Top
= 6000 p>
Width = 135 p>
End p>
Begin VB.Label Label3 p>
BackColor = & H80000018 & p>
Caption = «0» p>
Height = 375 p>
Left = 3120 p>
TabIndex = 5 p>
Top
= 5880 p>
Width = 1095 p>
End p>
Begin VB.Label Label2 p>
BackColor = & H80000018 & p>
Caption = «0» p>
Height = 375 p>
Left = 5760 p>
TabIndex = 4 p>
Top
= 5880 p>
Width = 1095 p>
End p>
Begin VB.Label Label1 p>
BackColor = & H80000018 & p>
Caption = «0» p>
Height = 375 p>
Left = 5760 p>
TabIndex = 3 p>
Top
= 5400 p>
Width = 1095 p>
End p>
Begin VB.Line Line2 p>
X1
= 600 p>
X2
= 8400 p>
Y1
= 4680 p>
Y2
= 4680 p>
End p>
End p>
Attribute VB_Name = "Form1" p>
Attribute VB_GlobalNameSpace = False p>
Attribute VB_Creatable = False p>
Attribute VB_PredeclaredId = True p>
Attribute VB_Exposed = False p>
Private Sub Hscroll1_Change () p>
Cls p>
Label1 = Hscroll1 p>
X1 = Hscroll1 * 0.507 p>
Line (X1 + 550, 4500) - (X1 + 600,
4650), & HC0FFFF, BF p>
End Sub p>
Private Sub Vscroll1_Change () p>
Label2 = 80 - Vscroll1 p>
End Sub p>
Private Sub Command1_Click () p>
X0 = 600 p>
Y0 = 4680 p>
X2 = X0 p>
Y2 = Y0 p>
v = 300 p>
g = 9.8 p>
a = Label2 p>
f
= A * 3.14/180 p>
100
q = 0.00005 p>
t
= T + q p>
Rem
k - коефіцієнт опору повітря p>
k = 0.0001 p>
vs = v * Cos (f) - (k - k/(k + v *
Cos (f ))) p>
vh = v * Sin (f) - (k - k/(k + v *
Sin (f ))) p>
s = vs * t p>
h = (vh * t - (g * t ^ 2)/2) p>
s = v * t * Cos (f) p>
h = v * t * Sin (f) - (g * t ^ 2)/2 p>
v = Sqr (vs ^ 2 + vh ^ 2) p>
Line (X2, Y2) - (X0 + s, Y0 - h),
& HFF & p>
X2 = X0 + s p>
Y2 = Y0 - h p>
If h <0 Then GoTo 200 p>
GoTo 100 p>
200 Label3 = s * 4.32 1 p>
v = X1 2 * 2 p>
Label8 = Hscroll1 - s * 4.32 1 p>
End Sub p>
Додаток b> 3 b> p>
Private Sub Form_Load () p>
Label1.Caption = 0 p>
Label2.Caption = 0 p>
Label3.Caption = 0 p>
Label4.Caption = 0 p>
Label5.Caption = 0 p>
Label6.Caption = 0 p>
Label13.Caption = 0 p>
Label15.Caption = 0 p>
Label17.Caption = 0 p>
End Sub p>
Private Sub Timer1_Timer () p>
Label1.Caption = Label1.Caption +
Timer1.Interval p>
Label2.Caption = Label2.Caption +
Timer2.Interval p>
Label13.Caption = Label13.Caption +
Timer3.Interval p>
Label15.Caption = Label15.Caption +
Timer4.Interval p>
Label17.Caption = Label17.Caption +
Timer5.Interval p>
a = Label1.Caption p>
T = Timer3.Interval p>
k = 1.2 p>
V = 30 p>
Label3.Caption = (250 - VScroll1)
10 p>
q = Label3.Caption p>
f = q * 3.14/180 p>
Rem Поверхня p>
Line (14850, 5640) - (350, 5820),
& H80000002, BF p>
Rem Танк p>
Line (12000 - a * k, 5620) - (12850 --
a * k, 5520), & HFFFF &, BF p>
Line (11920 - a * k, 5540) - (12000 --
a * k, 5530), & HFFFF &, BF p>
Line (11900 - a * k, 5550) - (12000 --
a * k, 5540), & HFFFF &, BF p>
Line (11920 - a * k, 5560) - (12000 --
a * k, 5550), & HFFFF &, BF p>
Line (11940 - a * k, 5570) - (12000 --
a * k, 5560), & HFFFF &, BF p>
Line (11950 - a * k, 5590) - (12000 --
a * k, 5570), & HFFFF &, BF p>
Line (11970 - a * k, 5600) - (12000 --
a * k, 5590), & HFFFF &, BF p>
Line (12825 - a * k, 5600) - (12900 --
a * k, 5580), & H8000000F, BF p>
Line (12800 - a * k, 5620) - (12900 --
a * k, 5600), & H8000000F, BF p>
Line (12850 - a * k, 5620) - (13950 --
a * k, 5520), & H8000000F, BF p>
Rem башта танка p>
Line (12200 - a * k, 5440) - (12650 --
a * k, 5500), & HFFFF &, BF p>
Line (11900 - a * k, 5460) - (12200 --
a * k, 5460), & HFFFF & p>
Line (12650 - a * k, 5440) - (12750 --
a * k, 5500), & H8000000F, BF p>
Rem Політ ПТУРС p>
X1 = V * T * Cos (f - Rnd * 0.1) p>
Y1 = V * T * Sin (f + Rnd * 0.1) p>
Label5.Caption = (Label5.Caption +
X1) p>
Label4.Caption = (Label4.Caption +
Y1) p>
Label6.Caption = 12000 - a * k p>
X0 = Label5.Caption p>
Y0 =-Label4.Caption p>
Rem ПТУРС p>
Line (X0 + 300, 5550 + Y0) - (X0 +
400, 5500 + Y0), & H8000000F, BF p>
Line (X0 + 300, 5550 + Y0) - (X0 +
500, 5600 + Y0), & H8000000F, BF p>
Line (X0 + 300, 5450 + Y0) - (X0 +
550, 5500 + Y0), & H8000000F, BF p>
Line (400 + X0, 5500 + Y0) - (420 +
X0, 5550 + Y0), & HFF &, BF p>
Line (400 + X0, 5525 + Y0) - (550 +
X0, 5525 + Y0), & HFF & p>
Rem дим p>
X2 = 12820 - a * k p>
Y2 = 5620 p>
r = 30 p>
n = 1 p>
Dim x (10), y (10) p>
Randomize (Label1.Caption) p>
For i = 1 To 50 p>
a = -6.28 * Rnd/6 p>
rn = r * Rnd p>
xc = X2 + rn * 9 * Cos (a) p>
yc = Y2 + rn * 3 * Sin (a) p>
PSet (xc, yc), & HFFFF80 * Rnd +
& HC0C0FF * Rnd p>
Next p>
If X0> 13000 Then
Timer1.Interval = 0 p>
If Y0> 50 Then Timer2.Interval =
1 p>
If Y0> 100 Then Timer3.Interval
= 0 p>
If Label5.Caption> 11500 --
(Label1.Caption) Then Timer4.Interval = 1 p>
End Sub p>
Private Sub Command1_Click () p>
Rem старт ПТУРС p>
Timer3.Interval = 1 p>
End Sub p>
Private Sub Timer2_Timer () p>
Rem:
феєрверк p>
Rem:
a кут розльоту p>
Rem:
r радіус розльоту, n кількість осколків p>
Rem:
коефіцієнти 1 і 4 визначають ширину і висоту розльоту p>
X1 = Label5.Caption p>
Y1 =-Label4.Caption p>
r = 200 p>
n = 500 p>
Dim x (10), y (10) p>
Randomize (Label2.Caption) p>
For i = 1 To 2 p>
a = -6.28 * Rnd/2 p>
rn = r * Rnd p>
xc = X1 + 400 + rn * 1.5 * Cos (a) p>
yc = Y1 + 5600 + rn * 5 * Sin (a) p>
PSet (xc, yc), & HFFFF80 * Rnd +
& HC0C0FF * Rnd p>
Next p>
If Label1.Caption> 200 Then
Timer2.Interval = 0 p>
End Sub p>
Private Sub Timer4_Timer () p>
If Label4.Caption <200 Then
Timer5.Interval = 1 p>
End Sub p>
Private Sub Timer5_Timer () p>
X0 = Label5.Caption p>
Y0 =-Label4.Caption p>
r = 100 p>
n = 100 p>
Dim x (100), y (100) p>
Randomize (Label2.Caption) p>
For i = 1 To 5 p>
a = -6.28 * Rnd/2 p>
rn = r * Rnd p>
xc = X0 + 400 + rn * 3 * Cos (a) p>
yc = Y0 + 5600 + rn * 5 * Sin (a) p>
PSet (xc, yc), & HFFFF80 * Rnd +
& HC0C0FF * Rnd p>
If Label17.Caption <150 Then
Timer1.Interval = 0 p>
Next p>
End
Sub p>