Відмінності між версіями «Конспект уроку №8 Свинаренка Олександра»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показані 3 проміжні версії цього учасника)
Рядок 104: Рядок 104:
 
'''При великому бажанні провести даний урок типу "урок викладення нового матеріалу"'''
 
'''При великому бажанні провести даний урок типу "урок викладення нового матеріалу"'''
 
   
 
   
'''даний матеріал легко переробити, додатково надаю матеріал <font color="#3399ff">< [[додаток]].'''
+
'''даний матеріал легко переробити, додатково надаю матеріал [[додаток]].'''
  
 
'''Алгоритми задач в конспекті також присутні.'''
 
'''Алгоритми задач в конспекті також присутні.'''
Рядок 114: Рядок 114:
 
Першу задачу слід розглянути з учнями.
 
Першу задачу слід розглянути з учнями.
 
Умова: У даному тексті всі послідовності крапок замінити на одну крапку.
 
Умова: У даному тексті всі послідовності крапок замінити на одну крапку.
 +
 +
 
Для розв'язку цієї задачі пропонується організувати цикл перегляду кожного елементу рядка (краще за допомогою циклу з передумовою), причому, якщо буде знайдена група крапок, вилучити її повністю, а потім вставити на це ж місце тільки одну крапку. Для вилучення групи крапок можна скористатися кількома способами. Наприклад, підрахувати їх кількість, а потім всі вилучити.  
 
Для розв'язку цієї задачі пропонується організувати цикл перегляду кожного елементу рядка (краще за допомогою циклу з передумовою), причому, якщо буде знайдена група крапок, вилучити її повністю, а потім вставити на це ж місце тільки одну крапку. Для вилучення групи крапок можна скористатися кількома способами. Наприклад, підрахувати їх кількість, а потім всі вилучити.  
 
Ми пропонуємо вилучати всі крапки, доки не зустрінеться символ, що не являється крапкою.
 
Ми пропонуємо вилучати всі крапки, доки не зустрінеться символ, що не являється крапкою.
Рядок 158: Рядок 160:
  
 
Умова: Дано деякий текст, у якому є хоча б одна кома. Визначити порядковий номер останньої коми в тексті.
 
Умова: Дано деякий текст, у якому є хоча б одна кома. Визначити порядковий номер останньої коми в тексті.
 +
 +
 
Для пошуку останньої коми в тексті необхідно організувати цикл перегляду рядка з кінця до початку, тобто від останнього символу рядка з номером length(St) до першого. В зв'язку з тим, що ми не знаємо, якою за номером буде кома, краще це зробити командою повторення з передумовою. Цикл завершить свою роботу при досягненні позиції, в якій знаходиться кома (за умовою вона обов'язково є в тексті). Значення змінної циклу і буде номером шуканої позиції.
 
Для пошуку останньої коми в тексті необхідно організувати цикл перегляду рядка з кінця до початку, тобто від останнього символу рядка з номером length(St) до першого. В зв'язку з тим, що ми не знаємо, якою за номером буде кома, краще це зробити командою повторення з передумовою. Цикл завершить свою роботу при досягненні позиції, в якій знаходиться кома (за умовою вона обов'язково є в тексті). Значення змінної циклу і буде номером шуканої позиції.
 
Програма, що реалізує описаний алгоритм, має наступний вигляд:
 
Програма, що реалізує описаний алгоритм, має наступний вигляд:
Рядок 190: Рядок 194:
  
 
Умова: Дано деякий текст. Створити новий текст, який утворено із даного читанням з кінця до початку.
 
Умова: Дано деякий текст. Створити новий текст, який утворено із даного читанням з кінця до початку.
 +
 +
 
Для реалізації даної задачі знов, як і в попередньому випадку, пройдемо рядок з кінця до початку, виконуючи конкатенацію кожного наступного символу до нового рядка.
 
Для реалізації даної задачі знов, як і в попередньому випадку, пройдемо рядок з кінця до початку, виконуючи конкатенацію кожного наступного символу до нового рядка.
 
Програма, що реалізує описаний алгоритм, має наступний вигляд:
 
Програма, що реалізує описаний алгоритм, має наступний вигляд:
Рядок 229: Рядок 235:
 
'''Варіант 3:'''
 
'''Варіант 3:'''
 
Умова: Перевірити, чи однаково читається дане слово зліва направо і навпаки.
 
Умова: Перевірити, чи однаково читається дане слово зліва направо і навпаки.
 +
 +
 
Для розв'язку цієї задачі можна використовувати попередню задачу, як підзадачу, тобто спочатку отримати новий рядок, який являється оберненим відносно даного, а потім порівняти даний та отриманий рядки. Якщо вони співпадають, слово являється паліндромом (читається в обох напрямках однаково, наприклад, "дід", "потоп", "Пилип" тощо), в протилежному випадку - ні.  
 
Для розв'язку цієї задачі можна використовувати попередню задачу, як підзадачу, тобто спочатку отримати новий рядок, який являється оберненим відносно даного, а потім порівняти даний та отриманий рядки. Якщо вони співпадають, слово являється паліндромом (читається в обох напрямках однаково, наприклад, "дід", "потоп", "Пилип" тощо), в протилежному випадку - ні.  
 
Програма, що реалізує описаний алгоритм, має наступний вигляд:
 
Програма, що реалізує описаний алгоритм, має наступний вигляд:
Рядок 266: Рядок 274:
  
 
Умова: Визначити, скільки разів у даному тексті зустрічається послідовність символів "абв".
 
Умова: Визначити, скільки разів у даному тексті зустрічається послідовність символів "абв".
 +
 +
 
Організовуємо прохід по рядку за допомогою циклу з параметром, причому враховуємо,  
 
Організовуємо прохід по рядку за допомогою циклу з параметром, причому враховуємо,  
 
що необхідно перевірити три послідовно розташованих символи  
 
що необхідно перевірити три послідовно розташованих символи  
Рядок 316: Рядок 326:
  
 
Умова: Нехай дано формулу. Визначити коректність формули щодо кількості відкритих та закритих дужок. Вважається, що закриті дужки не стоять перед відкритими. Якщо дужки у формулі відсутні - повідомити про це.
 
Умова: Нехай дано формулу. Визначити коректність формули щодо кількості відкритих та закритих дужок. Вважається, що закриті дужки не стоять перед відкритими. Якщо дужки у формулі відсутні - повідомити про це.
 +
 +
 
Для визначення коректності формули необхідно підрахувати кількість відкритих та кількість
 
Для визначення коректності формули необхідно підрахувати кількість відкритих та кількість
 
закритих дужок. Якщо ці значення дорівнюють одне одному, баланс дужок виконується,  
 
закритих дужок. Якщо ці значення дорівнюють одне одному, баланс дужок виконується,  
Рядок 393: Рядок 405:
  
 
Умова: Нехай дано текст S та значення символьних змінних x та y. Із тексту вилучити всі символи, що збігаються з x і повторити двічі всі символи, що збігаються з y.
 
Умова: Нехай дано текст S та значення символьних змінних x та y. Із тексту вилучити всі символи, що збігаються з x і повторити двічі всі символи, що збігаються з y.
 +
 +
 
Для розв'язання запропонованої задачі необхідно переглянути кожен символ рядка і,  
 
Для розв'язання запропонованої задачі необхідно переглянути кожен символ рядка і,  
 
якщо він співпадає з символом x, вилучити його процедурою delete, а якщо збігається  
 
якщо він співпадає з символом x, вилучити його процедурою delete, а якщо збігається  
Рядок 439: Рядок 453:
  
 
Умова: Розробити програму-шифрувальник тексту, що замінює кожну його літеру наступною по порядку в абетці. Останню літеру абетки необхідно замінити першою.
 
Умова: Розробити програму-шифрувальник тексту, що замінює кожну його літеру наступною по порядку в абетці. Останню літеру абетки необхідно замінити першою.
 +
 +
 
В даній задачі необхідно, по-перше, перевірити, чи є черговий символ рядка буквою. Відомо, що всі букви латиниці розташовані в таблиці ASCII-кодів двома групами великих та малих літер, а літери кирилиці - двома нерівномірними групами від 'А' до 'п' та від 'р' до 'я':
 
В даній задачі необхідно, по-перше, перевірити, чи є черговий символ рядка буквою. Відомо, що всі букви латиниці розташовані в таблиці ASCII-кодів двома групами великих та малих літер, а літери кирилиці - двома нерівномірними групами від 'А' до 'п' та від 'р' до 'я':
 
'A'.. 'Z' - коди 65 .. 90;
 
'A'.. 'Z' - коди 65 .. 90;
Рядок 501: Рядок 517:
  
 
Умова: Дано деякий текст. Групи символів, які розділені пробілами (одним або кількома) та не містять всередині себе пробілів, називатимемо словами. Вважатимемо, що текст завжди починається зі слова. Визначити кількість слів, у яких перша та остання літера однакові.
 
Умова: Дано деякий текст. Групи символів, які розділені пробілами (одним або кількома) та не містять всередині себе пробілів, називатимемо словами. Вважатимемо, що текст завжди починається зі слова. Визначити кількість слів, у яких перша та остання літера однакові.
 +
 +
 
При виконанні розв'язку цієї задачі, очевидно, що початок першого слова буде співпадати з першою літерою рядка (дивись умову), а кінець слова можна визначити, знайшовши перший проміжок. Скопіювавши це слово в додатковий рядок, ми отримаємо нескладну задачу порівняти його перший та останній символи. Якщо ці символи співпадають, слово підраховується, і процес продовжується для наступного слова.
 
При виконанні розв'язку цієї задачі, очевидно, що початок першого слова буде співпадати з першою літерою рядка (дивись умову), а кінець слова можна визначити, знайшовши перший проміжок. Скопіювавши це слово в додатковий рядок, ми отримаємо нескладну задачу порівняти його перший та останній символи. Якщо ці символи співпадають, слово підраховується, і процес продовжується для наступного слова.
 
Щоб задачу пошуку чергового слова зробити ідентичною для всіх слів, можна вважати,  
 
Щоб задачу пошуку чергового слова зробити ідентичною для всіх слів, можна вважати,  

Поточна версія на 11:16, 10 грудня 2008

Конспект уроку на тему: "Поняття про алгоритми роботи з величинами. Аргументи та результати алгоритму."

Підготував: Студент 44 – групи: Свинаренко Олександр

Мета уроку: Узагальнити і систематизувати матеріал з теми "Поняття про алгоритми роботи з величинами. Аргументи та результати алгоритму". Набути практичних навичок у розв'язуванні задач.

Тип уроку:

Урок-практикум

Зміст уроку

1.Організаційний момент.

2.Актуалізація.

3.Подання матеріалу для виконання.

4.Підсумок уроку.

5.Домашня робота.


Хід уроку


1.Організаційна частина.(Перевірка присутніх і т.д.)

2.Актуалізація.

ВСТУП:

Кожна людина щодня зустрічається з безліччю задач від найпростіших і добре відомих до дуже складних. Для багатьох задач існують визначені правила (інструкції, команди), що пояснюють виконавцю, як розв'язувати дану проблему. Ці правила людина може вивчити чи заздалегідь сформулювати сама в процесі розв'язування задачі. Чим точніше описані правила, тим швидше людина опанує ними і буде ефективніше їх застосовувати. У нашому житті ми постійно складаємо опис деякої послідовності дій для досягнення бажаного результату, тому поняття алгоритму не є для нас досить важливим щоб вміти його сформулювати!!!!!!!!!!!!!

1)Дати визначення АЛГОРИТМА

Відповідь:

Алгоритмом називається зрозуміле і точне розпорядження виконавцю виконати послідовність дій, спрямованих на досягнення зазначеної мети чи на розв'язання поставленої задачі. І стосовно ЕОМ алгоритмом називають систему правил, що визначає послідовність дій, які повинен виконати комп`ютер, щоб знайти результат розв`язання задачі.

2)Створюючи алгоритми необхідно пам`ятати, що набір вказівок вважається алгоритмом, коли він відповідає вимогам (алгоритм повинен характеризуватися такими властивостями):

Відповідь:

1.Дискретність – алгоритм повинен складатися з кінцевого числа окремих послідовних вказівок.

2.Зрозумілість – алгоритм мусить бути зрозумілим для виконавця, тобто складатися з таких вказівок, які входять у систему команд ЕОМ або які відомі (можуть адекватно сприйматися) іншим виконавцям.

3.Визначеність (детермінованість) – усі вказівки повинні бути чіткими й однозначними: значення величин, які отримуються в конкретний момент часу, повинні однозначно визначатися значеннями величин, отриманими в попередні моменти часу.

4.Масовість – можливість використання не для однієї задачі, а цілого класу задач, причому вхідні дані можуть обиратися з деякої області, що називаєтьсРезультативність – у результаті виконання алгоритму повинен бути кінець і результат, якщо ж результат не може бути отриманий, то алгоритм повинен містити пояснення такої ситуації.я областю застосування алгоритму.

3)Виконання будь-якого алгоритму повинне завершуватися одержанням кінцевих результатів (Тобто ситуації, що в деяких випадках можуть призвести до так званого "зациклення", повинні бути виключені при написанні алгоритму). Ця властивість називається:

Відповідь:

Результативність.

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

Відповідь (кожен з відповідаючих має назвати один спосіб):

Першій спосіб - це словесний опис алгоритму.

Другий спосіб - це подача алгоритму у вигляді таблиць, формул, схем, малюнків тощо.

Третій спосіб - запис алгоритмів за допомогою блок-схеми.

Четвертий спосіб - навчальні алгоритмічні мови (псевдокоди).

П'ятий спосіб - це мови програмування.

Слід звернути увагу що 5й спосіб наближений до комп'ютера!!!!!!!!

5)Пропоную щоб діти дали означення та опис рядкових величин, оскільки мої приклади

побудовані на розв'язуванні задачі з використанням рядкових величин.

При великому бажанні провести даний урок типу "урок викладення нового матеріалу"

даний матеріал легко переробити, додатково надаю матеріал додаток.

Алгоритми задач в конспекті також присутні.


3.Подання матеріалу для виконання.


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


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

Program Example_1;

Uses crt;

Var i:word; {i - змінна циклу}

St:string; {St - даний текст}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln (St);

i:=1;

While i<=length(St) do

Begin

While St[i]='.' do Delete(St,i,1);

Insert('.',St,i);

i:=i+1;

End;

Writeln ('Результуючий рядок: ');

Writeln (St);

Readkey; {Затримка зображення на екрані}

End.

Варіант 1:

Умова: Дано деякий текст, у якому є хоча б одна кома. Визначити порядковий номер останньої коми в тексті.


Для пошуку останньої коми в тексті необхідно організувати цикл перегляду рядка з кінця до початку, тобто від останнього символу рядка з номером length(St) до першого. В зв'язку з тим, що ми не знаємо, якою за номером буде кома, краще це зробити командою повторення з передумовою. Цикл завершить свою роботу при досягненні позиції, в якій знаходиться кома (за умовою вона обов'язково є в тексті). Значення змінної циклу і буде номером шуканої позиції. Програма, що реалізує описаний алгоритм, має наступний вигляд:

Program Example_2;

Uses crt;

Var i:byte; {i - змінна циклу}

St:string; {St - даний текст}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln(St);

i:=length(St);

while St[i]<>',' do i:=i-1;

Writeln ('Номер позиції останньої коми в тексті ',i);

Readkey; {Затримка зображення на екрані}

End.

Варіант 2:

Умова: Дано деякий текст. Створити новий текст, який утворено із даного читанням з кінця до початку.


Для реалізації даної задачі знов, як і в попередньому випадку, пройдемо рядок з кінця до початку, виконуючи конкатенацію кожного наступного символу до нового рядка. Програма, що реалізує описаний алгоритм, має наступний вигляд:

Program Example_3;

Uses crt;

Var i:byte; {i - змінна циклу}

St,Rez:string; {St - даний текст, Rez -

результуючий (перегорнутий)

рядок}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln (St);

Rez:=; {Очищення рядка}

For i:=length(St) downto 1 do

Rez := Rez+St[i];

Writeln ('Результуючий рядок: ');

Writeln (St);

Readkey; {Затримка зображення на екрані}

End.

Варіант 3: Умова: Перевірити, чи однаково читається дане слово зліва направо і навпаки.


Для розв'язку цієї задачі можна використовувати попередню задачу, як підзадачу, тобто спочатку отримати новий рядок, який являється оберненим відносно даного, а потім порівняти даний та отриманий рядки. Якщо вони співпадають, слово являється паліндромом (читається в обох напрямках однаково, наприклад, "дід", "потоп", "Пилип" тощо), в протилежному випадку - ні. Програма, що реалізує описаний алгоритм, має наступний вигляд:

Var i:byte; {i - змінна циклу}

St,Rez:string; {St - даний текст, Rez -

результуючий (перегорнутий) рядок}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln (St);

Rez:=; {Очищення рядка}

For i:=length(St) downto 1 do

Rez := Rez+St[i]; {Перегортання рядка}

If Rez = St

Then Writeln ('Слово являється паліндромом.')

Else Writeln ('Слово не являється паліндромом.');

Readkey; {Затримка зображення на екрані}

End.

Варіант 4:

Умова: Визначити, скільки разів у даному тексті зустрічається послідовність символів "абв".


Організовуємо прохід по рядку за допомогою циклу з параметром, причому враховуємо, що необхідно перевірити три послідовно розташованих символи (зверніть увагу на можливість виходу за межі рядка!). Один з методів вибору кількох послідовних символів вже розглядався раніше (і-ий, і+1-ий та і+2-ий елементи), тому розглянемо інший метод, що полягає у використанні функції копіювання Copy. Нагадуємо, що ця функція містить у якості параметрів вихідний рядок, номер початку копіювання (виділення) та кількість вибраних символів, тобто для вибору трьох символів з будь-якого місця рядка St ця функція буде мати вид:

Copy(St,і,3).

Порівнюючи виділені (скопійовані) символи з еталоном, нарощуємо лічильник при виконанні поставлених умов.

Програма, що реалізує описаний алгоритм, має наступний вигляд:

Var i:byte; {i - змінна циклу}

St:string; {St - даний текст}

Count:byte; {Count - лічильник

послідовностей}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln (St);

Count:=0; {Початкове значення лічильника}

For i:=1 to length(St)-3 do

If Copy (St,i,3) = 'абв'

Then count:=count+1;

Writeln ('Кількість шуканих послідовностей: ',count);

Readkey; {Затримка зображення на екрані}

End.

Варіант 5:

Умова: Нехай дано формулу. Визначити коректність формули щодо кількості відкритих та закритих дужок. Вважається, що закриті дужки не стоять перед відкритими. Якщо дужки у формулі відсутні - повідомити про це.


Для визначення коректності формули необхідно підрахувати кількість відкритих та кількість закритих дужок. Якщо ці значення дорівнюють одне одному, баланс дужок виконується, якщо ні - не виконується (дійсно, у правильній формулі кількість відкритих та закритих дужок повинні співпадати). Щоб визначити, чи є в формулі дужки взагалі, достатньо перевірити на нуль кількість одних чи других дужок. Визначимо змінні count_left та count_right,

як кількість відповідно лівих (відкритих) та правих (закритих) дужок, тоді програма, що реалізує описаний алгоритм, має наступний вигляд:

Var i:byte; {i - змінна циклу}

St:string; {St - даний текст}

count_left, count_right:byte;

{count_left - лічильник кількості

лівих дужок, count_right -

лічильник кількості правих дужок}

Begin

Clrscr;

Write ('Введіть формулу: ');

Readln(St);

Count_left:=0; {Початкове значення лічильника}

Count_right:=0;

For i:=1 to length(St) do

Begin

If St[i] = '('

Then count_left:=count_left+1;

If St[i] = ')'

Then count_right:=count_right+1; End; Writeln ('Кількість лівих дужок: ',count_left);

Writeln ('Кількість правих дужок: ',count_right);

If (count_left=0) or (count_right=0)

Then writeln ('Формула не має дужок.')

Else

Begin


If count_left = count_right

then Writeln ('Формула коректна.')

else writeln ('Формула не коректна.');

end;

Readkey; {Затримка зображення на екрані}

End.

4.Підсумок уроку.

5.Домашнє завдання:

Умова: Нехай дано текст S та значення символьних змінних x та y. Із тексту вилучити всі символи, що збігаються з x і повторити двічі всі символи, що збігаються з y.


Для розв'язання запропонованої задачі необхідно переглянути кожен символ рядка і, якщо він співпадає з символом x, вилучити його процедурою delete, а якщо збігається із символом y - вставити перед ним такий самий процедурою insert. Програма для реалізації цього алгоритму має наступний вигляд:

Var i:byte; {i - змінна циклу}

S:string; {S - даний текст}

x,y:char; {x,y - шукані символи}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln (S);

Write ('Введіть шукані символи: ');

Readln (x,y);

For i:=1 to length(S) do

Begin

If S[i] = x

Then delete(S,i,1);

If S[i] = ')'

Then insert(y,S,i);

End;

Writeln ('Результуючий рядок після зміни: ',S);

Readkey; {Затримка зображення на екрані}

End.


Умова: Розробити програму-шифрувальник тексту, що замінює кожну його літеру наступною по порядку в абетці. Останню літеру абетки необхідно замінити першою.


В даній задачі необхідно, по-перше, перевірити, чи є черговий символ рядка буквою. Відомо, що всі букви латиниці розташовані в таблиці ASCII-кодів двома групами великих та малих літер, а літери кирилиці - двома нерівномірними групами від 'А' до 'п' та від 'р' до 'я': 'A'.. 'Z' - коди 65 .. 90;

'a'..'z' - коди 97 .. 122;

'А'..'п' - коди 128 .. 175;

'р'..'ї' - коди 224 .. 245.

Якщо черговий символ рядка - буква, необхідно збільшити її код на 1, а потім перетворити отриманий код в букву. Для визначення коду за символом використовується процедура ord, а для визначення символу за ASCII-кодом - процедура char. Для останніх літер необхідно написати незалежні команди розгалуження для заміни їх на перші літери абетки, причому для символів латиниці можна скористатися однією формулою chr(ord(S[i])-25), тому що, кількість великих та малих літер в абетці однакові і відстань від першої літери до останньої дорівнює 25. Програма для реалізації описаного алгоритму має наступний вигляд:

Var i:byte; {i - змінна циклу}

S:string; {S - даний текст}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln (S);

For i:=1 to length(S) do

Begin

If (S[i]>=65) and (S[i]<90) or

(S[i]>=97) and (S[i]<122) or

(S[i]>=128) and (S[i]<159) or

(S[i]>=160) and (S[i]<=175) or

(S[i]>=224) and (S[i]<245) or

Then S[i]:=chr(ord(S[i]+1);

If (S[i] = 'Z') or (S[i] = 'z')

Then S[i]:=chr(ord(S[i])-25);

If (S[i] = 'Я')

Then S[і]:='А';

If (S[i] = 'я')

Then S[і]:='а';

End;

Writeln ('Результуючий рядок після зміни: ',S);

Readkey; {Затримка зображення на екрані}

End.


Умова: Дано деякий текст. Групи символів, які розділені пробілами (одним або кількома) та не містять всередині себе пробілів, називатимемо словами. Вважатимемо, що текст завжди починається зі слова. Визначити кількість слів, у яких перша та остання літера однакові.


При виконанні розв'язку цієї задачі, очевидно, що початок першого слова буде співпадати з першою літерою рядка (дивись умову), а кінець слова можна визначити, знайшовши перший проміжок. Скопіювавши це слово в додатковий рядок, ми отримаємо нескладну задачу порівняти його перший та останній символи. Якщо ці символи співпадають, слово підраховується, і процес продовжується для наступного слова. Щоб задачу пошуку чергового слова зробити ідентичною для всіх слів, можна вважати, що початком слова є послідовність з проміжку та непроміжку, а відповідно кінцем слова є послідовність з непроміжку та проміжку (цей метод зручний ще тим, що враховує те, що між словами може бути не один проміжок - всі зайві проміжки пропускаються). Виділятися з цього буде перше та останні слова, тому що на початку рядка та в його кінці користувач може не поставити проміжок і ці слова не буде знайденим. Щоб узагальнити задачу пропонуємо один зі штучних методів: дописати на початку та в кінці рядка проміжки . Тоді, програма для реалізації описаного алгоритму буде мати наступний вигляд:

Var i:byte; {i - змінна циклу}

S,Slovo:string; {S - даний текст, Slovo -

вирізане з тексту слово}

count:byte; {count - лічильник шуканих

слів}

Begin

Clrscr;

Write ('Введіть текст: ');

Readln (S);

S:=' '+S+' '; {Дописування проміжку перед

першим словом та після останнього}

Count:=0; {Початкове значення лічильника}

i:=1; {Початок перегляду рядка}

while i<=length(S)-1 do

Begin

If (S[i]=' ') and (S[i+1]<>' ')

Then

Begin

Slovo:=; {Очищення рядка для

зберігання чергового слова}

While (S[i+1]<>' ') do

Begin

Slovo:=Slovo+S[i+1];

i:=i+1;

End;

If Slovo[1] = Slovo[length(Slovo)]

Then count:=count+1;

End;

i:=i+1;

End;

Writeln ('Кількість шуканих слів: ',count);

Readkey; {Затримка зображення на екрані}

End.


--СВИНАРЕНКО АЛЕКСАНДР 21:53, 21 октября 2008 (EEST)