ІНДЕКСИ МАСИВІВ

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

(Наприклад, M (D)), але будь-які арифметичні вирази Так, якщо значення D одно 3, то

М (D + 2) еквівалентно М (5), M (6 * D-12) еквівалентно М (6), M (2 * (D-4) +5) еквівалентно М (3) Слідкуйте за тим, щоб при обчисленні виразів виходили потрібні цілі результати, тому що різні системи надходять з дробовою частиною індексу по-різному Деякі з них відкидають дробову частину, так що 72, 75 і 79 будуть замінені на 7, а інші округлюють значення індексу до найближчого цілого, замінюючи дробову частину від 05 і більше на 1 У цьому випадку 72 замінюється на 7, а

75 і 79 – на 8

Найкраще або користуватися в індексних виразах цілими змінними (якщо такі допускаються системою), або застосовувати функцію INT і свою власну систему округлення При значенні D, рівному 5, Ви можете розраховувати отримати в результаті обчислення виразу 2 * (D-

4) +5 число 7, але насправді результат може виявитися рівним 6999999, і при відкиданні дробової частини вийде 6 Це призведе до неправильного вибору елемента масиву, і розпізнати таку помилку дуже важко З іншого боку, при D = 5

INT (2*(D-4) +5+05) = INT(6999999 + 05) = INT (7499999) = 7 93

що і було потрібно Таким чином, зазначені вище елементи масивів надійніше визначити як М (INT +25)), M (INT (6 * D-12 +05)) і M (INT (2 * (D-4) +55))

412 Економічне використання МАСИВІВ

При вирішенні деяких завдань девять з десяти початківців програмістів неодмінно використовують масив, хоча без нього можна й обійтися На перших порах це не викликає труднощів, бо написані такими програмістами програми зазвичай невеликі і без праці поміщаються в память ЕОМ Однак якщо ця практика стане звичкою, то в програмах більшого розміру буде даремно витрачатися багато памяті Щоб виключити невиправдане використання масиву, корисно задатися питанням: потрібні чи значення елементів масиву більше одного разу Якщо ні, то масив, швидше за все, не потрібен Повернемося до програми з підрозд 411: якби від нас не було потрібно обчислити значення запасів товарів у відсотках від сумарного запасу, то програму можна було б радикальним чином змінити У вихідному варіанті програми треба було ввести всі значення, підрахувати їх суму, вивести всі ці значення, додавши колонку, в якій кожне значення було поділено на цю суму Тому знадобилося два циклу Змінюючи завдання і не вимагаючи видачі значень запасів у відсотках від загальної суми, приходимо до наступної структурі:

якої відповідає програма

10 REM ІНВЕНТАРИЗАЦІЙНИЙ ОПИС Негайне ДРУК

20 Т = 0

30 FOR I = 1 ТО 20

40   INPUT S

50   T=T+S

60 PRINT ТОВАР I ЗАПАС S

70 NEXT I

80 PRINT ВСЬОГО; Т ШТУК

90 END

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

RUN

?6

ТОВАР 1 ЗАПАС = 6

?4

ТОВАР 2 ЗАПАС = 4

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

необхідна для 19 елементів масиву

413 ПРИКЛАД ПРОГРАМИ

Наведені нижче програми показують, як можна спростити програмування за рахунок спільного застосування масивів і циклів FOR Почнемо з простої програми, яка підсумовує кількість пінт молока, доставляються в один будинок протягом тижня Структура цієї програми по суті та ж, що і програми, що обговорювалася вище в підрозділ 414 сама ж програма така: 10 REM ДОСТАВКА МОЛОКА В ОДИН БУДИНОК

20 Т = 0

30 FOR D=1 TO 7

40   INPUT M,

50 Т = Т + М

60 NEXT D

70 PRINT ВСЬОГО ДОСТАВЛЕНО; Т

80 END RUN

?1302121

ВСЬОГО ДОСТАВЛЕНО 10

END AT LINE 80

Зверніть увагу на кому, зазначену як роздільник в операторі INPUT в рядку 40 Вона означає, що при кожному виконанні цього оператора переходу на новий рядок не відбувається, так що необхідні значення можна вводити, вказуючи їх у одному рядку і розділяючи комами Деякі системи дозволяють замість коми вказувати в операторі INPUT двокрапка У Бейсике ВВС немає ні тій ні іншій форми, тому кожне вводиться значення доведеться набирати на новому рядку Тепер узагальнимо нашу задачу таким чином: нехай молоко доставляється в вісім будинків і наприкінці тижня потрібно підрахувати, скільки всього молока було доставлено в кожен дім Таким чином, проста змінна Т у наведеній вище програмі стає масивом з восьми елементів, у кожному з яких накопичується кількість молока, доставленого до відповідного будинок Структура цієї програми така:

Перший прямокутник на цій структограмме насправді є циклом, службовцям для присвоювання 0 всіх елементів масиву Т Але оскільки цю дію логічно завершено і не розяснює процес роботи над завданням, то воно зображено у вигляді блоку Цю структограмму можна розвинути до наступної програми:

5 REM ДОСТАВКА МОЛОКА У 8 БУДИНКІВ

10 OPTION BASE 1

20 DIM T(8)

30 FOR I = 1 ТО 8

40 Т (I) = 0

50 NEXT I

60 REM

70 FOR D=1 TO 7

60 PRINT ДЕНЬ D

90   FOR H=1 TO 6

100     INPUT S,

110     T&ltH)=T(H)+S

120   NEXT H

130 NEXT D

140 REM

150 FOR H=1 TO 8

160 PRINT В ДІМ; H ДОСТАВЛЕНО; T (H) Пінта МОЛОКА 170 NEXT H 180 END RUN ДЕНЬ 1

?14132052 ДЕНЬ 2

?30111201

ДЕНЬ 3

?02014001

ДЕНЬ 4

?2ll01121

ДЕНЬ 5

?11210010

ДЕНЬ 6

?21000341

ДЕНЬ 7

?15281131 96

В ДІМ 1 ДОСТАВЛЕНО 10 пінт МОЛОКА

В ДІМ 2 ДОСТАВЛЕНО 14 пінт МОЛОКА В ДІМ 3 ДОСТАВЛЕНО 7 пінт МОЛОКА

В ДІМ 4 ДОСТАВЛЕНО 6 пінт МОЛОКА

В ДІМ 5 ДОСТАВЛЕНО 9 пінту МОЛОКА

В ДІМ 6 ДОСТАВЛЕНО 7 пінт МОЛОКА

В ДІМ 7 ДОСТАВЛЕНО 15 пінт МОЛОКА В ДІМ 8 ДОСТАВЛЕНО 7 пінт МОЛОКА END AT LINE 180

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

414 ВВЕДЕННЯ І ВИВЕДЕННЯ ДАНИХ ЗА ДОПОМОГОЮ ОПЕРАТОРА МАТ

Оператор МАТ призначений для проведення маніпуляцій усіма елементами масиву, починаючи з індексу 1, в одному операторі Бейсика Як зазначено в гол 7, в багатьох системах не передбачено повного спектру таких маніпуляцій, але, принаймні, в декількох системах передбачено введення і виведення даних за допомогою оператора МАТ

Попросту кажучи, оператори

10   DIM A (5)

20   MAT INPUT A

забезпечують введення даних в пять елементів масиву А (1), А (2), А (3), А (4) і А (5) Вводяться значення можна набирати на одному рядку або розподіляти по декількох рядках Якщо Ваша

система не дозволяє користуватися оператором МАТ, то зазначені вище оператори можна замінити на наступний еквівалент:

10   DIM A(5)

20   FORI=1 TO 5

30      INPUT A(I),

40   NEXT I

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

10   DIM P(8)

20   MAT PRINT P

виведуть вісім значень Р (1) – Р (8), кожне на новому рядку Якщо після Р вказати кому або крапку з комою, то значення будуть виводитися в одному рядку або з великими інтервалами, або впритул Якщо Ваша система не дозволяє користуватися оператором МАТ, то попередні оператори можна замінити на наступний еквівалент:

10   DIM P(8)

20   FOR I = 1 TO 8 30      PRINT P (I) 40   NEXT I

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

10   DIM A (2,3) 20   MAT INPUT A

еквівалентні операторам

10   DIM A (2,3)

20   FOR I = 1 TO 2

30 FOR J = 1 ТО 3

40     INPUT A (I, J),

50      NEXT J

60   NEXT I

Висновок здійснюється аналогічним чином: перша змінюється другий індекс Наприклад, 10 REM ФРАГМЕНТ ДЛЯ ДЕМОНСТРАЦІЇ ОПЕРАТОРА МАТ

20  DIM A(2,3)

30 MAT INPUT А

40   REM

50  MAT PRINT A,

60   END RUN

?123456

1                                2                                3

4&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 5                               6

END AT LINE 60

Матриця А розмірами 2X3 зображується у звичайній алгебраїчній формі у вигляді рядків і стовпців, а кома в операторі MAT PRINT викликає, як показано раніше, висновок елементів матриці по рядках

У Бейсике ВВС ці оператори відсутні, але, на відміну від більшості інших систем, в цій версії Бейсика є можливість виділення процедур, якими можна скористатися для визначення процедур MATINPUT (A) і MATPRINT (A), що виконують описані вище дії

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 1988 336 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*