Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Математики 1 курс 2 семестр.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
1.8 Mб
Скачать

Приклад

У тексті слова відокремлені символом пробіл. Написати програму, що змінює у найдовшому слові тексту порядок букв на протилежний, не змінюючи інші частини тексту.

Враховуючи особливості структури даних, що визначається типом 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.