Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_robota_Borland_Delphi_Sosnovskogo_O.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
672.77 Кб
Скачать

ВСТУП

Середовище Delphi містить у собі повний набір візуальних інструментів для швидкої розробки програм (RAD - rapid application development), що підтримує розробку інтерфейсу користувача та підключення до корпоративних баз даних. VCL - бібліотека візуальних компонентів, що містить стандартні об’єкти побудови інтерфейсу користувача, графічні об’єкти, діалоги, об’єкти мультимедіа, об’єкти керування базами даних, об’єкти керування файлами тощо.

Саму розробку програми можна поділити на дві частини: візуальну та алгоритмічну.

У Delphi візуальна частина просто “ліпиться”, як скульптор з кусків глини ліпить фігуру. Центром “ліплення”, полотном, де будуть розгортатись всі події програми є форма (Form), а вже на формі “ліпимо” компоненти, які є доступними у Delphi.

Найпростіша програма складається з однієї форми, складні – з 2 і більш

У Delphi розробляється проект програми. При цьому автоматично створюється кілька файлів:

project1.dpr – delphi project – саме ядро програми – текстовий файл де описана головна програма, що викликає всі компоненти.

unit1.pas – текстовий файл, де описаний алгоритм всіх подій, що відбуватимуться з елементами (компонентами) форми. Ця частина у Delphi носить назву модуль (unit).

unit1.dfm – файл опису розташування компонентів на полотні формі.

Таким чином, при написанні програми, алгоритмічна частина робота ведеться з pas–файлом. dpr–файл керується автоматично самим проектом при роботі з компонентами інтерфейсу.

Спочатку вважатимемо, що кожній формі відповідає один модуль. Ще раз зауважимо, що у формі створюється інтерфейс, тобто “ліпляться” компоненти, а у модулі описуються події, що можуть відбуватись з цими компонентами

При запуску або створенні нового проекту Delphi автоматично створює pas – файл форми з базовими елементами, необхідними для роботи проекту.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm)

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Implementation

{$R *.DFM}

end.

Слово Unit говорить про те, що це модуль.

Interface – блок програми, в якому визначаються типи, змінні, константи, процедури та функції, що доступні іншим модулям.

Uses – перераховані всі зовнішні (у даному випадку стандартні) модулі, які необхідні даному модулю в процесі роботи.

Type TForm1 = class(TForm) – створена форма належить до класу Tform. Tform – абстрактний об’єкт, у якому описані всі події та можливості керування всіма елементами форми. Він є спадкоємцем класу Tform, тобто, успадковує його властивості та методи, додаючи до них власні.

С ередовище програмування Delphi

1

4

3

2

5

Рисунок 1

Основні елементи інтерфейсу системи Delphi наступні:

  1. Головне вікно – Delphi 7 – Progect1 (ім’я проекту);

  2. Вікно проектувальної форми – це головне місце, де відбувається конструювання програми з компонентів - Form1;

  3. Вікно редактора властивостей об’єкта (інспектор об’єктів) – Object Inspector;

  4. Вікно перегляду списку об’єктів (провідник) – Object Tree View;

  5. Вікно редактора коду – Unit1.pas.

1 Структура розгалуження

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

Розгалуження – це алгоритмічна конструкція, де перевіряється умова (значення логічного виразу), і залежно від її істинності чи хибності виконується та чи інша серія команд. Часто використовувана конструкція для розгалуження коду

If  умова then блок інструкцій else блок інструкцій 2;

Дослівно можна перекласти як “Якщо умова виконується, тоді виконати блок інструкцій, інакше виконати блок інструкцій 2”. Приведу простий приклад — якщо була команда робочий день закінчений, тоді працівники ідуть додому, інакше всі зостаються на робочий місцях. В даному випадку «команда робочий день закінчений» це умова. Будь-яка умова може мати тільки два значення  — True(Правда або Істина) і False(Неправда або Хибний). Отже, якщо умова виконується і ми отримуємо значення True, тоді “ тоді працівники ідуть додому ”, якщо ж умова повертає значення False, то “ зостаються на робочий місцях ”.

Блоки операцій можуть містити декілька команд, а не обов’язково одну.

Звичайно у програмі умову і блоки_інструкцій треба буде описувати згідно правил програмування, але основне зрозуміти сенс логічної конструкції.

If умова then блок інструкцій;

Скорочена версія конструкції без оператора else.

Конструкція Case використовується для розгалуження багатьох варіантів

Case умова of

Значення 1: блок інструкцій 1;

Значення 2: блок інструкцій 2;

Значення N: блок інструкцій N;

End;

Якщо “умова “ збіглась з одним із значень, тоді виконується відповідний блок інструкцій.

Конструкція,наприклад, може використовуватись для створення «світлофора», де умова була б колір,а значення відповідно — червоний,жовтий, зелений. Для кожного кольору виконується свій блок інструкцій.

2 Аналіз завдання та розробка методу вирішення задач

Масив— впорядкований набір фіксованої кількості однотипних елементів, що зберігаються в послідовно розташованих комірках оперативної пам'яті, мають порядковий номер і спільне ім'я, що надає користувач.

Характеристика масиву:

  • Розмірність — кількість індексів елемента (одновимірний, двовимірний, багатовимірний)

  • Розмір — загальна кількість елементів у масиві.

  • За типом поділяється на числовий та символьний.

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

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

Масив називається двовимірним, якщо для завдання місцеположення елемента в масиві необхідно вказати значення двох індексів.

Запам’ятайте, що у двовимірних масивах перший індекс завжди вказує на номер рядка, а другий – на номер стовпчика в цьому рядку!

Загальний вигляд опису масивів:

<ім’я змінної>: array [<межі зміни індексів>] of <тип>;

Наприклад:

Var

A: array [1..10] of real;

B: array [1..100,1..100] of byte;

C:array [1..100] of array [1..100] of byte.

При виконанні завдання я використовував іменовані константи для

оголошення масивів розміру n × n, де n = ( k + g ) mod 3+6, (k – номер студента в журналі групи, g − номер групи (1 або 2)).

const

k=22;

g=1;

n=9;

var

A:array[1..n, 1..n] of integer;

B:array[1..n] of integer;

Наступним етапом є введення елементів масиву – це процес одержання значень елементів масиву. Існує декілька варіантів організації введення масиву: з використанням генератора випадкових чисел, за формулою, з використанням компонентів Memo, StringGrid і т.д.

Виходячи з завдання курсової роботи ми вводили елементи масиву А(n n) генеруючи числа випадковим чином з проміжку [-10g, 10k].

For i:=1 to n do

For j:=1 to n do

A[i, j]:= RendomRange(-10g, 10k);

З масиву, що відповідає матриці А (n n) утворили одновимірний масив В розмірністю n елементи якого є сумою непарних елементів відповідного рядка:

For i:=1 to n do

Begin

S:=0;

For j:=1 to n do

if A[i, j] mod 2<>0 then S:=S+a[i, j];

B[i]:=S;

End;

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

Для використання елементів масиву необхідно вказати ім’я масиву та індекселемента.

Виконуючи завдання 2, що полягає у пошуку максимального по модулю елемента масиву серед выдэмних А (n n) використовуємо алгоритм простого перебору:

for i:=1 to n do

for j:=1 to n do

if(a[i,j]<0) and (max<abs(a[i,j]))then max:=abs(a[i,j]);

Враховуючи те, що масиви є математичним об’єктом допускаються алгебраїчні операції над їх елементами.

Наведемо приклад опрацювання елементів одновимірних масивів В та С розмірності n для виконання обчислень в1с1+ в2с2+…+вncn:

S:=0;

For i:=1 to n do

S:=S+B[i]*C[i];

Передбачається, що сортовані дані розміщуються в масиві записів, кожна з яких містить ключ (він визначає порядок сортування) і деякі супутні дані. Передбачається також наявність функції порівняння двох ключів (оператора "менше" або "більша або дорівнює"). Супутні дані ніяк не впливають на порядок сортування і можуть не розглядатися. Дійсно, можна визначити другий масив цілих, елементи якого вказують на елементи першого масиву, потім сортувати тільки його:

Сортування (sortіng) − процес, що дозволяє впорядкувати безліч подібних даних у зростаючому або спадаючому порядку.

Алгоритми сортування добре досліджені і вивчені. Хоча деякі методи в середньому можуть бути краще інших, жоден з методів не буде ідеальним

для всіх ситуацій, тому кожен програміст повинен мати у своєму

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

Один з найпростіших методів сортування працює наступним чином: знаходимо найменший елемент в масиві і обмінюємо його з елементом знаходяться на першому місці. Потім повторюємо процес з другої позиції у файлі і знайдений елемент обмінюємо з другим елементному і так далі поки весь масив не буде відсортований. Цей метод називається сортування вибором, оскільки він працює, циклічно вибираючи найменший з елементів, що залишилися, як показано на малюнку 1. При першому проході символ пропуску йде на перше місце, обмінюючись з буквою 'П'. На другому проході елемент 'В' обмінюється з елементом 'Р' і так далі.

Наступна програма дає повну реалізацію цього процесу. Для кожного i від 1 до N-1, вона обмінює найменший елемент з a [i .. N] з a [i]:

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

Цей метод - один з найпростіших, і він працює дуже добре для невеликих файлів. Його «внутрішній цикл» складається з порівняння a [i] <a [min] (плюс код необхідний для збільшення j та перевірки на те, що він не перевищив N), що навряд чи можна ще спростити.

Крім того, хоча сортування вибором є методом «грубої сили», він має дуже важливе застосування: оскільки кожен елемент пересувається не більше ніж раз, то він дуже гарний для великих записів з маленькими ключами.

Метод сортування вставкою, майже настільки ж простий, що і сортування вибором, але набагато більш гнучкий. Цей метод часто використовують при сортуванні карток: беремо один елемент і вставляємо його в потрібне місце серед тих, що ми вже обробили (тим самим залишаючи їх отортірованнимі).

Розглянутий елемент вставляється в позицію за допомогою пересування більшого елемента на одну позицію вправо і за розміщенням меншого елемента в звільнилася позицію, як показано на малюнку 2. Так 'І' при третьому кроці менше всіх інших відсортованих елементів, тому ми «топимо» його в початок масиву. 'М »більше' І 'але менше за всіх інших, тому ми поміщаємо його між' І 'і' П ', і так далі.

Цей процес реалізований в наступній програмі. Для кожного i від 2 до N, подмассів a [1 .. i] сортується за допомогою приміщення a [i] у відповідну позицію серед уже відсортованих елементів:

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

Проте є ще одна важлива деталь: програма insertion не завжди працює, оскільки while може проскочити за лівий край масиву, коли v - найменший елемент масиву. Щоб виправити ситуацію, ми поміщаємо «сторожовий» ключ в a [0], роблячи його, по крайней мере, не більше, ніж найменший ключ масиву. Сторожові елементи повсюдно використовуються в ситуаціях подібних до цієї для запобігання додаткової перевірки (у даному випадку j> 0), що майже завжди допомагає у внутрішніх циклах.

Елементарний метод сортування, який часто дають на вступних заняттях - це бульбашкове сортування: Завдання, що стоять поруч елементи масиву обмінюються місцями, до тих пір, поки зустрічаються невідсортовані пари. Реалізація цього методу дана нижче.

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

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

Наведемо приклад як сортується одновимірний масив методом вставки та двох вимірний масив методом обміну.

Сортування одновимірного масиву методом вставки:

for i:=1 to n-1 do

begin

m_in:=i;

for j:=i+1 to n do

if c[j]<c[m_in] then m_in:=j;

t:=c[i];

c[i]:=c[m_in];

c[m_in]:=t;

end;

Сортування двовимірного масиву методом обмінного сортування:

for k:=1 to n do

for i:=1 to n-1 do

if Y[i]>Y[i+1]then

begin

t:=Y[i];

Y[i]:=Y[i+1];

Y[i+1]:=t;

for j:=1 to n do

begin

t:=D[i,j];

D[i,j]:=D[i+1,j];

D[i+1,j]:=t;

end;

Під виведенням розуміють вивід на екран монітора (у діалогове вікно) значень елементів масиву. Для даного процесу зазвичай використовують компоненту Memo та StringGrid.

У нашому випадку - виведення елементів одно та двовимірного масиву використовуючи компоненту StringGrid.

Одновимірний масив:

for i:=1 to n do

В[i]:=StrToInt(StringGrid1.Cells[0,i-1]);

Двовимірний масив:

for i:=1 to n do

for j:=1 to n do

StringGrid1.Cells[j,i]:=IntToStr(A[i,j]);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]