For i:=1 to length(St) do
If St[i] = ‘:’ Then
Begin Delete (St, i, 1) ; Insert (‘-’St,1) ; End
Else
If St[i]=’-’ Then
begin Delete(St,i,1); Insert(‘:’,St,1); end;
Writeln(‘Результуючий рядок: ‘,St);
Readkey;
End.
ЗАДАЧА №382
Умова: У даному тексті замінити всі символи «.» на послідовність символів «...». Якщо у тексті зустрічаються підряд три крапки, то залишати їх без змін.
Розв’язання: В цій задачі після виконання замін збільшується довжина рядка, причому після шуканого символу становиться такий самий. Тому, якщо цикл організувати, як і в попередньому випадку, весь текст, починаючи з першої крапки, замшиться на крапки (подумайте чому). Тому в цій задачі доцільно скористатися циклом з передумовою, що дозволяє змінну циклу змінювати на будь-який крок (а не тільки на одиницю, як в циклі з параметром). Для того, щоб не виконувати заміну у випадку наявності трьох крапок в тексті, будемо перевіряти не тільки поточну, а й наступну за нею позицію (не забудьте при цьому про можливість виходу за межі рядка!!!). Останній символ рядка тут перевірятиметься окремо.
Зверніть увагу, що у випадку, коли довжина результуючого рядка буде складати більш ніж 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 - лічильник послідовностей}
Читать дальше