Смекни!
smekni.com

Анализ треугольника (стр. 3 из 3)

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

После ввода длин сторон пользователю необходимо нажать на кнопку «Рассчитать». С этой кнопкой связана функция nlult().

Сначала функция проверяет, правильно ли задан треугольник. Это происходит следующим образом. По известной формуле Герона рассчитывается площадь треугольника.

,

где

,

длины сторон треугольника

В случае, значение выражения под корнем равно нулю или меньше нуля, считается, что такого треугольника не существует. В этом случае программа выдает соответствующее сообщение (рисунок 2.3.2).


2.3.2. Сообщение о некорректном вводе

Если треугольник задан правильно, программа вычисляет, является ли он прямоугольным. Для этого использована теорема Пифагора:

Программа находит наибольшую сторону (предполагаемую гипотенузу) и проверяет на истинность условие (2). Если оно истинно, то выдается сообщение «Треугольник прямоугольный». В противном случае, «Треугольник не прямоугольный» (рисунок 2.3.3).

Рисунок 2.3.3. Анализ треугольника на наличие прямого угла

Далее функция рассчитывает периметр треугольника (3), радиус описанной окружности (4) и радиус вписанной окружности (5).


После получения результатов, функция преобразует их в текстовый вид. Для этого используется String m_rsult и функция Frmt. Переменная m_rsult связана с элементом Stti. Результат вычислений появится на форме.

Рисунок 2.3.4. Результат вычислений

Таблица 2.1 – Спецификация разработанных классов

Имя класса Член класса Способа доступа Назначение
TringlDlg BL nInitilDilg() защищенный Выставляетзначения длин сторон
TringlDlg vid nlult() защищенный Производит все вычисления

2.4 Требования по установке

Для того чтобы создать приложение, просмотреть текст программы или запустить её на выполнение – необходимо, чтобы на компьютере был установлена среда MirsftVisul ++. Чтобы просмотреть текст программы Funtin или запустить её на выполнение – надо скопировать с носителя папку с проектом на жёсткий диск компьютера. Если надо просмотреть текст программы, шаблоны диалоговых окон и др., то следует открыть файл Funtin.dsw, являющийся файлом проекта.

2.5 Требования к техническому обеспечению

Для корректной работы программы необходимы IBM совместимый компьютер, операционная система семейства Windows версии 95/98/NT/, оперативная память 128 Mb и выше, свободное место на диске 3153 Кбайт под размещение приложения.

2.6 Вызов программы. Входные и выходные данные

Программа представляет собой единственный файл-приложение Tringl., запускаемое в любой операционной системе семейства Windows.

Входными данными является введенные пользователем длины сторон треугольника. Результаты своих вычислений программа выводит на экран.

2.7 Тестирование программы

Программа тестировалась стохастическим методом. Тестировался запуск программы, задавались неправильно заданные треугольники, вводились числа большого размера, ответа и подсчет результата. Выявленные незначительные ошибки функционирования были устранены.

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

Заключение

В ходе выполнения курсового проекта было создано Windows-приложение, которое вычисляет различные характеристики треугольника, заданного пользователем. Данная программа была написана на MirsftVisul ++ 6.0 с использованием библиотеки MF.

В ходе разработки курсового проекта была освоена работа с MirsftVisul ++. В результате чего была написана программа. Была освоена работа с различными элементами интерфейса, работа с мастерами Visul ++ 6.0.

Такие простые приложения и ему подобные, могут широко внедряться в различных сферах человеческой деятельности. Можно написать подобные программы на языке программирования MirsftVisul ++ с использованием библиотеки MF для создания других приложений.


Список литературы

1. «Основы программирования на Visul ++», методические указания по курсу «Технология программирования» для специальности 220200,071900

2. Кейт Грегорий «Использование Visul ++ 6.0», М, СПб, К.: издательский дом «Вильямс», 2000.

3. Черносвитов А., «Visul ++ и MF. Курс MSD для профессионалов.» – СПб: Издательство «Питер», 2000.

4. Паппас К., Мюррей У. «Полное руководство по Visul ++». Минск: ООО «Попурри», 1999.

5. Марк Луис. «Visul ++ 6». – М.: Лаборатория базовых знаний, 1999.

6. Гилберт Стивен, Маккарти Билл. «Программирование на Visul ++ 6. Этюды профессионалов» – К.: Издательство «ДиаСофт», 1999.

7. Баженова И.Ю. «Visul ++6.0 (VISUL STUDI 1998). Уроки программирования», М.: Диалог – МИФИ, 1999

8. А.В. Фролов, Г.В. Фролов «MirsftVisul ++ и MF. Программирование для Windows 95 и WindowsNT» в 2-х ч. (часть1) (библиотека системного программиста; т. 24) М.: Диалог – МИФИ, 1997

9. А.В. Фролов, Г.В. Фролов «MirsftVisul ++ и MF. Программирование для Windows 95 и WindowsNT». (часть2) (библиотека системного программиста; т. 28) М.: Диалог – МИФИ, 1997

10.Х.А. Цвиринько, В.Д. Коровина «Методические рекомендации по оформлению дипломных и курсовых проектов (работ)», Ставрополь: изд–во СевКавГТУ, 2000

Приложение 1

Диаграмма классов

Приложение 2

Листинг программы

// TringlDlg.: imlmnttinfil

#inlud «stdf.h»

#inlud «Tringl.h»

#inlud «TringlDlg.h»

#inlud «mth.h»

#ifdf _DBUG

#dfin nw DBUG_NW

#undf THIS_FIL

stti hr THIS_FIL[] = __FIL__;

#ndif

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

// butDlg dilg usd fr but

lss butDlg: ubli Dilg

{

ubli:

butDlg();

// Dilg Dt

// {{F_DT(butDlg)

num {IDD = IDD_BUTB};

// }} F_DT

// lssWizrd gnrtd virtul funtin vrrids

// {{F_VIRTUL(butDlg)

rttd:

virtul vid DDthng (Dthng* D); // DD/DDV surt

// }} F_VIRTUL

// Imlmnttin

rttd:

// {{F_MSG(butDlg)

// }} F_MSG

DLR_MSSG_M()

};

butDlg:butDlg(): Dilg (butDlg:IDD)

{

// {{F_DT_INIT(butDlg)

// }} F_DT_INIT

}

vid butDlg:DDthng (Dthng* D)

{

Dilg:DDthng(D);

// {{F_DT_M(butDlg)

// }} F_DT_M

}

BGIN_MSSG_M (butDlg, Dilg)

// {{F_MSG_M(butDlg)

// N mssg hndlrs

// }} F_MSG_M

ND_MSSG_M()

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

// TringlDlg dilg

TringlDlg: TringlDlg (Wnd* rnt /*=NULL*/)

: Dilg (TringlDlg:IDD, rnt)

{

// {{F_DT_INIT(TringlDlg)

m_lin_1 = 0;

m_lin_2 = 0;

m_lin_3 = 0;

m_rsult = _T(«»);

// }} F_DT_INIT

// Nt tht LdIn ds nt rquir subsqunt DstrIn in Win32

m_hIn = fGt()->LdIn (IDR_MINFRM);

}

vid TringlDlg:DDthng (Dthng* D)

{

Dilg:DDthng(D);

// {{F_DT_M(TringlDlg)

DD_Tt (D, ID_DIT1, m_lin_1);

DD_Tt (D, ID_DIT2, m_lin_2);

DD_Tt (D, ID_DIT3, m_lin_3);

DD_Tt (D, ID_STTI_1, m_rsult);

// }} F_DT_M

}

BGIN_MSSG_M (TringlDlg, Dilg)

// {{F_MSG_M(TringlDlg)

N_WM_SSMMND()

N_WM_INT()

N_WM_QURDRGIN()

N_BN_LIKD (ID_BUTTN1, nlult)

N_NTIF (UDN_DLTS, ID_SIN1, nDltsSin1)

N_NTIF (UDN_DLTS, ID_SIN2, nDltsSin2)

N_NTIF (UDN_DLTS, ID_SIN3, nDltsSin3)

N_NTIF (NM_UTFMMR, ID_SIN3, nutfmmrSin3)

// }} F_MSG_M

ND_MSSG_M()

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

// TringlDlg mssg hndlrs

BL TringlDlg:nInitDilg()

{

Dilg:nInitDilg();

// dd «but…» mnu itm t sstm mnu.

// IDM_BUTB must b in th sstm mmnd rng.

SSRT((IDM_BUTB & 0FFF0) == IDM_BUTB);

SSRT (IDM_BUTB < 0F000);

Mnu* SsMnu = GtSstmMnu(FLS);

if (SsMnu!= NULL)

{

String strbutMnu;

strbutMnu. LdString (IDS_BUTB);

if (! strbutMnu. Ismt())

{

SsMnu->ndMnu (MF_SRTR);

SsMnu->ndMnu (MF_STRING, IDM_BUTB, strbutMnu);

}

}

// St th in fr this dilg. Th frmwrk ds this utmtill

// whn th litin's min windw is nt dilg

StIn (m_hIn, TRU); // St big in

StIn (m_hIn, FLS); // St smll in

// TD: dd tr initiliztin hr

m_lin_1 = 1;

m_lin_2 = 1;

m_lin_3 = 1;

UdtDt(fls);

rturn TRU; // rturn TRU unlss u st th fus t ntrl

}

vid TringlDlg:nSsmmnd (UINT nID, LRM lrm)

{

if ((nID & 0FFF0) == IDM_BUTB)

{

butDlg dlgbut;

dlgbut.DMdl();

}

ls

{

Dilg:nSsmmnd (nID, lrm);

}

}

// If u dd minimiz buttn t ur dilg, u will nd th d blw

// t drw th in. Fr MF litins using th dumnt/viw mdl,

// this is utmtill dn fr u b th frmwrk.

vid TringlDlg:nint()

{

if (IsIni())

{

intD d(this); // dvi ntt fr inting

SndMssg (WM_INRSBKGND, (WRM) d. GtSfHd(), 0);

// ntr in in lint rtngl

int In = GtSstmMtris (SM_IN);

int In = GtSstmMtris (SM_IN);

Rt rt;

GtlintRt(&rt);

int = (rt. Width() – In + 1) / 2;

int = (rt. Hight() – In + 1) / 2;

// Drw th in

d. DrwIn (, m_hIn);

}

ls

{

Dilg:nint();

}

}

// Th sstm lls this t btin th ursr t disl whil th usr drgs

// th minimizd windw.

HURSR TringlDlg:nQurDrgIn()

{

rturn (HURSR) m_hIn;

}

vid TringlDlg:nlult()

{

// TD: dd ur ntrl ntifitin hndlr d hr

UdtDt(tru);

int rimtr = m_lin_1+ m_lin_2+ m_lin_3;

dubl = (dubl) (m_lin_1+ m_lin_2+ m_lin_3)/2;

dubl s = sqrt(*(– (dubl) m_lin_1)*(– (dubl) m_lin_2)*(– (dubl) m_lin_3));

if (s==0.0 || s<0.0)

{

fMssgB(«Треугольник задан неправильно»);

rturn;

}

dubl R_= (dubl) (m_lin_1*m_lin_2*m_lin_3)/(4*s);

dublR_V = s/;

/////// Для начала определим, является ли треугольник прямоугольным

/////// Определим самую большую сторону

intm_lin = m_lin_1;

int m_ind = 1;

if (m_lin_2>m_lin)

{

m_lin = m_lin_2;

m_ind = 2;

}

if (m_lin_3>m_lin)

{

m_lin = m_lin_3;

m_ind = 3;

}

bl rm=fls;

swith (m_ind)

{

s 1: if (m_lin*m_lin==m_lin_2*m_lin_2+m_lin_3*m_lin_3)

rm = tru; brk;

s 2: if (m_lin*m_lin==m_lin_1*m_lin_1+m_lin_3*m_lin_3)

rm = tru; brk;

s 3: if (m_lin*m_lin==m_lin_2*m_lin_2+m_lin_1*m_lin_1)

rm = tru; brk;

};

if (rm)

fMssgB(«Треугольник прямоугольный»);

ls

fMssgB(«Треугольник не прямоугольный»);

m_rsult. Frmt(«Периметр % d, Площадь % f, Радиус описанной окружности % f, Радиус вписанной окружности % f», rimtr, s, R_, R_V);

UdtDt(fls);

}

vid TringlDlg:nDltsSin1 (NMHDR* NMHDR, LRSULT* Rsult)

{

NM_UDWN* NMUDwn = (NM_UDWN*) NMHDR;

// TD: dd ur ntrl ntifitin hndlr d hr

UdtDt(tru);

m_lin_1-=NMUDwn->iDlt;

if (m_lin_1==0)

m_lin_1=1;

UdtDt(fls);

*Rsult = 0;

}

m_lin_3=1;

UdtDt(fls);

vid TringlDlg:nutfmmrSin3 (NMHDR* NMHDR, LRSULT* Rsult)

{

// TD: dd ur ntrl ntifitin hndlr d hr

*Rsult = 0;

}