Зверніть увагу, що у випадку, коли довжина результуючого рядка буде складати більш ніж 255 символів, зайві символи будуть втрачатися. Для спрощення задачі ми їх не враховуємо, але для сильних учнів можна запропонувати організувати збереження цих символів у додатковому рядочку. Програма, що реалізує описаний алгоритм, має вигляд:
Program Example_382 ;
Uses crt;
Var i:word; {i - змінна циклу} St: string; {St — даний текст}
Begin
Clrscr;
Write(‘Введіть текст: ‘);
Readln(St); i:=1;
While i
Begin
If (St[i]=’.’) and (St[i+1]<>’.’) Then
begin Insert(*..’,St,i+l); i:=i+2; end;
i:=i+1;
End;
If St[length(St)]=’.’ Then St:=St+’..’;
Writeln(‘Результуючий рядок: ‘,St);
Readkey;
End.
Домашнє завдання
• Прочитати сторінки 120—123 запропонованого підручника;
• Задачі № 378, № 380, № 385, № 389.
УРОК 29. Робота з рядковими величинами
Мета уроку: навчити розв’язувати задачі з використанням рядкових величин.
На початку уроку бажано провести опитування (письмово чи усно) по матеріалах попереднього уроку (означення та опис рядкових величин, стандартні процедури та функції для роботи з рядковими величинами). Далі рекомендується розглянути задачі з обробки рядкових величин.
ЗАДАЧА № 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
Умова: Нехай дано формулу. Визначити коректність формули щодо кількості відкритих та закритих дужок. Вважається, що закриті дужки не стоять перед відкритими. Якщо дужки у формулі відсутні - повідомити про це.
Розв’язання: Для визначення коректності формули слід підрахувати кількість відкритих та закритих дужок, причому баланс дужок вважається вірним не тільки якщо ці значення дорівнюють одне одному, а й якщо відкрита дужка передує закритій. Останнє перевіряється тим, що кількість відкритих дужок має завжди бути більшою або рівною кількості закритих.
Звідси випливає, що для розв’язку даної задачі зручно скористатися циклом з передумовою, який буде слідкувати за досягненням кінця рядка, та відслідковувати правильність розташування відкритих та закритих дужок.
Читать дальше