Введення з клавіатури значення змінної х може бути передбачено з використанням функції InputBox(' Текст ' , ' Текст ' , ' '). Діалогове вікно наведено на рис. 4.7
Рисунок 4.7 – Вікно InputBox
При виконанні методу InputBox у діалоговому вікні висвічуються рядки тексту, котрий виводиться. Там же є вікно для величини рядкового типу. Дійсне число, котре вводиться, повинно бути з комою, а не з десятковою крапкою.
Закінчення введення здійснюється натисненням клавіші “Ok”. Таким са-мим способом можна ввести і значення константи Е.
Виведення здобутих результатів, а саме введеного значення змінної х, дістаного добутку ряду і фактичної кількості доданків може бути здійснено у вікні багаторядкового текстового редактора Memo.
Доповнення рядків у вікні редактора здійснюється за допомогою методу (процедури)
Memo1.Lines.Add(S); ,
де S – рядок, котрий виводиться.
Переведення числових значень у рядкові й рядкових у числові здійснюється за допомогою стандартних процедур і функцій для роботи з рядковими даними.
Форму проекта (з результатами роботи) наведено на рис 4.8.
Рисунок 4.8 – Діалогове вікно проекту
У вікні форми розміщено компоненти:
- мітка Label1 з текстом “Оператор цикла While”;
- вікно багаторядкового редактора Memo1 для розташування початкових даних і результатів обчислень;
- три кнопки Button1, Button2 і Button3 для запуску процедур розв’язання задачі і виходу із задачі.
Текст програми
Unit Unit1;
…
implementation
Const eps=0.0001;
Var x,s:real; k:integer; sx,sk:string;
//Процедура обчислення ряду
procedureSumma(x:real; Var ds:real; Var k:integer);
Var U,R:real;
begin
s:=0;
k:=1;
U:=-sqr(x)*x/6;
While abs(U)<eps do
begin
s:=s+U;
k:=k+1;
R:=sqr(x)/(2*k*(2*k+1));
U:=U*R;
if odd(k) then U:=-U;
end;
end;
//Процедура для кнопки "Решение"
procedure TForm1.Button1Click(Sender: TObject);
var sum:string; ier:integer;
begin
sx:=InputBox('Введіть значення х','Вводьте число з комою','');
Val(sx,x,ier);
if ier<>0 then
begin
ShowMessage('Введіть правильно значення х'); Exit;
end;
// Виклик підпрограми обчислення суми
summa(x,s,k);
str(s:8:4,sum);
sk:=IntToStr(K);
Memo1.Lines.Add('Вычисление сумы ряда');
Memo1.Lines.Add('x='+sx);
Memo1.Lines.Add('Сумма s='+sum);
Memo1.Lines.Add('Количество слагаемых k='+sk);
end;
//Процедура для кнопки "Табулирование"
procedure TForm1.Button2Click(Sender: TObject);
var a,b,h:real;
sa,sb,sh,sy:string;
begin
sa:=InputBox('Введіть значення а','ліву межу проміжку','');
sb:=InputBox('Введіть значення b','праву межу проміжку','');
sh:=InputBox('Введіть значення h','крок табулювання','');
a:=StrToFloat(sa);
b:=StrToFloat(sb);
h:=StrToFloat(sh);
Memo1.Lines.Add('Табулирование функции');
Memo1.Lines.Add('a='+sa+' b='+sb+' h='+sh);
Memo1.Lines.Add(' x s k');
x:=a;
Repeat
Summa(x,s,k);
str(x:4:1,sx);
str(s:7:4,sy);
sk:=IntToStr(k);
Memo1.Lines.Add(' '+sx+' '+sy+' '+sk);
x:=x+h;
Until x>b;
end;
4 Контрольні запитання
1 Структура оператора циклу While.
2 Порядок виконання оператора While.
3 Якого значення набуде оператор n після виконання операторів?
к:=0; n:=17;
While к<7 do
Begin к:=к+1; n:=n-1; end;
4 Структура оператора циклу Repeat-Until.
5 Порядок виконання операторів Repeat-Until.
6 Чим відрізняються оператори циклу While і Repeat-Until?
7 Якого значення набуде змінна Р після виконання операторів?
i:=1; p:=1;
Repeat p:=p*i; i:=i+1; Until p>7;
Лабораторне завдання
1 Скласти схеми алгоритмів та підпрограми рішення таких задач (згідно з варіантом, наведеному у таблиці 4.1):
а) Обчислення добутку нескінченного ряду з точністю до члена ряду, котрий не перевищує за модулем величину 10-4. Визначити кількість наявних доданків. Обчислення виконати для х = 0,5. Використати оператор циклу while для непарних варіантів і Repeat-Until для парних.
б) Табулювання функції при зміненні х від 0,4 до 2,8 з кроком 0,2. В якості функції застосувати добуток ряду, обчислювального у пункті а. Використати оператор Repeat для непарних варіантів і while – для парних.
У проекті передбачити введення значень змінної х з клавіатури одним із можливих способів (за вибором) та виведення здобутих результатів на форму у компоненти Memo, ListBox, Edit або Label (за вказівкою викладача).
2 Оформити протокол виконання лабораторної роботи згідно вимогам.
Таблиця 4.1 – Індивідуальні завдання
Лабораторна робота №5
Одновимірні масиви
1 Мета роботи
Знайомство з найпростішим зі структурованих типів даних – одновимір-ним масивом. Вивчити засоби використання одновимірних масивів в програмах алгоритмічною мовою Object Pascal в середовищі програмування Delphi.
2 Основні теоретичні відомості
2.1 Поняття масиву
Масив ( Array) в програмуванні – це упорядкована сукупність елементів одного й того самого типу. Масиви зручно використовувати для зберігання та опрацювання однорідної інформації, наприклад, таблиць, векторів, матриць, коефіцієнтів рівнянь тощо.
Кожен елемент масиву однозначно можно визначити ім’ям та індексами. Ім’я масиву (iдентифікатор) складають за тими самими правилами, що й для змінних. Індекси визначають місцезнаходження елемента в масиві. Наприклад, елементи вектора мають один індекс – номер за порядком; елементи матриць чи таблиць мають по два індекси: перший означає номер рядка, другий - номер стовпчика. Кількість індексів визначає вимірність масиву. Наприклад, вектори в програмах – це одновимірні масиви, матриці – двовимірні. В цій роботі ми розглянемо лише одновимірні масиви.
Індексами можуть бути лише змінні, константи чи вирази цілого, символьного, логічного та перераховного типів. Тип індексу визначає границі значень індексу. Значення індексів записують після імені масиву в квадратних дужках і відокремлюють комами. Наприклад:
A [10], Vect [к], r7 ['с'] - елементи векторів: А10, Vectk, r7’c’;
Масив може займати в пам’яті не більш 2 Гбайти.
2.2 Описування одновимірних масивів
Масиви в програмах можна описувати двома способами :
Тут тип_індексу – це константи або змінні перераховного типу, які визначають діапазон змінювання індексів. Приклади описування масивів:
Type Mas1= array [1.. 11] of real;
Mas2= array [1.. 5] of integer;
Mas3 = array ['a'..'e'] of real;
Mas4= array [Boolean] of char;
Var A : Mas1; B : Mas2; C : Mas3; D : Mas4;
У прикладах наведено опис таких масивів:
А - вектор величин А1, А2,…, А11, який складається з дійсних елементів А [ 1 ], А [ 2 ], … , А [ 11 ];
B- послідовності 5 цілих чисел B1,B2,…B5, яка складена з цілих елементівB[1], B[2],...,B[3].
C - вектор з п’яти елементів дійсного типу C['a'], C['b'], C['c'], C['d'], C['e'];
D - символьний масив з двох елементів D [ True ], D [ False ];
Для описування масивів зручно використовувати типізовані констант-масиви, які дозволяють водночас об’явити масив й задати його значення в розділі опису констант:
ConstT : array[1..5] of real = (0.5, 3.4, –2.7, 6.5, 4.8);
описує й задає значення п’ятьом елементам вектора Т.
Значення елементів масивів із загальним описом можна присвоювати лише одним оператором присвоєння, не використовуючи цикли. Наприклад, якщо масиви S й Z мають опис
Var S,Z : array[1..14] of real;
то після введення або обчислення значень масиву S можна присвоїти такі ж самі значення масиву Z одним оператором
Z : = S;
2.3 Виведення елементів одновимірного масиву
Виводити значення масивів можна у файл або на форму, використо-вуючи різноманітні компоненти Delphi. При цьому виводити значення елементів масивів можна лише поелементно, для чого слід організувати цикли змінювання за значеннями індексу. Як зорганізувати виведення масивів у файл, буде розглянуто в інших лабораторних роботах. Тепер розглянемо, як зорганізувати виведення одновимірних масивів на форму за допомогою компонентів Edit, Label, Memo, ListBox та функції ShowMessage.
В наведених прикладах використовуватимемо змінні, що мають такий опис:
Var А : array[1..11] of real;
i, ier : integer ;
sa, st : string ;
2.3.1 Виведення в Edit
В компонентEdit можна виводити одновимірні масиви, відокремлюючи елементи пропусками чи іншим символом. Кількість елементів масиву, котрі можна побачити, обмежена довжиною компонента Edit на формі вікна.
Приклад фрагменту програми виведення масиву А:
st : =’’; // очищення рядка st
For i : =1 to 11 do // початок циклу за індексами масиву
begin
str(А[i] : 4:1, sa); // перетворення числа на рядкову величину
st : = st+sa +’ ’; // нагромадження рядка значень масиву
end;
Edit1.Text:=st; // присвоєння значень масиву компоненту Edit1
2.3.2 Виведення у Label
В компонентуLabel можна виводити масиви, відокремлюючи елементи пробілами (’ ’) або символами переходу до нового рядка (#13). Виведення одновимірного масиву в рядок організують за тими ж правилами, що й в компоненті Edit, лише в програмі замість Edit1.Text треба писати Label1.Caption (наприклад, Label1.Caption:=st;). Для виведення одновимірного масиву в стовпчик замість символу пробіл (’ ’) треба писати символ #13 ( наприклад, st:=st + sa + #13;).
2.3.3 Виведення у вікно повідомлень
Виведення у вікно діалогу за допомогою функції ShowMessage організовують так само, як і в попередніх прикладах, лише замість оператора присвоєння треба записати оператор виклику процедури. Наприклад, замість оператора
Edit1.Text : = st;
треба записати
ShowMessage(st);
2.3.4 Виведення у Memo
За допомогою компонента Memo можна виводити масиви з будь-якою кількістю елементів, оскільки можна використовувати смуги прокручування (надати властивості ScrollBars значення ssBoth чи ssVertical).
Приклад фрагмента програми виведення масиву А (в стовпчик):
Memo1.Clear; // очищення компонента
For i :=1 to 11 do // початок циклу за індексами масиву
begin str(A[i]:4:1, sa); // перетворення числа в рядкову величину
Memo1.Lines.Add(sа); // виведення одного значення масиву
end;
2.3.5 Виведення у ListBox
Виведення масивів за допомогою компонента ListBox організують так само, як і з компонентом Memo, лише замість Memo треба писати оператор виклику процедури ListBox. Наприклад, замість оператора
Memo2.Lines.Add(sа);
треба записати
ListBox1.Items.Add(sа);
2.4 Введення елементів масиву
Вводити значення масивів можна використовуючи такі компоненти Delphi, як Memo, ListBox, Edit. Як і при виведенні масивів, при введенні слід організовувати цикли змінювання за значенням індексу.
2.4.1 Введення з вікна Memo
За допомогою компонента Memo можна вводити масиви як в процесі виконання програми, так і при конструюванні форми проекта програми через вікно властивості Lines (для переходу до нового рядка при введенні значень треба натиснути клавішу <Enter>).
Приклад фрагмента програми введення значень елементів одновимір-ного масиву А (в кожному рядку по одному числу):
For i:=1 to 11 do // початок циклу за індексами масиву
begin
sa:=Memo1.Lines[i-1]; // читання строкового значення елемента масиву
val(sa,a[i],ier); //перетворення рядкової величини елемента масиву на числову
end;
2.4.2 Введення з ListBox
За допомогою компонента ListBox можна вводити масиви так само, як і з компонентою Memo, лише замість властивості Linesвикористовувати властивістьItems.
2.4.3 Введення з Edit
Введення елементів одновимірного масиву за допомогою компонента Edit (у один рядок через пробіл) потребує створення спеціальної підпрограми введення рядкової величини та перетворення її на масив величин іншого типу. Така підпрограма буде розглянута при вивченні роботи з рядковими величинами.