Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Паскаль.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

3.3. Лабораторна робота №3 Написання програм для введення та обробки серій із нулів та одиниць

Кількість занять – 2 (4 години).

Мета роботи – вдосконалити навики роботи з цілим типом мови ТР 7.0 та побудови алгоритмічних конструкцій.

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

Послідовність виконання роботи.

  1. Отримати індивідуальне завдання.

  2. Скласти алгоритм розв`язання задачі у вигляді блок-схеми.

  3. Написати програму мовою ТР 7.0, яка реалізує даний алгоритм.

  4. Ввести і налагодити програму, виконати розрахунки за комп`ютером.

  5. Оформити та захистити звіт.

3.3.1. Поняття послідовності серій із чисел

Розглянемо довільну послідовність цілих чисел, до складу якої входять лише нулі та одиниці:

  1. 1 00 1 0 1111 00 1 0 1

└┘ └┘ └┘ └┘ └┘ └┘ └┘ └┘ └┘ └┘

S1 S2 S3 S4 S5 S6 S7 S8 S9 S10

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

Кількість нулів або одиниць в серії визначає її довжину. Наприклад, серія S6 складається з чотирьох одиниць, тому її довжина дорівнює 4. Кількість нулів та одиниць послідовності визначає її довжину (в наведеному прикладі довжина послідовності дорівнює 15).

У подальшому при побудові алгоритмів та написанні програм домовимося використовувати такі позначення:

Z — щойно введене (поточне) число послідовності (нуль або одиниця);

C — попередньо введене число;

I — довжина послідовності;

L — число елементів (нулів або одиниць) у поточній серії (серії, що вводиться);

Lp — число елементів у попередньо введеній серії;

S — число серій у послідовності;

L0,L1— відповідно довжина нульової та одиничної серії.

3.3.2. Зразок виконання індивідуального завдання

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

  1. Виконання завдання. Складемо алгоритм обчислень, побудувавши графічну блок – схему (рис.3.3.1.)

Перш ніж перейти до написання програми, звернемо увагу на те, що в наведеному алгоритмі використовується багатонапрямлене (три напрями) розгалуження. Як відомо, в цьому випадку можна використати вкладені конструкції IF…THEN…ELSE, як показано в наведеній нижче ТР-програмі. Однак неважко помітити громіздкість та заплутаність цього варіанта вирішення, які збільшуються зі збільшенням числа напрямків розгалуження.

У мові ТР у подібних ситуаціях дуже часто використовують оператори CASE..OF, які замінюють конструкції складеними операторами IF…THEN…ELSE і є більш наочними при програмуванні.

Рис.3.3.1. Блок-схема введення та обробки серій із нулів й одиниць.

PROGRAM SERII1;

USES CRT;

CONST N=2; M=3; {опис констант}

VAR I, L0, S, Z:INTEGER;

BEGIN

CLRSCR;

I:=0; L0:=0; S:=0;

REPEAT {цикл із післяумовою}

I:=I+1;

WRITE(‘Введіть нуль або одиницю:’);

READLN(Z);

IF Z=0 {багатонапрямлене розгалуження}

THEN

L0:=L0+1 {перша вітка}

ELSE

IF Z=1

THEN

BEGIN

IF L0:=M {друга вітка}

THEN

BEGIN

S:=S+1;

L0:=0

END;

END;

ELSE

BEGIN

WRITELN(‘Некоректне введення:’); {третя вітка}

I:=I-2

END;

UNTIL S=N;

WRITELN(‘Довжина послідовності:’);

END.

Загальний вигляд конструкції CASE..OF:

CASE <порядкова зміна> OF

<Значення_1>: {перший напрямок}

BEGIN

<оператор_1>;

-

-

<оператор_n>;

END;

<Значення_2>: {другий напрямок}

BEGIN

<оператор_1>;

-

-

<оператор_m>;

END;

-

-

<Значення_K>: {k-ий напрямок}

BEGIN

<оператор_1>;

-

-

<оператор_p>;

END;

ELSE {останній напрямок}

BEGIN

<оператор_1>;

-

-

<оператор_1>;

END;

END. {кінець конструкції CASE..OF}

Для даної конструкції виконується той і–ий напрямок, <значення_i> якого збігається зі значенням <порядкової_змінної>. Якщо ж жодне із <значень_і> не збігається зі значенням <порядкової_змінної>, то виконується напрямок (набір операторів), що відповідає ключовому слову ELSE (останній напрямок).

Слід зауважити, що <порядкова_змінна> оператора вибору CASE..OF повинна належати одному з упорядкованих типів, який дозволяє перерахування (впорядкування) деяких об`єктів (у нашому випадку це цілий тип даних).

Наведена вище ТР – програма при використанні конструкції CASE..OF перепишеться таким чином:

PROGRAM SERII2;

USES CRT;

CONST N=_;M=_;

VAR I, L0, S, Z:INTEGER;

BEGIN

CLRSCR;

I:=0; L0:=0; S:=0;

REPEAT

I:=I+1;

WRITE(‘Введіть нуль або одиницю:’);

READLN(Z);

CASE Z OF

0: L0:=L0+1; {перша вітка}

1: IF L0=M {друга вітка}

THEN

BEGIN

S:=S+1;

L0:=0;

END;

ELSE {остання вітка}

BEGIN

WRITELN(‘Некоректне введення:’);

I:=I-2

END;

END;

UNTIL S=N;

WRITELN(‘Довжина послідовності:’);

END.

  1. Введемо, налагодимо та виконаємо наведені програми за комп`ютером.

Порівняємо отримані результати.