Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LPR_SRS3 (1).doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
3 Мб
Скачать
☆
  1. Лабораторна робота №11

  1. Робота з рядковими величинами.

  1. Ознайомитися з основними процедурами і функціями для роботи з рядковими величинами.

Завдання для лабораторної роботи

Написати програми для розв’язання задач

Задача №1

Постановка задачі

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

Примітка.

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

Текст програми.

Program Zadacha11_1;

Uses wincrt;

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 Zadacha11_2;

Uses wincrt;

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

Постановка задачі

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

Примітка

Організовуємо прохід по рядку за допомогою циклу з параметром, причому враховуємо, що необхідно перевірити три послідовно розташованих символи (зверніть увагу на можливість виходу за межі рядка!). Використуємо функцію копіювання Copy.

Текст програми

Program Zadacha11_3;

Uses wincrt;

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.

Задача №4

Постановка задачі

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

Примітка

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

Текст програми

Program Zadacha11_4;

Uses wincrt;

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

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

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.

Задача №5

Постановка задачі

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

Примітка

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

Текст програми

Program Zadacha11_5;

Uses wincrt;

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.

№11

Написати програми мовою Pascal, відлагодити їх та проаналізувати отримані результати.

Задача №1

У заданій формулі порахувати кількість входжень символів "+" та кількість символів "-".

Задача №2

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

Задача №3

Роздрукувати даний текст у зворотному порядку.

Задача №4

Нехай дано формулу, яка містить лише арифметичні операції +, -, *, / і не містить дужок та функцій. Визначити загальну кількість арифметичних дій, передбачених у цій формулі, та кількість чисел, над якими вони виконуються.

Задача №5.

Дано текст. Відредагувати його таким чином, щоб всі символи "." Були замінені на "...", символи ":" на "−", символи "−" на ":".

Задача №6.

Скласти програму, яка кожну літеру "а", що зустрічається в тексті, замінює на групу символів "ку" (наприклад "ади" - "куди").

Задача №7

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

Питання для самоконтролю

  1. Поясніть, що являє собою рядкова величина? Як описується рядок?

  2. Яким чином можна виконати конкатенацію рядків?

  3. Яким чином можна визначити кількість символів, з яких складається рядок?

  4. Яким чином можна скопіювати фрагмент текстового рядка?

  5. Яким чином можна виконати пошук підрядка в рядку?

  6. Яким чином можна вставити підрядок в рядок?

  7. Яким чином можна перетворити числове значення на рядкове?

  8. Яким чином можна перетворити рядкове значення на числове?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]