Створення проекту із застосуванням наслідування та поліморфізму

Клас TNota як батьківській клас, який характеризує об’єкт нота і містить методи: Inc – отримання наступної ноти та Dec – отримання попередньої ноти. Управління програмою: методи та інструменти, оцінка ефективності. Формування інструкції користувачу.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык украинский
Дата добавления 27.03.2011
Размер файла 140,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ГРАФІКО-РОЗРАХУНКОВА РОБОТА

на тему:

«Створення проекту із застосуванням наслідування та поліморфізму»

Львів 2007

Діаграма Класів

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Клас TNota:

Батьківській клас, який характеризує об'єкт нота і містить такі методи:

· Inc_ - отримання наступної ноти

· Dec_ - отримання поперед. ноти;

Клас TSound, дочірній клас від TNota, займається виведенням звуку на динаміки. Клас містить такі методи:

· Song - займається виводом звуку на динамік. Метод є перевантаженим, оскільки таких методів є два. Один з них виводить «класову» ноту на динамік, тобто ноту котра є по замовчуванню, другий виводить ноту відповідно до параметру, порядковий номер ноти.

· Inc_ - отримання наступної ноти

· Dec_ - отримання поперед. ноти;

· SetNewLen - встановлює нову тривалість звучання

Клас TGraphicMusic:

Дочірній клас від TNota, який займається відображенням ноти у нотному стані.

Клас TGraphicMusic місти такі методи:

· Draw - малювання ноти.

· Inc_ - отримання наступної ноти

· Dec_ - отримання поперед. ноти;

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

Для виконання програми потрібно зайти у папку з програмою та запустити її. З'явиться вікно що зображено на мал. 1.

Мал.1. Зовнішній вигляд програми

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

· UP - отримання наступної ноти (графічно відображається нота на екрані)

· DOWN - отримання поперед. ноти (графічно відображається нота на екрані)

Мал. 2. Отримання наступної ноти

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

Мал. 3. Зміна довжини звучання

клас нота програма управління

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

Опис букв які відповідають нотам:

· S - «до»

· D - «ре»

· F - «мі»

· G - «фа»

· H - «соль»

· J - «ля»

· K - «сі»

· P - пауза (розміром в довжину ноти).

Висновок

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

Додаток

Код головної програми. (UNIT1.PAS)

unit Unit1;

interface

uses

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

Dialogs, StdCtrls, Sound, ExtCtrls;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

paint: TPaintBox;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

Edit2: TEdit;

Button3: TButton;

Button4: TButton;

procedure FormCreate (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Edit1Change (Sender: TObject);

procedure FormPaint (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

gm:TGraphicMusic;

Sound:TSound;

implementation

{$R *.dfm}

procedure TForm1. FormCreate (Sender: TObject);

begin

gm:=TGraphicMusic. Create (@Paint. Canvas, paint. ClientWidth, paint. ClientHeight);

Sound:=TSound. Cerate;

Sound. Len:=100;

Sound. Song;

end;

procedure TForm1. Button1Click (Sender: TObject);

begin

gm. Inc_;

Sound. Inc_;

end;

procedure TForm1. Button2Click (Sender: TObject);

begin

gm. Dec_;

Sound. Dec_;

end;

procedure TForm1. Edit1Change (Sender: TObject);

begin

if length (Edit1.text)<>0 then

case Edit1.text [length(Edit1.text)] of

's': Sound. Song(0); //do

'd': Sound. Song(1); //re

'f': Sound. Song(2); //mi

'g': Sound. Song(3); //fa

'h': Sound. Song(4); //sol

'j': Sound. Song(5); //la

'k': Sound. Song(6); //si

'p': Sound. Song(-1); //pause

end;

end;

procedure TForm1. FormPaint (Sender: TObject);

begin

gm. Draw;

end;

procedure TForm1. Button3Click (Sender: TObject);

begin

if EDit2. Text<>'' then

Sound. Len:=StrToInt (EDit2. Text);

end;

procedure TForm1. Button4Click (Sender: TObject);

var s:str;

i:int;

begin

s:=Edit1.text;

for i:=1 to length(s) do

case s[i] of

's': Sound. Song(0); //do

'd': Sound. Song(1); //re

'f': Sound. Song(2); //mi

'g': Sound. Song(3); //fa

'h': Sound. Song(4); //sol

'j': Sound. Song(5); //la

'k': Sound. Song(6); //si

'p': Sound. Song(-1); //pause

end;

end;

end.

Код модуля роботи з звуком. (Sound.pas)

unit Sound;

interface

uses Graphics, MMSystem, SysUtils;

type

Str = string;

Int = Integer;

TNota = class // нота

private

FName: Str; // назва

FOctava: Int; // октава

FLen:int; // тривалість звучання

FNum:int; // порядковий номер.

procedure Inc_; // отримання наступної ноти;

procedure Dec_; // отримання поперед. ноти;

public

end;

 // ===================================================

PWavHeader=^TWavHeader;

TWavHeader = record // структура заголовку *.WAV файлу

sigRIFF:array [0..3] of char; // має бути «RIFF»

sizeRIFFch:int;

sigWAVE:array [0..3] of char;

sigFMT:array [0..3] of char;

sizeFMTch:int;

wFormatTag:word;

wChannels:word;

dwSamplesPerSec:int;

dwAvgBytesPerSec:int;

wBlockAlign:word;

wBitPerSample:word;

sigDATA:array [0..3] of char;

sizeDATAch:int;

end;

TSound = class(TNota) // клас звуку

private

FFrequency:int; // частота

Procedure SetNewLen (Len:int); // задати нову довжину звучання

public

Constructor Cerate; // конструктор

procedure Song; overload; // звучання

procedure Song (F:int); overload; // звучання конкретної ноти

procedure Inc_; // отримання наступної ноти (зміна частоти звучання)

procedure Dec_;

property Len:int read Flen write SetNewLen; // довчина звучання

End;

 // ================================================

PCanvas = ^TCanvas;

TGraphicMusic = class(TNota) // графіка

private

Fx, Fy:int; // координати ноти

FGO: Pcanvas; // граф. об'єкт де мал. ноти

w, h:int; // ширина, висота граф. об'єкта

public

Constructor Create (GObj:PCanvas; width, height:int); // конструктор

procedure Draw; // мал.

procedure Inc_; // отримання наступної ноти (зміна назви ноти)

procedure Dec_;

end;

const

FDelta:int = 20; // розмір між лінійками (у пікселях)

iFrequency:array [0..6] of int =(500,600,710,800,1000,1200,1600); // масив частот

szName_nota:array [0..6] of str=('do', 're', 'mi', 'fa', 'sol', 'la', 'si'); // масив значень

implementation

uses SysConst;

{TGraphicMusic}

constructor TGraphicMusic. Create (GObj: PCanvas; width, height:int);

begin

inherited Create; // створ. батьків. класу (TObject)

FGO:=GObj;

FGO^.Brush. Style:=bsClear;

w:=width;

h:=height;

FNum:=0;

FName:=szName_nota[FNum]; // витягуємо ім'я ноти з масиву імен

FOctava:=1;

end;

procedure TGraphicMusic. Dec_;

begin

inherited Dec_; // виклик. декремент бать. класу

FName:=szName_nota[FNum]; // обнов. ім'я ноти

Draw; // перемальовуємо

end;

procedure TGraphicMusic. Draw;

var i, y:int;

begin

with FGO^ do

begin

FillRect(ClipRect); // чистимо екран

for i:=1 to 5 do // 5 лінійок

begin

y:=FDelta*i;

MoveTo (0, y);

LineTo (w, y);

end;

Fy:=6*FDelta - (FDelta*FNum div 2); // позиція позначки

Fx:=FNum*FDelta+FDelta;

Ellipse (Fx-7, Fy-5, Fx+7, Fy+5); // мал. еліпс

if FNum=0 then // якщо нота «До» - еліпс з рискою

begin

MoveTo (Fx-15, Fy);

LineTo (Fx+15, Fy);

end;

TextOut (Fx+20, Fy-7, FName); // виводимо надпис ноти

end;

end;

procedure TGraphicMusic. Inc_;

begin

inherited Inc_; // метод батьк. класу

FName:=szName_nota[FNum];

Draw;

end;

{FSound}

constructor TSound. Cerate;

begin

inherited Create;

FNum:=0;

FName:=szName_nota[FNum];

FOctava:=1;

FLen:=400; // початково довжина звуку

FFrequency:=iFrequency[FNum]; // задаємо частоту звуку FNum=0 => «до»

end;

procedure TSound. Dec_;

begin

inherited DEC_;

FFrequency:=iFrequency[Fnum];

Song;

end;

procedure tSound. Song;

var numSamples, size:integer;

p: Pchar;

head:PWavHeader;

i:int;

begin

if (FFrequency=0) or (FFrequency>44100) then // якщо частота «<0» або «>44100» вийти

exit;

numSamples:=44100 div FFrequency; // к-сть вибірок

size:=sizeof(TWavHeader) + numSamples;

head:=AllocMem(size); // виділ. пам. розмір. структ. та масив. вибірки

head.sigRIFF:='RIFF';

head.sigWAVE:='WAVE';

head.sizeRIFFch:= size - 8;

head.sigFMT:='fmt ';

head.sizeFMTch:= 16;

head.wFormatTag:= 1;

head.wChannels:= 1; // моно

head.dwSamplesPerSec:= 44100;

head.dwAvgBytesPerSec:= 44100;

head.wBlockAlign:= 1;

head.wBitPerSample:= 8; // 8 біт. звук

head.sigDATA:='data'; // сегмент даних

head.sizeDATAch:= size;

p:=Pchar(head);

inc (p, sizeof(TWavHeader)); // зміщуємося на масив даних, якій знах. за заголовком файлу

for i:=0 to numSamples-1 do // заповнюємо вибірку

p[i]:= char (Round(255*sin (6.28*i/size)));

 // слухаємо музику (зациклену)

PlaySound (pchar(head), 0, SND_ASYNC or SND_LOOP or SND_MEMORY);

 // зачекаємо певний час

Sleep(FLen);

 // і зупинемо музику

PlaySound (nil, 0, SND_ASYNC);

freemem(head); // звільнемо пам'ять

end;

procedure TSound. Song (F: int);

var tmp_f:int;

begin

if F=-1 then // якщо парам. -1 = пауза

begin

Sleep(Flen);

exit;

end;

Tmp_f:=FFrequency; // збереж. частоту

FFrequency:=iFrequency[f]; // задамо пнову

Song; // прослухаємо

FFrequency:=tmp_f; // полвернемо поперед.

end;

procedure TSound. Inc_;

begin

inherited Inc_;

FFrequency:=iFrequency[Fnum];

Song;

end;

{TNota}

procedure TNota. Dec_;

begin

if FNum<1 then Exit;

Dec(FNum);

end;

procedure TNota. Inc_;

begin

if FNum>5 then Exit;

Inc(FNum);

end;

procedure TSound. SetNewLen (Len: int);

begin

FLen:=Len;

end;

end.

Файл Форми.

object Form1: TForm1

Left = 171

Top = 101

Width = 489

Height = 313

BorderIcons = [biSystemMenu]

Caption = 'MUSIC'

Color = clBtnFace

Font. Charset = DEFAULT_CHARSET

Font. Color = clWindowText

Font. Height = -11

Font. Name = 'MS Sans Serif'

Font. Style = []

OldCreateOrder = False

OnCreate = FormCreate

OnPaint = FormPaint

PixelsPerInch = 96

TextHeight = 13

object Label1: TLabel

Left = 16

Top = 232

Width = 38

Height = 13

Caption = #1052#1091#1079#1080#1082#1072

end

object GroupBox1: TGroupBox

Left = 16

Top = 8

Width = 449

Height = 217

Caption = #1053#1086#1090#1085#1080#1081' '#1089#1090#1072#1085

TabOrder = 0

object paint: TPaintBox

Left = 8

Top = 16

Width = 297

Height = 145

end

object Label2: TLabel

Left = 8

Top = 168

Width = 78

Height = 13

Caption = #1044#1086#1074#1078#1080#1085#1072' '#1079#1074#1091#1082#1091

end

object Button1: TButton

Left = 328

Top = 32

Width = 75

Height = 17

Caption = 'Up'

TabOrder = 0

OnClick = Button1Click

end

object Button2: TButton

Left = 328

Top = 96

Width = 75

Height = 17

Caption = 'Down'

TabOrder = 1

OnClick = Button2Click

end

object Edit2: TEdit

Left = 24

Top = 184

Width = 105

Height = 17

TabOrder = 2

Text = '100'

end

object Button3: TButton

Left = 144

Top = 184

Width = 89

Height = 17

Caption = #1047#1072#1076#1072#1090#1080

TabOrder = 3

OnClick = Button3Click

end

end

object Edit1: TEdit

Left = 32

Top = 248

Width = 305

Height = 21

TabOrder = 1

Text = 'spdpfpgphpjpkpjphpgpfpdps'

OnChange = Edit1Change

end

object Button4: TButton

Left = 352

Top = 248

Width = 105

Height = 17

Caption = #1055#1088#1086#1075#1088#1072#1090#1080

TabOrder = 2

OnClick = Button4Click

end

end

Размещено на Allbest.ru


Подобные документы

  • Поняття про аплет – пакет класу Java, який виконується різними прикладними програмами. Методи init, run та paint, клас showgif (виводить анімаційні файли) для вставки у web–сторінку з урахуванням браузерних платформ. Код аплета та його структура.

    лабораторная работа [11,9 K], добавлен 09.06.2012

  • Проектування ієрархії класів побутових приладів (пральна машина, пилосос, телевізор, магнітофон, радіоприймач, музичний центр), створення її структурної схеми. Розробка програми з використанням об'єктів створених класових типів на мові програмування Java.

    лабораторная работа [451,0 K], добавлен 25.01.2014

  • Графічна підсистема Delphi 5, її можливості, інструменти та принципи побудови прикладних програм з використанням графіки; дочірні класи. Методи опрацювання графічних зображень різних форматів і типів: растрових файлів, метафайлів Windows, піктограм.

    лабораторная работа [47,9 K], добавлен 19.03.2011

  • Реалізація, за допомогою технології Windows Forms, програми обліку даних про волонтерів та подій, на які вони зареєстровані. можливості об'єктно-орієнтованого програмування. Створення класів. Методи, властивості. Використання Multiple Document Interface.

    курсовая работа [1,5 M], добавлен 02.12.2015

  • Створення сайту з інтерактивними завданнями до теми "Комп’ютерна графіка" в підручнику "Інформатика" 6 клас. Опис Інтернет-сервісу E-Тренікі. Використання сервісу Flippity для перетворення Google Таблиці в різноманітні інтерактивні вправи для навчання.

    курсовая работа [3,3 M], добавлен 04.11.2021

  • Визначення сили взаємодії двох точкових зарядів. С++ як універсальна мова програмування. Клас - ключове поняття С++. Стандартні бібліотеки С++. Функція конструктора і деструктора. Опис базового класу Objcalc. Лістинг та результат роботи програми.

    курсовая работа [107,6 K], добавлен 27.12.2011

  • Сутність прикладної програми – класу, який містить процедуру main, в якому створюється вікно з кнопками управління. Аплет – пакет класу Java, який виконується різними прикладними програмами. Ініціалізація змінних та встановлення розміру вікна аплету.

    лабораторная работа [11,8 K], добавлен 09.06.2012

  • Віртуальні системи праці. Керування віртуальною командою проекту. Інструменти досягнення співпраці у віртуальних командах. Методи ведення проектів. Internet i ефективні знаряддя групової праці. Загальні методики реалізацій інформатичних систем.

    реферат [16,3 K], добавлен 10.08.2011

  • Розробка програми для розв’язування економічних задач. Описання програми для отримання відомості відвантаження готової продукції. Вибір алгоритмічної мови Turbo Pascal 6.0. Програма розроблена із застосуванням методики процедурного програмування.

    курсовая работа [38,2 K], добавлен 23.04.2010

  • Методи отримання довідки щодо використання команди операційної системи. Варіанти перенесення операційної системи на новий диск. Методи зміни атрибутів файлу за допомогою команд операційної системи. Сутність фрагментації файлів і способів їх усуннення.

    контрольная работа [17,3 K], добавлен 19.07.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.