52841.fb2
Мета уроку: навчити розв’язувати задачі з використанням рядкових величин.
На початку уроку бажано провести опитування (письмово чи усно) по матеріалах попереднього уроку (означення та опис рядкових величин, стандартні процедури та функції для роботи з рядковими величинами). Далі рекомендується розглянути задачі з обробки рядкових величин.
ЗАДАЧА № 387
Умова: Перевірити, чи однаково читається дане слово зліва направо і навпаки.
Розв’язання: Для розв’язування цієї задачі слід спочатку отримати новий рядок, який є оберненим відносно даного, а потім порівняти даний та отриманий рядки. Якщо вони збігаються, слово—паліндром (читається в обох напрямках однаково, наприклад, «дід», «потоп», «Пилип» тощо), у протилежному випадку - ні. Програма, що реалізує алгоритм, має вигляд:
Program Example_387;
Var і:byte; {і - змінна циклу}
St,Rez:string; {St - даний текст, Rez - результуючий (перегорнутий) рядок}
Begin Clrscr;
Write(‘Введіть текст: ‘);
Readln(St);
Rez:= ‘’; {Очищення рядка}
For і:- length(St) downto 1 do
Rez := Rez+St[i]; {Перегортання рядка}
If Rez = St Then Writeln(‘Слово є паліндромом.’)
Else Writeln(“Слово не є паліндромом.’);
Readkey;
End.
ЗАДАЧА №389 (2)
Умова: Визначити, скільки разів у даному тексті зустрічається послідовність символів «абв».
Розв’язання: Організовуємо прохід по рядку за допомогою циклу з параметром, причому враховуємо, що слід перевірити три послідовно розташованих символи (зверніть увагу на можливість виходу за межі рядка!). Один з методів вибору кількох послідовних символів уже розглядався раніше (і-ий, і+1-ий та і+2-ий елементи), тому розглянемо інший метод, що полягає у використанні функції копіювання Copy. Нагадуємо, що ця функція містить у якості параметрів вихідний рядок, номер початку копіювання (виділення) та кількість вибраних символів, тобто для вибору трьох символів з будь-якого місця рядка Л ця функція буде мати вид:
Cоpy(St,i,3) .
Порівнюючи виділені (скопійовані) символи з еталоном, нарощуємо лічильник при виконанні поставлених умов. Програма має вигляд:
Var і:byte; {і - змінна циклу}
St:string; {St - даний текст}
Count:byte; {Count - лічильник послідовностей}
Begin
Clrscr;
Write(‘Введіть текст: ‘);
Readln(St);
Count:=0; {Початкове значення лічильника}
For i:=1 to length(St)- 2 do
If Copy(St,i,3) = ‘абв’ Then count:=count+1;
Writeln(‘Кількість шуканих послідовностей: ‘,count);
Readkey;
End.
ЗАДАЧА № 394
Умова: Нехай дано формулу. Визначити коректність формули щодо кількості відкритих та закритих дужок. Вважається, що закриті дужки не стоять перед відкритими. Якщо дужки у формулі відсутні - повідомити про це.
Розв’язання: Для визначення коректності формули слід підрахувати кількість відкритих та закритих дужок, причому баланс дужок вважається вірним не тільки якщо ці значення дорівнюють одне одному, а й якщо відкрита дужка передує закритій. Останнє перевіряється тим, що кількість відкритих дужок має завжди бути більшою або рівною кількості закритих.
Звідси випливає, що для розв’язку даної задачі зручно скористатися циклом з передумовою, який буде слідкувати за досягненням кінця рядка, та відслідковувати правильність розташування відкритих та закритих дужок.
Щоб визначити, чи є в формулі дужки взагалі, достатньо перевірити на нуль кількість одних чи других дужок. Визначимо змінні count_left та count_right як кількість відповідно лівих (відкритих) та правих (закритих) дужок, тоді програма, що реалізує описаний алгоритм, має вигляд:
Program Example_394;
Var і:byte; {і - змінна циклу}
St:string; {St - даний текст}
count_left, count_right:byte; {count_left - лічильник лівих дужок, count_right - лічильник правих дужок}
Begin
Clrscr;
Write(‘Введіть формулу: ‘);
Readln(St);
Count_left:=0; {Початкове значення лічильника)
Count_right:=0;
і:= 1;
While (i<=length(St)) and (Count_left>=Count_right)) do
Begin
If St[i] = ‘(‘ Then count_left:=count_left+1;
If St[i] = ‘)’ Then count_right:=count right+1;
і: =i+l ;
End;
If (oount_left=0) and (count_right=0)
Then wrіteln(ЛФормула не має дужок.’)
Else
If count_left=count_right then Writeln( ‘Формула коректна’)
else writeln(‘Формула не коректна.’);
Readkey;
End.
Домашнє завдання
• Повторити сторінки 120—123 запропонованого підручника;
• Задачі № 384 (1), 388, 389 (1,3,4), 390, 396, 399,406 (1,2,4).