Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Приклади програм з одновимірними масивами



Приклад 1. Скласти схему алгоритму та проект програми в Delphi для обчислення елементів вектора за формулою

та виведення на форму проекту:

· елементів вектора в компонент Memo;

· суми елементів;

· кількості від’ємних елементів;

· мінімального елемента та його номера за порядком:

· елементів нового вектора (r) в компонент ListBox, який є результатом обміну місцями значень першого та мінімального елементів у векторі (v).

Схеми алгоритмів підпрограм наведено на рисунках 5.1-5.5.

 

 
 

       
   
 
 

 

 

 


Форма проекту із результатами роботи має вигляд:

 
 

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

unit Unit1;

……………………………………..

implementation

{$R *.DFM}

 

Const n=12;

Type vect=array[1..n] of real;

var v,r:vect;i:integer;

 

// процедура обчислення елементів вектора

Procedure elem_v;

begin

for i:=1 to n do

v[i]:=cos(4*i)+exp(-2*i);

end;

 

// процедура обчислення суми елементів вектора

Procedure summa ( var s:real);

begin

s:=0;

for i:=1 to n do

s:=s+v[i];

end;

 

// процедура обчислення кількості від’ємних елементів вектора

Procedure kol_otr(var k:integer);

begin

k:=0;

for i:=1 to n do

if v[i]<0 then k:=k+1;

end;

 

// процедура обчислення мінімального елемента та його номера

Procedure min_el(var min:real;var nom_min:integer);

begin

min:=v[1]; nom_min:=1;

for i:=2 to n do

if v[i]<min then

begin min:=v[i]; nom_min:=i; end;

end;

 

// процедура відгуку на натиснення кнопки “Вихід”

procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end;

 

// процедура відгуку на кнопку “Пуск”

procedure TForm1.Button1Click(Sender: TObject);

var si,sv,sr,ssum,smin:string;

sum, min,pr:real; kol,nom:integer;

begin

elem_v ; // обчислення елементів вектора

// виведення масиву в Memo

for i:=1 to n do

begin str(v[i]:7:3,sv);

str(i:3,si);

Мemo1.Lines.Add(si+sv);

end;

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

summa(sum);

str(sum:7:3,sv);

Edit1.Text:=sv;

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

kol_otr(kol);

Edit2.Text:= IntToStr(kol);

// пошук мінімального елемента

min_el(min, nom);

// виведення результатів в Edit

str(min:7:3,smin);

Edit3.Text:=IntToStr(nom)+'-й елемент '+smin;

// формування масиву результатів із обміном елементів

r:=v;

pr:=r[1]; r[1]:=r[nom];r[nom]:=pr;

// виведення масиву в ListBox

for i:=1 to n do

begin str(r[i]:7:3,sr);

str(i:3,si);

ListBox1.Items.Add(si+sr);

end;

end;

end.

Приклад 2 Скласти схему алгоритму та проект програми в Delphi для введення 15-ти (або менше) цілих чисел з компонента Мемо та вивести їх за зростанням у вікно повідомлень (ShowMessage).

 

Схеми алгоритмів підпрограм наведено на рисунках 5.6-5.7.

 

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

 

 


Форма проекту із результатами роботи програми має вигляд:

 
 

 

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

unit Unit1;

interface

…………………………………………..

implementation

{$R *.DFM}

Type vect=array[1..15]of integer;

 

// процедура сортування вектора за зростанням

procedure sort(var x:vect; n:integer);

var i,j,z:integer;

begin

for i:=1 to n-1 do

for j:=i+1 to n do

if x[i]>x[j] then

begin z:=x[i]; x[i]:=x[j]; x[j]:=z; end;

end;

 

// процедура відгуку на кнопку “Новий масив”

procedure TForm1.Button2Click(Sender: TObject);

begin

Memo1.Clear; edit1.Clear;

end;

// процедура відгуку на натиснення кнопки “Пуск”

procedure TForm1.Button1Click(Sender: TObject);

var a:vect;

i, k:integer;

sa,sr:string;

begin

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

k:=Memo1.Lines.Count; edit1.text:=intToStr(k);

// введення елементів вектора

for i:=1 to k do

begin

sa:= Memo1.Lines[i-1];

a[i]:=StrToInt(sa);

end;

sort(a,k); // сортування вектора

// виведення елементів вектора

sr:='';

for i:=1 to k do

begin sa:=IntToStr(a[i]);

sr:=sr+sa+#13; end;

ShowMessage(sr);

end;

end.

 

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

 

1 Що є масив у програмуванні? Чи є обмеження на розмір масиву?

2 Що є індекси масиву? Які величини можуть бути індексами? Як по-значаються індекси масиву?

3 Які з наведених нижче описувань одновимірних масивів є хибні й чому?

а) Type A : array [ 1..10 ] of integer;

Var B : A;

б) Var B : array [ 1..10 ];

в) Var B=array [ 1..10 ] of integer;

 

4 Запишіть опис одновимірного масиву, який складається з послідовності 25 дійсних чисел.

5 Запишіть опис одновимірного констант-масиву, який складається з послідовності символів вашого прізвища.

6 Які компоненти форми проекту в Delphi для виведення значень одновимірних масивів Ви знаєте?

7 Які компоненти форми проекту в Delphi для введення значень одновимірних масивів Ви знаєте?

8 Запишіть оператори введення масиву 15 цілих чисел за допомогою компонентів Memo та ListBox.

9 Запишіть оператори виведення масиву 17 дійсних чисел у п’ять різних компонентів.

10 Запишіть оператори визначення середнього значення для масиву з 12 дійсних чисел.

 

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

 

1.Скласти схеми алгоритмів, розробити проект форми та програми на алгоритмічною мовою Object Pascal для виконання індивідуального завдання відповідно до варіантів у середовищі Delphi. В проекті передбачити введення елементів масиву з клавіатури через компонент Memo й виведення цих масивів та здобутих результатів на форму в компоненти Edit, Memo, ListBox або Label (за вказівкою викладача).

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

3.При виконанні програми на комп’ютері значення елементів масиву (послідовность чисел) обрати самостійно. Занести результати обчислень до протоколу.

 

6 Варіанти індивідуальних завдань

 

1 В масиві з 10 цілих чисел знайти найбільший елемент і поміняти його місцями з останнім елементом.

2 Упорядкувати за зростанням масив, що містить 12 дійсних чисел.

3 Масив цілих чисел складається з 11 елементів. Здобути новий масив різниць елементів вихідного масиву та їхньго середнього арифметичного.

4 Визначити кількість елементів масиву з 8 дійсних чисел, які перевищують за значенням останній елемент масиву.

5 Масив дійсних чисел складається з 9 елементів. Обчислити суму остачі від цільночисельного ділення елементів масиву на два.

6 Масив цілих чисел містить 10 елементів. Із вихідного масиву здобути новий, розташувавши спочатку всі додатні числа й нулi, після цього від’ємні, зберігаючи порядок їхнього слідування.

7 В масиві з 9 дійсних чисел визначити різницю між добутком усіх додатніх елементів і сумою модулів усіх від’ємних.

8 В масиві з 10 дійсних чисел знайти найменший елемент і поміняти його місцями з першим елементом.

9 Визначити індекси мінімального й максимального еле­ментів масиву, що містить 11 цілих чисел.

10 Масив містить 8 дійсних чисел (додатніх і від’ємних). Розташувати елементи масиву в порядку зростання значень їхніх модулів.

11 В масиві з 11 цілих чисел знайти найбільший і наймен­ший елементи і поміняти їх місцями.

12 Масив містить 10 цілих чисел. Замінити парні за значен­ням (а не за індексом) числа на нулі.

13 В масиві з 8 дійсних чисел обчислити суму елементів, абсолютна величина яких не перевищує 1.5 .

14 Розташувати елементи масиву з 8 цілих чисел у зворот­ному порядку.

15 Масив містить 8 дійсних чисел. Поміняти місцями першу половину масиву з другою.

16 Масив містить 10 цілих чисел. Поміняти місцями еле­менти, які стоять в масиві поряд ( 1 і 2, 3 і 4 тощо ).

17 В масиві з 8 дійсних чисел обчислити частку від ділення суми елементів з непарними індексами на суму елементів з парними індексами.

18 В масиві з 10 цілих чисел обчислити половину суми мінімального й максимального елементів масиву.

19 Масив містить 7 дійсних чисел. Обчислити суму квадра­тів тих чисел, абсолютна величина яких перевищує значення 2.5.

20 Масив містить 11 цілих чисел. Обчислити суму тих еле­ментів масиву, значення яких належать до проміжку [ 3, 6 ].

21 Замінити всі непарні елементи масиву з 10 цілих чисел одиницями (непарні за значенням, а не за індексом ).

22 В масиві з 8 дійсних чисел поміняти місцями мак­симальний елемент масиву із третім елементом.

23 Масив містить 12 цілих чисел. Обчислити різницю між сумою елементів, індекси яких є кратні 3, і сумою елементів, індек­си яких є кратні 4.

24 Масив містить 14 дійсних чисел. Обчислити добуток додатніх елементів, які не перевищують число 4.

25 В масиві з 10 цілих чисел розташувати елементи так: спо­чатку всі від’ємні й нулi, потім додатні, зберігаючи порядок їх слідування.

26 Масив містить 11 цілих чисел. Обчислити суму елементів масиву, значення яких можна поділити на два без остачі.

27 Масив містить 8 дійсних чисел. Визначити кількість тих елементів масиву, значення яких є менше за середнє арифме­тичне елементів масиву.

28 Упорядкувати за спаданням масив з 12 цілих чисел.

29 В масиві з 10 дійсних чисел визначити середнє арифме­тичне додатніх елементів.

30 В масиві з 11 цілих чисел поміняти місцями мінімальний елемент з передостаннім елементом масиву.

 


Лабораторна робота №6

Багатовимірні масиви

 

1 Мета роботи

 

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

 

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

2.1 Вимірність масиву

Кількість індексів визначає вимірність масиву, наприклад, вектори в програмах – це одновимірні масиви, матриці – двовимірні. Кількість індексів у елементів масивів є необмежена. Значення індексів записують після імені масиву в квадратних дужках і відокремлюють комами. Наприклад:

b[4,5], Matr [I,J+1], P['F','K'] - елементи матриць: b45, Matri,j+1, P’F’,’K’;

Masivlarge[i+2*m,True,25,n] - елемент масиву з чотирма індексами Masivlargei+2m,True,25,n.

У пам’яті комп’ютера елементи масиву розміщуються один за одниму такій спосіб, що при переході від молодших адрес до старших найперш змінюється крайній правий індекс. Так само, як і одновимірний масив, багатовимірний масив загалом може займати в пам’яті не більш за 2 Гбайт.

2.2 Описування багатовимірних масивів

Багатовимірні масиви (як і одновимірні) в програмах можна описувати двома способами :

1) Typeім'я_типу = аrray [тип_індексу1, тип індексу2, …] оf тип_елементів_масиву;

Var ім'я_масиву : ім'я_типу;

2)Var ім'я_масиву : аrray[тип_індексу1, тип індексу2, …] оf

тип_елементів;

Можна вказувати індекси іншим способом, наприклад, для двовимірного масиву :

Var ім'я_масиву : аrray[тип_індексу1]of array[тип індексу2] оf

тип_елементів;

Кількість елементів масиву дорівнює добутку кількості елементів кожного індексу.

Приклади описування масивів:

Type Matr1 = array [ 0.. 11,1..4,3..7 ] of boolean;

Matr2 = array [ 1.. 5, 1.. 5 ] of integer;

Matr3 = array [ 'a'..'e', -2..5, 1..8 ] of real;

Matr4 = array [ Boolean ,1..5,1..3,2..5] of char;

Var A : Matr1; B : Matr2; C : Matr3; D : Matr4;

X : array [ 1.. 8, 0.. 5 ] of boolean;

Тут описано :

А - тривимірний масив 240 елементів логічного типу;

B- квадратна матриця величин розміром 5´5

 

B11 B12 … B15

B21 B22 … B25

……………… ,

B51 B52 … B55

 

яка складена з цілих елементів:B[1,1], B[1,2], ... ,B[1,5], B[2,1], B[2,2], ... ,B[2,5],... ,B[5,1], B[5,2], ... ,B[5,5].

C - тривимірний масив 320 елементів дійсного типу;

D - четиривимірний масив 120 елементів символьного типу;

X - матриця елементів логічного типу розміром 8´6 елементів.

Для описування багатовимірних масивів зручно використовувати також типізовані констант-масиви, які дозволяють одночас описати масив й задати його значення в розділі констант:

Constім'я_масиву :аrray [тип_індексів] оf тип_елементів_масиву=

(значення_елементів_масиву);

Значення елементів багатовимірних масивів слід записувати використовуючи вкладені дужки для кожного індексу, враховуючи, що спочатку змінюється останній індекс, за ним – передостанній і так далі, до першого індексу. Так, значення елементів матриць слід перераховувати за рядками. Наприклад, для матриці В розміром 3х4

 

1 2 3 4

R = 5 6 7 8

9 0 –1 –2

слід записати такий оператор:

Соnst R:array[1..3,1..4] of integer = ((1,2,3,4),(5,6,7,8),(9,0, –1,–2));

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

Var F,G : array[1..4,1..4] of real;

після введення або обчислення значень масиву G можна присвоїти такі ж самі значення масиву F одним оператором F:=G;

 

2.3Виведення елементів багатовимірних масивів

Виводити значення масивів можна у файл або на форму, використо-вуючи різноманітні компонети Delphi. При цьому, виводити значення елементів масивів можна лише поелементно, для чого слід зорганізувати цикли змінювання за значеннями кожного індексу. Як зорганізувати виведення масивів у файл, буде розглянуто далі в інших лабораторних роботах. Тепер розглянемо, як організувати виведення багатовимірних масивів на форму за допомогою компонентів Edit, Label, Memo, ListBox, StringGrid та функції ShowMessage.

В наведених прикладах використовуватимемо змінні, які мають такий опис:

Соnst R :array[1..3,1..4] of integer = ((1,2,3,4),(5,6,7,8),(9,–1,–2,–3));

Var B: array [ 1.. 5, 1.. 5 ] of integer;

i,j, ier : integer;

sb, st :string;

2.3.1 В компонентEdit можна виводити лише один рядок значень багатовимірного масиву, відокремлюючи елементи пропусками. Кількість елементів, котрі можна побачити, є обмеженою довжиною компонента Edit на формі вікна.

Приклад фрагмента програми виведення 3-го рядка масиву В:

і:=3; // присвоєння номера рядка

st:=’’; // очищення рядка st,

For j:=1 to 5 do // початок циклу за індексами у рядку масиву

begin

str(В[i,j]:4:1, sb); // перетворення числа на рядкову величину

st:=st+sb +’ ’; // нагромадження рядка значень масиву

end;

Edit1.Text:=st; // присвоєння значень рядка масиву компоненту Edit1

2.3.2 В компонентLabel можна виводити масиви, відокремлюючи елементи пропусками (’ ’) або символами переходу до нового рядка (#13) за тими ж самими правилами, що і в компонент Edit, лише в програмі замість Edit1.Text треба писати Label1.Caption (наприклад, Label1.Caption:=st; ).

Приклад виведення матриці R:

Label1.Caption:= ’’; // очищення компоненти Label

For i:=1 to 3 do // початок циклу за індексами рядків

begin

st:=’’; // очищення рядка st

For j:=1 to 4 do // початок циклу за індексами стовпчиків

begin

str(R[i,j]:2, sb); // перетворення числа на рядкову величину

st:=st+sb +’ ’; // нагромадження рядка значень масиву

end;

Label1.Caption:=Label1.Caption+st+#13; // виведення рядка

end;

2.3.3 Виведення у вікно діалогу за допомогою функції ShowMessage організують так само, як і в попередніх прикладах, лише замість оператора присвоєння треба записати оператор виклику процедури. Наприклад,

ShowMessage(st);.

2.3.4 За допомогою компонента Memo можна виводити масиви з будь-якою кількістю елементів, оскільки можна використовувати лінійки прокручування (надати властивості ScroollBar значення ssBoth або ssVertical).

Приклад виведення значень матриці R:

Memo2.Clear; // очищення компонента

For i:=1 to 3 do // початок циклу за індексами рядків

begin

st:=’’; // очищення рядка st

For j:=1 to 4 do // початок циклу за індексами стовпчиків

begin

str(B[i,j]:2, sb); // перетворення числа на рядкову величину

st:=st+sb +’ ’; // нагромадження рядка значень масиву

end;

Memo2.Lines.Add(sb); // виведення рядка значень масиву

end;

2.3.5 Виведення масивів за допомогою компонента ListBox організують так само, як і з компонентом Memo, лише замість Memo треба писати оператор виклику процедури ListBox. Наприклад, замість оператора

Memo2.Lines.Add(sb);

треба записати

ListBox1.Items.Add(sb); .

2.3.6 Виведення масивів за допомогою компоненту StringGrid(сітка).

Компонент String-Gridмає вигляд таблиці з комірками і розташована на вкладці Additional палітри компонент.

 

Цю компоненту ми будемо використовувати вперше, тому наведемо опис її основних власти-востей (таблиця 6.1):

 

 

Таблиця 6.1 – Властивості компонента StringGrid

Властивість Призначення
Name Ім’я компонента для доступу до його властивостей
ColCount Кількість стовпчиків таблиці
RowCount Кількість рядків таблиці
Cells Масив комірок таблиці. Наприклад, Cells[i,j] – це комірка розташована на перетинанні i-го стовпчика та j-го рядка (нумерація починається з нуля).
FixedCol Кількість фіксованих стовпчиків (для заголовка)
FixedRow Кількість фіксованих рядків (для заголовка)
Options.goEditing Ознака дозволу на редагування вмісту комірки
Options.Tabs Ознака дозволу на переміщення по таблиці за до-помогою клавіші <Tab>
Options.goColSizing Ознака дозволу на змінювання ширини стовпчиків
Options.goRowSizing Ознака дозволу на змінювання висоти рядків

В кожній комірці (Cells) можна розташувати величину рядкового типу, як і в іншіх компонентах, якими ми користувалися раніше (Edit, Label та ін.). Властивості групи Options відкривають подвійним клацанням і надають їм значення true або false. Наприклад для виведення матриці Rкомпоненті StringGrid слід надати властивості, подані в таблиці 6.2.

Таблиця 6.2 – Значення властивостей компоненти StringGrid

Властивість Значення
Name mb
ColCount
RowCount
FixedCol
FixedRow
Options.goColSizing True
Options.goRowSizing True

Приклад фрагмента програми:

For i:=1 to 3 do // цикл фіксованих заголовків рядків

mb.cells[0,i]:=IntToStr(i)+'-й рядок';

For j:=1 to 4 do // цикл фіксованих заголовків стовпчиків

mb.cells[j,0]:=IntToStr(j)+'-й стовпчик';

For i:=1 to 3 do // початок циклу за індексами рядків

begin

For j:=1 to 4 do // початок циклу за індексами стовпчиків

begin

str(R[i,j]:3, sb); // перетворення числа на рядкову величину

mb.cells[j,i]:=sb; // виведення значення масиву в комірку

end;

end;

2.4 Введення багатовимірних елементів масиву

Вводити значення масивів можна використовуючи такі компоненти Delphi, як StringGrid, Memo, ListBox. Як і при виведенні масивів, при введенні слід організовувати цикли змінювання з кожного індексу.

2.4.1. За допомогою компонента StringGridможна вводити масиви лише під час виконання програми.

Наприклад для виведення матриці В компоненту StringGrid слід надати такі властивості:

Властивість Значення
Name mb
ColCount
RowCount
FixedCol
FixedRow
Options.goColSizing True
Options.goRowSizing True
Options.goEditing True
Options.Tabs True

Приклад фрагмента програми:

For i:=1 to 5 do // цикл фіксованих заголовків рядків

mb.cells[0,i]:=IntToStr(i)+'-й рядок';

For j:=1 to 5 do // цикл фіксованих заголовків стовпчиків

mb.cells[j,0]:=IntToStr(j)+'-й стовпчик';

For i:=1 to 5do // початок циклу за індексами рядків

begin

For j:=1 to 5 do // початок циклу за індексами стовпчиків

begin

str(B[i,j]:3, sb); // перетворення числа на строкову величину

mb.cells[j,i]:=sb; // виведення значення масиву в комірку

end;

end;

 

2.4.2 Введення через пропуск елементів багатовимірного масиву за допомогою компонент Memo або ListBox потребує складення спеціальної підпрограми зчитування рядкової величини та перетворення її на масив величин іншого типу. Таку підпрограму буде розглянуто при вивченні роботи з рядковими величинами.




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.