Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Варіанти завдань до роботи на комп’ютері




Мета роботи

 

У лабораторній роботі вивчаються основні поняття, операції та функції, які пов¢язані з опрацюванням символьних послідовностей змінної довжини (рядків) засобами алгоритмічної мови Object Pascal.

 

Основні теоретичні відомості

Оголошення та присвоєння значень даним рядкового типу

Дані рядкового типу – це масив (послідовність) будь-яких символів.

Константа рядкового типу – це послідовность символів, які беруться в апострофи. Наприклад:

‘Одеська Національна Академія Зв’язку’,

‘Чорноморець’.

Змінна рядкового типу при оголошенні має стандартне ім’я string. Значенням змінної рядкового типу є константа цього ж типу. Кожний символ такої змінної має ім´я, яке складається з імені цієї змінної, у квадратних дужках коло якого стоїть індекс символу в рядку, і звертатися до елемента послідовності можна так само, як до елемента символьного масива. Наприклад, якщо name1:=’Pascal’, то name2:=name1[4] має значення ‘c’.

Для зберігання змінної рядкового типу надається кількість байтів, яка дорівнює максимальній кількості символів у цьому рядку плюс один. Байт з номером 0 (ноль) містить число, дорівнюване фактичній кількості символів у рядку.

Рядковий тип даних дозволяє розміщувати в одній і тій самій змінній послідовності символів різної довжини, наприклад:

 

Var name:string[15];

Begin

name:=’Object Pasсal’;

name:=’Delphi’;

end;

 

У цьому фрагменті програми змінну оголошено рядок символів з максимальною довжиною 15. Першим значенням цієї змінної (name-1) є рядок ‘Object Pasсal’ з фактичною довжиною 13 символів (враховуючи прогалину поміж символами). Друге значення (name-2) – рядок ‘Delphi’ – має довжину 6 символів.

У пам’яті комп’ютера змінна name в обох варіантах значень займатиме 16 байт і розміщуватиметься згідно зображенню рис.8.1.

 

Номер байта   0   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15
name-1 13 O b j e c t   P a s c a l    
name-2 6 D e l p h i                  

Рисунок 8.1 – Розміщення символів у даних рядкового типу

 

Байт з номером 0 містить фактичну поточну довжину символьної послідовності, записаної у name (спочатку – 13, а остаточно – 6). Байти, що стоять після останнього символу поточного значення name (позначено сірим кольором на рисунку) містять випадкові двійкові коди, які можна назвати “сміття”.

Щоб надати змінній name  “порожнього” значення, слід використати опе-ратор:   

name:=’’;

Найбільша припустима довжина змінної рядкового типу, очевидно, дорівнює максимальному числу, яке може бути записане у байт за номером 0, тобто числу 255. Якщо рядкова змінна має цю максимальну довжину її можна не писати в оголошенні змінної:

Var s:string;

 

Зауваження. Змінні рядкового типу можуть бути короткими чи довгими. В першому випадку довжина змінної не може бути більша за 255 символів, а у другому вона обмежена об’ємом пам’ті у 2 Гбайт. Для коротких рядків передбачено спеціальний тип shortstring або string[255], а для довгих  (залежно від версії Delphi) такі назви типу: longstring, widestring, ansi-string, widechar.

Операції над string-даними

 

1) Конкатенація (зчіплювання) кількох символьних величин. Знак “плюс” позначає операцію, операндами якої можуть бути дані типу char або string, а результатом – string-рядок, дорівнюваний послідовності операндів. Наприклад, нехай змінні s1,s2 та s3 оголошено як string, а змінна t має тип char i містить символ тире, тоді внаслідок виконання операторів

 

t:=’–‘;                                                   

s1:=’Одеса ’;

s2:=’ місто-герой’;

s3:=s1+c+s2;

 

змінна s3 набуде значення ‘Одеса – місто-герой’.

2) Логічні операції (порівняння символьних величин). Принцип порівняння аналогічний до порівняння слів за алфавітом. Cимвольна послі-довність s1 вважається меншою за символьну послідовність s2, якщо перший символ s1 є менший за перший символ s2 за своїм кодом-номером у ANSI-таблиці. Якщо ж перші символи рівні, порівнюються їхні другі символи і так далі. Наприклад, логічний вираз ‘1 долар’<>’1$’матиме значення True, а вираз    ‘1 долар’=’1$’ – значення  False.

 

Основні функції для роботи зі string-даними

 

1)Copy – виокремлення підпослідовності з послідовності символів.

Function Copy(s:string; i:integer; n:integer):string;

Тут s – вхідна послідовність;

   і – індекс початку підпослідовності, яку треба виокремлювати;

   n – довжина (число символів) виокремлюваної послідовності.

Наприклад,

Var str1,str2:string;

Begin

str1:=’Object Pasсal’;

str2:=Copy(str1,8,6);

 

Значенням str2 буде підпослідовність зі str1, яка розпочинається у 8-й позиції і має довжину 6. Отже, Str2=’Pasсal’.

2)Pos – визначення позиції початку заданої підпослідовності у заданій послідовності:

Function POS(p:string;s:string):byte;

Результатом цієї функції буде індекс початку підпослідовності р у рядку s; якщо ж р не міститься в s , результатом є нуль. Тип результату – byte – це невід’ємне ціле число від 0 до 255. Наприклад, POS(‘Pasсal’,’Object Pasсal’) дорівнюватиме 8;

3) Length – визначення фактичної довжини послідовності символів:

Function Length(s:string):byte;

Ця функція переводить у числову форму байт довжини string-послідовності і повертає знайдене число як свій результат.

Наприклад:

Var str:string[30];dlina:integer;

Begin

Str:=’Місто Одеса’;

Dlina:=Length(str); // значенням змінної dlina буде 11

3) StrToInt(s) – переведення рядка символів s в ціле число.

4) IntToStr(n) – переведення цілого числа n в рядок.

5) StrToFloat(s) – переведення рядка s в дійсне число.

6) FloatToStr(x)– переведення дійсного числа хв рядок.

Стандартні процедури для роботи з даними рядкового типу

1)Delete – вилучення підпослідовності з заданої послідовністі:

Procedure Delete(var s:string; k:integer; n:integer);

Вилучає зі string-змінної s задану кількість n символів, починаючи з символу, який стоїть в s у заданій позиції k. Після вилучення довжина s зменшується на n символів.

Наприклад:             …

s:= ‘Object Pasсal’;

Delete(s,1,6); // тепер дорівнюватиме ’ Pasсal’

2)Insert – уставлення підпослідовності в задану послідовність:

Procedure Insert(p:string; var s:string; k:integer);

Уставляє задану рядкову величину р у string-змінну s, починаючи із заданої позиції k змінної s.

Наприклад:               …

str1:=’Object’;

str2:=’Pascal’;

str1:=str1+’’;

Insert(str1,str2,1); // тепер str2=’Object Pascal’

3)Val– переведення символьного запису числа в його числовий формат:

Procedure Val(s:string; var x:<числовий тип>; var ier:integer);

 Тут s – символьний запис числа, х – число-результат типу real чи integer, ier – код завершення процедури, якщо перетворення відбулось успішно, то ier дорівнюватиме нулю і буде іншим, якщо у символьному записі числа містились помилки.

Наприклад:       …

var s1,s2: string; f:integer; h:real; ier:integer;

 …

begin s1:=’125’; s2:=’–1.253E2’;

Val(s1,f,ier); // змінна f міститиме ціле число 125

Val(s2,h,ier); //змінна h міститиме дійсне число –125,3

4) Str – переведення чисел у символьні записи:

Procedure Str (x:<числовий тип>; var s:string);

Забезпечує переведення числа х у його символьний запис s. Наприклад, після виконання Str(12,s) string-змінна s матиме значення ‘12’.

 

Приклади програм

Приклад1

Завдання.Написати проект програми, що вводить три string-рядки з 20-ти або меншого числа елементів і визначає однакові символии між кожною парою рядків та однакові символи з усіх трьох рядків.

Форму проекту та результати роботи програми наведено на рис.8.2.

 

 

 


Рисунок 8.2 – Форма проекту прикладу 1

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

………………….

implementation

{$R *.DFM}

 

 Type tstr=string[20];

 

// підпрограма визначення однакових символів поміж двох рядків

procedure Spsimv(s1,s2:tstr;var s:tstr);

 var i,dlina,po,ps:integer;


Begin

 s:='';

 dlina:=length(s1);

 for i:=1 to dlina do

begin

ps:=pos(s1[i],s2);

if ps<>0 then

  begin

    po:=pos(s1[i],s);

    if po=0 then s:=s+s1[i];

  end;

end;

end;

// підпрограмма до кнопки “Старт”

procedure TForm1.Button1Click(Sender: TObject);

 var s1,s2,s3,s12,s13,s23,s123:tstr;

Begin

// введення значень рядків

s1:=edit1.text;

s2:=edit2.text;

s3:=edit3.text;

// визначення однакових символів поміж кожною парою рядків

Spsimv(s1,s2,s12); edit4.text:=s12;

Spsimv(s1,s3,s13); edit5.text:=s13;

Spsimv(s2,s3,s23); edit6.text:=s23;

// визначення однакових символів у трьох рядках

Spsimv(s12,s23,s123); edit7.text:=s123;

end;

……….

end.

 

3.2  Приклад 2

 

Завдання. Ввести рядок зі значеннями кількості доларів (через прогалину). Вивести у компонент Memo масив відповідних значень у гривнях.

Форму проекту та результати роботи програми наведено на рис.8.3.

 

 

 


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

unit Unit1;

……..


Implementation

{$R *.DFM}

 

Type s60=string[60];

 

// підпрограма-функція вилучення початкових прогалин рядка

function del_n(s1:s60):s60;

Begin

while (pos(' ',s1)=1)and (length(s1)>0) do

               delete(s1,1,1);

del_n:=s1;

end;

 

// підпрограма-функція виокремлення першого” слова” з послідовності

function slovo(s:s60):s60;

var p:integer;

Begin

      p:=pos(' ',s);

       if p=0 then slovo:= s

              else slovo:= copy(s,1,p-1) ;             

end;

 

// підпрограма-процедура переведення “слова” з доларів у гривні

procedure dol_gr(sdol:s60; koef:real; var sgr:s60);

var dol,gr:real; ier:integer;

begin   

    delete(sdol,1,1); // вилучення символу ‘ $’

    val(sdol,dol,ier); // переведення рядкового значення в числове

    gr:=dol*koef; // перерахунок числового значення в гривні

    str(gr:10:2,sgr); // перетворення числового значення в рядкове

    sgr:=sgr+' грн.';

end;

 

// підпрограма до кнопки “Перерахунок у гривню“

procedure TForm1.Button1Click(Sender: TObject);

 var sv,sr,sg:s60; k,dd:integer;

begin sv:=edit1.text; //читання введеного рядка

      k:=strtofloat(Edit2.text); // читання курсу долару

    sv:=del_n(sv); // вилучення початкових прогалин рядка

 

   while length(sv)>0 do

   begin

       sr:=slovo(sv); // виокремлення першого “слова” з послідовності

       dol_gr(sr,k,sg);  // переведення “слова” з доларів у гривні

        memo1.lines.add(sg); // виведення результату

        delete(sv,1,length(sr)); //вилучення першого “слова” з послідовності

        sv:=del_n(sv);        // вилучення початкових прогалин рядка

   end;

end;

 

End.

3.3  Приклад 3

Завдання.Написати програму, яка вводить два string-рядки та визначає, який з них є довший. якщо перший рядок є довший ніж другий, то програма додає  у другий рядок символ ‘#’ до довжини першого, якщо другий рядок є довший за перший, − додає у перший рядок символ ‘$’ до довжини другого.

Форму проекту та результати роботи програми наведено на рис.8.4.

 

Рисунок 8.4 – Форма проекту до прикладу 3

 

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

………………………….

implementation

{$R *.DFM}

 

// підпрограма до кнопки “Перерахунок у гривню“

procedure TForm1.Button1Click(Sender: TObject);

Var a,b:string[10];

dla,dlb,i:integer;


Begin

// читання рядків

a:=edit1.text;

b:=edit2.text;

// визначення довжини рядків

 dla:=length(a);

 dlb:=length(b);

if dla>dlb then

// додавання у другий рядок символів ‘#’

for i:=dlb+1 to dla do

   begin

     b:=b+'#';

     edit3.text:=b;

   end  

else if dla<dlb then

// додавання у перший рядок символів ‘$’

for i:=dla+1 to dlb do

    begin

     a:=a+'$';

     edit3.text:=a;end;

end;

 

end.

 

4 Контрольні запитання

 

1 Що таке байт довжини? Який номер у цього байта?

2 Скільки байтів займає величина, оголошена як string[5]?

3 Запишіть оператор чи оператори, котрі дозволяють ввести рядок з 8 символів.

4 Запишіть оператор, котрий запише у рядкову послідовність S2 початок рядкової змінної S1, аж до її 4-го символу включно.

5 Відомо, що змінна К містить слово “авто”. Запишіть оператор конкатенації, котрий надасть змінній значення “автозавод”.

6 Яку процедуру слід використати, щоб перевести ціле число k у символьну форму? Запишіть її виклик.

7 Яку процедуру слід використати, щоб перевести дійсне число D у символьну форму і записати у рядкову послідовність S? Запишіть її виклик.

8 Яку процедуру слід використати, щоб перевести символьний запис цілого числа, котрий зберігається у string–змінній Т, у числову форму? Запишіть її виклик.

9 Яку процедуру слід використати, щоб перевести символьний запис дійсного числа, котре зберігається у рядковій змінній S, у числову змінну К? Запишіть її виклик.

10 Яка функція переводить у числову форму байт довжини рядкової послідовності й повертає знайдене число як свій результат? Запишіть її.

11 Чому дорівнює значення функції Length(‘’)?

12 Яку функцію треба використати, щоб перевести символьний запис в ціле число?

 

Лабораторне завдання

 

1 Розробити проект форми та програми алгоритмічною мовою Object Pascal для виконання індивідуального завдання відповідно до варіантів у середовищі Delphi.

2 Оформити протокол для виконання лабораторної роботи.

3 Занести результати обчислень до протоколу.

 

Варіанти завдань до роботи на комп’ютері

 

1 Написати програму, котра вводить рядкову послідовність з 10-ти чи меншої кількості елементів, відшукує в рядку перше ціле число і виводить його.

2 Написати програму, котра вводить рядкову послідовність з 12-ти чи меншої кількості елементів, і, якщо в рядку є символ ‘+’, то перед цим знаком і після нього додає прогалини.

3 Написати програму, котра вводить рядкову послідовність з 13-ти чи меншої кількості елементів і замінює в рядку великі літери російського алфавіту на малі.

4 Написати програму, котра вводить рядкову послідовність з 10-ти чи меншої кількості елементів і вилучає з рядка початкові прогалини.

5 Написати програму, котра вводить рядкову послідовність з 16-ти чи меншої кількості елементів і робить в рядку прогалину перед кожною великою латинською літерою (за умови, що перед нею ще немає прогалини).

6 Написати програму, котра вводить рядкову послідовність з 10-ти чи меншої кількості елементів і вилучає з рядка кратні прогалини.

7 Написати програму, котра вводить рядкову послідовність з 12-ти чи меншої кількості елементів і вилучає з рядка початкові та кінцеві символи ‘+’.

8 Написати програму, котра вводить рядкову послідовність з 14-ти чи меншої кількості елементів, і, якщо в рядку є крапка, то після крапки додає прогалину, а наступний символ записує з великої літери.

9 Написати програму, котра вводить дві рядкові послідовності з 10-ти чи меншої кількості елементів, визначає, яка з них є довша, і будує рядок, на початку якого стоїть довша рядкова послідовність, а за ним – через прогалину – коротша рядкова послідовність.

10 Написати програму, котра вводить дві рядкові послідовності з 9-ти чи меншої кількості елементів, визначає, яка з них є довша, і “обрізає” її до довжини коротшої.

11 Написати програму, котра вводить дві рядкові послідовності з 12-ти чи меншої кількості елементів і будує рядок, який складається з однакових елементів заданих двох рядків; кратні елементи враховувати лише один раз.

12 Написати програму, котра вводить дві рядкові послідовності з 10-ти чи меншої кількості елементів, визначає, яка з них є коротшою, і додає символи ‘%’ до довжини довшої.

13 Написати програму, котра вводить дві рядкові послідовності з 8-ми чи меншої кількості елементів, визначає, яка з них є більшою за порядком і будує рядкову послідовність, на початку якої стоїть менша з двох введених, а за нею – через прогалину – більша.

14 Написати програму, котра вводить дві рядкові послідовності з 10-ти чи меншої кількості елементів, визначає, чи входить одна з них до складу іншої; і, якщо це так, то викреслює з ширшої вужчу (для рядків ‘абвг’ та ‘аб’ результатом буде ‘вг’).

15 Написати програму, котра вводить дві рядкові послідовності з 11-ти чи меншої кількості елементів, визначає, яка з них є коротша, і додає знак ‘#’ до до довжини довшої.

16 Написати програму, котра вводить дві рядкові послідовності з 10-ти чи меншої кількості елементів, і будує рядок, який складається з тих символів першої послідовності, яких нема у другій. Кратність до уваги не брати, наприклад, для рядків ‘арк45тф’ та ‘к5ерх’ результатом буде ‘а4тф’.

17 Написати програму, котра вводить дві рядкові послідовності з 12-ти чи меншої кількості елементів, визначає, чи є одна з них закінченням іншої, і якщо це так, то вставляє початок ширшого рядка в кінець вужчого (для рядків ‘абвг ‘ та ‘вг ‘ результатом буде ‘вгаб’).

18 Написати програму, котра вводить рядкову послідовність з 16-ти чи меншої кількості елементів і друкує всі слова цього рядка у стовпчик; вважати, що розділювачем слів є прогалина.

19 Написати програму, котра вводить рядкову послідовність з 11-ти чи меншої кількості елементів і відшукує останнє слово у цьому рядку; вважати, що розділювачем слів є прогалина.

20 Написати програму, котра вводить рядкову послідовність з 10-ти чи меншої кількості елементів і відшукує перше власне ім’я у цьому рядку; вважати, що власні імена – це слова, що розпочинаються з великих латинських літер, вважати, що розділювачем слів є прогалина.

21 Написати програму, котра вводить рядкову послідовність з 18-ти чи меншої кількості елементів і виокремлює слова із вказаним порядковим номером; вважати, що розділювачем слів є прогалина.

22 Написати програму, котра вводить рядкову послідовність з 10-ти чи меншої кількості елементів і відшукує перше слово у цьому рядку; вважати, що розділювачем слів є прогалина.

23 Написати програму, котра вводить рядкову послідовність з 8-ми чи меншої кількості елементів і розріджує його прогалинами, наприклад: для рядка ‘fdg#3gk’ результатом буде ‘f d g # 3 g k’.

24 Написати програму, котра вводить дві рядкові послідовності з 9-ти чи меншої кількості елементів і будує рядок, який складається з однакових елементів заданих двох рядків. Кратні елементи слід враховувати.

25 Написати програму, котра вводить масив з 8-ми дійсних чисел і будує рядкову послідовність, у якій записано ці числа, округлені до десятих, і за кожним числом вставлено текст грн. Записи в рядку необхідно розділити комою (наприклад: 5.5 грн,7.5 грн, 2.5 грн,…,9.5 грн).

26 Написати програму, котра вводить масив з 6-ти рядкових послі-довностей (кожна з 5-ти чи меншої кількості елементів) і виводить їх у відповідності з їхнім ANSI-порядком.

27 Написати програму, котра вводить масив з 5-ти рядкових послі-довностей (кожна з 6-ти чи меншої кількості елементів), які містять записи символу ‘$’ із числом (наприклад, $125) . Слід перевести величини в доларах у величини в гривнях за курсом, і утворити масив відповідних значень записів у гривнях (наприклад, 625 грн.)

28 Написати програму, котра вводить масив з 8-ми дійсних чисел і будує рядкову послідовність, у якій записано ці числа, і за кожним числом вставлено текст м/с. Записи в рядку необхідно відокремити комою.

29  Написати програму, котра вводить рядкову послідовність з 13-ти чи меншої кількості елементів і вилучає в рядку початкові й кінцеві прогалини.

30 Написати програму, котра вводить рядкову послідовність з 10-ти чи меншої кількості елементів, відшукує в рядку дійсне число (наприклад 12.5) і друкує його; вважати, що число може бути надано в експоненціальній формі (наприклад, 1.25е1). Якщо числа не знайдено, вивести повідомлення про це.     










Последнее изменение этой страницы: 2018-06-01; просмотров: 184.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...