- •Методичні вказівки й завдання до лабораторних робіт
- •Загальні рекомендації
- •Практикум з програмування. Turbo pascal
- •Робота з інтегрованим середовищем розробника
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №1 структура програми. Лінійна програма. Організація введення/виведення. Стандартні функції. Базові типи даних Теоретичні відомості
- •Var перелік імен змінних та їх типів;
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №2 програми розгалуженої структури Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №3 цикли з параметром Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №4 цикли з невідомим числом повторень Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №5 розв’язування задач з використанням масивів Теоретичні відомості
- •Var Ім'я : array[поч_індекс . . Кін_індекс] of Тип_даних;
- •Var Ім'я:array[поч_індекс1..Кін_індекс1,
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота №6 символьний тип даних, рядки, масиви рядків Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 7 організація програм, що використовують допоміжні програми Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 8 використання множин Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 9 записи Теоретичні відомості
- •Var Ім’я_запису : Ім’я_типу;
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Лабораторна робота № 10 обробка файлів Теоретичні відомості
- •Приклад
- •Варіанти завдань
- •Запитання для контролю та самоконтролю
- •Рекомендована література
Приклад
У тексті слова відокремлені символом пробіл. Написати програму, що змінює у найдовшому слові тексту порядок букв на протилежний, не змінюючи інші частини тексту.
Враховуючи особливості структури даних, що визначається типом string, при розробці алгоритму можна скористатися тим, що рядок складається з окремих символів (об’єктів типу char) і виконувати перегруповування символів всередині тексту. Інший підхід полягає в розбитті тексту на слова, пошук і перетворення найдовшого слова, злиття слів у вихідний рядок.
Наведемо два з багатьох можливих варіантів розв’язання цієї задачі.
У першому варіанті всі перетворення реалізовані в одному рядку.
program p6_1;
var s:string;
n,maxd,ds,i,d,j,p,k:integer;
c:char;
begin
readln(s);{введення початкового тексту}
s:=s+' ';{для спрощення подальших перетворень у кінець тексту дописується символ пробіл}
{пошук слів у тексті та визначення найдовшого}
n:=1;{початок першого слова}
maxd:=0;
ds:=length(s);{визначення довжини тексту}
for i:=1 to ds do{визначення в тексті початку і кінця слів}
if s[i]=' ' then{}
begin
d:=i-n;{визначення довжини знайденого слова}
if d>maxd then{визначення найдовшого слова}
begin
maxd:=d;
j:=n;{початок найдовшого слова}
end;
n:=i+1;{початок наступного слова}
end;
p:=(maxd div 2)-1;
k:=j+maxd-1;{кінець найдовшого слова}
for i:=0 to p do{зміна в найдовшому слові порядку букв}
begin
c:=s[i+j];
s[i+j]:=s[k-i];
s[k-i]:=c;
end;
delete(s,ds,1);{видалення останній пробіл}
writeln(s);{виведення тексту після перетворень}
end.
Другий варіант більш технологічний, ніж перший, але й більш обмежений ресурсами пам’яті, бо використовується допоміжний рядковий масив.
program p6_2;
var r,s:string;
b:array[1..20] of string;
n,i,j,k:integer;
begin
readln(s);{вводиться текст}
s:=s+' ';{для спрощення обробки в його кінець додається пробіл}
k:=0;{лічильник знайдених слів}
while length(s)>0 do{доки в тексті нічого не залишиться}
begin
n:=pos(' ',s);{знайдено пробіл, тобто знайдено кінець слова}
k:=k+1;{збільшується значення лічильника знайдених слів}
b[k]:=copy(s,1,n-1);{копіювання слова в масив}
delete(s,1,n);{видалення з тексту вже скопійованого слова}
end;
j:=1; {пошук найдовшого слова}
for i:=2 to k do
if length(b[i]) > length(b[j]) then j:=i;
r:='';{перевернення найдовшого слова}
for i:=length(b[j]) downto 1 do
r:=r+b[j,i];
b[j]:=r;
s:=b[1];{формування нового тексту з окремих слів}
for i:=2 to k do
s:=s+' '+b[i];
writeln(s);{виведення результату}
end.