Аналіз вхідного файлу програми та виведення результатів у вихідний файл

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

скачати

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ «КПІ»

МЕЖУНІВЕСІТЕТСКІЙ МЕДИКО-ІНЖЕНЕРНИЙ ФАКУЛЬТЕТ

Кафедра медичної кібернетики та телемедицини

Розрахунково-графічна робота

з дисципліни «Основи програмування та алгоритмічні мови»

варіант 21 «Скло»

Аналіз вхідного файлу програми та виведення результатів у вихідний файл

виконав:

студент гр. ІМ-71

Плахтій Артур Миколайович

перевірив:

ст. препод. каф. МКТМ

Зінченко Н.П.

Київ 2009

Зміст

Введення

1. Постановка завдання

1.1 Формат вхідного файлу

1.2 Формат вихідного файлу .............................................. ...................................

1.3 Приклади

2. Метод рішення

3. Алгоритм розв'язання задачі

4. Опис програми та її складових

4.1 Функція обробки даних 8

4.2 Захист від помилок 9

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

Висновок

Література 12

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

Додаток Б. Результати роботи програми. 28

Введення

На стандартному. Поле 8 * 8 задано одна біла шашка і довільну кількість чорних шашок.

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

1. Постановка завдання

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

1.1 Формат вхідного файлу

У першому рядку вхідного файлу записано число N-кількість чорних шашок (1 <N <8).

Введемо систему координат таким чином, щоб осі координат були паралельні сторонам столу. Всі координати-цілі числа, за модулем не перевершують 8.

1.2 Формат вихідного файлу

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

У випадку декількох рішень вивести будь-яке з них.

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

2. Метод рішення

Для реалізації поставленої задачі була використана середовище розробки Borland Delphi 6.0 update 1.

Усередині цього середовища було використано такі методи:

для створення зручного та наочного інтерфейсу було використано такі основні елементи:

  • компонент головного меню (TMainMenu);

  • компоненти TMemo для відображення, редагування та програмної роботи з текстами вхідних І вихідних файлів;

  • компонент TImage для виведення графічних зображень;

для реалізації технічної роботи програми було використано:

  • функції і методи роботи з рядковими веліччінамі;

  • функції переобразованія типів даних;

  • функції створення у знищення візуальних об'єктів;

  • функції компонента TMemo для відкриття і збереження тексту;

  • математичні обчислення;

  • для створення текстових вхідних файлів - тестовий редактор Notepad.

3. Алгоритм розв'язання задачі

Рис.1. Блок-схема основної програми

Рис. 2. Блок-схема функції перевірки вхідних даних

4. Опис програми та її складових

Основою перевірки вхідних даних програми являє собою компонент Form Create, який вміщує в собі всі функції, які написані безпосередньо в програмі. Він є контейнером для таких дій: N2Click, N4Click, N5Click, Memo.Lines.LoadFromFile. А основою розрахунку і виведення вихідних даних програми являє собою компонент TForm1.Button1Click, який вміщує в собі всі функції, які написані безпосередньо в програмі. Він є контейнером для таких дій

Опишемо їх:

  • Memo.Lines.LoadFromFile - завантажує вхідний файл у текстовий контейнер Memo1;

  • N2Click - вихід з програми;

  • Button1Click - виводить вихідні дані в текстовий контейнер Memo2;

  • N4Click - вивести інформацію про програму;

  • N5Click - очистити змінні програми (використовується перед відкриттям вхідного файлу);

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

4.1 Функція обробки даних

Розрахунок результату відбувається в такій послідовності:

  1. Завантаження вхідних даних з файлу.

  2. Заповнення TMemo1 вхідними даними.

  3. Відображення наведених осколків на Image1 за допомогою графічного малюнка.

  4. Висновок координат перший осколка без змін на TMemo2.

  5. Знаходження точки удару і розрахунок різниці координат для паралельного переносу.

  6. Висновок вихідних даних на TMemo2.

  7. Відображення вихідних осколків на Image2 за допомогою графічного малюнка

4.2 Захист від помилок

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

  1. Перевірка кількості введених осколків.

  2. Перевірка на наявність осколків з нульовою площею.

  3. Створення координатних осей і перевірка сторін осколків на паралельність.

  4. Знаходження довжин сторін трикутників, паралельних координатним осям.

  5. Знаходження суми площ всіх введених осколків.

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

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

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

  1. Відкрийте вхідний файл (input.txt і TOSHONADO.txt).

  2. Викличте процедуру розрахунку (команда «Меню-> Виконати» у головному меню або кнопка на панелі інструментів).

  3. Вихід з програми реалізується командою «Меню-> Вихід" у головному меню або кнопка на панелі завдань.

Висновок

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

Література

  1. Т. Рютте, Г. Франкен. Турбо Паскаль 6.0. Торгово-іздательськое бюро BHV. Грифон. - К.: 1992. - 235 с.

  2. Т. П. Караванова. Основи алгорітмізації та програмування. Форум. - К.: 2002. - 286 с.

  3. І. Скляр. Вівчаємо мову программування PASCAL. http://distance.edu.vn.ua/metodic/pascal/

  4. Будникова Н.А. Навчальний комплекс з програмування на мові ПАСКАЛЬ http://petrsu.ru/Chairs/IMO/pascal/

  5. Потопахін В. Turbo Pascal.Решеніе складних задач.БХВ-Петербург. С.-Пб.: 2006. - 194 с.

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

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, Menus, MUNit;

type

TForm1 = class (TForm)

Vv: TMemo;

VV2: TMemo;

Button1: TButton;

Image1: TImage;

Image2: TImage;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

Memo: TMemo;

procedure Form Create (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure N2Click (Sender: TObject);

procedure N4Click (Sender: TObject);

procedure N5Click (Sender: TObject);

procedure FormClose (Sender: TObject; var Action: TCloseAction);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

N: integer;

result: boolean;

oskolok: array [1 .. 3] of TPoint;

i: integer;

s: string;

OSX1, OSX2, OSY1, OSY2: integer;

sumyglov: extended;

razX, razY, OsnX, OsnY, nomervershiny: integer;

iosi, xosi, xx: integer;

sumploshadi, hh: real;

l1, l2: integer;

implementation

uses Unit2;

{$ R *. dfm}

procedure TForm1.FormCreate (Sender: TObject); / / Процедура створення форми

var

stemp: string;

bb: boolean;

begin

Vv.Lines.LoadFromFile ('input.txt'); / / Завантажуємо координати з файлу

Memo.Lines.LoadFromFile ('TOSHONADO.txt'); / / Завантажуємо координати з файлу

n: = StrToInt (Vv.Lines [0]); / / Cчітиваем кількість трикутників

s: = Vv.Lines [0];

Vv.Lines.Delete (0);

{Заповнюємо координати в TMemo1}

For i: = 0 to n-1 do begin

oskolok [1]. X: = StrToInt (Vv.Lines [i * 6]);

oskolok [1]. Y: = StrToInt (Vv.Lines [i * 6 +1]);

oskolok [2]. X: = StrToInt (Vv.Lines [i * 6 +2]);

oskolok [2]. Y: = StrToInt (Vv.Lines [i * 6 +3]);

oskolok [3]. X: = StrToInt (Vv.Lines [i * 6 +4]);

oskolok [3]. Y: = StrToInt (Vv.Lines [i * 6 +5]);

{Знаходимо суму площ всіх введених трикутників}

sumploshadi: = sumploshadi + Abs ((1 / 2) * ((oskolok [2]. Y-

oskolok [1]. Y) * oskolok [3]. X +

(Oskolok [1]. X-oskolok [2]. X) * oskolok [3]. Y +

(Oskolok [2]. X-oskolok [1]. X) * oskolok [1]. Y-

(Oskolok [2]. Y-oskolok [1]. Y) * oskolok [1]. X));

{Малюємо трикутники, які ввів користувач на Image1}

Image1.Canvas.Pen.Color: = Random (4000000); / / Вибираємо колір ліній

Image1.Canvas.Pen.Style: = psInsideFrame; / / Вибираємо стиль ліній

Image1.Canvas.MoveTo (20 + oskolok [1]. X ,126-oskolok [1]. Y); / / Рухаємося до потрібної точці

Image1.Canvas.LineTo (20 + oskolok [2]. X ,126-oskolok [2]. Y); / / З'єднуємо лінією два точки

Image1.Canvas.MoveTo (20 + oskolok [2]. X ,126-oskolok [2]. Y); / / Рухаємося до потрібної точці

Image1.Canvas.LineTo (20 + oskolok [3]. X ,126-oskolok [3]. Y); / / З'єднуємо лінією два точки

Image1.Canvas.MoveTo (20 + oskolok [3]. X ,126-oskolok [3]. Y); / / Рухаємося до потрібної точці

Image1.Canvas.LineTo (20 + oskolok [1]. X ,126-oskolok [1]. Y); / / З'єднуємо лінією два точки

{Перевіряємо скільки осколків ввів користувач (їх повинно бути не менше чотирьох)}

if N <4 then begin

result: = false;

Application.MessageBox ('Вибачте, але кількість трикутників занадто мало' +

'(Менше 4)', 'Помилка', MB_OK + MB_ICONError); / / Виводимо повідомлення про помилку

Button1.Enabled: = False; / / Блокуємо кнопку

exit;

end;

{Перевіряємо чи є серед введених трикутників, трикутники з нульовою площею}

If oskolok [1]. X = oskolok [2]. X then begin

if oskolok [2]. X = oskolok [3]. X then begin

Application.MessageBox ('Вибачте, але площа одного з трикутників дорівнює нулю'

, 'Помилка', MB_OK + MB_ICONError); / / Виводимо повідомлення про помилку

Button1.Enabled: = False; / / Блокуємо кнопку

exit;

end;

end;

If oskolok [1]. Y = oskolok [2]. Y then begin

if oskolok [2]. Y = oskolok [3]. Y then begin

Application.MessageBox ('Вибачте, але площа одного з трикутників дорівнює нулю'

, 'Помилка', MB_OK + MB_ICONError); / / Виводимо повідомлення про помилку

Button1.Enabled: = False; / / Блокуємо кнопку

exit;

end;

end;

{Створюємо осі паралельно}

{Вісь паралельно ОХ1 по лівій стороні столу}

If (oskolok [1]. X = oskolok [2]. X) then begin

If (oskolok [3]. X> oskolok [1]. X) then begin

xx: = xx +1;

end;

end;

If (oskolok [2]. X = oskolok [3]. X) then begin

If (oskolok [1]. X> oskolok [1]. X) then begin

xx: = xx +1;

end;

end;

If (oskolok [1]. X = oskolok [3]. X) then begin

If (oskolok [2]. X> oskolok [1]. X) then begin

xx: = xx +1;

end;

end;

{Вісь паралельно ОХ2 по правій стороні столу}

If (oskolok [1]. X = oskolok [2]. X) then begin

If (oskolok [3]. X <oskolok [1]. X) then begin

xx: = xx +1;

end;

end;

If (oskolok [2]. X = oskolok [3]. X) then begin

If (oskolok [1]. X <oskolok [1]. X) then begin

xx: = xx +1;

end;

end;

If (oskolok [1]. X = oskolok [3]. X) then begin

If (oskolok [2]. X <oskolok [1]. X) then begin

xx: = xx +1;

end;

end;

{Вісь паралельно ОУ1 по нижній стороні столу}

If (oskolok [1]. Y = oskolok [2]. Y) then begin

If (oskolok [3]. Y> oskolok [1]. Y) then begin

xx: = xx +1;

end;

end;

If (oskolok [2]. Y = oskolok [3]. Y) then begin

If (oskolok [1]. Y> oskolok [1]. Y) then begin

xx: = xx +1;

end;

end;

If (oskolok [1]. Y = oskolok [3]. Y) then begin

If (oskolok [2]. Y> oskolok [1]. Y) then begin

xx: = xx +1;

end;

end;

If (oskolok [1]. Y = oskolok [2]. Y) then begin

If (oskolok [3]. Y <oskolok [1]. Y) then begin

xx: = xx +1;

end;

end;

If (oskolok [2]. Y = oskolok [3]. Y) then begin

If (oskolok [1]. Y <oskolok [1]. Y) then begin

xx: = xx +1;

end;

end;

If (oskolok [1]. Y = oskolok [3]. Y) then begin

If (oskolok [2]. Y <oskolok [1]. Y) then begin

xx: = xx +1;

end;

end;

Vv2.Lines.Add (IntToStr (oskolok [1]. X) + '' + IntToStr (oskolok [1]. Y) + '' +

IntToStr (oskolok [2]. X) + '' + IntToStr (oskolok [2]. Y) +

'' +

IntToStr (oskolok [3]. X) + '' + IntToStr (oskolok [3]. Y)); / / Виводимо без змін координати осколків на TMemo2

end;

//////// Кінець циклу

{Виводимо повідомлення про кількість треугольноков зі сторонами з паралельним осях}

If xx = n-2 then begin

Application.MessageBox (PCHar ('Невірний - трикутників з паралельними осям сторонами всього лише:' + INtToStr (Xx +2)), 0); / / Виводимо повідомлення про помилку

Button1.Enabled: = False;

end;

end;

procedure TForm1.Button1Click (Sender: TObject); / / Процедура виконання розрахунків і виведення даних

begin

Vv2.Lines.Clear; / / Очішаем TMemo2

Vv2.Lines.Add ('Виконуємо розрахунок'); / / Починаємо виводити текст на TMemo2

{Виводимо без змін координати першого осколка на TMemo2}

oskolok [1]. X: = StrToInt (Vv.Lines [0]);

oskolok [1]. Y: = StrToInt (Vv.Lines [1]);

oskolok [2]. X: = StrToInt (Vv.Lines [2]);

oskolok [2]. Y: = StrToInt (Vv.Lines [3]);

oskolok [3]. X: = StrToInt (Vv.Lines [4]);

oskolok [3]. Y: = StrToInt (Vv.Lines [5]);

Vv2.Lines.Add (IntToStr (oskolok [1]. X) + '' + IntToStr (oskolok [1]. Y) + '' +

IntToStr (oskolok [2]. X) + '' + IntToStr (oskolok [2]. Y) +

'' +

IntToStr (oskolok [3]. X) + '' + IntToStr (oskolok [3]. Y));

Image2.Canvas.Pen.Color: = clBlue; / / Задаємо колір малюнку на Image2

{Малюємо перший осколок без змін}

Image2.Canvas.MoveTo (20 + oskolok [1]. X ,126-oskolok [1]. Y);

Image2.Canvas.LineTo (20 + oskolok [2]. X ,126-oskolok [2]. Y);

Image2.Canvas.MoveTo (20 + oskolok [2]. X ,126-oskolok [2]. Y);

Image2.Canvas.LineTo (20 + oskolok [3]. X ,126-oskolok [3]. Y);

Image2.Canvas.MoveTo (20 + oskolok [3]. X ,126-oskolok [3]. Y);

Image2.Canvas.LineTo (20 + oskolok [1]. X ,126-oskolok [1]. Y);

////////// XXX

{Знаходимо координати точки удару}

If (oskolok [1]. X = oskolok [2]. X) then begin

nomervershiny: = 3;

osnX: = oskolok [3]. X;

osnY: = oskolok [3]. Y;

l1: = l1 + Abs (oskolok [2]. Y-oskolok [1]. Y);

end;

If (oskolok [2]. X = oskolok [3]. X) then begin

l1: = l1 + Abs (oskolok [3]. Y-oskolok [2]. Y);

nomervershiny: = 1;

osnX: = oskolok [1]. X;

osnY: = oskolok [1]. Y;

end;

If (oskolok [1]. X = oskolok [3]. X) then begin

l1: = l1 + Abs (oskolok [1]. Y-oskolok [3]. Y);

nomervershiny: = 2;

osnX: = oskolok [2]. X;

osnY: = oskolok [2]. Y;

end;

If (oskolok [1]. Y = oskolok [2]. Y) then begin

l2: = l2 + Abs (oskolok [1]. X-oskolok [2]. X);

nomervershiny: = 3;

osnX: = oskolok [3]. X;

osnY: = oskolok [3]. Y;

end;

If (oskolok [2]. Y = oskolok [3]. Y) then begin

l2: = l2 + Abs (oskolok [2]. X-oskolok [3]. X);

nomervershiny: = 1;

osnX: = oskolok [1]. X;

osnY: = oskolok [1]. Y;

end;

If (oskolok [1]. Y = oskolok [3]. Y) then begin

l2: = l2 + Abs (oskolok [1]. X-oskolok [3]. X);

nomervershiny: = 2;

osnX: = oskolok [2]. X;

osnY: = oskolok [2]. Y;

end;

//////////////////////////

{Прочитуємо координати відрізків до змін}

For i: = 1 to n-1 do begin

oskolok [1]. X: = StrToInt (Vv.Lines [i * 6]);

oskolok [1]. Y: = StrToInt (Vv.Lines [i * 6 +1]);

oskolok [2]. X: = StrToInt (Vv.Lines [i * 6 +2]);

oskolok [2]. Y: = StrToInt (Vv.Lines [i * 6 +3]);

oskolok [3]. X: = StrToInt (Vv.Lines [i * 6 +4]);

oskolok [3]. Y: = StrToInt (Vv.Lines [i * 6 +5]);

{Знаходимо довжини сторін трикутників, які паралельно осям OX}

If (oskolok [1]. X = oskolok [2]. X) then begin

nomervershiny: = 3;

l1: = l1 + Abs (oskolok [1]. Y-oskolok [2]. Y);

end;

If (oskolok [2]. X = oskolok [3]. X) then begin

nomervershiny: = 1;

l1: = l1 + Abs (oskolok [2]. Y-oskolok [3]. Y);

end;

If (oskolok [1]. X = oskolok [3]. X) then begin

nomervershiny: = 2;

l1: = l1 + Abs (oskolok [1]. Y-oskolok [3]. Y);

end;

{Знаходимо довжини сторін трикутників, які паралельно осям OУ}

If (oskolok [1]. Y = oskolok [2]. Y) then begin

nomervershiny: = 3;

l2: = l2 + Abs (oskolok [1]. X-oskolok [2]. X);

end;

If (oskolok [2]. Y = oskolok [3]. Y) then begin

l2: = l2 + Abs (oskolok [2]. X-oskolok [3]. X);

nomervershiny: = 1;

end;

If (oskolok [1]. Y = oskolok [3]. Y) then begin

l2: = l2 + Abs (oskolok [1]. X-oskolok [3]. X);

nomervershiny: = 2;

end;

{Знаходимо різниці координат вершин для паралельного переносу}

razX: = oskolok [nomervershiny]. X-osnX;

razY: = oskolok [nomervershiny]. Y-osnY;

{Розраховуємо координати вершин після перенесення}

oskolok [1]. X: = oskolok [1]. X-razX;

oskolok [1]. Y: = oskolok [1]. Y-razY;

oskolok [2]. X: = oskolok [2]. X-razX;

oskolok [2]. Y: = oskolok [2]. Y-razY;

oskolok [3]. X: = oskolok [3]. X-razX;

oskolok [3]. Y: = oskolok [3]. Y-razY;

{Виводимо координати осколків після перенесення в точку удару}

Vv2.Lines.Add (IntToStr (oskolok [1]. X) + '' + IntToStr (oskolok [1]. Y) + '' +

IntToStr (oskolok [2]. X) + '' + IntToStr (oskolok [2]. Y) +

'' +

IntToStr (oskolok [3]. X) + '' + IntToStr (oskolok [3]. Y));

{Малюємо трикутники, після переміщення на Image2 (вони утворюють прямокутник)}

Image2.Canvas.MoveTo (20 + oskolok [1]. X ,126-oskolok [1]. Y);

Image2.Canvas.LineTo (20 + oskolok [2]. X ,126-oskolok [2]. Y);

Image2.Canvas.MoveTo (20 + oskolok [2]. X ,126-oskolok [2]. Y);

Image2.Canvas.LineTo (20 + oskolok [3]. X ,126-oskolok [3]. Y);

Image2.Canvas.MoveTo (20 + oskolok [3]. X ,126-oskolok [3]. Y);

Image2.Canvas.LineTo (20 + oskolok [1]. X ,126-oskolok [1]. Y);

end;

hh: = (l1 / 2) * (l2 / 2); / / Знаходимо площу утворився прямокутника

{Перевіряємо на рівність суму площ трикутників і прямокутника}

If hh <> sumploshadi then begin

Application.MessageBox ('Площі НЕ рівні', 'Помилка', MB_OK); / / Виводимо повідомлення про нерівність площ

bUTTon1.Enabled: = False; / / Блокуємо кнопку

end;

end;

{Задаємо меню}

procedure TForm1.N2Click (Sender: TObject); / / "Вихід"

begin

Application.Terminate;

end;

procedure TForm1.N4Click (Sender: TObject); / / "Про програмі "

begin

Form2.Show; / / Відкриваємо Form2

end;

procedure TForm1.N5Click (Sender: TObject); / / "Оновити"

begin

Vv2.Lines.Clear; / / Очищаємо TMemo2

end;

procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction); / / Процедура закриття TForm1

begin

Application.Terminate;

end;

end.

Додаток Б. Результати роботи програми.

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

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

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


Схожі роботи:
Пристрій для вимірювання температури в індустріальних системах і розробка програми для виведення
Порівняльний аналіз програми Занкова і традиційної програми
Розробка пульта перевірки вхідного контролю
Файл SWAPPER DAT
Пакетні командні файли і файл конфігурації МS DOS
Аналіз фінансових результатів
Розрахунок вихідний реакції лінійної ланцюга за допомогою операційного методу і методу прямої згортки
Аналіз фінансових результатів прибутку
Аналіз фінансових результатів підприємства 2
© Усі права захищені
написати до нас