Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Інформаційних систем і технологій ЛЕКЦІЇ з дисципліни КОМПЮТЕРНА ТЕХНІКА ТА ПРОГ

Работа добавлена на сайт samzan.net:


КИІВСЬКИЙ УНІВЕРСИТЕТ ЕКОНОМІКИ І ТЕХНОЛОГІЙ ТРАНСПОРТУ

Кафедра «Інформаційних систем і технологій»

ЛЕКЦІЇ

з дисципліни

«КОМПЮТЕРНА ТЕХНІКА ТА ПРОГРАМУВАННЯ»

Київ 2006


ОСНОВИ АЛГОРИТМИЗАЦІЇ  

Під розв’язанням конкретної задачі розуміють не лише визначення результатів за допомогою ЕОМ, але і всю підготовчу роботу, яку необхідно виконати для досягнення поставленої мети розв’язків задачі. Тому весь процес розв’язання наукової або технічної задачі можна розбити на декілька етапів:

  •  постановка задачі;
  •  формалізація (математична постановка задачі);
  •  вибір методу розв’язання;
  •  алгоритмізація задачі;
  •  програмування;
  •  налагодження програми;
  •  розв’язок задачі на ЕОМ та аналіз результатів.

ЕОМ є автоматом, який точно виконує вказівки, складені людиною. На початковому етапі розв’язання задачі вони представляються в вигляді алгоритму.

Застосований до розв’язків задач на ЕОМ алгоритм є послідовністю арифметичних та логічних дій над числовими значеннями змінних, що призводить до обчислення розв’язків задачі при зміні вихідних даних у досить широких межах. Кожний алгоритм розбиває весь обчислювальний процес на окремі етапи та містить інформацію як про дії, що треба виконати в кожному з етапів, так і про порядок, в якому повинні виконуватися ці етапи. За алгоритмом складається програма. Процес створення програм називається програмуванням. Програма ЕОМ – це опис алгоритму розв’язання задачі за допомогою алгоритмічної мови. В ЕОМ вона представлена набором машинних інструкцій, за допомогою яких закодовано алгоритм розв’язання задачі або управління процесом.

Алгоритм характеризується наступними властивостями:

ДИСКРЕТНІСТЬ – процес обчислення визначається як послідовність виконання простих кроків. Для виконання кожного кроку потребується кінцевий відрізок часу, процес перетворення вихідних даних в кінцевий результат виконується в часі дискретно.

ВИЗНАЧЕНІСТЬ (детермінірованність) – кожне правило повинно бути чітким та не залишати невизначеності. Завдяки цій властивості, виконання алгоритму носить механічний характер та не потребує додаткових відомостей щодо задачі, котра розв’язується.

РЕЗУЛЬТАТИВНІСТЬ (конечність) – алгоритм повинен призводити до розв’язання за кінцеве число кроків.

МАСОВІСТЬ- алгоритм розробляється в загальному вигляді, тобто він застосований для деякого класу задач, розширених тільки вихідними даними, та до будь-якої ЕОМ.

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

  •  словесний опис алгоритму;
  •  опис алгоритму у вигляді формул;
  •  словесно-формульний;
  •  таблична форма опису (використовується для ручного рахунку та в пакетах);
  •  опис алгоритму у вигляді блок-схем (схем алгоритмів);
  •  операторний спосіб опису алгоритму;
  •  опис алгоритму алгоритмічною мовою.


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

                   при складанні схем алгоритмів

Назва блоку

Графічне зображення блоку

Дія, яка виконується

Пуск-зупин

Початок, кінець, перери-вання процесу обробки або виконання програми

Процес

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

Модифікація (заголовок циклу)

Виконання операцій, що змінюють команди, або групи команд, що змінюють програму

Визначений процес (підпрограма)

Використання раніше створених або окремо написаних алгоритмів або програм

Розв’язування

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

Введення- виведення

Перетворення даних у форму, яка придатна для обробки (введення) чи відтворення результатів обробки (виведення)

Сторінковий з’єднувач

Розрив лінії потоку інформації усередині сто-рінки

Міжсторінковий з’єднувач

Розрив лінії потоку між сторінками

Найпоширенішим став опис алгоритму у вигляді блок-схеми, яка являє собою графічну інтерпретацію логічної схеми розв’язання задач. Блок-схемою називається графічне зображення алгоритму, коли окремі дії відображаються різноманітними геометричними фігурами – блоками. Правила виконання схем алгоритмів регламентує ГОСТ 19.002-80, використані графічні символи – ГОСТ 19.003-80 (табл.1). Графічні символи на блоках з’єднуються лініями потоку інформації. Основний напрям потоку іде згори вниз і зліва направо (стрілки напряму на лініях потоку можуть не вказуватися). В інших випадках зазначення стрілок є обов’язковим. Кількість вхідних ліній не обмежена. Вихідна лінія може бути лише одна (виняток – блок перевірки логічних умов і блок модифікації).

У блоках рекомендовані наступні розміри:

А= 10, 15, 20,…. мм;

В=1,5А (допускається встановлювати В=2А).

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

При виконанні схем алгоритмів необхідно витримувати мінімальну відстань між паралельними лініями потоку інформації 3 мм і 5 мм – між іншими символами.

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


ПРОЕКТУВАННЯ АЛГОРИТМІВ ЛІНІЙНИХ ОБЧИСЛЮВАЛЬНИХ

ПРОЦЕСІВ

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

В алгоритмі лінійної структури використовуються наступні блочні символи:

  •  пуск (початок);
  •  введення;
  •  виведення;
  •  зупинка (кінець).

Приклад: Обчислити висоти трикутника зі сторонами a, b, c, використовуючи формули

,

,

,

де  .

Щоб виключити повторювані числа, використовуємо проміжну величину

,

тоді   .

Значення величин p, t, , ,  зберігаються в комірках пам’яті з відповідними іменами. Алгоритм обчислення представлений на мал. 1.


Рисунок 1 Алгоритм лінійної структури

3 Контрольні питання

3.1 Перерахувати етапи розв’язання задачі на ЕОМ.

3.2 Визначити поняття “алгоритм” та перелічити його властивості.

3.3 Визначити поняття “програма” розв’язання задачі на ЕОМ.

3.4 Перерахувати способи опису алгоритмів.

3.5 Пояснити правила використання блок-схем для опису алгоритмів.

3.6 Перерахувати типи вказівок, що складають лінійні обчислювальні процеси.


ПРОЕКТУВАННЯ АЛГОРИТМІВ РОЗГАЛУЖЕНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

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

Логічне відношення – послідовний запис констант, змінних, арифметичних виразів, об'єднаних операціями відношення.

Логічний вираз – послідовний запис логічних відношень, розділених знаками логічних операцій:

  •  логічного множення або операції кон'юнкції (AND);
  •  логічного додавання або операції диз'юнкції (OR);
  •  логічного заперечення або операції інверсії (NOT).

Розглянемо процес розробки розгалуженого алгоритму на прикладі обчислення квадратного рівняння:

ax2 + bx + c = 0.

Корені квадратного рівняння визначаються за формулою

Квадратний корінь із від’ємного числа ЕОМ обчислити не може, тому для комплексних коренів окремо обчислюється дійсна частина і коефіцієнт при мнимій одиниці  

Тоді алгоритм формулюється наступним чином:

Обчислити

Такий обчислювальний процес має дві гілки. У першій гілці, якщо виконується умова D>0, обчислюються х1 і х2, у другій гілці, якщо D<0, – дійсна частина і коефіцієнт при умовній одиниці . Після виконання будь-якої з цих гілок здійснюється повернення до загальної послідовності блоків.

Блок-схема алгоритму представлена на рис. 1. Природний порядок виконання блоків в алгоритмі порушується двічі:

  •  після виконання блоку 4, якщо виконується умова D<0, переходять до блоку 6, у іншому разі - до блоку 5;
  •  після виконання блоку 5 (обчислення дійсних коренів) немає рації обчислювати дійсну частину й коефіцієнт при умовній одиниці (виконувати блок 6), тому завжди треба обходити блок 6 і переходити до наступного блоку загальної послідовності, тобто до блоку 7.

В алгоритмі розгалуженої структури використовуються наступні блокові символи:

- пуск (початок);

- введення;

- процес;

- розв’язання (вибір);

- виведення;

- зупинка (кінець).



3 Контрольні питання

3.1 Визначити поняття “розгалужений обчислювальний процес”.

3.2 Визначити поняття “логічне відношення”.

3.3 Перерахувати операції відношення.

3.4 Визначити поняття “логічний вираз”.

3.5 Які логічні операції використовуються у логічних виразах?

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

ПРОЕКТУВАННЯ АЛГОРИТМІВ АРИФМЕТИЧНИХ

ЦИКЛІЧНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

Розв’язання багатьох задач зводиться до виконання обчислень за тими самими математичними залежностями, але при різних значеннях величин, які у них входять. Такий обчислювальний процес має назву циклічного, а багаторазово повторювані ділянки цього процесу – циклів. Змінні, що змінюються при кожному новому виході на повторення, мають назву параметрів циклу. Змінна, значення якої обчислюється і зберігається в одній тій самій комірці пам'яті ЕОМ, зветься простою змінною. Змінна, що є елементом масиву, зветься змінною з індексом. При використанні простої перемінної параметром циклу є сама змінна. При використанні змінної із індексом параметром циклу є її індекс. В одному циклі можуть бути кілька параметрів.

Алгоритм циклічної структури в загальному вигляді повинен містити:

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

Для організації циклічної структури можуть використовуватися або блоковий символ "розв’язання" у сукупності із символами "процес" (варіант А), або спеціальний блоковий символ "модифікація" (варіант В). Два варіанти організації циклічної структури наведено на рис. 1.


В)

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

Регулярні цикли називають також циклами з лічильником. Число повторень тіла циклу в цьому випадку підраховується за допомогою введення спеціальної змінної – лічильника, для якої відомі початкове, кінцеве значення та крок її зміни. Управління циклом здійснюється на підставі порівняння поточного значення лічильника із заданим порогом. Число повторень тіла циклу визначається за формулою:

N = ](хк - хн)/h[ + 1,

де хк - кінцеве значення параметра циклу;

хн - початкове значення параметра циклу;

h - крок зміни параметра циклу.

Поточне значення параметра циклу обчислюється за формулою:

х = хн + (k - 1)h,

де k змінюється від 1 до N.

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

Наприклад, формула х = х + 1, у якій реалізована рекурсія, означає, що до вмісту комірки пам'яті з іменем х додається 1 і результат записується в х. Така формула зветься рекурентною і зв'язує між собою значення змінної х, що обчислюються послідовно. Вхідними даними для кожного наступного кроку є результати попереднього.

Приклад 1. Скласти алгоритм обчислення виразу y = x - sin(x), де x змінюється від xн = 0 до xк = 5 із кроком h = 0,15.

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

  •  сформувати вхідні дані;
  •  визначити початковий стан комірки, в якій провадиться накопичення суми або добутку;
  •  організувати цикл накопичення суми чи добутку;
  •  вивести результат.

Приклад 2. Скласти алгоритм обчислення значення факторіалу Y = N! (добутку чисел натурального ряду від 1 до N: 2!= 1*2; 3!= 1*2*3; 4!=1*2*3*4; N!=1*2*3*...*N). Два варіанти схеми алгоритму обчислення факторіалу наведено на рис. 3.


В)

А)


           

          В)

А)


3 Контрольні питання

3.1 Визначити поняття “циклічний обчислювальний процес”.

3.2 Визначити поняття “цикл”.

3.3 Визначити поняття “параметр циклу”.

3.4 Який склад алгоритму циклічної структури.

3.5 Які різновиди циклічних алгоритмів?

3.6 Які дії необхідно виконати для організації арифметичного циклу?

3.7 Визначити поняття “рекурсія”.

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


ПРОЕКТУВАННЯ АЛГОРИТМІВ ІТЕРАЦІЙНИХ ЦИКЛІЧНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

5 Навчальний матеріал

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

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

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

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

Ітераційні алгоритми для обчислення сум нескінченних рядів будуються в наступному порядку:

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

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

Приклад: Скласти алгоритм для обчислення суми збіжного ряду з точністю  
На схемі алгоритму (рис. 1) у блоці 3 задаються вхідні значення номера n-го члена ряду, що обчислюється, і початкове значення суми членів ряду S. У даному випадку n = 1 і S = 1, тобто обчислення починаються з другого члена ряду, тому що перший член ряду дорівнює одиниці і не обчислюється за загальною формулою члена ряду.
Накопичення суми виконується в блоці 5 за допомогою рекурсивної залежності:
S = S + Y,
де Y – значення чергового обчисленого члену ряду.

3 Контрольні питання

3.1 Що означає ітераційний циклічний процес?

3.2 Які умови збігу методу ітерацій?

3.3 Вкажіть порядок побудови ітераційного алгоритму.

3.4 Як організується вихід з циклу в ітераційному алгоритмі?

3.5 Яким чином в ітераційних циклах використовуються рекурсивні відношення?

3.6 Чому при програмуванні ітераційних процесів не використовуються індексні змінні для позначення послідовних наближень?

3.7 Для яких задач застосовують ітераційні цикли?


ПРОЕКТУВАННЯ АЛГОРИТМІВ ВКЛАДЕНИХ ЦИКЛІЧНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

5 Навчальний матеріал

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

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

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

При організації внутрішніх циклів необхідно врахувати, що область дії внутрішнього циклу не повинна виходити за область дії зовнішнього циклу.

Приклад 1: Скласти алгоритм обчислення значення функції

В алгоритмі (рис.1) кілька разів обчислюються суми. Параметри циклів змінюються послідовно, тобто на одне значення параметра зовнішнього циклу параметр внутрішнього циклу приймає послідовно усі свої значення. Зафіксувавши значення І в зовнішньому циклі, у внутрішньому циклі виконується накопичення суми при значеннях J, що змінюються від 1 до М. Після чого значення І збільшується в зовнішньому циклі на 1 і внутрішній цикл повторюється. Якщо І > N, тоді виконується вихід з циклу і виводиться накопичений результат.



Приклад 2:
Скласти програму обчислення значень функції

sin(x+y), якщо x>0 и y<0,

Z =

cos(x-y) – в останніх випадках,

якщо х змінюється від хн = -5 до хк = 5 із кроком hх =1;

y змінюється від yн = -0,5 до yк = 0,5 c кроком hy =0,1.

В алгоритмі (рис.2) у внутрішньому циклі знаходиться розгалужений процес і кожна його гілка може складатися із фрагментів лінійного типу.


3 Контрольні питання

3.1 Визначите поняття "вкладений циклічний процес".

3.2 Які принципи побудови вкладених циклів?

3.3 Як визначається число повторень у вкладених циклічних процесах?

3.4 На яку глибину можуть бути вкладені циклічні процеси ?

3.5 Яким чином у вкладених циклічних процесах використовуються рекурсивні відношення?

3.6 Для яких задач застосовуються вкладені циклічні процеси?

3.7 Наведіть приклад вкладених циклічних обчислювальних процесів.


ПРОЕКТУВАННЯ АЛГОРИТМІВ ОБРОБКИ ОДНОВИМІРНИХ МАСИВІВ

Масив - це впорядкований набір однорідних елементів, що мають ім’я, для зберігання яких наділяється послідовно розташоване поле пам'яті. Масив характеризується ідентифікатором (ім'я), числом вимірів (індекси) і числом змінних у кожному вимірі (верхня межа кожного індексу). Існують одновимірні масиви (вектори, лінійні таблиці), двовимірні масиви (матриці, прямокутні таблиці), а також багатовимірні масиви.

Введення - виведення елементів масиву виконується поелементно. Можливі два способи.

Спосіб 1. Безпосереднє введення-виведення елементів масиву, яке позначається на блок-схемі алгоритму при введенні значень елементів блоками “введення” або “процес” та при виведенні блоком “виведення”.

Такий спосіб доцільно застосовувати, коли масиви мають малі розміри.

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

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

Приклад 1: Вивести на друк елементи цілочисельного масиву N=[n1, n2, n3,... , n50], які кратні трьом. Сполучимо операції введення поточного значення елемента масиву і його опрацювання.

 Рисунок 1 Алгоритм визначення елементів масиву, кратних 3.


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

Приклад 2: Переписати підряд у масив Y додатні елементи масиву (x1, x2, x3,... , x20), а в масив Z - від’ємні.

Особливість рішення полягає в тому, що елементи, які записуються в масиви Z і Y, повинні розташовуватися підряд без пропусків. Це призведе до того, що індекси змінних yk та zj набудуть значень, відмінні від значень індексів змінної xi. Тому в циклі необхідно змінювати значення k та j кожний раз перед записом відповідного елементу x, тобто необхідно використати спосіб організації циклу з кількома параметрами, які одночасно змінюються (рис. 2.).



Знаходження суми  зводиться до її накопичення у вигляді значення змінної в циклі, в який вводяться відповідні додатки. При цьому наступний додаток y
i додається до суми попередніх додатків zi-1, тобто в циклі послідовно обчислюються всі проміжні суми:

z1 = z0 + y1 = y1

z2 = z1 + y2 = (y1) + y2

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

zi = zi-1 + yi = (y1 + y2)+yi

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

zn = zn-1 + yn

zn =

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

z1 = z0 * y1 = y1

z2 = z1* y2 = (y1) * y2

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

zi = zi-1 * yi = (y1 * y2)*yi

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

zn = zn-1 * y n

zn =

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

z = z * y.

де y - множник; z - проміжний добуток.

Перед циклом за початкове значення добутку, як правило, приймається одиниця: z0 = 1.

Приклад 3: Скласти алгоритм обчислення математичного сподівання mx випадкової величини x, використовуючи розрахункову формулу

mx =

для початкових даних: n = 5; рi = {0.3; 0.25; 0.2; 0.1; 0.15};

xi = {90; 80; 120; 95; 110}.

Початковими даними для обчислення є проста змінна N та два масиви: P і X. Результат обчислення збережемо у простій змінній S. Для накопичення суми організується цикл, параметром якого є індекс I, який змінюється від 1 до N. (рис.3.)

Приклад 4: Скласти алгоритм обчислення середнього геометричного додатних елементів масиву. Схема алгоритму наведена на рис.4.

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

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

yi, якщо yi>ymax

ymax =

ymax, якщо yi ymax

Після закінчення циклу значення ymax буде найбільшим з усіх розглянутих значень yi.

Аналогічним чином знаходиться найменше (MIN) серед набору елементів, із використанням залежності:

yi, якщо yi<ymin

ymin =

ymin, якщо yi ymin

При знаходженні найбільшого (МАХ) та (або) найменшого (MIN) елемента масиву за початкове значення найбільшого та найменшого у цьому випадку слід брати значення першого елемента масиву, а в циклі, пошук найбільшого та найменшого елементу виконувати, починаючи з другого елементу масиву.

Приклад 5: Скласти алгоритм знаходження найбільшого та найменшого елемента масиву (х1, х2, ….хk) та їх порядкових номерів.

Особливість пошуку полягає в тому, що необхідно знаходити номер найбільшого та найменшого елемента. Прийнявши за початкове значення і максимальний і мінімальний елемент, запам’ятаємо їх номери іmax = 1 і іmin= 1. У циклі при виконанні умов xi>xmax та хimin присвоюють, відповідно, xmax=xі, іmax = і та хmini , іmin = і (рис. 5.)


3 Контрольні питання

3.1 Дайте визначення масиву.

3.2 Які характеристики мають масиви?

3.3 Опишіть особливості алгоритмів введення і виведення елементів масиву.

3.4 Опишіть реалізацію накопичення суми і добутку скінченого числа елементів масиву.

3.5 Як організувати рахунок кількості елементів?

3.6 Як організувати процес формування нових масивів у процесі розв’язання задач?

3.7 Як організувати знаходження найбільшого і найменшого елементів масиву?

3.8 Як організувати процес упорядкування елементів масиву?

3.9 У чому особливість організації циклу при обробці масивів?


ПРОЕКТУВАННЯ АЛГОРИТМІВ ОБРОБКИ ДВОВИМІРНИХ МАСИВІВ

Двовимірний масив характеризується ідентифікатором, який має два виміри (індекси), і числом значень у кожному вимірі (верхньою межею кожного індексу). Положення елемента в двовимірному масиві визначається індексами. Один вказує на номер рядка, а другий - на номер стовпчика, на перетині яких розташовується елемент. Тобто елемент двовимірного масиву A представляється ідентифікатором A(i,j), де

i - номер рядка масиву A;

j - номер стовпчика масиву A.

Розмір масиву (кількість елементів масиву) – добуток числа рядків на число стовпчиків масиву, тобто для масиву A(10,5) його розмір складає 50.

Порядок введення елементів двовимірного масиву (за рядками чи за стовпчиками), якщо він не пов'язаний з обробкою масиву, байдужний і організується за допомогою вкладеного циклу за будь-яким порядком проходження параметрів зовнішнього і внутрішнього циклів по i та j . При обробці двовимірного масиву, а також при введенні, пов’язаним з обробкою, порядок проходження параметрів зовнішнього і внутрішнього циклів по i та j визначається умовами задачі.

При виведенні двовимірного масиву за параметр зовнішнього циклу приймається I (фіксується значення I та виводяться елементи рядків у внутрішньому циклі, змінюючи значення J).

Приклад: Із матриці А(10,5) вивести на друк додатні елементи.

Схема алгоритму наведена на рис.1.

Щоб скоротити обсяг алгоритму, введення елементів матриці A(I, J) та їх обробка об'єднані. Пропонується наступний порядок виконання вкладеного циклу. У зовнішньому циклі задається параметр циклу І, який дорівнює 1. Так як І<10, то виконуються всі операції, що входять в даний цикл. Першою такою операцією є заголовок внутрішнього циклу, де параметру J задається значення 1, а потім вводиться значення елементу масиву А(1,1). Далі виконується перевірка умови А(1,1)>0. Якщо умова виконується, то збільшується значення лічильника К на 1 і виводиться значення елемента А(1,1); якщо умова не виконується, то виконується перехід на продовження внутрішнього циклу J = 2,3,4,5. Після закінчення внутрішнього циклу у зовнішньому циклі І приймає значення 2 і знов повторюється внутрішній цикл п’ять разів. Після 10 - кратного виконання зовнішнього циклу виконується перехід на блок “кінець”.


3 Контрольні питання

3.1 Дайте визначення двовимірного масиву.

3.2 Опишіть алгоритми введення та виведення двовимірних масивів.

3.3 Які операції повинні бути у схемах обробки двовимірних масивів?

3.4 Які характеристики мають двовимірні масиви?

3.5 У чому складається особливість організації циклу при обробці двовимірних масивів?

3.6 Опишіть правила організації вкладеного циклу з урахуванням порядку перебору елементів матриці.

3.7 Як організувати виведення нижньої трикутної матриці в узвичаєному вигляді?

3.8 Як організувати виведення верхньої трикутної матриці в узвичаєному вигляді?

3.9 Як організувати виведення матриці розміром HхМ елементів в узвичаєному вигляді?

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


ПРОЕКТУВАННЯ АЛГОРИТМІВ З ВИКОРИСТАННЯМ ПІДПРОГРАМ

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

Розрізняють підпрограми двох типів: бібліотечні та користувача.

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

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

Схема алгоритму задачі при використанні підпрограм складається із декількох алгоритмів, один із яких є основним (головним) і обов’язково має наступні блоки: “початок”, “кінець”; присвоєння формальним параметрам фактичних значень; “підпрограма”, присвоєння фактичним змінним результатів обчислень підпрограм. В інших алгоритмах описуються дії, які виконуються у підпрограмах. Такі алгоритми складаються з блоків: “вхід”, опису обчислювального процесу з використанням формальних параметрів, “вихід”.

При використанні вкладених підпрограм схема алгоритму, що викликає програму повинна містити блочні компоненти основної програми: блоки присвоєння формальним параметрам програми, що викликається, блоки “підпрограма”, блоки присвоєння фактичним змінним головної програми результатів обчислень підпрограми, що викликається.

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

На момент звертання до підпрограми усі вхідні фактичні параметри повинні бути визначені, тобто їх значення повинні бути відомими.

Приклад 1: У дисплейному залі в обігу знаходяться n дисплеїв, кожен з яких може відмовити з імовірністю p. Імовірність того, що за день відмовлять не менше m дисплеїв, можна оцінити за формулою

W=,

де  – число сполучень з n по k.

Скласти програму розрахунку імовірності w=f(n, m, p) для заданих значень n=15; p = 0,05. Значення m ввести у діалоговому режимі.

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

  1,  якщо х = 0

    F = x! =

   якщо х > 0

Для обчислення факторіалу використовується підпрограма, рис. 1.



Підпрограма містить оператор присвоєння F=1 та цикл, в якому здійснюється обчислення факторіалу Х!. Слід мати на увазі, що значення Х задається в алгоритмі основної програми до виконання підпрограми.

Перед першим зверненням змінній Х присвоюється значення фактичного параметра N (блок 4 алгоритму головної програми), після цього здійснюється перехід до підпрограми (блок 5). Після обчислення N! управління з підпрограми передається блоку 6, де значення результату F присвоюється фактичній змінній А. Аналогічно обчислюються В=К! та F= (N - К)!.

Приклад 2: У програмі необхідно багаторазово виводити різноманітні заголовки, оздоблюючи вгорі та знизу рядком зірочок, наприклад:

*************************************

ГРАФІК ПЕРШОЇ ФУНКЦІЇ Y=F (X)

*************************************

Доцільно друк заголовку і друк рядка зірочок зробити із застосуванням підпрограм.

Схема алгоритму наведена на рис. 2.

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



3 Контрольні питання

3.1 При яких умовах доцільно використання підпрограми?

3.2 Визначити поняття формальних та фактичних параметрів.

3.3 Які основні блоки використовуються в алгоритмі головної програми?

3.4 Які основні блоки використовуються в алгоритмі підпрограми?  

3.5 Перерахувати, як узгоджуються формальні та фактичні параметри.

3.6 Визначити поняття "вкладена підпрограма".


ПРОЕКТУВАННЯ АЛГОРИТМІВ СОРТУВАННЯ

Існує N значень, які потрібно упорядкувати за зростанням (або спаданням), якщо мова йде про числові значення, або за алфавітом, якщо мова йде про ланцюжки символів.

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

Для сортування всі дані потрібно ввести в машину. Припустимо, що потрібно впорядкувати за зростанням числові дані, які містяться в пам’яті в масиві Т розміром N. Існує багато різноманітних алгоритмів сортування, що дозволяють вирішити цю задачу.

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

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

Порівнюють пари значень Т(I) і Т(I+1) при I в інтервалі від 1 до N-1; якщо Т(I)>T(I+1), то значення переставляються місцями.

Сортування зупиняється, коли немає чого переставляти; у цьому випадку сортування масиву закінчується.

Сортування пошуком послідовних мінімумів. При першому проході шукається мінімальне значення масиву Т, що потім змінюється місцями з першим елементом T(1), потім пошук продовжується на N-1 елементах, що залишилися, шукається другий мінімум, що змінюється з елементом Т(2) і т.д. Алгоритм сортування пошуком послідовних мінімумів наведено на рис.2.

Сортування методом вставки. Щоб відсортувати масив Т, достатньо вставити T(J) у J-1 вже сортованих перших елементів, при цьому J змінюється від 2 до N. Алгоритм сортування методом вставки наведено на рис.3.

Швидке сортування SHELL-SORT є вдосконаленим методом вставки. Ідея, що покладена в основу цього метода така, що дані попередньо сортуються у блоках, а потім кількість блоків зменшується до тих пір, поки усі данні не будуть в одному блоці. Тим самим значно зменшується кількість обмінів. На операції обмінів у програмі для сортування даних витрачається багато машинного часу. Швидке сортування QUICKSORT є одним із найшвидших методів сортування. Серед N значень, які треба відсортувати, обирається значення, яке називають провідним елементом. Цей вибір може проводитися випадковим чином. Потім у початок масиву ставляться усі елементи, менші за провідний, а у кінець –усі інші. На кожній з отриманих послідовностей ця операція повторюється до тих пір, доки не одержані послідовності, які мають один або два елементи. Таким чином масив відсортований. Ефективність цього методу є високою лише у тому випадку, коли вибрані провідні елементи розділяють кожну послідовність на послідовності приблизно однієї довжини.

Розберемо приклад. Дано деяку послідовність чисел:

4 3 7 6 9 1 0 2 5

Виберемо перше (4), останнє (5) та число (9), яке знаходиться посередині. Середнім числом D є 5, і по ньому дана послідовність ділиться на 2 підгрупи. Для цього число D переставляється на праве провідне місце (у цьому прикладі воно вже там стоїть). Тепер, починаючи з провідного лівого, шукається число більше за 5, а з правого – число менше за 5, і ці числа переставляються місцями. У даному випадку це числа 2 та 7.

4 3 2 8 9 1 0 7 5

Пошук продовжується до тих пір, доки не зупиниться на числі, котре не вдасться переставити з жодним іншим числом. Таким чином послідовність має вигляд:

4 3 2 0 1 9 8 7 5

Потім це число (у даному випадку 9) зміняється з числом, що стоїть у правому кінці (у даному випадку числом 5). Це дає:

4 3 2 0 1 5 8 7 9

Тепер число 5 стоїть на тому місці, на якому воно буде стояти після закінчення сортування. Таким самим чином сортуються обидві підгрупи (4 3 2 0 1 ) і (8 7 9 ), доки в кожній з них не залишиться по одному числу.



Контрольні питання

  1.  Зазначте області застосування сортування.
  2.  Сутність методу "кулькового" сортування.
  3.  Сутність сортування методом послідовних мінімумів.
  4.  Сутність сортування методом вставки.
  5.  Методи швидкого сортування.


Інтерпретатор з мови Бейсик працює під керуванням операційної системи. Щоб почати діалог з інтерпретатором, необхідно завантажити спочатку операційну систему, а потім інтерпретатор Бейсик.

Після завантаження операційної системи і виводу на екран монітора підказування, що означає, що система очікує вводу команд, запускається файл GWBASIC. EXE, після чого на екрані з’являється підказування ОК, означаюче готовність інтерпретатора до роботи . У останньому рядку екрана з'являється перелік функцій, пов’язаних з функціональним клавішам F1-F10.

ВВІД ПРОГРАМИ У ЕОМ. Ввід програми користувача здійснюється за допомогою алфавітно-цифрових клавіш. Клавіша керування курсором використовуються для переміщення курсору в потрібне місце екрана, а також для вводу цифр і символів арифметичних операцій. Функціональні клавіші використовуються для полегшення роботи користувача з ЕОМ. При роботі з інтерпретатором Бейсик за функціональними клавішами закріплені такі функції:

F1 - LIST - вивід указаних програмних рядків на екран;

F2 - RUN - запуск програми, що знаходиться в ОЗУ, з указаного рядка;

F3 - LOAD - читання з диска в ОЗУ програмного файла;

F4 - SAVE - запис програмного файла з ОЗУ на диск;

F5 - CONT - поновлення програми після переривання;

F6 - LPTI - призначення пристрою для друку;

F7 - TRON - вмикання режиму налагодження і трасування програми;

F8 - TROFF - скасування режиму трасування;

F9 - KEY - перепризначення функціональних клавіш;

F10 - SCREEN - установлення режиму роботи екрана.

При натисканні клавіш F2, F5, F6, F8, F10 відповідні команди починають виконуватися негайно (текст команд закінчується кодом клавіші Enter). При натисканні інших клавіш текст команди доповнюється з клавіатури необхідними параметрами, після чого натискується клавіша Enter.

Перед створенням нової програми необхідно виконати команду NEW, що викликає очищення робочої області ОЗУ від програм і даних.

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

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

Для автоматичного вводу рядків із заданим кроком використовується команда AUTO.

Формат команди: AUTO (початковий номер), (крок збільшення)

Якщо в команді аргументи відсутні, то команда еквівалентна AUTO 10,10. Для скасування режиму виводу номерів рядків варто одночасно натиснути клавіша CTRL+BREAK.

ВИКОНАННЯ ПРОГРАМИ. Введена програма зберігається в ОЗУ ПК. Для її запуску використовується команда RUN. Перед виконанням операторів програми інтерпретатор перевіряє їхню правильність. При виявленні синтаксичних помилок на екран дисплея виводиться повідомлення, що вказує на наявність синтаксичної помилки в рядку з номером, указаним у повідомленні. Рядок, що містить помилку, повинний бути полагоджений. Якщо оператор не містить помилок, то він виконується.

При виконанні програми на екран виводяться запити на ввід даних, необхідних для вирішення задач (оператори INPUT), а також результати і пояснювальні повідомлення (оператори PRINT). Після виконання усіх операторів програми на екран дисплея виводиться повідомлення OK, що означає готовність до продовження роботи.

При завершенні роботи з інтерпретатором БЕЙСИК повернення в операційну систему здійснюється набором команди SYSTEM. При цьому усі файли закриваються, програма в пам'яті губиться.

редагування ПРОГРАМИ. При виявленні помилок у програмі необхідно встановити їхні причини. Для цього необхідно вивести на екран програму або її частину, використовуючи команду LIST.

Формат команди: LIST [початковий номер] [-] [кінцевий номер]

Приклади:

LIST    -- вивід усієї програми;

LIST 40 -- вивід рядка з номером 40;

LIST 40-150 -- вивід рядків з 40 по 150 номер;

LIST -70 -- вивід рядків від початку до 70 номера;

LIST 70- -- вивід рядків з 70 номера до кінця програми.

Число рядків, виведених на екран, не повинно бути більш 24. Для виправлення помилок у програмі використовуються такі прийоми:

- перемістити курсор у позицію, що містить помилковий символ, і ввести на його місце правильний;

- видалити з рядка лишній символ - перемістити курсор у позицію, що містить цей символ, і натиснути клавішу Delete;

- вставити у рядок пропущені один або декілька символів - перемістити курсор у позицію, в яку повинні бути установлені символи, натиснути клавішу Insert для переходу в режим вставки, а потім ввести пропущений символ або їх послідовність. Для скасування режиму вставки необхідно повторно натиснути цю клавішу або будь-яку клавішу керування курсором.

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

Для зміни рядка можна набрати новий рядок з тем же номером і натиснути клавішу Enter. При цьому старий рядок з тем же номером віддаляється.

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

Для видалення декількох строк використовується команда Delete.

Формат команди: Delete "початковий номер" "-" "кінцевий номер"

Приклади:

Delete 50 - видалення рядка з номером 50;

Delete 40-120 - видалення рядків з 40 по 120 номер;

Delete -20 - видалення рядків з початку по 20 номер;

Delete 20- - видалення рядків з номера 20 до кінця програми;

Delete 1- - видалення усієї програми.

Номера рядків програми змінюються, як правило, з кроком 10. Це дає можливість вставляти пропущені рядки в програму, не змінює номерів наступних рядків. Якщо необхідно вставити більш 9 рядків, то варто виправити номера усіх наступних рядків. Для цього використовується команда RENUM.

Формат команди:

RENUM "новий початковий номер", "старий початковий номер", "крок"

Приклади:

RENUM 100,50,5 - команда змінить старі номера рядків, починаючи з 50 номера, на нові з номерами від 100 із кроком 5;

RENUM 100,50 - команда змінить старі номера рядків, починаючи з 50 номера, на нові з номерами від 100 із кроком 10.

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

Якщо не вказане нового початкового номеру, то він дорівнює розміру кроку.

Якщо є оператори передачі керування GOTO, GOSUB і т.д., то команда RENUM змінює їхні аргументи (номера рядків).

Для виводу окремого рядку на екран при редагуванні можна використовувати команду EDIТ, у який указується номер цього рядку. При цьому курсор розташовується на початку рядка.

Команди TRON і TROFF служать відповідно для вмикання і вимикання режиму трасування. У режимі трасування, який використовується для налагодження програм, на екран дисплея виводяться в квадратних скобках номера усіх виконуваних програмних рядків, розташованих між операторами TRON і TROFF, спільно з результатами, виведеними на екран.

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

Програма, створена користувачем, зберігається в ОЗУ ПК. Після закінчення роботи і вимикання машини зміст пам'яті губиться. Для зберігання програми її необхідно записати на зовнішній устрій (на диск) у виді програмного файла. Ім'я файла призначається користувачем. Для позначення типу файла при програмуванні на мові Бейсик використовуються стандартні розширення:

BAS - програмний файл,

DAT - файл вхідних і вихідних даних,

TMP - робочий файл (тимчасовий).

Для запису програми на магнітний диск у виді програмного файла використовується команда SAVE (зберегти).

Формат команди: SAVE "[дисковод:] ім'я файла"

Якщо запис файла здійснюється на системний устрій, то ім'я устрою (дисковода) можна опустити.

Для виводу програми з ОЗУ на принтер використовується команда LList

Формат команди: LList ["початковий номер "-" кінцевий номер"],

де "початковий номер" - "кінцевий номер" - номера початкової і кінцевої рядків програми, яки виводяться на друк. Якщо аргумент не указаний, то на друк виводиться уся програма.

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

Формат команди: NAME "старе ім'я" AS "нове ім'я"

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

Формат команди: FILES [ім'я файла]

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

Програма, яка була збережена за допомогою команди SAVE, у наступному може бути зчитана із програмного файла на магнітному диску в ОЗУ. Це здійснюється за допомогою команди LOAD (загрузить).

Формат команди: LOAD "[дисковод:] ім'я файла"

Якщо програмний файл знаходиться на поточному устрої, то достатньо зазначити тільки ім'я файла.

По команді LOAD обчищається пам'ять, а потім у неї зчитується програма.

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

Формат команди: MERGE "[дисковод:] ім'я файла"

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

Для видалення файлів на диску використовується команда KILL.

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

3. КОНТРОЛЬНІ ПИТАННЯ

3.1. Перерахуйте етапи вирішення задачі на ЕОМ.

3.2. Визначите поняття "алгоритм" і перерахуйте його властивості.

3.3. Перерахуйте способи опису алгоритмів.

3.4.Поясните правила використання блок-схем для опису алгоритмів.

3.5. Визначите поняття "програма" вирішення задачі на ЕОМ.

3.6. Опишіть основні функції мови Бейсик.


ОСНОВНІ ПРИЙОМИ РОБОТИ У ПРОГРАМНОМУ СЕРЕДОВИЩІ QBASIC

Мал. 17.1. Перше вікно при запуску QUICK-BASIC.

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

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

Для більшості функцій повинна бути задана додаткова інформація, яка запитується у користувача в діалоговому режимі. З цій метою в центрі екрану з’являється меню другого рівня, вхід в яке здійснюється автоматично або після натискання клавіші [Tab]. У першому випадку в однієї з виділених прямокутних областей появляється мерехтливий курсор і користувач повинен набрати значення необхідного параметра. В другому випадку меню містить декілька процедур, яки укладені в прямокутники з одинарною межею. Після натискання клавіші [Tab] один із прямокутників стає активним - його межа обкреслена вже подвійною лінією. Перехід до наступної процедури заставки відбувається після чергового натискання клавіші [Tab]. Обхід процедур в зворотному порядку відбувається одночасним натисканням клавіш [Shift+Tab].

Деякі меню містять вертикальний набір операцій, кожна з яких починається з круглих скобок. Крапка усередині скобки є ознакою вибору операції. Її пересування по меню заставці відбувається за допомогою клавіш вертикального переміщення курсору. Виконання вибраної операції починається після натискання клавіші [Enter].

Тепер можна натиснути клавішу [Enter] або [Esc]. При натисканні клавіші [Enter] з’являється керівництво користувача (мал.17.2).

Мал. 17.2. Меню керівництва користувача

Завдання для самостійної роботи:

- уважно вивчите керівництво користувача і розділ по використанню довідки;

- вивчите зміст тем довідки QUICK-BASIC;

- по вказівки викладача запишіть основні положення відповідних тем.

При натисканні клавіші [Esc] обчищається центральна частина екрана і редактор готується до роботи з програмами QUICK-BASIC.

Завдання для самостійної роботи

По черзі відкрийте пункти головного меню і за допомогою підказування і довідкової системи вивчите і запишіть зміст основних функцій QUICK-BASIC [Файл, Редактирование, Запуск, Отладка, Справка].

5.2. ВВЕДЕННЯ І РЕДАГУВАННЯ ПРОГРАМ

Екран QUICK-BASIC ділиться на дві основні часті - вікно редагування і вікно безпосередніх обчислень. При запуску QUICK-BASIC розміщає курсор у вікні редагування. Це дозволяє:

- увести текст нової програми (функція Новый у режимі Файл);

- завантажити в це вікно текст існуючої програми (функція Открыть у режимі Файл);

- редагувати текст програми (режим Редактирование);

- запустити програму на виконання (режим Запуск);

- налагодити програму (режим Отладка);

- зберегти програму на диску (функції Сохранить і Сохранить как режиму Файл).

Режим редагування дозволяє набрати і модифікувати текст поточної програми або будь-якої її компоненти - підпрограми, зовнішньої функції. Меню редактора включає видалення виділеного фрагмента з запам'ятовуванням його в спеціальному буфері, копіювання виділеного фрагмента в буфер, перепис фрагмента з буфера в указане місце програми, видалення виділеного тексту без копіювання в буфер. Рядки основного меню Новая SUB і Новая FUNCTION дозволяють користувачу оформити набір нової підпрограми або функції. Функції редагування тексту виконуються за допомогою клавішних операцій, характерних для більшості текстових процесорів:

[Delete] – видалення символу над курсором;

[Insert] – включення і відключення режиму вставки;

[Backspace] - видалення символу зліва від курсору і інші (див. довідку) .

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

COMMON DEF OPTION TYPE

CONST DIM SHARED $DYNAMIC

DATA FUNCTION STATIC $INCLUDE

DECLARE IF—ENDIF SUB $STATIC

Повно-екранний режим включається комбінацією Ctrl + F10. Повторне натискання відновлює початкові розміри вікна.

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

Завдання для самостійної роботи

Введіть програму табуляції функції у вікно безпосередніх обчислень:

INPUT XN, XK, DX

PRINT “X”, “Y”

FOR X=XN TO XK STEP DX

Y=SIN(X)

PRINT X, Y

NEXT X

END

Якщо ви допустили помилку при вводі операторів, варто виправляти їх, використовує клавіші редагування.

Натисканням клавіші Enter запустите програму на виконання й одержите результати обчислень програми.

5.3. ЗАПУСК ПРОГРАМИ НА ВИКОНАННЯ

Основне меню з процедурами запуску містить функції Запуск, Перезапустить і Продолжить, яки забезпечують запуск, повторний запуск або продовження виконання перерваної програми. Для виконання введеної програми необхідно викликати команду Запуск із меню Запуск або використовувати комбінацію клавіш Shift+F5.

Завдання для самостійної роботи

Очистити екран.

У системі Справка (Предметний покажчик) відкрити довідку по оператору PLAY.

Скопіювати приклад, приведений у довідці, у буфер обміну, використовуючи команди меню Редактирование.

Повернутися у вікно редагування і вставити текст із буфера обміну в це вікно.

Запустити програму на виконання.

Повторити дії для інших операторів.

5.4. ЗБЕРЕЖЕННЯ ПРОГРАМИ НА ДИСКУ

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

- вибрати команду Сохранить або Сохранить как режиму Файл ;

- ввести ім’я файлу (мал. 17.3), під яким зберігається програма (див. довідку команди);

- натиснути клавішу [Enter]. 

Мал. 17.3. Меню заставка для процедури зберігання файла

5.5. ВИХІД ІЗ СЕРЕДОВИЩА QUICK-BASIC

Для виходу із середовища QUICK-BASIC необхідно виконати наступні дії:

- вибрати команду Выход у режимі Файл ;

- натиснути клавішу [Enter]. 

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. У якому вигляді необхідно зберігати програму, написану в GW-Basic, щоб вона могла бути використана в QBASIC?

3.2. Що таке формат ASCII?

3.3. Які ключові слова GW-Basic не підтримуються QBASIC ?

3.4. Які обмеження в QBASIC для імені, рядка і числа?

3.5. Які обмеження в QBASIC для масиву?

3.6. Які обмеження в QBASIC для процедур і файли?

3.7. Опишіть процедури запуску QBASIC, введення програми, її налагодження і зберігання.


ПРОГРАМУВАННЯ ЛІНІЙНИХ ОБЧИС
ЛЮВАЛЬНИХ ПРОЦЕСІВ

5.1. ОСНОВНІ ОПЕРАТОРИ МОВИ БЕЙСИК.

Основною синтаксичною одиницею мови БЕЙСИК є ОПЕРАТОР (Пропозиція). Оператори, як правило, компонуються зі службових слів (ключових слів), використовуваних спільно з основними елементами мови: константами, перемінними і арифметичними вираженнями.

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

Наприклад: LET - привласнити, IF - якщо, GOTO - перейти, DIM-скорочене слово, DIMENSION - що означає опис, READ -ввести, PRINT - друкувати і т.д.

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

Усі оператори мови БЕЙСИК розділяються на такі групи:

- основні оператори мови;

- оператори перетворення інформації;

- оператори уводу-вивіду;

- дискові оператори;

- оператори перетворення даних;

- оператори опрацювання графіки ;

- матричні оператори;

- оператори сортування;

- підпрограми;

Весь набір операторів розділяється на два класу: яки виконуються і яки не виконуються.

Оператори, яки виконуються, визначають дії.

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

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

Оператори, яки не виконуються, розташовуються частіше спочатку програми. До таких операторів ставиться оператор - коментар REM.

Формат оператора: n REM текст

де n - номер рядку;

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

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

Проте варто пам'ятати, що кожен коментар займає місце в пам'яті ЕОМ.

До операторів, що не виконуються, відноситься також оператор DIM, що описує розмірність масиву.

Серед операторів, яки виконуються, можна виділити оператори:

- присвоювання;

- вводу-виводу;

- передавання управління;

- оператори, що організують взаємодію підпрограм.

Оператор присвоювання LET. Cлужить для обчислення значення арифметичного або рядкового вираження і присвоювання цього значення перемінній.

Формат оператора: n [LET] v=a

Де LET - необов'язкове ім'я оператора присвоювання;

v - ім'я простої або індексованої перемінної, що приймає нове значення;

а - вираження.

Перемінні і вираження повинні бути або одночасно числовими або рядковими.

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

Приклади запису операторів присвоювання:

10 A=21. 847

80 D=B*B-4*A*C

90 X(I,J)=X(I,J)/X2

120 Z$="ЗИМНЯ"

130 Z$=Z$+"ОЛІМПІАДА"

200 I=I+1:Z=SIN(X):D=LOG(A/X)

ОПЕРАТОРИ ВВЕДЕННЯ ДАНИХ. Дані, використовувані в програмі, можна задавати за допомогою операторів присвоювання. Проте цей спосіб носить частковий характер. Бажано в програмі здійснювати введення початкових даних, використовуючи оператори введення. До них відносяться оператори READ і DATA, яки виконуються сумісно: DATA розміщуєте дані, а READ - до них обертається.

Формат операторів READ і DATA:

n READ список перемінних

n DATA список констант

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

Кількість перемінних в операторах READ і DATA повинно збігатися. Проте оператори READ і DATA не обов'язково повинні бути парними. Наприклад, двом операторам READ може відповідати один оператор DATA і навпаки.

Приклад: необхідно привласнити значення перемінних:

а=1, у=2, x=5, у=6.83, z="Павлов".

Це можна виконувати різноманітними способами:

1) Один оператор READ і один оператор DATA:

10 DATA 1,2,5,6.83,Павлов 

20 READ A,B,X,Z$

2) Два оператора READ і один оператор DATA:

10 DATA 1,2,5,6.83,Павлов

20 READ A,B

30 '.................

100 READ X,У,Z$

3) Два оператора READ і два оператора DATA:

10 DATA 1,2

20 READ A,B

30 ......

100 DATA 5,6.83,Павлов

110 READ X,Y,Z$

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

Перед виконанням програми інтерпретатор переглядає усі оператори DATA у порядку зростання номерів рядків і створює єдиний блок даних. Якщо в програмі зустрічається оператор READ, то зчитується поточне значення констант із блоку даних і запам'ятовується положення останнього ліченого даного (за допомогою покажчика позиції). Наступний оператор READ починає вибирати дані з тої позиції, що була встановлена попереднім оператором READ.

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

Тип перемінних і елементів масиву, вказаних у операторі READ, повинні бути сумісні з типом значень, що їм привласнюються. Так, неприпустимо, щоб перемінна була рядковою, а значення - числовим (або навпаки). Оператори DATA ставляться до числа операторів, що не виконуються. Їх можна розміщати в будь-якій частині програми до оператора END. Проте рекомендується уникати розкидання операторів DATA по програмі. Найкраще їх помістити в однім місці програми - на початку або наприкінці.

Приклад:

10 READ N,M,C$,D$

20 DATA 100,-20,РЕЖИМ,ГАЗ-24

Після виконання оператора READ перемінні одержать значення в наступному порядку: N=100 M=-20 C$="РЕЖИМ" D$="ГАЗ-24".

Оператор RESTORE. Інтерпретатор запам'ятовує поточну позицію в списку констант оператора DATA за допомогою покажчика, що переміщається вперед щораз, коли оператор READ бере із списку чергове значення. Можна повернути покажчик у початок блока даних, використовуючи оператор RESTORE. Перший оператор READ, що слідує після RESTORE, буде зчитувати перше значення з блоку даних.

Формат оператора: n RESTORE

Наприклад:

10 READ A,B,C

20 RESTORE

30 READ D,E,F

40....

140 DATA -12,85,63,40,80

Перший оператор READ (рядок 10) читає перші три значення із оператора DATA (рядок 140):

A=-12 B=85 C=63

Потім оператор RESTORE (рядок 20) переміщує покажчик у початок блоку даних (рядок 140). Другий оператор READ (рядок 30) знову читає перші три числа:

D=12 E=85 F=63

Оператор введення INPUT. Так само як і READ, цей оператор служить для введення даних у програму. Різниця полягає у тому, що при використанні оператора READ усе дані спочатку поміщуються у програму в операторах DATA, а при використанні оператора INPUT дані вводяться з клавіатури безпосередньо при виконанні програми в режиму діалогу з ЕОМ (діалоговий ввід).

Формат оператора: n INPUT список перемінних

При виконанні оператора INPUT на екрані дисплея виводиться знак питання і виконання програми припиняється. Після цього користувач вводить з клавіатури значення кожної перемінної, вказаної в списку, по порядку, розділює їх комами. Після введення останнього значення кома не ставиться, а натискується клавіша Enter і продовжується виконання програми.

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

Після завершення програми дані, що введені оператором INPUT, не зберігаються. Наприклад, при виконанні оператора

40 INPUT N$,K

на екран дисплея буде виведений знак запитання (?). Виконання програми зупиняється. Оператор доповнює рядок даними, наприклад ПОНЕДІЛОК,19. Після натиснення клавіші Enter програма продовжує роботу, використовуючи значення N$=ПОНЕДІЛОК і ДО=19.

Число введених даних повинно відповідати числу перемінних в операторі INPUT.

При роботі в режимі діалогу з ЕОМ не завжди зручно, щоб запит на введення з клавіатури тих або інших значень виводився лише у вигляді одного знака запитання. Необхідно передбачити у програмі вивід на екран навідних повідомлень ("підказувань") про те, яку інформацію потрібно ввести користувачу.

Оператор INPUT позволяє крім знака запитання (або замість нього) виводить на екран текстові навідні повідомлення. Текст навідного повідомлення повинен вказуватися в операторі INPUT у вигляді рядкової константи, що стоїть безпосередньо за ключовим словом INPUT, при цьому рядкова константа міститься в лапки і відокремлюється від імені перемінною крапкою з комою. Наприклад, при виконанні оператора

10 INPUT "ВВЕДІТЬ 2 ЧИСЛА X,Y";X,Y

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

ВВЕДІТЬ 2 ЧИСЛА X,Y?

Користувач доповнює рядок необхідною інформацією

ВВЕДІТЬ 2 ЧИСЛА X,Y? -349,567

Для скасування знака запитання крапку з комою в операторі INPUT після "підказування" варто замінити комою. Тоді введена користувачем запис буде розташовуватися безпосередньо за останнім символом повідомлення.

Наприклад, при виконанні оператора

30 INPUT "ДОМАШНЯ АДРЕСА:",N$

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

ДОМАШНЯ АДРЕСА:

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

Наприклад, якщо при виконанні оператора

50 LINE INPUT "НАЗВІТЬ ІМ'Я",N$

ввести рядок ГАННА ІВАНІВНА, то перемінна N$ одержить це значення.

ОПЕРАТОРИ ВИВОДУ ДАНИХ. Для виведення даних на екран дисплея в процесі виконання програми використовується оператор PRINT.

Формат оператора: n PRINT список виведення 

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

Наприклад:

10 PRINT " ЗАЗНАЧТЕ ВАШЕ ІМ'Я "

20 PRINT " СУМА = "

30 PRINT SIN(X),COS(X),EXP(X)

90 PRINT " АДРЕСА ";A$ , " ТЕЛЕФОН "; T$

170 PRINT " ТАБЛИЦЯ ЗНАЧЕНЬ ФУНКЦІЇ Y=F(X) "

210 PRINT " АРГУМЕНТ X " , " ФУНКЦІЯ Y "

Оператор PRINT без списку аргументів виводить рядок пробілів.

Наприклад, оператор

1020 PRINT: PRINT

викликає пропускання двох рядків на екрану.

При використанні оператора PRINT можна організувати вивід даних в двох форматах - зоннім і компактним.

При зонному форматі рядок розділюється на 5 зон по 14 позицій в кожній. Кожне виведене значення розміщається у своїй зоні. Якщо остання зона в рядку заповнена, то вивід даних продовжується з першої зони наступного рядка. При виводі числових констант перша позиція кожної зони приділяється під знак числа. Для виводу даних у цьому форматі необхідно елементи списку виведення відокремлювати друг від друга комами. Якщо в списку оператора PRINT стоять дві коми підряд, то одна зона пропускається. Наприклад, при виконанні операторів

10 A=1: B=2: C=-3: D=48: E=-50

20 PRINT A,B,C,D,E

30 A=-1: C=3: D$="МЕРКУРІЙ": C$="САТУРН"

40 PRINT A,,B,,C,D$,,C$

на екран буде виведене

1

2

-3

48

-50

-1

2

3

МЕРКУРИЙ

САТУРН

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

Наприклад, при виконанні операторів

10 А=1 : У=2 : C=-3 : D=48 : E=-50

20 PRINT A;B;C;D;E

30 PRINT "СУМА=",A+D

40 PRINT "СУМА=";A+D

50 C$="ОСІНЬ"

60 PRINT "ЧАС РОКУ";C$

на екран буде виводиться

1 2 -3 48 -50

СУМА= 49

СУМА= 49

ЧАС РОКУ ОСІНЬ

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

100 PRINT X,Y,

110 PRINT W

усі три значення виводяться в одному рядку і кожне із них в своєї зоні. Кома наприкінці списку в рядку 100 блокує перехід на новий рядок.

При виконанні операторів

100 PRINT Х,Y

110 PRINT W

виводяться два значення (X і Y) в одному рядку, а значення W – в наступному. Відсутність коми наприкінці списку в рядку 100 викликає перехід до нового рядка.

Коми і крапки з комами можуть застосовуватися в операторі PRINT спільно.

Наприклад:

20 PRINT A;B;C,;D

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

Наприклад: визначити вигляд виведеної інформації при виконанні операторів

10 X=45:Y=2

20 PRINT "X+Y=";X+Y

30 PRINT "X+Y=",X+Y

40 PRINT "СУМА X+Y ДОРІВНЮЄ ";X+Y

На екрані буде виведене

X+Y= 47

X+Y= 47

CУМА X+Y ДОРІВНЮЄ 47

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

Наприклад:

Виведене значення Вид рядка

0.00000835 8.35E-06

0.03 .03

7895 7895

1000000 100000!

1234.56 1234.56

СУМА X+Y ДОРІВНЮЄ 47

ФОРМАТНИЙ ВИВІД. Часто користувачу необхідно оформить результаті обчислювань відповідним образом - розмістити в вигляді таблиці в визначених позиціях рядку, опустити лишні десятині знаки, додати будь які символи і т.д. Для редагування виведених даних служить оператор виводу PRINT із функціями ТАВ, SPC і оператор PRINT USING. 

Функція ТАВ(n), де n - ціле число в діапазоні від 1 до 255, дозволяє зрушити рядок по горизонталі. Аргумент n цій функції визначає початкову позицію в рядку друку. Наприклад, оператор

20 PRINT ТАВ(30);"ГРАФІК";ТАВ(50);"Y=F(X)"

надрукує слово ГРАФІК, починаючи з 30-й позиції поточного рядка, а слово Y=F(X) - c 50-й позиції.

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

20 PRINT X;ТАВ(20);Y;ТАВ(40);2.87

40 PRINT ТАВ(12);"ПЕРШИЙ";ТАВ(6);"НОМЕР"

викликає друк: X - з позиції 1, Y - з позиції 20, числа 2.87 – з позиції 41 (комп'ютер при друку чисел завжди оставляє вільною одну позицію для можливого знака числа). Оператор рядка 40 викликає друк слова ПЕРШИЙ із позиції 12, а слова НОМЕР - із позиції 6 наступного рядка.

Функція SPC(n) означає вивід n пробілів. Її зручно використовувати, якщо треба розділити елементи друку декількома пробілами. Наприклад:

10 PRINT X;SPC(6);SIN(X)

Оператор форматного виводу даних PRINT USING дозволяє більш гнучко управляти формою представлення виведених даних. Значення виводяться по форматах (шаблонам), що задається програмістом у списку форматів.

Формат оператора

n PRINT USING список форматів; список виведення

Список виведення оператора PRINT USING аналогічний списку виведення оператора PRINT. Елементи списку перераховуються ерез коми. Значення виводяться по форматах, указаним у списку форматів. Список форматів міститься в лапки і складається з рядкових констант, числових і рядкових форматів, записаних без пробілів і роздільників.

Числові і рядкові формати задаються за допомогою спеціальних символів управління форматом друку. Числовий формат указується символом #. Кожний такій символ відповідає одному десятинного розряду числа, що виводиться. Ширина поля числового формату дорівнює числу символів #. Положення десяткової крапки визначається символом "крапка". Число вирівнюється по правому краю поля. При необхідності відбувається округлення чисел. Якщо поле, задане числовим форматом, мало, то після символу % виводиться повне значення числа. При запровадженні числового формату необхідно виділяти одну позицію під знак числа. Наприклад, операторі:

70 PRINT USING "###.##";19.849

80 PRINT USING "##.###";-2.54

90 PRINT USING "#####";-5

91 PRINT USING ".###";.0.8

92 PRINT USING "S=##.#";13.247

93 PRINT USING "X=####";-13987

викликають появу наступних повідомлень на терміналі

19.85

-2.540

-5

.080

S=13.2

X=%-13987

При виконанні оператора рядка 93 знак % указує, що задане в шаблоні числове поле мало для виводу числа.

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

10 S=2048. 84 : D=20.49  

20 PRINT USING "ЗАГАЛЬНА СУМА ####. ## РУБ.";S

30 PRINT USING "ПОДАТОК З ОБОРОТУ ###. ## РУБ.";D

викликають вивід повідомлення 

ЗАГАЛЬНА СУМА 2048. 84 РУБ.

ПОДАТОК З ОБОРОТУ 20.49 РУБ.

Для більш гнучкого управління друком чисел використовуються спеціальні символи.

1) Формат завершується знаком << - >>. У цьому випадку після позитивного числа виводиться пробіл, а після негативного -знак << - >>. Наприклад, оператор

40 PRINT USING "##. #-";12.3;-12. 3

викликає повідомлення

12.3 12.3-

2) Числовий формат починається із символів * *. У цьому випадку поле збільшується на дві позиції, а ліві позиції, які не використовуються в полі формату доповнюються зірочками. Для негативних чисел знак виводиться після числа. Наприклад, оператори

10 А=17,86: У=-127,35: С=8013,5: D=5

50 PRINT USING "**##. ##-";A,B,C,D

викликають повідомлення на терміналі

* * 17,86 * 127,35-8013.50 * * * 5.00

3) Чотири символу ^ ^ ^ ^, якими закінчується формат, визначає вивід числового значення в експоненціальний формі. Наприклад, оператори:

20 PRINT USING "##.###^^^^";1

30 PRINT USING "##.###^^^^";-.97654

40 PRINT USING "##.###^^^^";-249.83

 викликають повідомлення на терміналі

10.000Е-01

-0.977Е+00

-2.50Е+03

4) Символ <<,>>, вказаний в форматі в любій позиції зліва від десятинної крапки, викликає друк коми через кожні три позиції зліва від цієї крапки. Наприклад, оператор

100 PRINT USING"#,######.#";5000000

викликає повідомлення

5,000,000.0

Символ <<,>>, вказаний в форматі справа від числової крапки, вважається звичним рядковим символом.

Рядковий формат для друку рядків символів задається одним з наступних трьох способів:

! - задає вивід тільки першого символу рядка;

& - задає вивід усього рядка;

n пробілів \ - задає вивід 2+n перших символів рядка. Шаблон може бути заданим в вигляді "\\", в цьому випадку виводяться два перших символів рядку.

Наприклад, операторі:

10 N$="ЗВІТИ І ВИБОРИ"

20 PRINT USING "! "; N$ '1 СИМВОЛ 

30 PRINT USING "\\"; N$ '2 СИМВОЛУ 

40 PRINT USING "\ \"; N$ '3 СИМВОЛУ 

50 PRINT USING "\ \";N$ '4 СИМВОЛУ 

60 PRINT USING "&"; N$'ВСЕ СИМВОЛИ

викликають на терміналі повідомлення:

З

ЗВ

ЗВІ

ЗВІТ

ЗВІТИ І ВИБОРИ

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

У списку форматів можливо використання числових і рядкових форматів одночасно. Можна оформити список форматів у вигляді рядкової перемінної (форматного рядка), а в операторі PRINT USING зробити посилання на цей рядок. Приклад використання форматного рядка:

10 PRINT SPC(3);"X","LOG(X)"

20 A$="#####\ \##. ###"

30 PRINT USING A$;10," ",LOG(10)

Наприклад, необхідно вивести на екран відомість для оплати комунальних послуг у наступному вигляді:

ВАРТІСТЬ ПОСЛУГ ГРН

ВОДА 0.96

ЕЛЕКТРИКА 4.52

ТЕЛЕФОН 2.50

ОПАЛЕННЯ 1.86

Позначимо літерну частину рядку рядковою перемінною X$, а цифрову - перемінною Z. Розташування даних в рядку зазначимо рядковою перемінною F$. Програма включає введення значень перемінних X$ і Z, зазначених в операторі DATA, і друк їх із використанням форматного виводу.

Це можна зробити наступними операторами:

10 DATA ВОДА,0.96

20 DATA ЕЛЕКТРИКА,4.52

30 DATA ТЕЛЕФОН,2.50

40 DATA ОПАЛЕННЯ,1.86

50 PRINT "ВАРТІСТЬ ПОСЛУГ ГРН."

60 F$="\ \##. # #"

70 READ X$,Z: PRINT USING F$;X$,Z

80 READ X$,Z: PRINT USING F$;X$,Z

90 READ X$,Z: PRINT USING F$;X$,Z

95 READ X$,Z: PRINT USING F$;X$,Z

96 END

Написана програма являє собою закінчену програму лінійного обчислювального процесу. Всі записані оператори починаючи з рядка 50, виконуються у природній послідовності. Оператори рядків 10-40 являються інформаційними (що не виконуються) і служать для створення блоку даних. Вивід даних на пристрій друку виконується операторами LPRINT і LPRINT USING. Формат операторів цілком ідентичний формату операторів виводу даних на екран PRINT і PRINT USING. Якщо в програмі прикладу замінити ключове слово PRINT на ключове слово LPRINT, то вся інформація, що призначалася для виводу на екран, буде передана на пристрій друку.

5.2. ПРОГРАМУВАННЯ ЛІНІЙНОГО ОБЧИСЛЮВАЛЬНОГО

ПРОЦЕСУ

Програма лінійного обчислювального процесу являє собою послідовність пронумерованих рядків, що містять оператори присвоювання, введення і виведення даних. Нумерація рядків визначає послідовність їхній виконання. Номера рядків, що не виконуються, з операторами DATA, REM, DIM не впливають на порядок виконуваних дій. Номера рядків для них потрібні лише для того, щоб був витриманий загальний формат програми. Закінчується програма оператором END.

Приклад: скласти програму для обчислення площі S трикутника АВС по заданих значеннях сторін а, b, c.

Для обчислення площі S скористаємося формулою Герона:

Схема алгоритму вирішення задачі приведена на мал.19.1

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

Колись обчислимо полупериметр p трикутника, а потім його площу S. Для цього включимо в програму два оператора присвоювання. Для виведення результату на екран використовуємо оператор PRINT. Наприкінці програми запишемо оператор END. Для наочності включимо в програму коментар.

Програма вирішення задачі має вид:

10 REM ОБЧИСЛЕННЯ ПЛОЩІ ТРИКУТНИКА

20 READ A,B,C

30 DATA 5.42,6.18,4.27

40 REM ОБЧИСЛЕННЯ: Р-ПЕРИМЕТР, S-ПЛОЩА

50 P=(A+B+C)/2

60 S=SQR(P*(P-A)*(P-B)*(P-C))

70 PRINT "ПЛОЩА =";S

80 END

Схема алгоритму вирішення задачі:

1

 

2

3

4

5

6

Мал. 19.1

3. КОНТРОЛЬНІ ПИТАННЯ

3.1. На які групи підрозділяються основні оператори мови Бейсик.

3.2. Зазначте, які оператори мови Бейсик називаються виконуваними, а які невиконуваними.

3.3. Зазначте формат операторів необхідних для вводу даних.

3.4. Зазначте формат операторів необхідних для виводу даних.

3.5. Як організувати вивід даних у зонному і компактному форматах?

3.6. Зазначте формат оператора присвоювання.

3.7. Як організувати вивід даних за допомогою функції TAB(n)?

3.8. Для яких цілей використовується функція SPC(n)?


ПРОГРАМУВАННЯ АЛГОРИТМІВ РОЗГАЛУЖЕНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

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

GOTO, IF, FOR-NEXT, WHILE, WEND, RETURN, GOSUB, ON GOSUB

Оператор безумовної передачі управління GOTO (перейти до ...) має формат:

n GOTO m

де m - номер строки, до якою здійснюється перехід.

40 S=0:X=.01:N=N+1:GOTO 120

Оператор множинного вибору ON GOTO служить для передачі управління різним рядкам програми в залежності від значення покажчика переходу.

Формат оператора:

n ON покажчик переходу GOTO список номерів рядків

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

При виконанні оператора ON GOTO обчислюється насамперед значення числового вираження. Ціла частина його використовується у якості покажчика переходу на один із вказаних номерів строк в списку, так що при значенні 1 перехід здійснюється до строки, номер якої стоїть першім в списку, при значенні 2 перехід здійснюється до строки, номер якої стоїть другою у списку, і т.д.

Якщо значення вираження менше 1 або більше кількості номерів у списку, то управління передається оператору, що іде за ON GOTO.

Наприклад, у приведеному фрагменті програми

10 PRINT "ДЛЯ ЗАКІНЧЕННЯ ОБЧИСЛЕННЯ"

20 PRINT "ВВЕСТИ ЧИСЛО >=5"

30 PRINT "ВВЕДІТЬ НОМЕР ЕЛЕМЕНТА ВІД 1 ДО 4"

40 INPUT N

50 ON N GOTO 100,150,80,210

60 GOTO 999

80 PRINT "ЛІТІЙ" :GOTO 10

100 PRINT "ВОДЕНЬ":GOTO 10

150 PRINT "ГЕЛІЙ":GOTO 10

210 PRINT "БАРІЙ":GOTO 10

999 END

на екрані появляється повідомлення

ВВЕДІТЬ НОМЕР ЕЛЕМЕНТА ВІД 1 ДО 4

?

При N=1 оператор ON GOTO передасть управління рядку 100, при цьому виводиться повідомлення ВОДЕНЬ. Далі управління за допомогою оператора GOTO передається рядку 10. Якщо користувач введе число 3, то оператор ON GOTO передає управління рядку 80, що приведе до виводу повідомлення ЛІТІЙ. Потім управління передається рядку 10.

При відсутності рядка, що відповідає покажчику переходу, наприклад, N=7, управління передається оператору, що іде за ON GOTO, тобто рядку 60.

Оператори умовної передачі управління IF THEN і IF GOTO змінюють послідовність виконання операторів програми в залежності від значення умови, що перевіряється.

Формат оператора:

n IF умова GOTO номер рядка m [ELSE оператор] (1)

n IF умова THEN оператор1[ELSE оператор 2] (2)

де умова - вираження або відношення;

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

Частина оператора, починаючи з ключового слова ELSE, може бути опущена.

Якщо результат обчислювання відношення дорівнює "істина", то управління передається на рядок з номером m (формат запису 1) або виконується оператор 1 або група операторів, записаних після ключового слова THEN (формат запису 2).

Якщо результат обчислювання дорівнює "неправда", то виконується оператор 2 або група операторів із гілки ELSE. Якщо гілка ELSE відсутня, то управління передається рядку, що іде за IF.

Наприклад:

80 IF X>0 THEN N=2: K=K+1 ELSE N=4: K=K-1

90 IF X<>Y GOTO 999

У приведеному нижче фрагменті програми

10 INPUT "ЗАЗНАЧТЕ СВІЙ ВІК"; K

20 IF K>=18 THEN PRINT "ВИ МОЖЕТЕ голосувати"

ELSE PRINT "ВИ занадто молоді ":PRINT

"ВИ МОЖЕТЕ голосувати ЧЕРЕЗ";18-K;"РОКІВ"

Слід зазначити, що після THEN в операторі IF допускається запис наступного умовного оператора (вкладені IF).

Наприклад:

10 IF X>A THEN IF X<B GOTO 200

20 IF A>B THEN PRINT "БІЛЬШЕ"

ELSE IF A<B THEN PRINT "МЕНШЕ"

     ELSE PRINT "ДОРІВНЮЄ"

Приклад: скласти програму, що визначає номер квадранту, в якому знаходиться точка з координатами x,y.

Введемо координати точки x та y і виконаємо ряд перевірок для обчислення номера квадранта n:

якщо x=0 і y=0, точка знаходиться на початку координат;

якщо x>0 і y=0, точка знаходиться на осі +Х;

якщо x<0 і y=0, точка знаходиться на осі -Х;

якщо x=0 і y>0, точка знаходиться на осі +Y;

якщо x=0 і y<0, точка знаходиться на осі -Y;

n=1, якщо x>0 і y>0;

n=2, якщо x<0 і y>0;

n=3, якщо x<0 і y<0;

n=4, если x>0 и y<0.

Програма має вид :

10 REM ВИЗНАЧЕННЯ НОМЕРА КВАДРАНТА

20 PRINT "ВВЕДІТЬ КООРДИНАТИ ТОЧКИ X,Y"

30 INPUT X,Y

40 IF X=0 AND Y=0 THEN PRINT "ПОЧАТОК КООРДИНАТ":GOTO 130

50 IF X>0 AND Y=0 THEN PRINT "ТОЧКА НА ОСІ + Х":GOTO 130

60 IF X<0 AND Y=0 THEN PRINT "ТОЧКА НА ОСІ - Х":GOTO 130

70 IF X=0 AND Y>0 THEN PRINT "ТОЧКА НА ОСІ + Y":GOTO 130

80 IF X=0 AND Y<0 THEN PRINT "ТОЧКА НА ОСІ - Y":GOTO 130

90 IF X>0 AND Y>0 THEN PRINT "ПЕРШИЙ КВАДРАНТ":GOTO 130

100 IF X<0 AND Y>0 THEN PRINT "ДРУГИЙ КВАДРАНТ":GOTO 130

110 IF X<0 AND Y<0 THEN PRINT "ТРЕТІЙ КВАДРАНТ":GOTO 130

120 PRINT "ЧЕТВЕРТИЙ КВАДРАНТ"

130 END

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Визначте поняття “розгалужений обчислювальний процес”.

3.2. Визначите поняття "логічне відношення".

3.3. Перерахуйте логічні операції.

3.4. Визначите поняття "логічне вираження".

3.5. Які логічні операції використовуються в логічних вираженнях?

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

3.7. Перерахуйте оператори управління, зазначте їхній формат.

3.8. Приведіть приклади використання операторів управління.


ПРОГРАМУВАННЯ АЛГОРИТМІВ АРИФМЕТИЧНИХ ЦИКЛІЧНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

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

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

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

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

Арифметичні цикли називають також циклами з лічильником. Число повторень тіла циклу в цьому випадку рахується за допомогою спеціальною перемінною - лічильника, для якого відоме початкове і кінцеве значення, а також крок її змінювання. Управління циклом здійснюється на основі порівняння поточного значення лічильника з заданим порогом. Число повторень тіла циклу визначається по формулі:

N = ]( Xк - Xн)/h[ + 1,

де Хк - кінцеве значення параметра циклу;

Хн - початкове значення параметра циклу;

h - крок зміни параметра циклу.

Поточне значення параметра циклу обчислюється по формулі:

 X = Xн + (k -1)h,

Де k змінюється від 1 до N.

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

- сформувати початкові дані;

- визначити початкове значення параметра циклу;

- виконати задані обчислення і вивести результати;

- змінити значення параметра циклу на величину кроку;

- перевірити, чи є припустимим нове значення параметра циклу;

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

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

Наприклад, формула Х = Х + 1, в якої реалізована рекурсія, визначає, що до вмісту комірки пам'яті з іменем Х додається 1 і результат записується в Х. Така формула називається рекурентною і зв'язує між собою послідовно обчислені значення перемінної Х. Початковими даними для кожного наступного кроку є результати попереднього.

Приклад організації простого циклу: обчислення і вивід на друк значень функції Y = X2 - SIN2 (X) при зміні аргументу Х від Хн = 0 до Хк = 5 з кроком Н = 0,15.

При використанні оператора умовної передачі управління програма має вид:

10 REM ТАБЛИЦЯ ЗНАЧЕНЬ ФУНКЦІЇ Y = F(X)

20 PRINT ”ВВЕДІТЬ ДІАПАЗОН ЗМІНИ Х І КРОК”

30 INPUT XH,XK,H

40 X =XH

50 Y= X^2+SIN(X)^2

60 PRINT “X = ”;X,”Y(X)=”;Y

70 X=X+H

80 IF X<=XK THEN 50

90 END

У цикл входять оператори 50-80, що повторюються багаторазово, поки виконується умова X <= Xк. Як тільки ця умова не виконується, управління передається оператору, що слідує за умовним, тобто операторові END.

Для циклів із відомою кількістю повторень програма виходить більш компактною і наочною, якщо для організації циклу використовувати оператори циклу FOR NEXT.

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

Формат оператора:

nc FOR i = a1 TO a2 [STEP a3]

 s1

s2

s3

...

sk

nc NEXT i

де   FOR - для;

 TO - до;

 STEP - крок;

 NEXT - наступний;

 і - керуюча перемінна, параметр циклу;

 a1 та a2 - початкове і кінцеве значення параметра циклу;

 a3 - крок зміни параметра циклу (a1, a2, a3 - будь-які

арифметичні вираження);

 s1, s2,... , sk - будь-які виконувані оператори тіла циклу.

Оператори циклу FOR NEXT використовується тільки в парі. Оператор FOR визначає початок циклу, NEXT - кінець циклу. Керуюча перемінна i, указана в операторі FOR, обов'язково повинна збігатися з перемінної i, указаної в операторі NEXT.

По умовчанню крок зміни параметра циклу a3 приймається рівним 1.

Порядок виконання операторів циклу наступний:

1) обчислюються значення арифметичних виражень а1, а2, а3;

2) параметру циклу i присвоюється початкове значення а1;

3) якщо крок а3>0 та i<=а2 або а3<0 та i>=a2, то виконуються оператори, що утворюють тіло циклу. Значення параметра циклу збільшується на величину кроку i = i + a3 та повторюється п. 3.

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

При упорядкуванні циклічних програм регулярного типу варто мати на увазі наступні правила:

- можна входити в цикл тільки через оператор FOR, у противному випадку параметр циклу буде не визначений;

- керуючий параметр циклу i, його початкове a1 та кінцеве a2 значення, а також крок зміни a3, не можна змінювати усередині циклу;

- можна виходити з циклу природним образом, тобто після виконання циклу задане число разом, за допомогою управляючих операторів IF THEN із будь-якого оператора тіла циклу;

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

Програма попереднього прикладу з використанням операторів FOR NEXT має вид:

10 REM ТАБЛИЦЯ ЗНАЧЕНЬ ФУНКЦІЇ Y = F(X)

20 PRINT "ВВЕДІТЬ ДІАПАЗОН ЗМІНИ X І КРОК"

30 INPUT H,XK,H

40 FOR X = XH TO XK STEP H

50 Y = X^2+SIN(X)^2

60 PRINT "X=";X,"Y(X)=";Y

70 NEXT X

80 END

Поняття рекурсії використовується також при обчисленні суми або добутку скінченої кількості чисел. При цьому необхідно виконати наступні дії:

- сформувати вихідні дані;

- визначити початкове становище комори, в якої здійснюється накопичення суми або добутку;

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

- вивести результат.

Приклад: обчислити значення S =  

Вирішення цієї задачі складається в послідовному повторенні таких операцій:

1) обчислення величині n/(n+1) при черговому значенні n;

2) накопичення доданків S = S+n/(n+1);

3) зміна значення n із попереднього на наступне по формулі n = n+1.

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

Програма, що реалізує обчислення, має вигляд:

10 REM ПРОГРАМА НАКОПИЧЕННЯ СУМИ

20 S = O

30 INPUT N

40 FOR I = 1 TO N

50 Y = N/(N+1)

60 S = S + Y

70 NEXT I

80 PRINT "S = "; S

90 END

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

y = (ax2+bx+c)/abc

x y  

1   

3    де а = 17.5;

 b = 4;

c = 9.75

.      x = 1, 3, 5, ..., 25

.   

25   

Всього: S

Для рішення даної задачі необхідно використати формулу S=S+Y, за допомогою якою ЕОМ може накопичувати результат по Y для одержання кінцевого підсумка.

Програма має вигляд:

10 DATA 17.5,4,9.75

20 READ A,B,C

30 PRINT "*******...**"

40 PRINT "-----X-----:-----Y-----"

50 PRINT "*******...**"

60 LET S = 0

70 FOR X =1 TO 25 STEP 2

80 LET Y = (A*X^2+B*X+C)/(A*B*C)

90 PRINT TAB(3); X; TAB(13); Y

110 LET S = S+Y

110 NEXT X

120 PRINT "ВСЬОГО"; TAB(13); S

130 END

Одержання випадкових чисел з інтервалу (0; 1). Функція RND являється стандартною функцією інтерпретатора Бейсик. Використовуючи цю функцію, можна одержати випадкові числа, рівномірно розподілені в інтервалі (0; 1). Наприклад, при виконанні оператора

10 PRINT RND, RND, RND

на екрані з'явиться

0.0407319 0.0528293 0.803172

За допомогою функції RND вибираються числа з таблиці випадкових чисел, заздалегідь складеної і введеної в пам'ять ЕОМ. При першій появі функції RND у програмі вибирається перше число з таблиці, при кожному наступному використанні функції RND вибирається наступне число.

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

У деяких випадках (наприклад, в іграх з ЕОМ) бажано при кожному новому виконанні програми мати іншу послідовність випадкових чисел. Для цього можна використати оператор RANDOMIZE, котрий вибирає випадковим чином точку входу до таблиці випадкових чисел, наприклад,

10 RАNDOMIZE

20 PRINT RND,RND,RND

При неодноразовому виконанні цієї програми на екрані будуть з’являтися різні послідовності із трьох випадкових чисел. Оператор RANDOMIZE розміщається в програмі перед першою появою функції RND.

Перетворення інтервалу зміни випадкових чисел (0; 1) в інтервалі (А; В). Випадкові числа в інтервалі (А, В) одержують використовуючи вираження:

 (В-A)*RND+A.

Наприклад, програма

10 FOR I = 1 ТО 5

20 PRINT 2*RND+5

30 NEXT I

при виконанні друкує випадкові числа, розміщені в інтервалі (5,7):

5.08146

5.05659

5.60634

5.12878

5.31569

Одержання випадкових цілих чисел у границях від K ДО L. Для того, щоб одержати цілі числа 1, 2, 3, 4, 5 (т. е. K = 1, L = 5), кожному цілому числу потрібно поставити у відповідність 1/5 частину інтервалу (0; 1). Простіше усього це зробити, розтягнувши інтервал (0; 1) в п’ять разів і зрушити на 1, т. е. перетворити інтервал (0; 1) в інтервал (1; 6) і застосувати далі функцію INT (знаходження цілої частини).

Розтягнути інтервал (0; 1) в п’ять разів і зрушити його на 1 можна за допомогою перетворення

5*RND+1.

Коли RND < 0.2, перший доданок менше 1 і сума менше 2, тобто застосовуючи до цього значення функцію INT, будемо в якості результату мати 1. Якщо 0.2 < RND < 0.4, то перший доданок більше або рівний 1, але менше 2, і сума більше або рівна 2, але менше 3, тобто при застосуванні функції INT() ми одержуємо в результаті 2 і т. д. І, нарешті, якщо 0.8 < RND < 1, то перший доданок більше або дорівнює 4, але менше 6, і сума більше або дорівнює 5, але менше 6. Для довільних К, L потрібно застосувати перетворення

INT((L-K+1)*RND+K).

Як приклад складемо програму одержання випадкових чисел для гри "Спортлото: 6 із 49".

10 RANDOMIZE

20 FOR I = 1 ТО 6

30 PRINT INT(49*RND+1)

40 NEXT I

50 STOP

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

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Дайте визначення поняття "циклічний обчислювальний процес".

3.2. Дайте визначення поняття "цикл".

3.3. Дайте визначення поняття "параметр циклу".

3.4. Який склад алгоритму циклічної структури?

3.5. Визначите поняття "логічне відношення".

3.6. Перерахуйте операції відношення.

3.7. Визначите поняття "логічне вираження".

3.9. Які логічні операції використовуються в логічних вираженнях?

3.10. Які різновиди циклічних алгоритмів?

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

3.12. Які дії необхідно виконати для організації арифметичного циклу?

3.13. Перерахуйте оператори керування, зазначте їхній формат і умови застосування.

3.14. Призведіть приклади використання операторів керування.


ПРОГРАМУВАННЯ ІТЕРАЦІЙНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

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

Для реалізації циклічних структур із невідомим числом повторень можна використовувати оператори:

IF THEN і GOTO.

Прийоми побудови таких циклів можна розглянути на таких прикладах.

Приклад: скласти програму для визначення К, де К=1,2,3... , при якому функція Хk/k стане менше заданого А. Значення функції з ростом k зменшується.

Це типовий приклад циклу з невідомим числом повторень. Перед циклом задамо К=1, а в циклі будемо багаторазово обчисляти Хk/k і перевіряти умову Хk/k < A. Якщо ця умова не виконується, то, збільшивши К на одиницю, повернемося до початку циклу для наступного його виконання. Процес будемо повторювати доти, поки Хk/k не стане менше а. У цьому випадку необхідно виходити з циклу.

Програма має вигляд:

10 REM ІТЕРАЦІЙНИЙ ЦИКЛ

20 DEFINT K

30 PRINT "ВВЕДІТЬ A,X"

40 INPUT A,X 

50 K=1:REM ПОЧАТКОВЕ ЗНАЧЕННЯ ПАРАМЕТРА ЦИКЛУ

60 IF Х^K/K<A THEN PRINT "K=";K ELSE K=K+1:GOTO 60

70 END

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

Загальний вид оператора WHILE :

n WHILE умова

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

Робота циклу завершується, коли умова що перевіряється буде "неправда". У цьому випадку управління передається оператору, що слідує за WEND.

З використанням операторів WHILE і WEND програма прикладу має вигляд:

10 REM ІТЕРАЦІЙНИЙ ЦИКЛ

20 DEFINT K

30 PRINT "ВВЕДІТЬ A,X"

40 INPUT A,X 

50 K=1'ПОЧАТКОВЕ ЗНАЧЕННЯ ПАРАМЕТРА ЦИКЛУ

60 WHILE Х^K/K>A

70 K=K+1

80 WEND

90 PRINT "K=";K:END

При реалізації ітераційних обчислювальних процесів у програмах повинно забезпечуватися обов'язкове виконання умови виходу з циклу, тобто збіжність ітераційного процесу. Ітераційні обчислювальні процеси застосовуються при обчисленні нескінчених числових рядів. При цьому для практичних намірів обмежуються обчисленням суму S деякого числа елементів, виходячи з вимог заданої точності .

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

- уводяться необхідні вихідні дані;

- задаються початкове значення суми і допоміжних перемінних (якщо це необхідно);

- обчислюється значення поточного члена ряду;

- виконується порівняння значення поточного члена з заданою точністю за допомогою умовного оператора;

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

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

Приклад: скласти програму для обчислення суми збіжного ряду з точністю .

S =1 + x +

10 INPUT X,E

20 S=1:N=1 ‘ початкові значення суми і номера елемента

30 F=1

40 FOR I=1 TO N

50 F=F*I ‘ перемінна містить значення факторіалу

60 NEXT I

80 Y=X^N/F ‘ значення поточного члена ряду

100 IF Y<=E THEN S=S+Y:N=N+1:GOTO30

110 PRINTS,N,Y

120 END

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Дайте визначення поняття ітераційний обчислювальний процес.

3.2. Які умови збіжності методу ітерацій?

3.3. Як організований вихід із циклу в ітераційному алгоритмі?

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

3.5. Які дії необхідно виконати для організації ітераційного циклу?

3.6. Перерахуйте оператори управління, зазначте їхній формат і умови застосування.

3.7. Приведіть приклади використання ітераційних циклів при вирішенні задач.


ПРОГРАМУВАННЯ АЛГОРИТМІВ ВКЛАДЕНИХ ЦИКЛІЧНИХ ОБЧИСЛЮВАЛЬНИХ ПРОЦЕСІВ

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

Усередині одного циклу могуть находиться один або декілька других циклів. Цикл, якій містить у себе другій цикл, називається зовнішнім. Цикл, що міститься в тілі іншого циклу, називається внутрішнім. Основне правило побудови вкладених циклів - це охоплення зовнішнім циклом внутрішнього або декількох внутрішніх. Глибина вкладеності, тобто кількість відкритих циклів на ділянці алгоритму може бути більше двох і нічим не обмежується. Обмеження можуть виникнути згодом при написанні програми через застосовувану систему програмування. Правила організації як зовнішнього, так і внутрішнього циклів аналогічні правилам організації простого циклу.

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

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

Структура правильно організованих вкладених циклів показана на мал. 22.1.

Приклад: обчислити значення функції

 Y =

В цій задачі декілька раз обчислюються суми. Параметри циклів змінюється послідовно, тобто на одне значення параметра зовнішнього циклу параметр внутрішнього циклу приймає послідовно все свої значення. Зафіксував значення i в зовнішньому циклі, усередині внутрішнього циклу здійснюється накопичення суми при значеннях j, яки змінюються від 1 до М. Після цього значення i збільшується в зовнішньому циклі на 1 і внутрішній цикл повторюється. При і > N виконується вихід із циклу та виводиться накопичений результат.

Програма має вигляд:

10 REM ОБЧИСЛЕННЯ ЗНАЧЕННЯ ФУНКЦІЇ Y 

20 INPUT N

30 INPUT M

40 S=0

50 FOR I=1 TO N

60 FOR J=1 TO M

70 S=S+(I-J)^(I*J)

80 NEXT J

90 NEXT I

100 PRINT “ S = “;S

110 END

Приклад: скласти програму обчислення значень функції

 Sin(x+y), якщо x>0 и y<0,

Z =

 Cos(x-y) - в останніх випадках,

якщо х змінюється від хн = -5 до хк = 5 із кроком hх =1,

y змінюється від yн = -0,5 до yк = 0,5 c кроком hy =0,1.

Програма має вигляд:

10 REM ПРОГРАМА ТАБУЛЯЦІЇ ФУНКЦІЇ

20 INPUT XN,XK,HX

30 INPUT YN,YK,HY

40 FOREM=XN TO XK STEP HX

50 FOR Y=YN TO YK STEP HY

60 IF X>0 AND Y< 0 THEN Z=SIN(X+Y):GOTO 80

Z=COS(X-Y)

80 PRINT “X=”;X,”Y=”;Y,”Z=”;Z

90 NEXT Y

100 NEXT X

110 END

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

FOR C1 = FOR C1 =

…………… ………….

FOR C2 = FOR C2 =

……….. ……..

FOR C3 = NEXT C2

…………..

FOR K

…………. FOR C3 =

NEXT K ………

………….. NEXT C3

NEXT C3 …………..

…………. NEXT C1

NEXT C2

………………….

NEXT C1

Мал. 22.1. Структура правильно організованих вкладених циклів

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Визначите поняття "вкладений циклічний процес".

3.2. Які принципи побудови вкладених циклів?

3.3. Як визначається число повторень у вкладених циклічних процесах?

3.4. На яку глибину можуть бути вкладені циклічні процеси ?

3.5. Чи можуть вкладені циклічні обчислювальні процеси містити лінійні і розгалужені обчислювальні процеси?

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

3.7. Для яких задач застосовуються вкладені циклічні процеси?

3.8. Приведіть приклад вкладених циклічних обчислювальних процесів.


ПРОГРАМУВАННЯ АЛГОРИТМІВ ОБРОБКИ ОДНОМІРНИХ МАСИВІВ

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

Для утворення імен масивів використовуються ті ж правила, що і для утворення імен простих перемінних. У однієї і тій же програмі допустимі однакові імена масивів і простих перемінних. Можлива робота з одномірними масивами (вектори, лінійні таблиці), двомірні масивами (матриці, прямокутні таблиці), а також з багатомірними масивами до 255 вимірів.

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

n DIM список масивів

де "список масивів" містить імена масивів і в круглих скобках верхні межі індексів.

Так, оператор DIM А(10) резервує місце в пам'яті для одномірного масиву А, що складає з 11 елементів - від А(0) до А(10).

У операторі DIM для визначення розміру масиву можуть використовуватися тільки цілі константи. При оголошенні масиву початкові значення для всіх числових масивів установлюються рівними нулю, а для рядкових - порожньому рядку.

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

Ввід - вивід масиву. Ввід - вивід елементів масиву виконується по елементам з використанням операторів INPUT, READ і PRINT. Можливі два способу вводу - виводу.

СПОСІБ 1. Перемінні з індексами перераховуються в списку вводу виводу.

Приклад:

10 DIM X(5)

20 DATA 1,10,20,30,40,50

30 READ X(1),X(2),X(3),X(4),X(5)

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

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

Приклад:

10 DIM X(10)

20 DATA 5,2,10,14,7,8,9,3,51,64

30 FOR I=1 TO 10

40 READ X(I)

50 NEXT I

Приклад: привласнити рядкові значення елементам масиву і визначити їхній значення після виконання операторів.

 

10 DIM A$(8)

20 DATA ЦВЯХИ,БОЛТИ,ГВИНТИ,ШАЙБИ

30 DATA ГАЙКИ,ШТИФТИ,ГАКИ,ЗАКЛЕПКИ

40 FOR I=1 TO 8

50 READ A$(I)

60 NEXT I

При виконанні оператора READ у циклі присвоюється елементу А$(1) значення ЦВЯХИ; елементу А(2) - значення БОЛТИ і т.д.

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

Приклад: вивести на друк елементи цілочисельного масиву N=[n1, n2, n3,... , n50], кратні трьом. Сполучимо операції введення поточного значення елемента масиву і його опрацювання.

Програма має вид:

5 REM ДРУК ЕЛЕМЕНТІВ МАСИВУ, ЩО КРАТНІ ТРЬОМ

10 DEFINT N

20 DIM N(50)

30 DATA 1,2,3,4,5,6,7,8,9,10

40 DATA 11,12,13,14,15,16,17,18,19,20

50 DATA.........

60 DATA .......

70 DATA .......

80 K=0 'Лічильник ЧИСЛА ЕЛЕМЕНТІВ, КРАТНИХ ТРЬОМ

90 FOR I=1 TO 50

100 READ N(I)

110 IF N(I)-N(I)/3*3=0 THEN K=K+1:PRINT N(I)

120 NEXT I

130 IF K=0 THEN PRINT "НЕМАЄ ЕЛЕМЕНТІВ, КРАТНИХ ТРЬОМ"

140 END

У циклі (рядок 100) організоване введення поточного елемента N(I) і перевірка умови кратності його значення трьом. Якщо ця умова виконується, то значення лічильника К - числа елементів, кратних трьом, збільшується на 1, виводиться на друк значення N(I) і здійснюється перехід на продовження циклу; якщо умова не виконується, то відразу здійснюється перехід на продовження циклу.

Приклад: із масиву А(50) вивести на друк позитивні елементи.

Програма має вигляд:

10 DIM A(50)

20 K=0 'ЛІЧИЛЬНИК ЧИСЛА ПОЗИТИВНИХ ЕЛЕМЕНТІВ

30 FOR I=1 TO 50

40 INPUT A(I)

50 IF A(I)>0 THEN K=K+1:PRINT A(I);

60 NEXT I

70 IF K=0 THEN PRINT "ПОЗИТИВНИХ ЕЛЕМЕНТІВ НЕМАЄ"

80 END

Щоб скоротити обсяг програми, введення елементів масиву A(I) і їхня обробка сполучені. Порядок виконання такий. Оператор циклу (рядок 30) задає параметр циклу I, рівній 1. Тому що I<50, то виконуються всі оператори, що входять у цей цикл. Першим таким оператором є оператор введення значення елемента масиву А(1). Відбувається перевірка умови А(1)>0. Якщо умова виконується, то збільшується значення лічильника К на 1 і виводиться значення елемента А(1); якщо умова не виконується, то здійснюється перехід на продовження циклу. Після 50-кратного виконання циклу здійснюється вихід до оператора END. 

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

Наприклад: переписати підряд у масив Y позитивні елементи масиву (x1, x2, x3,... , x20), а в масив Z - негативні. Скласти програму вирішення. Особливість рішення складається у тому, що елементи, яки записуються в масиви Z і Y, повинні розташовуватися підряд без пропусків.

Це призведе до того, що індекси перемінних yk та zj приймають значення, відмінні від значень індексів перемінної xi. Тому в циклі необхідно зміняти значення k та j кожний раз перед записом відповідного елементу x, тобто необхідно використати спосіб організації циклу з декількома параметрами, яки одночасно змінюються.

Програма має вигляд:

10 REM ФОРМУВАННЯ МАСИВІВ X,Y,Z

20 DIM X(20),Y(20),Z(20)

30 PRINT "ВВЕДІТЬ МАСИВ X З 20 ЕЛЕМЕНТІВ"

40 FOR I=1 TO 20

50 PRINT "X(";I;")";: INPUT X(I)

60 NEXT I

65 K=0: J=0 'Початкові ЗНАЧЕННЯ ЛІЧИЛЬНИКІВ 

70 FOR I=1 TO 20

80 IF X(I)>0 THEN K=K+1:Y(K)=X(I)

90 IF X(I)<0 THEN J=J+1:Z(J)=X(I)

100 NEXT I

110 PRINT "МАСИВ Y"

120 FOR I=1 TO K

130 PRINT Y(I);

140 NEXT I

150 PRINT:PRINT

160 PRINT "МАСИВ Z"

170 FOR I=1 TO J

180 PRINT Z(I);

190 NEXT I

200 END

 Обчислення суми і добутку. Перебування суми

 

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

z1 = z0 + y1 = y1

z2 = z1 + y2 = (y1) + y2

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

zi = zi-1 + yi = (y1 + y2)+yi

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

zn = zn-1 + yn

zn =  

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

z1 = z0 * y1 = y1

z2 = z1* y2 = (y1) * y2

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

zi = zi-1 * yi = (y1 * y2)*yi

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

zn = zn-1 * y n

zn =

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

z = z * y.

де y - множник; z - проміжний добуток.

Перед циклом за початкове значення добутку, як правило, приймається одиниця: z0 = 1.

Приклад: скласти програму обчислення математичного чекання mx випадкової величини x, використовуючи розрахункову формулу

mx =

Приклад виконати для n = 5;

рi = {0.3; 0.25; 0.2; 0.1; 0.15};

xi = {90; 80; 120; 95; 110}.

Початковими даними для обчислення являються проста перемінна N і два масиві P і X. Результат обчислення збережемо у простої перемінної S. Для накопичення суми організується цикл, параметром якого є індекс I, якій змінюється від 1 до N.

Програма має вигляд:

10 REM ОБЧИСЛЕННЯ МАТЕМАТИЧНОГО ЧЕКАННЯ

20 INPUT N

30 DIM X(N),P(N)

40 S=0 'НАЧАЛЬНОЕ ЗНАЧЕННЯ СУМИ

50 FOR I=1 TO N

60 PRINT "ВВЕДІТЬ Р(";I;"), Х(";I;")"

70 INPUT P(I),X(I)

80 S=S+P(I)*X(I) 'НАКОПИЧЕННЯ СУМИ 

90 NEXT I

100 PRINT "МАТЕМАТИЧНЕ ЧЕКАННЯ";S

110 END

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Дайте визначення масиву.

3.2. Які характеристики мають масиви.

3.3. У чому складається особливість організації циклу при обробки масивів?

3.4. Опишіть особливості алгоритмів введення і виводу елементів масиву.

3.5. Опишіть реалізацію накопичення суми і добутку скінченого числа елементів масиву.

3.6. Як організувати рахунок кількості елементів?

3.7. Як організувати процес формування нових масивів у процесі вирішення задач?

3.8. Як організувати перебування найбільшого і найменшого елементів масиву?

3.9. Як організувати процес упорядкування елементів масиву?


ПРОГРАМУВАННЯ АЛГОРИТМІВ ОБРОБКИ ДВОМІРНИХ МАСИВІВ

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

У мові БЕЙСИК можлива робота з двомірними масивами (матриці, прямокутні таблиці), причому елементи двомірного масиву розташовуються в пам'яті по рядках, а також із багатомірними масивами до 255 вимірів. Елементи багатомірних масивів розташовуються в пам'яті таким чином, що на початку змінюється правий індекс.

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

Розмір масиву (кількість елементів масиву) - добуток числа рядків на число стовпців масиву, тобто для масиву A(10,5) розмір дорівнює 50.

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

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

n DIM список масивів

де "список масивів" містить імена масивів та в круглих лапках розділені комами верхні межи кожного із індексів.

Так, оператор DIM С(5,6) резервує місце під двомірний масив С, який має 6 рядків і 7 стовпців (включаючи нульові).

У операторі DIM для визначення розміру масиву можуть використовуватися тільки цілі константи. При оголошенні масиву початкові значення для всіх числових масивів установлюються рівними нулю, а для рядкових - порожньому рядку.

Ввід - вивід масиву. Ввід - вивід елементів масиву виконується по елементам з використанням операторів INPUT, READ та PRINT. Можливе два способу вводу - виводу.

СПОСІБ 1. Перемінні з індексами перераховуються в списку вводу виводу.

Приклад:

10 DIM X(2,3)

20 DATA 1,10,20,30,40,50

30 READ X(1,1),X(1,2),X(1,3),X(2,1),X(2,2),X(2,3)

 

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

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

Приклад:

10 DIM X(10,10)

20 FOR I=1 TO 10

30 FOR J=1 TO 10

40 INPUT X(I,J)

50 NEXT I

60 NEXT J

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

Приклад: із матриці А(10,5) вивести на друк позитивні елементи.

 

Програма має вигляд:

10 DIM A(10,5)

20 K=0 'Личільник ЧИСЛА ПОЗИТИВНИХ ЕЛЕМЕНТІВ

30 FOR I=1 TO 10

40 FOR J=1 TO 5

50 INPUT A(I,J)

60 IF A(I,J)>0 THEN K=K+1:PRINT A(I,J);

70 NEXT J

80 NEXT I

90 IF K=0 THEN PRINT "ПОЗИТИВНИХ ЕЛЕМЕНТІВ НЕМАЄ"

100 END

Щоб скоротити обсяг програми, введення елементів матриці A(I,J) і їхня обробка сполучені. Порядок виконання вкладеного циклу такий. Оператор зовнішнього циклу (рядок 30) задає параметр циклу I, рівним 1. Тому що I<10, то виконуються всі оператори, що входять у цей цикл. Першим таким оператором є оператор внутрішнього циклу, що задає параметру J значення 1, а потім вводиться значення елемента масиву А(1,1). Відбувається перевірка умови А(1,1)>0. Якщо умова виконується, то збільшується значення лічильника К на 1 та виводиться значення елемента А(1,1); якщо умова не виконується, то здійснюється перехід на продовження внутрішнього циклу J = 2,3,4,5. Після закінчення внутрішнього циклу оператор зовнішнього циклу присвоює I значення 2 і знову повторюється внутрішній цикл п’ять разів. Після 10-кратного виконання зовнішнього циклу здійснюється вихід до оператора END.

При виводі двомірного масиву в якості параметра зовнішнього циклу приймається i (фіксується значення i та виводяться елементи рядка у внутрішньому циклі, змінюючи значення j).

Приклад: у програмі обчислені значення елементів матриці А(4,5), друк матриці виконати в узвичаєному виді.

Фрагмент програми має вигляд:

50…………........

60 FOR I=1 TO 4

70 FOR J=1 TO 5

80 PRINT A(I,J);

90 NEXT J

100 PRINT 'Призупинення ДРУКУ У РЯДКУ

110 NEXT I

Оператор PRINT у рядку 80 здійснює друк елементів в одному і тому же рядку, тому що наприкінці оператора стоїть знак “крапка з комою”, що блокує перехід на новий рядок. Після виводу всіх елементів одного рядка матриці (після закінчення циклу по j) виконується порожній оператор PRINT (рядок 100), що здійснює перехід до нового рядка друку, із котрої і почнеться вивід значень елементів наступного рядка матриці.

 

 3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Дайте визначення двомірного масиву.

3.2. Які характеристики мають двомірні масиви.

3.3. У чому складається особливість організації циклу при обробки двомірних масивів?

3.4. Опишіть правила організації вкладеного циклу з урахуванням порядку перебору елементів матриці.

3.5. Як організувати вивід матриці розміром HхМ елементів в узвичаєному виді?

3.6. Які оператори використовуються в програмах обробки двомірних масивів.


ПРОГРАМУВАННЯ АЛГОРИТМІВ З ВИКОРИСТАННЯМ

ПІДПРОГРАМ

5.1 Програмування з використанням функцій, що визначаються користувачем

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

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

Користувач вибирає ім'я функції та описує програму обчислення виразу. Визначивши функцію один раз, можна неодноразово застосовувати її у програмі нарівні зі стандартними функціями. Функції, що визначаються користувачем, на відзнаку від стандартних функцій SIN, COS, SQR та інших можуть викликатися тільки у програмі, де вони описані.

Опис функції здійснюється за допомогою оператора, що не виконується, DEF, за форматом:

DEF FN ім'я (g1, g2, g3,..., gk)=вираз

де ім'я - разом з префіксом FN визначає ім'я функції. Ім'я задається таке ж

саме, як ім’я змінної та використовується для звернення до функції;

g1, g2, g3,..., gk - список формальних параметрів цілого, дійсного або

текстового типу;

вираз - арифметичного або строкового типу може містити змінні, що не

входять до списку формальних параметрів, але їх значення повинні

бути визначені перед зверненням до функції.

Тип виразу повинен відповідати типу функції. Наприклад, якщо тип виразу - рядок символів, то функція визначається символом $, що доповнює ім'я функції.

Визначення функції повинно передувати її використанню. Звернення до нестандартної функції здійснюється за ім'ям

FN ім'я (b1, b2,..., bk),

де b1, b2,..., bk - фактичні параметри (константи, змінні, вирази).

Ім'я функції записується в виразах так само, як імена стандартних функцій SIN, COS, SQR та ін. У разі звернення до функції обчислюється значення виразу у операторі DEF, при цьому формальні параметри замінюються відповідними фактичними значеннями. Фактичні параметри повинні відповідати формальним параметрам оператора DEF по кількості, черзі та типу даних (строкові або числові).

Приклад : обчислити значення

 w=

при х=21.87; y=35.13; z=9.87.

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

,

у підпрограму, зробивши її нестандартною функцією з ім'ям FNF та формальними параметрами а, b. У програмі при обчисленні w тричі звернемося до цієї функції, замінивши формальні параметри на відповідні фактичні значення х, у, z.

Програма має вигляд

10 DEF FNF (А, В) =SQR (А*А+В*В+SIN (А*В) ^2)

2О DATA 21.67, 35.13, 9.67

30 READ Х, Y, Z

40 W=FNF (Х, Y) +FNF (Y, Z) +FNF (Z, X)

50 РRINT "W="; W: END

5.2. Програмування з використанням підпрограм

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

Підпрограми діляться на два класи: бібліотечні та користувачеві.

Бібліотечні підпрограми заздалегідь складени та зберігаються у пам'яті машини. Щоб використати їх у основній програмі, необхідно звернутися до них, вказавши ім'я підпрограми та фактичні значення параметрів. Як правило, у вигляді бібліотечних підпрограм оформлюються обчислення іинтегралів, рішення різноманітних рівнянь та інше.

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

Звернення до підпрограми здійснюється оператором виклика підпрограми GOSUB

Формат оператора:

 GOSUB N

де N - номер рядка першого оператору підпрограми.

Оператор GOSUB забезпечує перехід до виконання підпрограми, що починається з рядка N.

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

RETURN номер рядка повернення

Передача значень параметрів у підпрограму та запом’ятовування результатів її роботи здійснюються у основній програмі з використанням операторів присвоювання.

Приклад: у дисплейному залі в обігу знаходяться n дісплеїв, кожен з яких може відмовити з імовірністю p. Імовірність того, що за день відмовлять не менше m дісплеїв, можна оцінити за формулою

W=,

де  - число сполучень з n по k.

Скласти програму розрахунку імовірності w=f (n, m, p) для заданих значень n=15; p=0.05. Значення m ввести у діалоговому режимі.

При визначенні числа сполучень необхідно три рази обчислювати факторіал від різних аргументів. Відомо, що факторіал від аргументу х > 0 визначається за формулою

1, якщо х=0,

x! =

Якщо х > 0.

Зведемо обчислення факторіалу до підпрограми.

Програма має вигляд

10 REM ОСНОВНА ПРОГРАМА

20 N=15: Р=. 05

30 INPUT "ВВЕДІТЬ M"; M

50 W=О 'ПОЧАТКОВЕ ЗНАЧЕННЯ СУМИ

6О Х=N

70 GOSUB 1000 'ОБЧИСЛЮЄМО N!

80 А=F 'ЗАПОМИНАЕМ N!

90 REM ЦИKЛ ДЛЯ НАKОПИЧУВАННЯ СУMИ W

100 FOR К=M ТО N

110 Х=K

120 GOSUB 1000 'ОБЧИСЛЮЄМО K!

130 B=F 

14О Х=N-K

150 GOSUB 1000 'ОБЧИСЛЮЄМО (N-K)!

160 W=W+ (A/(B*F)) (P^K) (1-P) ^ (N-K)

170 NEXT K

180 PRINT "M="; M, "ІМОВІРНІСТЬ="; W

190 ЕND

1000 REM ПІДПРОГРАМА ФАКТОРІАЛ

1010 F=1

1020 IF X=0 THEN 1060

1030 FOR I=1 TO Х

1040 F=F*I

1050 NEXT I

1060 RETURN

Підпрограма містить оператор присвоєння F=1 (рядок 1010) та оператори циклу (рядка 1030 - 1040), яки здійснюють обчислення факторіалу Х!. Слід мати на увазі, що значення Х задається у основній програмі до виконання підпрограми.

При першому зверненні змінній Х присвоюється значення N (рядок 60), після цього здійснюється перехід до підпрограми за допомогою оператора GOSUB. Після обчислення N! оператор RETURN передає управління рядку 80, розташованному після першого оператора GOSUB, де значення F присвоюється змінній А. Аналогічно обчислюються В=К! та F= (N - К)!.

Оператор переходу до підпрограми ОN GOSUB використовується для умовної передачі управління одній з декількох підпрограм. У останніх випадках він аналогічен оператору ОN GOTO.

Формат оператора:

ОN покажчик GOSUB m1, m2,..., mk,

де покажчик - це покажчик переходу (будь-який арифметичний вираз);

 m1, m2,..., mk - список номерів рядків переходу.

Наприклад:

80 ОN К+1 GOSUB 200, 400, 100, 600

Значення виразу К+1 є покажчиком вибору мітки переходу: значення 1 означає перехід до рядка з номером, що стоїть першим у списку номерів, тобто рядку 200; значення 2 означає перехід до рядка з номером, що стоїть другим в цьому списку, тобто рядку 400, та далі…. При значенні виразу, меншому за 1 або більшому за 4, управління передається оператору, наступному за ОN GOSUB.

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

Для обчислення площ кола, трапеції, трикутника використаємо підпрограми, що починаються з номерів рядків 500, 1000, 1500 відповідно. У основній програмі користувач повідомляє яку площу він бажає обчислити вказівкою числового коду: 1 - площа кола, 2 - трапеції, 3 - трикутника. Для завершення обчислень вводиться код 9999.

Програма має вигляд

10 REM ОСНОВНА ПРОГРАМА

20 РRINT "ВКАЖІТЬ ЦИФРОЮ, ЯКА ФІГУРА”

30 PRINT" ВИ БАЖАЄТЕ ОБЧИСЛИТИ:"

40 PRINT" 1-КОЛО, 2-ТРАПЕЦІЯ, З-ТРИКУТНИК"

50 PRINT "ДЛЯ ЗАКІНЧЕННЯ ОБЧИСЛЕНЬ ВВЕСТИ 9999”

60 INPUT К

70 IF К=9999 ТНЕN РRINT "КІНЕЦЬ РОБОТИ": G0ТО 110

80 ON K GOSUB 500,1000, 1500

90 РRINT "ПЛОЩА ="; S

100 РRINT; РRINT; GOTО 20

110 END

500 REM ПЛОЩА КОЛА

510 INPUT "ВВЕДІТЬ РАДІУС"; R

520 S=3. 141592*R*R

530 RETURN

540 REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1000 REM ПЛОЩА ТРАПЕЦІЇ

1010 РRINT "ВВЕДІТЬ ПАРАМЕТРИ ТРАПЕЦІЇ”

1020 INPUT "А, В, H"; А, В, Н

1030 S=(А+В) * Н/2

1040 RETURN

1050 REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1500 REM ПЛОЩА ТРИКУТНИКА

1510 PRINT "ВВЕДІТЬ СТОРОНИ ТРИКУТНИКА"

1520 INPUT "А, В, С"; А, В, С

1530 Р= (А+В+С)/2

1540 S=SQR (Р * (Р-А) * (Р-В) * (Р-С))

1550 RETURN

1560 REM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

У основній програмі після введення коду (рядок 60) перевіряється умова закінчення обчислень (рядок 70). Оператор ОN GOSUB (рядок 80) передає роботу одній з підпрограм в залежності від значення К. Після обчислення площі фігури по оператору RETURN відбувається вихід з підпрограми на рядок 90. Друкується обчислене значення площі і знову здійснюється запит на введення коду фігури.

Вкладені підпрограми. Будь-яка підпрограма може звернутися до іншої підпрограми за допомогою оператора GOSUB. Першим з операторів RETURN повинен виконуватися оператор, що належить другий підпрограмі. Підпрограма завжди повинна вертати управління викликаючій програмі або підпрограмі. Таким чином, перша підпрограма може викликати другу, друга - третю та т. д. Звернення до підпрограм немов би вкладаються одне в одне. Глибина вкладень різноманітна для різних версій мови БЕЙСИК та залежить від пам'яті ЕОМ.

Для зв'язку між підпрограмами, а також між підпрограмами та основною програмою, слід здійснювати повернення з підпрограм в тий же послідовності, що і виклики.

Приклад: у програмі необхідно багаторазово виводити різноманітні заголовки оздоблюючи вгорі та знизу рядком зірочок, наприклад:

*****************************

ГРАФІК ПЕРШОЇ ФУНКЦІЇ Y=F (X)

*****************************

Зведемо печатку заголовку у підпрограму. Доцільно печатку рядка зірочок зробити також підпрограмою.

Програма має вигляд:

10 REM ОСНОВНА ПРОГРАМА

20 A$=”ГРАФІК ФУНКЦІЇ Y=F (Х)"

30 GOSUB 500

40 REM.....................................

50 A$=”ЗАЛЕЖНІСТЬ U=Z (I)”

60 GOSUB 500

70 ЕND

500 REM ПІДПРОГРАМА ПЕЧАТКИ ЗАГОЛОВКУ

510 GOSUB 1000

520 РRINT А$

530 GOSUB 1000

540 RETURN

550 REM....................................

1000 REM ПІДПРОГРАМА ПЕЧАТКИ РЯДКА ЗІРОЧОК

1010 FOR I=1 TO 60

1020 РRINT "*";: NЕХТ I

1030 РRINT

1040 RETURN

1050 REM...................................

В основній програмі текстовій змінній А$ (рядок 20) присвоюється текст заголовку, що повинен бути надрукований, і управління передається підпрограмі печатки заголовку (рядок 500). Першим оператором цієї підпрограми є оператор виклика другої підпрограми - печатки рядка зірочок (рядок 500). Друга підпрограма вміщує в себе оператори 1000 - 1040, друкує рядок зірочок і вертає управління до першої підпрограми, на оператор 520, що здійснює печатку тексту заголовку. Після цього управління знову передається другий підпрограме. Друкується рядок, зірочок, що оздоблює текст заголовку знизу, та за оператором RETURN другої підпрограми передається управління на оператор RETURN (рядок 540) першої підпрограмы. Цей оператор здійснює повернення до основної програми (рядок 40). Присвоюючи змінній А$ різноманітний текст, можна звертатися до вкладених підпрограмм декілька разів.

  1.  КОНТРОЛЬНІ ЗАПИТАННЯ

  1.  При яких умовах доцільно використання підпрограми?
    1.  Поясніть процедуру використання функції, що визначається користувачем.

3.3. Які підпрограми використовуються?

3.4 Визначити поняття формальних та фактичних параметрів.

3.6. Перерахувати, як погодяться формальні та фактичні параметри.

3.7. Визначити поняття "вкладена підпрограма".

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

3.9. Перерахувати оператори, що застосовуються для програмування з використанням підпрограм, вкажіть формат та умови застосування.

 



ПРОГРАМУВАННЯ АЛГОРИТМІВ ОБРОБКИ СИМВОЛЬНИХ ДАНИХ

Бейсик дозволяє виконувати операції над символьними даними - константами, перемінними, масивами. Функції обробки рядків підвищують ефективність введення і виводу і використовуються при обробці тексту, тобто ланцюжка символів (при бібліотечному пошуку і т.п.). В пам'яті рядок символів представляється послідовністю байтів, кожний із яких містить один символ рядку. Звичайно ланцюжку (рядку) передує байт, що містить довжину ланцюжка, тому максимальна довжина ланцюжка дорівнює 255 байтів.

Ім'я перемінної, що містить ланцюжок символів, закінчується знаком $. В однієї і той же програмі можуть зустрітися перемінні A і A$: перша з них означає перемінну, яка містить числове значення, а друга може містить тільки символи.

Для обробки символьних даних служать оператори введення даних READ, INPUT, LINE INPUT, оператор виводу PRINT, оператори присвоювання, а також стандартні функції обробки символьних даних.

ВВІД    10 INPUT "Як Вас звуть", I$

ПРИСВОЮВАННЯ 20 IMYA$=I$

ВИВІД   30 PRINT "Здрастуйте", IMYA$

У інструкціях присвоювання:

50 А$=" Системне програмування"

60 В$=""

70 С$="12344"

вираження, що знаходяться справа від знака = і відокремлені лапками, являються постійними ланцюжками символів (рядковими константами). У інструкції 60 присвоюється значення порожнього рядка.

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

Якщо 10 I$=" Іван "

20 F$=" Петров"

то оператор  30 А$=I$+F$:PRINT A$

надрукує   Іван Петров

Тоді як   30 A$=F$+I$:PRINT A$

надрукує    Петров Іван

Над символьними перемінними виконуються операції порівняння (<, >=, <>, =, <=, >). Порівняння відбувається в ASCII-кодах. Коди символів латинського алфавіту і коди цифр упорядковані по зростанню, тобто A<B<C<... <Z; 0<1<2<3... <9. Для кодів букв російського алфавіту така упорядкованість не дотримується. Ланцюжки символів дорівнюються, символ за символом, починаючи зліва. Має значення алфавітний порядок і природничий порядок. При цьому враховуються пробіли, наявні справа і зліва від ланцюжка. Дві рядкові перемінні вважаються ідентичними, якщо тотожні усі символи, що в них входять. Данні, які відрізняються пробілами на початку і кінці, не ідентичні.

"1945">"1935"

"STRUCTURE">"BASIC"

A$<>""+A$

A$<>A$+""

Можна використовувати логічні операції при контролі відповідей

10 INPUT "Ви на лекції (ТАК/НІ)?",A$

20 IF A$<>"ТАК" OR A$<>"НІ" THEN 10

або при підрахунку гласних букв

100 IF A$="A" OR A$="I" OR A$="U" OR

A$="Y" THEN GLAS=GLAS+1

При рішенні ряду задач існує необхідність виділити ланцюжок символів із рядкового вираження, знайти слово, частину слова, букву, цифру або інший символ у символьній перемінній або символьному масиві. Для подібній обробки використовуються відповідні функції обробки рядків, для чого вказуються ім’я функцій і за ним перераховуються аргументи, яки відокремлюються в дужки. Результатом функцій, чиї імена закінчуються на $, являється ланцюжок символів.

Функція LEN(A$) визначає довжину рядка, тобто видає число символів у символьному рядку, включаючи пробіли.

Послідовність

 100 A$=" Ця фраза в теперішньому часу "

 110 PRINT "Довжина = ";LEN(A$)

виводить на екран довжину ланцюжка A$ - 31. Аргумент функції LEN, тобто перемінна, з якою працює функція, являється ланцюжком символів. Результатом цієї роботи є ціле число, укладене між 0 і 255.

100 L=LEN("1994")

100 L=LEN(A$+B$)

Функція LEFT$(A$,N) дозволяє витягти N лівих символів з ланцюжка символів A$ (1 <= N <= LEN(A$)). 

Функція LEFT$ дозволяє знищити також один або декілька символів, яки розташовані справа в даному ланцюжку символів .

Наприклад, A$=LEFT$(A$,LEN(A$)-1) видаляє останній символ у ланцюжку A$.

Функція RIGHT$(A$,N) витягає N правих символів з ланцюжка символів A$ (1 <= N <= LEN(A$)). 

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

Наприклад, інструкція A$=RIGHT$(A$,LEN(A$)-1) видаляє перший символ ланцюжка A$.

Функція MID$(A$,K,N) дозволяє витягти N послідовних символів, починаючи з К-того. При цьому повинні задовольнятися співвідношення:

1 <= K <= LEN(A$),

1 <= N <= LEN(A$),

K + N <= LEN(A$).

Інструкція   MID$("БЕЙСИК",2,3)  дає ЕЙС,

   MID$("БЕЙСИК",3,4) дає ЙСИК,

для I = 4  MID$("БЕЙСИК",I,1) дає С.

Функція MID$ дозволяє витягти всі символи ланцюжка один за іншим зліва праворуч, наприклад, для їхньої обробки:

10 INPUT "ВВЕДІТЬ ВАШУ ФРАЗУ:";A$

20 INPUT= "" THEN 10

30 FOR I=1 TO LEN(A$)

40 B$=MID(A$,I,1)

50 REM МОЖНА ОБРОБЛЯТИ I-Й СИМВОЛ ФРАЗИ

100 NEXT I

а також справа ліворуч, якщо записати

30 FOR I=LEN(A$) TO 1 STEP -1

Функція STRING$(N,A$) породжує ланцюжок із N однакових символів, рівних першому символу.

Функція STRING$(20,"*") породжує ланцюжок із 20 зірочок. Функція STRING$(20,"") породжує ланцюжок із 20 пробілів.

У загальному випадку:

 10 INPUT N,A$

 20 B$=STRING$(N,A$)

породжує ланцюжок, складений із першого символу А$, повтореного N разів.

Функція INSTR(N,A$,B$) дозволяє визначити, чи міститься ланцюжок B$ у ланцюжку A$, починаючи з позиції N. Якщо в інструкції аргумент N опущений, то пошук починається з першої позиції. Якщо B$ не міститься у A$ або A$ являється порожнім рядком, або ж значення N більше, чим довжина A$, то функція видає нульове значення. Якщо B$ являється порожнім рядком, то повертається номер позиції, з якої починається пошук.

10 A$="КОЛОКОЛ":B$="КОЛ"

20 С=INSTR(A$,B$) значення С=1

30 D=INSTR(2,A$,B$) значення D=5

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

10 INPUT "Введіть текст ";A$

20 INPUT "Введіть ключове слово, яке потрібно шукати ";B$

30 IF INSTR(A$,B$)=0 THEN PRINT "КЛЮЧОВОГО СЛОВА 

 НЕМАЄ " ELSE PRINT "КЛЮЧОВЕ СЛОВО Є "

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

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Зазначте області застосування символьних даних.

3.2. Зазначте способи запису символьних даних (констант, перемінних, масивів).

3.3. Зазначте, які операції можна виконувати над символьними даними.

3.4. Зазначте способи опису символьних даних.

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

3.6. Зазначте способи введення і виводу символьних даних.


ПРОГРАМУВАННЯ АЛГОРИТМІВ СОРТУВАННЯ ДАНИХ

Існує N значень, що потрібно упорядкувати по зростанню (або убуванню), якщо мова йде про числові значення, або за алфавітом, якщо мова йде про ланцюжки символів.

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

Для сортування всі дані потрібно ввести в машину. Припустимо, що нам треба упорядкувати по зростанню числові дані, яки містяться в пам’яті в масиву Т розміром N. Існує багато різноманітних алгоритмів сортування, що дозволяють вирішити цю задачу.

"Кулькове" сортування. Назва відбувається від образної інтерпретації, при якої у процесі виконання алгоритму більш "легкі" елементи помалу піднімаються на "поверхню".

Алгоритм (Мал. 27.1) "кулькового" сортування складається із послідовних проходів від початку до кінця масиву введених даних Т і обміну сусідніх елементів з інверсією.

Порівнюють пари значень Т(I) і Т(I+1) при I в інтервалі від 1 до N-1; якщо Т(I)>T(I+1), то значення змінюються місцями.

Сортування зупиняється, коли нема чього переставляти; у цьому випадку сортування масиву закінчується.

Програма сортування:

10 INPUT "Скільки значень сортувати? ",N:DIM T(N)

20 RANDOMIZE:FOR I=1 ТО N:T(I)=INT(100*RND(I)):NEXT I

30 ОСТАНОВ=1

40 FOR I=1 ТО N-1

50 IF Т(I)>Т(I+1) THEN ОСТАНОВ=0;SWAP Т(I),Т(I+1)

60 NEXT I

70 IF ОСТАНОВ=0 THEN 30

80 FOR I=1 TO N: PRINT T(I):NEXT I

90 END

Сортування пошуком послідовних мінімумів. При першому проході шукається мінімальне значення масиву Т, що потім змінюється місцями з першим елементом T(1), потім пошук продовжується на N-1 елементах, що залишилися, шукається другий мінімум, що змінюється з елементом Т(2) і т.д. Алгоритм сортування пошуком послідовних мінімумів приведений на мал.27.2.

Програма сортування:

10 INPUT" Скільки значень сортувати? ",N:DIM Т(N)

20 RANDOMIZE:FOR I=1 ТО N:T(I)=INT(100*RND(I)):NEXT I

30 FOR I=1 ТО N-1

40 MIN=Т(I):IMIN=1

50 FOR J=I+1 ТО N

60 IF Т(J)<MIN THEN MIN=Т(J):IMIN=J

70 NEXT J

80 SWАP Т(I),Т(IMIN)

90 NEXT I

100 FOR I=1 TO N:PRINT T(I):NEXT I

110 END

так

ні

так

ні

 

Мал. 27.1. Алгоритм “кулькового“ сортування

так

ні

Мал. 27.2. Алгоритм сортування пошуком послідовних мінімумів

Сортування методом вставки. Щоб відсортувати масив Т, достатньо вставити T(J) у J-1 вже сортованих перших елементів, при цьому J змінюється від 2 до N. Алгоритм сортування методом вставки приведений на мал.27.3.

Програма сортування:

10 INPUT "Скільки значень сортувати ?", N:DIM T(N)

20 CLS

30 RANDOMIZE:FOR I=1 ТО N:T(I)=INT(100*RND(I)):NEXT I

40 FOR I=2 ТО N

50 X=T(J)

60 I=J-1

70 IF I<=0 OR T(I)<=X THEN 110

80 T(I+1)=T(I)

90 I=I-1

100 GOTO 70

110 T(I+1)=X

120 NEXT J

130 FOR I=1 TO N: PRINT T(I);"";:NEXT I

140 END

так

ні

Мал. 27.3. Алгоритм сортування вставками

3.1. Зазначте області застосування сортування.

3.2. Сутність методу "кулькового" сортування.

3.3. Сутність сортування методом послідовних мінімумів.

3.4. Сутність сортування методом вставки.


ОБРОБКА ФАЙЛІВ ПОСЛІДОВНОГО ДОСТУПУ

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

- дані, що утримуються у файлі, розташовуються в зовнішній пам'яті і зберігаються від виконання до виконання;

- розмір файла може бути довільним, єдиним обмеженням є ємність зовнішньої пам'яті;

- дані, що утримуються у файлі, можуть мати довільний тип і групуються в об'єкти, що мають однакову структуру;

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

- файли дозволяють зберігати дані і зв'язки між ними.

Файл - це множина об'єктів однієї і тієї ж природи, що називають записами. При цьому розрізняють фізичний запис - найменшу порцію даних, що переноситься з диска або на диск за одну фізичну операцію введення-виведення, і логічний запис, що представляє собою змістовну одиницю збереженої у файлі інформації. У ПК IBM розмір фізичного запису дорівнює 512 байт. Буфер файла розміщується в ОЗП і служить для обміну даними між програмою і диском. Буфер містить один фізичний запис і при кожній операції обміну з диска в буфер, або в протилежному напрямку, переноситься один фізичний запис. Розмір запису залежить від конкретної задачі. Логічний запис - це сукупність зведень про деякий об'єкт. Вона утвориться з полів (елементів даних), що вказують на різноманітні атрибути конкретного об'єкту.

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

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

Процедура читання з файла повторює процедуру запису, але з оберненими діями.

Передача даних з ОЗП на диск і навпаки проводиться по внутрішніх каналах, номера яких у програмі зв'язуються з ім'ям визначеного файла, тобто перед роботою з файлом його необхідно відчинити, а при завершенні роботи з файлом - закрити (і тим самим закрити даний канал).

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

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

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

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

Формат оператора

nc OPEN "cn" FOR {INPUT} AS # номер файла

   {OUTPUT}

   {APPEND}

де cn - специфікація файла, що складається з трьох частин:

[ім'я устрою:] ім'я файла [тип файла].

Режим INPUT відчиняє існуючий на диску файл для зчитування його в оперативну пам'ять.

Режим OUTPUT підготовляє створення нового файла шляхом запису файла з оперативної пам'яті на диск або друкувальний пристрій.

Режим APPEND підготовляє файл для додавання нових записів у кінець файла.

Номер файла - ціле десяткове число в діапазоні від 1 до максимального значення, що задається при завантаженні Бейсика використанням параметра "/F:M" (M<15), по умовчанню М=3. Заданий номер використовується в операторах введення-виведення при обертанні до файла.

Приклади відкриття файлів:

1) OPEN "C:MASSIV" FOR OUTPUT AS #2  

- відчиняється новий послідовний файл MASSIV із логічним номером 2 для виведення даних з ОЗУ на системний диск С; якщо на диску вже існує файл із таким ім'ям, то в нього буде записуватися нова інформація;

2) OPEN "A:BASA" FOR INPUT AS #1

- відчиняється для читання послідовний файл BASA із логічним номером 1 на диску А;

3) OPEN "B:STRUCTUR" FOR APPEND AS #G

- відчиняється для додавання послідовний файл STRUCTUR c логічним номером, рівним значенню G.

Оператор CLOSE має формат

nc CLOSE # список логічних номерів файлів

Ций оператор служить для закриття файлів, логічні номера яких перераховані в його параметрі "список". Закриття будь-якого файла складається в анулюванні логічного зв'язку між файлом (устроєм) і його номером. Після закриття, файлу можна згодом привласнювати новий логічний номер оператором OPEN, а старий номер використовувати для іншого файла даних.

При використанні оператора CLOSE без параметра закриваються всі відкриті файли та устрої.

Приклади використання оператора CLOSE:

1) CLOSE #1,#4- закриваються файли з логічними номерами 1, 4;

2) CLOSE - закриваються всі відкриті в програмі файли й устрої.

Оператор PRINT# має формат

nc PRINT # номер файла, список виведення

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

Один із гарантованих способів розставляння роздільників складається в присвоєнні значення "кома" строковій змінній і запису її після кожного значення в операторі PRINT#.

Для форматованого запису даних у файл спільно з оператором PRINT# може використовуватися параметр USING. Формат оператора в цьому випадку

nc PRINT # номер файла USING X$; список виведення,

де параметр X$ визначає формат списку виведення, аналогічно звичному оператору PRINT USING.

Слід зазначити, що оператор PRINT# відрізняється від оператора PRINT в основному тільки тим, що виводить інформацію не на екран, а в послідовний файл.

Приклад використання оператора PRINT#:

10 X$="Дата":Y$="21.11.94":X=11:Y=22

20 OPEN"B:DATA" FOR OUTPUT AS #1

30 PRINT #1,X$;Y$;X;Y;Z$="####"

40 PRINT #1,USING Z$;X*Y;X+Y

У даному фрагменті відчиняється вхідний файл DATA із логічним номером 1 і в нього відповідно операторами PRINT# і PRINT# USING поміщується запис <X$;Y$;Y> і форматований запис <X*Y;X+Y>.

Іноді для запису даних у дисковий файл зручніше використовувати оператор WRITE#, що має формат

WRITE # номер файла,[список виведення]

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

Приклад використання оператора WRITE#:

10 X$="DATA":Y$="21.11.94":X=1:Y=12

20 OPEN "C:BASA" FOR OUTPUT AS #2

30 WRITE #2,X$;Y$;X*Y;X+Y

Оператор INPUT# має формат

nc INPUT # номер файла, список введення

і існує для читання чергового логічного запису з відкритого файла послідовного доступу ( із каналу зв'язку або з клавіатури) і присвоєння йому значень елементів списку. При виконанні оператора INPUT# символи послідовно вибираються з дискового файла або пристрою та інтерпретуються як числові або строкові значення в залежності від типу змінної, якій присвоюється значення.

Оператор LINE INPUT# має формат

nc LINE INPUT # номер файла, змінна

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

Слід зазначити, що перед використанням операторів INPUT# і LINE INPUT# необхідно знову відкрити файл, до якого вони звертаються, щоб почати читання його записів із самого початку, інакше - виникає особлива ситуація "кінець файла".

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

EOF (номер файла),

котра має сенс тільки для відкритих послідовних файлів і приймає значення - 1, якщо досягнутий кінець файла, і значення 0 у протилежному випадку. Значення функції EOF може бути використане в операторі IF для вирішення про подальший хід виконання програми.

Приклад використання оператора INPUT# і системної функції EOF:

10 OPEN "B:BASA" FOR INPUT AS #1

20 INPUT #1,IMYA$,KOD%,ZENA

30 PRINT IMYA$,KOD%,ZENA

40 IF EOF(1)<>-1 THEN 20

50 PRINT "Кінець файлу"

60 СLOSE #1

70 END

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

10 OPEN "B:BASA" FOR INPUT AS #1

20 OPEN "B: NEW" FOR OUTPUT AS #2

30 PRINT" НАЗВІТЬ НАЙМЕНУВАННЯ І НОВЕ ЗНАЧЕННЯ ЦІНИ"

40 INPUT IMYA1$,ZENA1

50 IF EOF(1) THEN GOTO 100

60 INPUT #1,IMYA$,KOD%,ZENA

70 IF IMYA$=IMYA1$ THEN ZENA=ZENA1

80 PRINT #2,IMYA$,KOD%,ZENA

90 GOTO 50

100 PRINT "Кінець файлу"

120 СLOSE #1,#2

130 END

У рядках 10 і 20 відкриваються вихідний файл BASA і новий файл NEW - спочатку порожній. Черговий запис зчитується з файла BASA (рядок 60) і за умови, що ініціали співробітника не збігаються з введеними з термінала, переписується без змін у новий файл (рядок 80). Якщо ж ініціали збігаються, то запис корегується - значення ціни ZENA змінюється новим значенням ZENA1 (рядок 70).

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

KILL " B: BASA"

NAME " B: NEW" AS "B: BASA"

Читання порожнього файла викликає помилку, що вказує на спробу читання після кінця файла. Цього можна уникнути, записавши в програмі

15 IF LOF(1)=0 THEN PRINT "ПОРОЖНІЙ ФАЙЛ":END

Системна функція LOF (номер файла) визначає розмір заданого файла. Якщо файл порожній, то значення цієї функції дорівнює нулю.

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Визначите поняття файла, фізичного і логічного запису.

3.2. Чим відрізняється доступ до записів у файлах послідовного і прямого доступу?

3.3. Перерахуйте оператори, використовувані для відкриття і запису у файл послідовного доступу.

3.4. Чим відрізняється функціонування операторів PRINT# і WRITE #.

3.5. Перерахуйте оператори, яки використовуються для читання логічних записів із файла послідовного доступу.

3.6. Опишіть системну функцію виявлення кінця файла.

3.7. Зазначте оператор, який використовується для закриття файла послідовного доступу.


ОБРОБКА ФАЙЛІВ ПРЯМОГО ДОСТУПУ

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

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

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

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

цілі числа ... ...... ...... ...... ...... ...... ..   2 байта

дійсні числа .. .... 4 байта

дійсні числа з подвійною точністю... ...... . 8 байтів.

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

Структура запису для файла прямого доступу, що містить інформацію про бібліотеку:

NUMBER$ - номер книги (2 символи);

AUTOR$ - прізвище автора (15 символи);

BOOK$ - назва книги (30 символи);

CODE$ - ознака наявності книги (1 символ);

PERSON$ - інформація про читача (22 символу);

DAT$ - рік видання (10 символи).

Довжина запису дорівнює для даного файла 80 байтам.

Довжина логічного запису по умовчанню дорівнює 128 байт. Якщо довжина логічного запису перевищує 128 байт, необхідно задати її при виклику інтерпретатора Бейсика параметром: /S:512 .

У даному випадку логічний запис збігається з фізичним.

Відкриття файла прямого доступу виконується оператором OPEN, що має формат:

OPEN "cn" AS # номер файла [LEN= довжина запису]

де сп - специфікація файла;

довжина запису - довжина запису в байтах ( від 1 до 32767).

Відсутність ключових слів INPUT, OUTPUT, APPEND інтерпретується транслятором як початок обміну з файлом прямого доступу. Опис структури файла здійснюється оператором FIELD, що має формат:

FIELD # номер файла, довжина поля AS ім'я змінної, [довжина

поля AS ім'я змінної]...

У результаті виконання оператора FIELD всім перерахованим змінним послідовно приділяються дільниці пам'яті в буфері файла, визначеного номером файла. Довжина поля визначає розмір дільниці пам'яті в байтах, що виділяється для указаної змінної. Ім'я змінної повинно бути строковою змінною або елементом строкового масиву. Загальна довжина всіх змінних, оголошених в операторі FIELD, не повинна перевищувати довжину запису, оголошену в операторі OPEN.

Приклад відкриття й опису структури бібліотечного файла:

10 OPEN "C:LIB" AS #2 LEN=80

20 FIELD #2,2 AS NUMBER$,15 AS AUTOR$,30 AS BOOK$,1

CODE$,22 AS PERSON$,10 AS DAT$

Таким чином, відкритий файл з іменем LIB на пристрої С, буфер якого має довжину 80 байт, розділений на 6 полів певної довжини з іменами NUMBER$, AUTOR$, BOOK$, CODE$, PERSON$, DAT$.

Змінним, оголошеним в операторі FIELD, присвоюються символьні значення або значення імен, використаних у будь-якому виразі або операторі язика Бейсик. Це здійснюється операторами заповнення буфера LSET і RSET. LSET означає: розмістити дані, починаючи з лівого краю, а решту поля заповнити прогалами. Парний йому оператор RSET має наступний зміст: "притиснути" дані до правого кінця поля, а початок його заповнити прогалами, якщо залишається простір. Якщо, навпаки, поле недостатньо велике для введеної інформації, то його надлишок "зрізається" або справа, наприкінці (оператором LSET), або зліва, на початку (оператором RSET).

Формат операторів:

LSET ім'я перемінної=строковий вираз

RSET ім'я перемінної=строковий вираз

Пересилання вмісту буфера у файл здійснюється оператором PUT.

Оператор має формат:

PUT # номер файла, [номер запису]

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

Перед виконанням оператора PUT# у буфері файла необхідно сформувати текст запису відповідно до використовуваної структури.

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

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

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

Пересилка запису з файла в буфер здійснюється оператором GET. Формат оператора:

GET # номер файла, номер запису

Інструкція GET #1,I передає із файла 1 зміст запису I і засилає його в буфер. Якщо I відсутній, то зчитування відбувається послідовно слідом за останнім ліченим записом.

Після перенесення запису в буфер можна маніпулювати даними, отриманими з файла, так само , як будь-якими іншими змінними (виводити на екран, на принтер, присвоювати і т.п.).

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

Коли потрібно записати число у файл, необхідно за допомогою оператора FIELD відвести стільки байтів на відповідне поле, скільки займає представлення числа даного типу. Число (або відповідна змінна) вказується як аргумент підхожої функції перетворення. Оператор LSET записує перетворене число в буфер. Оператор PUT переносить число в строковому форматі на диск.

Таблиця 1

Функція

Перетворення

N$=MKI$(N%)

Ціле число N% у двобайтовий рядок N$

N$=MKS$(N!)

Дійсне число звичайної точності N!

N$=MKD$(N#)

Дійсне число подвійної точності N# у восьмибайтовий рядок N$

N%=CVI(N$)

Двобайтовий рядок N$ у ціле N%

N! =CVS(N$)

Чотирьохбайтовий рядок N$ у дійсне число звичайної точності N

N#=CVD(N$)

Восьмибайтовий рядок N$ у дійсне число подвійної точності N#

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

Приклад: виведення у файл фрази "МикроЭОМ зроблена в 1994 році":

10 OPEN "C:FAN" AS #1 (довжина запису по умовчанню 128 байт)

20 FIELD #1,8 AS A$,3 AS B$,8 AS C$,1 AS D$,2 AS N$,4 AS M$

30 INPUT E$,F$,G$,H$,N%

40 LSET A$=E$

50 LSET B$=F$

60 LSET C$=G$

70 LSET D$=H$

80 LSET N$=MKI(N%)

90 LSET M$=" року"

100 PUT #1,5

110 CLOSE #1

120 END

Приклад: читання з файла фрази "МикроЭОМ зроблена в 1994 році":

10 OPEN "C:FAN" AS #1

20 FIELD #1,8 AS A$,3 AS B$,8 AS C$,1 AS D$,2 AS N$,4 AS M$

30 GET #1,5

40 L$=""

50 N%=CVI(N$)

60 PRINT A$;

70 PRINT B$;

80 PRINT C$;

90 PRINT D$;

100 PRINT N%;

110 PRINT M$;

120 CLOSE #1

3. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1.Як відбувається опис структури файла прямого доступу?

3.2. Перерахуйте оператори, яки використовуються для відкриття файла прямого доступу і опису його структури.

3.3. Як відбувається запис у файл прямого доступу і читання записів із файла прямого доступу?

3.4. Опишіть оператори заповнення буфера.

3.5. Опишіть функції перетворення чисел у символи і зворотне перетворення в числа.

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

3.7. Зазначте оператор, який використовується для закриття файла прямого доступу.





Кінець

0,6А

0,4А

0,5А

0,5А

А

В

дддддддддд

Воооопппп

В

А

А

В

О

В

В

0,5А

Виведення

результатів

Обчислення

α , β

 

Обчислення

Х1 , Х2

D<0

 I=1;N-1

 S=1

 Ввід

T(I)

 I=1;N

Опис

масиву

 ВВІД

N

N

Обчислення

D

Введення

a , b , c

Початок

ПОЧАТОК

 КІНЕЦЬ

6

5

8

7

6

5

4

3

2

1

Обчислення

EMBED Equation.3

Кінець

Висновок

EMBED Equation.3

Обчислення

EMBED Equation.3

Обчислення

EMBED Equation.3

Обчислення

t

Обчислення

p

Введення

а , b , c

Початок

7

так

Рисунок 1 Алгоритм розгалуженої структури

8

6

5

ні

4

3

2

1

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

EMBED Equation.3  

Тіло циклу

Заголовок циклу

Блок

підготовки

циклу

Тіло циклу

Блок модифікації змінних

Умови продовження

циклу

так

ні

Рисунок 1 Алгоритми циклічної структури

4

3

1

2

7

3

ні

Вивід

S

6

так

8

5

2

1

Обчислення

S

1

Рисунок 2 Алгоритми простого циклічного процесу

9

4

Х=Хн;, Хк; Hх

X Xk

Обчислення

Y

X = X + Hх

 

Обчислення

Y

Х = Хн

Введення

Хн, Хк, Нх 

Виведення

X, Y

Виведення X , Y

Введення

Хн, Хк, Нх 

Початок

кінець

кінець

Початок

Введення

N

X=1; N

Початок

Введення

N

Y = 1

X = 1

Y = Y*X

X = X + 1

Y = 1

XN

Виведення

Y

Початок

Кінець

Виведення

Y

Обчислення

Y = X*Y

Кінець

3

2

4

3

2

4

1

8

так

5

8

5

6

ні

1

Рисунок 3 Алгоритми обчислення факторіалу

7

9

4

1

1

6

7

Кінець

Виведення

Y

Y=Y+(I-J)IJ

J=1; M

I=1; N

Y = 0

Введення

N , M

Початок

8

2

Рисунок 1 Алгоритм обчислення суми нескінченного ряду

9

1

7

ні

так

6

5

4

3

Кінець

Виведення

S, N, Y

Y EMBED Equation.3  

n = n + 1

S=S+Y

Y=Xn/n

n = 1

S = 1

Введення

X, EMBED Equation.3  

Початок

 А

ні

3

7

2

Рисунок 1. Алгоритм вкладеного циклічного процесу

5

6

7

6

Рисунок 2 Алгоритм вкладеного циклічного процесу з розгалуженням

Z=sin(x+y)

4

Y=1,5,1

5

X=1,10,1

3

Вивод

X,Y,Z

початок

2

Z=cos(x-y)

x>0

y<0

8

Кінець

Обчислення

Р

Ввід

а, в, с

ПОЧАТОК

ЧАЛО

 A

EMBED Equation.3  

4

8

5

6

7

9

10

11

S=0

2

1

3

N(I)

кратно 3?

K=0

K=K+1

 А

Читання даних

ВиведенняN(I)

Об’ява масиву

 А

I =1; N

Початок

K=0

Кратні до 3 відсутні

Кінець

Рис.1. Алгоритм знаходження елементів масиву кратних до трьох.

15

14

13

12

10

9

11

8

7

6

А

Виведення Y(I)

I=1; J

I=1; K

K=K+1

Y (K)=X (I)

X (I)>0

X(I)<0

I=1; 20

J=J+1

Z (J)=X (I)

Виведення Y(I)

2

Кінець

5

1

4

3

А

K=0

J=0

Опис масиву

Введення X(I)

I=1; 20

Початок

Рисунок 2 Алгоритм визначення додатних та від’ємних елементів масиву

Виведення S

Накопичення

суми S

I=1; N

S=0

Введення

P(I) , X(I)

Опис масиву

Введення N

Кінець

Початок

1

2

3

4

5

6

8

S=S*X(I)

N=N+1

Рисунок 4. Алгоритм обчислення середнього геометричного.

Рисунок 3. Алгоритм обчислення математичного сподівання

9

7

Кінець

Виведення

Sср

EMBED Equation.3  

X(I)>0

I=1;100

S=0

N=1

Введення

X(I)

I=1;100

Опис

масиву

Початок

1

2

3

4

5

6

7

9

8

10

11

ні

так

X(I)<MIN

X(I)>MAX

MAX=X(I)

M=I

MIN=X(1);N=1

MAX=X;M=1

MIN=X(I)

N=I

I=1; 20

I=2; 20

Виведення MAX;M;

MIN;N

Введення X(I)

Опис

масиву

Введення N

Кінець

Початок

1

2

3

4

5

8

6

7

10

9

12

11

13

Рисунок 5. Алгоритм знаходження найменшого та найбільшого елементів масиву та їх порядкових номерів.

Рисунок 2. Алгоритм виведення додатних елементів масиву.

13

11

ні

9

10

7

6

8

5

4

3

2

1

A(I,J)>0

K=0

так

K=K+1

K=0

I=1; 10

J=1; 5

Додатних елементів немає

Введення A(I,J)

Опис

Масиву A

Виведення A(I,J)

Кінець

Початок

ні

так

8

Підпрограма

5

11

4

3

2

6

вихід

F=F*I

I=1;X

X=0?

F=1

Вхід

Головна програма

2

7

так

1

4

10

S=0:

T(I)T(I+1)

A=F

П

W=0

X=N

Введе-ння М

М

N=5

P=0.05

Початок

8

5

6

6

9

14

13

12

Кінець

Виве-дення

M, W

Обчислення

W

X=K

B=F

X=N-K

П

П

K=M, N

1

3

ні

Рисунок 1. Алгоритм розрахунку імовірності

Початок

Кінець

А$ =

А$=…

П1

П1

4

5

4

6

1

3

Головна програма

вхід

вихід

П2

П2

Виведе-ння A$

5

4

2

3

3

Підпрограма №1

вихід

вхід

Виведення “*”

I=1; 60

1

2

2

1

Підпрограма №2

Рисунок 2 Алгоритм з використання вкладених підпрограм

13

12

11

7

10

9

6

ні

ні

так

так

S=0

T(I)↔T(I+1)

S=1

5

S=0

T(i)>T(I+1)

I=1; N-1

Введення

T(I)

I=1,N

Введення

N

опис

масиву

Початок

Рисунок 1. Алгоритм «кулькового» сортування

4

3

2

Кінець

Виведення

Т(І)

I=1; N

1

Рисунок 2 Алгоритм сортування пошуком послідовних мінімумів

10

13

11

14

9

12

Кінець

12

ні

8

так

Кінець

Виведення

T(I)

I=1; N

T(I)↔T(IMIN)

T(J)<MIN

J=I=1; N

MIN=T(I)

IMIN=1

I=1; N-1

7

MIN=T(J)

IMIN=J

T(I)>

T(I+1)

5

4

1

3

2

I=1; N

Введення

N

Опис

масиву

Введення

T(I)

Початок

I=1; N

Введення

T(I)

J=2; N

X=T(J)

I=J-1

I=1; N

Виведення

T(I)

11

В

9

6

8

I<0 або

Т(I)≤X

 

T(I+1)=X

T(I+1)=T(I)

I=I-1

5

4

3

2

1

АА

13

Рисунок 3 Алгоритм сортування вставками

Початок

Введення

N

Опис

масиву

10

так

ні

7

А

В

А

В

В

А

А

В

 ВВІД

 Т(I)

 I=1;N

О Опис масиву

 Ввід

N

N

ПОЧАТОК

ні

так

КІНЕЦЬ

 ВИВІД

T(I)

I=1;N

I=1; N-1

MIN=T(I)

 IMIN=1

J=I=1; N

T(I)T(IMIN)

T(J)<

MIN

MIN

MIN=T(J)

 IMIN=J

 I=1; N

ВИВІД

T(I)

 КІНЕЦЬ

ПОЧАТОК

Ввід 

N

N

ООпис

смасиву

I=1;N

 ВВІД

T(I)

J=2; N

X=T(J)

 I=J-1

I<=0 илиT(I)<=X

Т(I+1)=X

T(I+1)=T(I)

 I=I-1

А

А

I=1;N

ВИВІД

 Т(I)

КІНЕЦЬ




1. Вариант 1 Дайте логическую характеристику простого суждения- Ряд важнейших проблем развивающих
2. входной терминальный символ [B] условное выражение [FUNCTION] некоторая функция которая может отсутс
3. Тема- Россия на пороге 21 века
4. Цель задачи информационная база аудита расчетов с поставщиками и покупателями 6 2
5. Организм и внешняя среда
6. административной реформы в Удмуртии 9 апреля 1996 года открылась пятая сессия Государственного Совета Удмур
7. Моделювання програмного забезпечення повна назва за напрямком підготов
8. Осуществляет рациональную организацию сбыта продукции предприятия ее поставку потребителям в сроки и объе
9. Правовые аспекты договора строительного подряда
10. а вида работ предприятия- [] []Внутренняя внешняя; [] Внешняя различная [] Внутренняя циклическая [] Внут
11. Финансы 1 Верно ли утверждение-
12. 6 Растровая и векторная графика Для обработки изображений на компьютере используются специальные прог
13. на тему- Статистические методы изучения трудовых ресурсов Вариант 4
14. Преступления против свободы, чести и достоинства личности
15. НАРКОМАНИЯ-Дорога в никуда
16. Тема 82б.Интеллект как единая способность Теория интеллекта Спирмена базировалась на факте наличия положит.
17. Договор лизинга.html
18.  Закономерность исторических явлений обратно пропорциональна их духовности
19. Курсовая работа- Чань-буддизм и чаньская культура психической деятельности
20. На рубеже XIX и XX веков состоялось величайшее достижение биологии и медицины- австрийский иммунолог Карл