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

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст

Введення

1. Теоретична частина. Керуючі структури мови Delphi

2. Аналіз завдання

3. Блок - схема алгоритму

4. Керівництво користувача

4.1 Системні вимоги

4.2 Структура програми

4.3 Інструкція користувача

5. Тестовий приклад

Висновок

Список використаної літератури

Додаток

Введення

Delphi - середовище візуального програмування. Візуальне програмування базується на об'єктно-орієнтованої технології. Структурною одиницею візуального програмування, основним «будівельним елементом» для програми є компонент.

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

Як і будь-який клас, компонент характеризується полями, властивостями і методами. У Delphi замість полів зазвичай використовуються властивості. Властивість можна розглядати як різновид поля класу, звернення до якого автоматично призводить до виклику методу читання / запису поля. (Нагадаємо, що гарним стилем в об'єктно-орієнтованому програмуванні вважається звернення до полів тільки через методи).

Крім того, компонент має перелік подій, на які він здатний реагувати (наприклад, натискання клавіші, клацання кнопкою миші та ін.) Завдання програміста - написати обробники подій, що відповідають за реакцію компонента на певну подію.

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

1. Теоретична частина. Керуючі структури мови Delphi

На практиці рідко зустрічаються завдання, алгоритм вирішення яких є лінійним. Часто виявляється, що алгоритм рішення навіть елементарної задачі не є лінійним. Наприклад, нехай треба обчислити за формулою струм в електричному ланцюзі. Якщо припустити, що користувач завжди буде вводити вірні дані, то алгоритм вирішення цієї задачі дійсно є лінійним. Однак покладатися на те, що користувач буде вести себе так, як треба програмі, не слід. Формула розрахунку передбачає, що величина опору не дорівнює нулю. А що буде, якщо користувач введе 0? Відповідь проста: виникне помилка «Поділ на нуль», і програма аварійно завершить роботу. Можна, звичайно, покласти відповідальність за це на користувача, але краще внести зміни до алгоритму рішення (рис. 1), щоб розрахунок виконувався лише в тому випадку, якщо введені вірні дані.

Рис. 1. Два варіанти алгоритму розв'язання однієї задачі

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

Умова

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

Величина опору дорівнює нулю?

Відповідь правильний?

Сума покупки більше 300 рублів?

У програмі умова - це вираз логічного типу (Boolean), яке може приймати одне з двох значень: True (істина) або False (брехня).

Просте умова складається з двох операндів і оператора порівняння. У загальному вигляді умова записується таким чином: Оn1 Оператор On2

де:

On1 і ОП2 - операнди умови, в якості яких може виступати змінна, константа, функція чи вираз;

Оператор - оператор порівняння.

У мові Delphi є шість операторів порівняння, які наведені в табл. 1.

Таблиця 2.1. Оператори порівняння

Оператор

Опис

Результат порівняння

>

Більше

True, якщо перший операнд більше другого, інакше False

<

Менше

True, якщо перший операнд менше другого, інакше False

=

Так само

True, якщо перший операнд дорівнює другому, інакше False

<>

Не дорівнює

True, якщо перший операнд не дорівнює другому, інакше False

> =

Більше або дорівнює

True, якщо перший операнд більше або дорівнює другому, інакше False

<=

Менше або дорівнює

True, якщо перший операнд менше або дорівнює другому, інакше False

Нижче наведені приклади умов: Summa <1000 Score> = HBound Sim = Chr (13).

У першому прикладі операндами умови є змінна і константа. Значення цієї умови залежить від значення змінної Summa. Умова буде вірним і, отже, мати значення True, якщо значення змінної Summa менше, ніж 1000. Якщо значення змінної Summa більше або дорівнює 1000, то значення цієї умови буде False.

У другому прикладі в якості операндів використовуються змінні. Значення цієї умови буде True, якщо значення змінної Score більше або дорівнює значенню змінної HBound.

У третьому прикладі в якості другого операнда використовується функція. Значення цієї умови буде True, якщо у змінній Sim знаходиться символьний код клавіші <Enter>, рівний 13.

При записи умов слід звернути особливу увагу на те, що операнди умови повинні бути одного типу або, якщо тип операндів різний, то тип одного з операндів може бути приведений до типу іншого операнда. Наприклад, якщо змінна Key оголошена як integer, то умова Key = Chr (13) синтаксично невірне, тому що значення повертається функцією Chr має тип char (символьний).

Під час трансляції програми при виявленні невірного умови компілятор виводить повідомлення: incompatible types (несумісні типи).

З простих умов за допомогою логічних операторів: and - "логічне І», or - «логічне АБО» і not - «заперечення» можна будувати складні умови.

У загальному вигляді складну умову записується таким чином: условіе1 оператор условіе2

де:

условіе1 і условіе2 - прості умови (висловлення логічного типу);

оператор - оператор and або or.

Наприклад:

(Ch> = 0 ") and (ch <= '9 ')

(Day = 7) or (day = 6)

(Forml. Editl. Text <> '') or (Forml. Edit2. Text <> «)

Forml. CheckBoxl. Checked and (Forml. Editl. Text <> «)

Результат виконання логічних операторів and, or і not представлений в табл. 2.

Таблиця 2. Виконання логічних операцій

Op1

Op2

Opt and Op2

Op1 or Op2

not Op1

False

False

False

False

True

False

True

False

True

True

True

False

False

True

False

True

True

True

True

False

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

Наприклад, нехай умову надання знижки сформульовано таким чином: «Знижка надається, якщо сума покупки перевищує 100 крб. і день покупки - воскресіння », Якщо день тижня позначений як змінна Day цілого типу, і рівність її значення семи відповідає неділі, то умова надання знижки можна записати: (Summa> 100) and (Day = 7).

Якщо умова надання знижки доповнити тим, що знижка надається в будь-який день, якщо сума покупки перевищує 500 крб., То умову можна записати: ((Summa> 100) and (Day = 7)) or (Summa> 500).

Вибір

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

Інструкція if

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

У загальному вигляді інструкція if записується так:

if умова then

begin

/ / Тут інструкції, які треба виконати,

/ / Якщо умова істинна.

end

else

begin

/ / Тут інструкції, які треба виконати, / / якщо умова помилкова. end;

Зверніть увагу, що перед else (після end) крапка з комою не ставиться.

Виконується інструкція if наступним чином:

1. Обчислюється значення умови (умова - вираз логічного типу, значення якого може бути одно True або False).

2. Якщо умова істинна (значення виразу умова одно True), то виконуються інструкції, наступні за словом then (між begin і end). На цьому виконання операції if закінчується, тобто інструкції, наступні за else, не будуть виконані.

Якщо умова помилкова (значення виразу умова одно False), то виконуються інструкції, наступні за словом else (між begin і end).

На рис. 2 представлений алгоритм, відповідний інструкції if-tnen-else.

Рис. 2. Алгоритм, реалізований інструкцією if-then-else

Наприклад, якщо змінна t позначає тип з'єднання опорів в електричному ланцюзі (t = 1 відповідає послідовному з'єднанню, t = 2 - паралельного), a r1 і r2 - величини опорів, то наведена нижче інструкція if здійснює вибір формули, за якою буде виконано розрахунок.

if t = l then

begin

z: = r1 + r2;

end

else

begin

z: = (r1 + r2) / (r1 * r2);

end;

Якщо в інструкції if між begin і end знаходиться тільки одна інструкція, то слова begin і end можна не писати.

Наприклад, інструкцію

if otv = 3

then

begin

prav: = prav +1;

end

else

begin

ShowMessage ('Помилка');

end;

можна переписати так:

if otv = 3 then

prav: = prav + l

else

ShowMessage ('Помилка');

Якщо будь-яка дія має бути виконано тільки при виконанні певної умови і пропущено, якщо ця умова не виконується, то інструкція if може бути записана так:

if умова then

begin

{Інструкції, які треба виконати, якщо умова виконується, істинно} end

На рис. 3 представлено алгоритм, відповідний інструкції if-then.

Рис. 3. Алгоритм, реалізований інструкцією if-then

Наприклад, інструкція

if n = m

then c: = c + l;

збільшує значення змінної з тільки в тому випадку, якщо значення змінних n та m рівні.

Інструкція case

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

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

case Селектор of список1:

begin

{Інструкції 1} end; список2:

begin

{Інструкції 2} end; спісокМ:

begin

{Інструкції N}

end;

else

begin

(Інструкції)

end;

end;

де:

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

Список N - список констант. Якщо константи представляють собою діапазон чисел, то замість списку можна вказати першу і останню константу діапазону, розділивши їх двома точками. Наприклад, список 1, 2, 3, 4, 5, 6 може бути замінений діапазоном 1 .. 6.

Виконується інструкція case наступним чином:

1. Спочатку обчислюється значення виразу-селектора.

2. Значення виразу-селектора послідовно порівнюється з константами зі списків констант.

3. Якщо значення виразу збігається з константою зі списку, то виконується відповідна цього списку група інструкцій. На цьому виконання інструкції САSЕ завершується.

4. Якщо значення виразу-селектора не співпадає ні з однією константою з усіх списків, то виконується послідовність інструкцій, наступна за else.

Синтаксис інструкції case дозволяє не писати else і відповідну послідовність інструкцій. У цьому випадку, якщо значення виразу не збігається ні з однією константою з усіх списків, то виконується наступна за case інструкція програми.

На рис. 4 наведено алгоритм, реалізований інструкцією case.

Рис. 4. Алгоритм, реалізований інструкцією case

Цикли

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

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

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

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

У програмі цикл може бути реалізований за допомогою інструкцій for, while і repeat.

Інструкція for

Розглянемо таку задачу. Нехай потрібно написати програму, яка обчислює значення функції у = 5х2 - 7 у точках -1, -0.5, 0, 0.5 і 1

(Таблиця повинна бути виведена в полі мітки форми додатку). Процедура, що забезпечує рішення поставленого завдання, може виглядати так:

Процедура TForm1. ButtonlClick (Sender: TObject); var

в: real; / / значення функції

x: real; / / аргумент функції

dx: real; / / прирощення аргументу

st: string; / / зображення таблиці

begin

st :='';

x: = -1; dx: = 0.5;

в: = 5 * х * х -7;

st: = st + FloatToStr (x) + '' + FloatToStr (y) + chr (13);

x: = x + dx;

в: = 5 * х * х -7;

st: = st + FloatToStr (x) + * '+ FloatToStr (y) + chr (13);

x: = x + dx;

в: = 5 * х * х -7;

st: = st + FloatToStr (x) + * '+ FloatToStr (y) + chr (13);

x: = x + dx;

в: = 5 * х * х -7;

st: = st + FloatToStr (x) + '' + FloatToStr (y) + chr (13);

x: = x + dx;

в: = 5 * х * х -7;

st: = st + FloatToStr (x) + '' + FloatToStr (y) + chr (13);

x: = x + dx;

Label1. Caption: = st;

end;

З тексту процедури видно, що група інструкцій

в: = 5 * х * х -7;

st: = st + FloatToStr (x) + '' + FloatToStr (y) + chr (13);

x: = x + dx;

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

Скориставшись інструкцією for, наведену процедуру можна переписати таким чином:

Процедура TForm1. ButtonlClick (Sender: TObject);

var

в: real; / / значення функції

x: real; / / аргумент функції

dx: real; / / прирощення аргументу

st: string; / / зображення таблиці

i: integer; / / лічильник циклів

begin

st :=''; x: = -1; dx: = 0.5;

for i: = l to 5 do begin

в: = 5 * x * x -7;

st: = st + FloatToStr (x) + '' + FloatToStr (y) + chr (13); x: = x + dx; end;

Label1. Caption: = st;

end;

Другий варіант процедури, по-перше, вимагає менше зусиль при наборі, по-друге, процедура більш гнучка: для того щоб збільшити кількість рядків у виведеної таблиці, наприклад до десяти, достатньо в рядку for i: = 1 to 5 do число 5 замінити на 10.

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

У загальному вигляді інструкція for записується таким чином: for лічильник: = нач_знач to кон_знач do begin

/ / Тут інструкції, які треба виконати кілька разів end

де:

лічильник - мінлива-лічильник числа повторень інструкцій циклу;

нач_знач - вираз, що визначає початкове значення лічильника циклів;

кон_знач - вираз, що визначає кінцеве значення лічильника циклів.

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

Кількість повторень інструкцій циклу можна обчислити за формулою

(Кон_знач - нач_знач + l).

Приклади:

for i: = l to 10 do begin

label1.caption: = label1.caption + '*'; end;

for i: = 1 to n do s: = s + i;

Примітка

Якщо між begin і end знаходиться тільки одна інструкція, то слова begin і end можна не писати.

Алгоритм, відповідний інструкції for, представлений на рис. 5. Зверніть увагу, що якщо початкове значення лічильника більше кінцевого значення, то послідовність операторів між begin і end не буде виконана жодного разу.

Крім того, після кожної виконання інструкцій тіла циклу лічильник циклів збільшується автоматично.

Змінну-лічильник можна використовувати всередині циклу (але ні в якому разі не змінювати).

Рис. 5. Алгоритм інструкції for

Інструкція while

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

Типовими прикладами використання циклу while є обчислення із заданою точністю, пошук в масиві або в файлі.

У загальному вигляді інструкція while записується таким чином:

while умова do begin

/ / Тут інструкції, які треба виконати кілька разів

end

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

1. Інструкція while виконується таким чином:

2. Спочатку обчислюється значення виразу умова.

3. Якщо значення виразу умова одно False (умова не виконується), то на цьому виконання інструкції while завершується.

4. Якщо значення виразу умова одно True (умова виконується), то виконуються розташовані між begin і end інструкції тіла циклу. Після цього знову перевіряється виконання умови. Якщо умова виконується, то інструкції циклу виконуються ще раз. І так до тих пір, поки умова не стане хибним (False).

Алгоритм, відповідний інструкції while, представлений на рис. 6.

Увага!

Для того щоб інструкції циклу while, які знаходяться між begin і end, були виконані хоча б один раз, необхідно, щоб перед виконанням інструкції while значення виразу умова була істинно.

Рис. 6. Алгоритм інструкції while

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

Інструкція repeat

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

У загальному вигляді інструкція repeat записується таким чином:

repeat

/ / Інструкції unti1 умова

де умова - вираз логічного типу, визначальна умова завершення циклу.

Інструкція repeat виконується таким чином:

1. Спочатку виконуються знаходяться між repeat і until інструкції тіла циклу.

2. Потім обчислюється значення виразу умова. Якщо умова помилкова (значення виразу умова одно False), то інструкції тіла циклу виконуються ще раз.

3. Якщо умова істинна (значення виразу умова одно True), то виконання циклу припиняється.

Таким чином, інструкції циклу, що знаходяться між repeat і unti1, виконуються до тих пір, поки умова помилкова (значення виразу умова
одно False).

Алгоритм, відповідний інструкції repeat, представлений на рис. 7.

Рис. 7. Алгоритм, відповідний інструкції repeat

Увага!

Інструкції циклу, що знаходяться між repeat і until, виконуються як мінімум один раз. Для того щоб цикл завершився, необхідно, щоб інструкції циклу, що розташовуються між repeat і until, змінювали значення змінних, що входять у вираз умова.

Інструкція goto

Інструкції if і case використовуються для переходу до послідовності інструкцій програми в залежності від деякої умови. Тому їх іноді називають інструкціями умовного переходу. Крім цих інструкцій управління ходом виконання програми існує ще одна - інструкція безумовного переходу goto.

У загальному вигляді інструкція goto записується таким чином:

goto Мітка

де мітка - це ідентифікатор, що знаходиться перед інструкцією, яка повинна бути виконана після інструкції goto.

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

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

У літературі з програмування можна зустріти судження про неприпустимість застосування інструкції goto, оскільки вона призводить до заплутаності програм. Однак з категоричністю таких тверджень погодитися не можна. У деяких випадках застосування інструкції goto цілком виправдано.

2. Аналіз завдання

Для вирішення завдання необхідні такі вихідні дані:

  • число рядків матриці - цілочисельний значення;

  • число стовпців матриці - цілочисельний значення;

  • значення елементів матриці - цілочисельні значення.

Приймемо обмеження на розмірність матриці - число рядків і стовпців не повинно перевищувати 10.

Покроковий алгоритм вирішення задачі.

Вихідні дані:

n, m - число рядків і стовпців відповідно;

a ij - елементи матриці;

З ij - матриця кольорів кожного елемента;

с - початковий колір шару;

d i - масив, складений з елементів шарів;

k - число елементів в шарі;

f n - індекс шару (номер рядка та стовпця з якого він починається), початкове значення 1.

1) Формування шарів.

  1. Розміщуємо в d елементи f n - го рядка;

  2. Розміщуємо в d елементи m - го стовпця починаючи з (f n + 1) - го рядка по n - й рядок;

  3. Розміщуємо в d елементи n - го рядка, починаючи з m - 1 стовпця за f n стовпець;

  4. Розміщуємо в d елементи f n - го стовпця починаючи з n - 1 го рядка по f n + 1 рядок;

У відповідні елементи матриці квітів З поміщаємо значення с.

2) Зрушуємо елементи масиву d на 1 позицію вправо.

  1. запам'ятовуємо значення останнього елемента t = d k;

  2. виконуємо присвоєння d i = d i -1 для i = k, 2;

  3. поміщаємо останній елемент на місце першого d 1 = t.

3) Змінюємо значення:

f n = f n + 1,

n = n - 1,

m = m - 1

і повторюємо кроки алгоритму з 1 по 3, поки n> 2 і m> 2.

3. Блок - схема алгоритму



4. Керівництво користувача

4.1 Системні вимоги

Для функціонування програми необхідний персональний комп'ютер з наступними характеристиками:

  • процесор CPU - не гірше Pentium;

  • оперативна пам'ять RAM - не менше 16 Мб;

  • вільний простір на жорсткому диску - не менше 500 Кбайт;

  • стандартна миша для COM порту;

  • стандартна IBM PC / АT клавіатура;

Програма працює під управлінням операційної системи Windows 95/98/2000/ХР. Наявність середовища візуального програмування для роботи програми не є обов'язковим.

4.2 Структура програми

Програма складається з наступних програмних модулів:

unit 1 - головний інтерфейсний модуль;

ms - проект.

Розглянемо склад головного модуля.

У ньому визначено два користувальницьких типу даних:

mas - одновимірний масив цілих чисел з 100 елементів;

mat - двовимірний масив цілих чисел розмірності 10 '10 пунктів.

Кольори шарів визначає константа - масив елементів TColor - cc.

Найбільш значимі змінні програми.

mf, тип string - ім'я файлу з матрицею;

c - двовимірний масив квітів шарів з елементами типу TColor;

a, тип mat - задана матриця;

k, тип integer - лічильник шарів;

d, тип mas - одновимірний масив з елементами шару;

n, m, тип integer - число рядків і стовпців матриці;

f, тип textfile - текстовий файл з якого зчитується матриця.

Процедури користувача.

Sdvig (d, n)

Призначення: зрушення масиву за годинниковою стрілкою.

Параметри:

d, тип mas - одновимірний масив з елементами шару;

n, тип integer - число елементів масиву;

SloiColor (fn, n, m, sd)

Призначення: визначення кольорів шарів і їх зсув.

Параметри:

fn, тип integer - номер визначається шару;

n, m, тип integer - число рядків і стовпців матриці;

sd, тип boolean - логічна змінна, має значення True, якщо проводиться визначення кольорів і зрушення елементів шару і False - якщо тільки визначається колір.

MQuitClick

Призначення: вихід з програми.

MOpenFileClick

Призначення: відкрити файл даних.

FillGrid (a, n, m)

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

Параметри:

a, тип mat - задана матриця;

n, m, тип integer - число рядків і стовпців матриці;

MRunClick

Призначення: керуюча процедура зсуву шарів матриці.

Рис. 8. Вікно програми

4.3 Інструкція користувача

Розглянемо послідовність дій користувача при використанні програми для зрушення елементів матриці. Йому необхідно запустити на виконання програму, яка називається «ms. Exe».

Для зручності запуску програми під керуванням Microsoft Windows, можна зробити наступне: клацніть правою кнопкою миші по Робочому Столу Windows Þ в меню оберіть Створити Þ Ярлик Þ у вікні у Командного рядку набираємо шлях доступу до програми і натискаємо кнопку Далі Þ у наступному вікні назвемо наш ярлик Зрушення і натискаємо кнопку Далі Þ виберіть іконку і натисніть кнопку Готово. Тепер у Вас на робочому столі знаходиться ікона програми.

Після запуску користувач побачить на екрані вікно, зображене на малюнку 8.

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

Файл. Містить підпункти:

  • Відкрити - завантаження матриці з текстового файлу;

  • Вихід - закінчити роботу з програмою.

Обробка, містить один підпункт Почати - запуск алгоритму зсуву елементів матриці.

Іншу частину вікна займає область виведення матриці.

Порядок роботи:

  • вибрати файл з вихідними даними Файл à Відкрити;

  • виконати команду Обробка à Почати для зрушення елементів шарів.

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

1 рядок - два цілочисельних значення n, m з діапазону 1 ... 10 розділені пропуском - число рядків і стовпців матриці відповідно;

У наступних n рядок розташований сама матриця, m цілочисельних значень в стрічці, роздільник - пробіл.

Необхідно пам'ятати, що обробці підлягають матриці максимальної розмірності 10 '10 пунктів.

5. Тестовий приклад



Висновок

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

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

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

У теоретичній частині роботи мною були наведені матеріали про програмування в середовищі Delphi.

Список використаної літератури

  1. Бобровський С.І. Delphi 7. Початковий курс: Навчальний посібник - М.: Діалог - МІФІ, 2002. -416 С.

  2. Гофман В.Е. Delphi 7. - Спб.: BHV Петербург, 2003. -488 С.

  3. Лішнер Рей. Delphi. Довідник. - М.: БЕК, 2003. -715 С.

  4. Поган А.М., Царенко Ю.А. Програмування в Delphi. Просто як двічі по два. - М.: Нолидж, 2004. -557 С.

Додаток. Лістинг програми

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, Grids, StdCtrls;

type

mas = array [1 .. 100] of integer;

mat = array [1 .. 10, 1 .. 10] of integer;

TForm1 = class (TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

MOpenFile: TMenuItem;

N4: TMenuItem;

MQuit: TMenuItem;

N6: TMenuItem;

MRun: TMenuItem;

OpenDialog1: TOpenDialog;

StringGrid1: TStringGrid;

procedure MQuitClick (Sender: TObject);

procedure MOpenFileClick (Sender: TObject);

procedure MRunClick (Sender: TObject);

procedure FillGrid (a: mat; n, m: integer);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

implementation

{$ R *. dfm}

const

cc: array [1 .. 10] of TColor = (clBlue, clFuchsia, clGreen,

clLime, clMaroon, clNavy, clOlive,

clRed, clTeal, clYellow);

var

mf: string; / / ім'я файлу з матрицею

c: array [1 .. 10, 1 .. 10] of TColor; / / масив квітів верств

a: mat; / / завдання матриця

k: integer; / / лічильник верств

procedure Sdvig (var d: mas; n: integer);

/ / Зрушення масиву за годинниковою стрілкою

var

i, l: integer;

begin

if n = 0 then Exit;

l: = d [n];

for i: = n downto 2 do

d [i]: = d [i - 1];

d [1]: = l;

end;

procedure SloiColor (fn, n, m: integer; sd: boolean);

/ / Визначення квітів шарів і їх зсув

var

i, j: integer;

d: mas;

begin

if ((n> = 2) or (m> = 2)) and ((fn <n) and (fn <m)) then

begin

j: = 0;

for i: = fn to m do

begin

c [fn, i]: = cc [k];

j: = j + 1;

d [j]: = a [fn, i];

end;

for i: = fn + 1 to n do

begin

c [i, m]: = cc [k];

j: = j + 1;

d [j]: = a [i, m];

end;

for i: = m - 1 downto fn do

begin

c [n, i]: = cc [k];

j: = j + 1;

d [j]: = a [n, i];

end;

for i: = n - 1 downto fn + 1 do

begin

c [i, fn]: = cc [k];

j: = j + 1;

d [j]: = a [i, fn];

end;

if sd then

begin

Sdvig (d, j);

j: = 0;

for i: = fn to m do

begin

j: = j + 1;

a [fn, i]: = d [j];

end;

for i: = fn + 1 to n do

begin

j: = j + 1;

a [i, m]: = d [j];

end;

for i: = m - 1 downto fn do

begin

j: = j + 1;

a [n, i]: = d [j];

end;

for i: = n - 1 downto fn + 1 do

begin

j: = j + 1;

a [i, fn]: = d [j];

end;

end;

Inc (k);

SloiColor (fn + 1, n - 1, m - 1, sd);

end;

end;

procedure TForm1.MQuitClick (Sender: TObject);

/ / Вихід з програми

var

fi: integer;

begin

fi: = Application. MessageBox ('Ви дійсно хочете завершити програму?',

'Інформація', mb_YesNo); / / вивід вікна

if fi = IDYes then

Application. Terminate; / / вихід

end;

procedure TForm1.MOpenFileClick (Sender: TObject);

/ / Відкрити файл даних

var

n, m, i, j: integer;

f: textfile;

begin

if OpenDialog1. Execute then

begin

mf: = OpenDialog1. FileName;

MRun. Enabled: = True;

AssignFile (f, mf); Reset (f);

ReadLn (f, n, m);

for i: = 1 to n do

begin

for j: = 1 to m do

Read (f, a [i, j]);

ReadLn (f);

end;

CloseFile (f);

for i: = 1 to n do

for j: = 1 to m do

c [i, j]: = clBlack;

k: = 1;

SloiColor (1, n, m, false);

FillGrid (a, n, m);

end;

end;

procedure TForm1. FillGrid (a: mat; n, m: integer);

/ / Вивід матриці з заданими кольорами елементів

var

i, j: integer;

r: trect;

begin

StringGrid1. Refresh;

for i: = 1 to 10 do

StringGrid1. Cells [i, 0]: = «;

for i: = 1 to 10 do

begin

StringGrid1. Cells [0, i]: = «;

for j: = 1 to 10 do

begin

r: = StringGrid1. CellRect (j, i);

StringGrid1. Canvas. TextOut (r.topleft.x + 1, r. Top + 2, '');

end;

end;

for i: = 1 to m do

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

for i: = 1 to n do

begin

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

for j: = 1 to m do

begin

StringGrid1. Canvas. Font. Color: = c [i, j];

r: = StringGrid1. CellRect (j, i);

StringGrid1. Canvas. TextOut (r.topleft.x + 1, r. Top + 2, IntToStr (a [i, j]));

end;

end;

StringGrid1. Canvas. Refresh;

end;

procedure TForm1.MRunClick (Sender: TObject);

var

i, j, n, m: integer;

f: textfile;

begin

AssignFile (f, mf); Reset (f);

ReadLn (f, n, m);

CloseFile (f);

for i: = 1 to n do

for j: = 1 to m do

c [i, j]: = clBlack;

k: = 1;

SloiColor (1, n, m, true);

FillGrid (a, n, m);

Append (f);

WriteLn (f);

for i: = 1 to n do

begin

for j: = 1 to m do

Write (f, a [i, j]: 5);

WriteLn (f);

end;

CloseFile (f);

end;

end.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
120.9кб. | скачати


Схожі роботи:
Розробка в середовищі Turbo Pascal програми сортування елементів рядків матриці
Розробка програми для квадратної матриці
Розробка програмного модуля який знаходить суму кутових елементів матриці і суму елементів
Написання програми для видалення елементів і очищення зовнішніх таблиць
Розробка пакета прикладних програм для обчислення визначника матриці
Пристрій для вимірювання температури в індустріальних системах і розробка програми для виведення
Розробка елементів системи менеджменту якості для хлібопекарні
Розташування елементів в матриці
Розробка програми стимулювання збуту для підприємства
© Усі права захищені
написати до нас