|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Пояснення до алгоритму. 1.Використовується ознака р, що вказує на те, чи була відкрита кругла дужка:1. Використовується ознака р, що вказує на те, чи була відкрита кругла дужка:
2.На початку передбачається, що дужка ще не зустрічалася ( р=0 ). Запропонований розв’язок з даного рядка вибирає всі підрядки, які починаються з круглої відкритої дужки, і закінчуються закритою дужкою. Якщо відомо, що пара дужок єдина, можна запропонувати інший розв’язок, міркуючи так: а) пропустимо всі символи у рядку, що передують відкритій дужці; б) виберемо всі символи, починаючи з круглої відкритої дужки і закінчуючи круглою відкритою дужкою у інший рядок. Оформимо наші міркування функцією. Function Dugka (S: string var i: byte): string; var s1:s tring; Begin while (i<=begin (S)) and (S[i]<>’(‘) do i:=i+1; s1:=’ ‘; while (i<=length(S)) and (S[i] i<>’)’) do Begin s1:=s1+s[i]; i:=i+1; end; if i>length(S) then Dugka:=s1 else Dugka:=s1+’)’; end;
Запропонований варіант має ще таку перевагу: якщо буде помилково задано рядок, що містить непарні дужки (є відкрита та немає закритої), резудьтат буде порожнім рядком. Зверніть також увагу на те, що змінна, яка допомагає рухатися по рядку, передається у функцію як параметр-змінна (var i: byte), допомагає використовувати цю функцію для пошуку всіх правильних пар дужок (відкрита дужка передує закритій) з уміщеним в них текстом. Алгоритм мовою Паскаль: Program Example1; { тут необхідно розмістити наведену вище функцію} var S: string; j: byte; Rez: string; Begin write (‘ введіть рядок ‘); readln (s); j:=1; Rez:=’ ‘; while j<=length(S) do Begin Rez:=Rez+Dugka(S, j); end; writeln (Rez); end. Зверніть увагу, що оскільки змінна j передається у функцію як параметр-змінна, її не потрібно змінювати у тілі циклу while. Вона змінюється у тілі функції.
Приклад 2. Підрахувати кількість слів-паліндромів у рядку. Рядок є реченням, що закінчується розділовим знаком.
У тексті може бути кілька розділових знаків, що йдуть підряд, і алгоритм це враховує. Якщо розділовим знаком вважати тільки пробіл та використати раніше написану функцію perevorot, то розв’язання мовою Паскаль буде таким: Program Example2; var S, S1: string; i: word; Begin write (‘введіть рядок ‘); readln (s); i:=1; while i<=length(S) do Begin { пропуск зайвих пробілів } while (i<=length(S) and (S[i]=’ ‘) do i:=i+1; S1:=’ ‘; while (i<=length(S)) and (S[i]<> ‘ ‘) do Begin S1:=S1+S[i]; i:=i+1; end; if S1=perevorot (S1) then writeln (S1); end; end.
Приклад 3. Із заданого речення забрати зазначене слово. АЛГ Приклад 3 (літ T, s1, Y) АРГ T, s1 РЕЗ Y ПОЧ ціл і, dl, dlslp, літ TSL dl:=д овжин (Т); dlsl:= довжин (s1) TSL:=’ ‘ для і від 1 до dl пц якщо Razd(T[i, l])=0 то TSL:=TSL+T[i, l] Інакше якщо TSL ’ ‘ і SL TSL то Y:=Y+TSL Все TSL:=’ ‘ Все кц якщо TSL ‘ ‘ і SL TSL то Y:=Y+TSL Все ДРУКУВАТИ Y КІН
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.012 сек.) |