try
{ // «қорғалған блоктың» басы
throw 1-ӛрнек;
/ / бұл оператор ерекше жағдайды оны ӛңдеушіге лақтырады.
throw 2-ӛрнек;
...
throw n-ӛрнек;
} // «қорғалған блоктың» соңы
catch(1-ӛрнектің типіне сәйкес айнымалының типі)
{
1-ӛрнекке сәйкес ЕЖ ӛңдеушінің коды
}
catch(2-ӛрнектің типіне сәйкес айнымалының типі)
{
2-ӛрнекке сәйкес ЕЖ ӛңдеушінің коды
}
catch(n-ӛрнектің типіне сәйкес айнымалының типі)
{
n-ӛрнекке сәйкес ЕЖ ӛңдеушінің коды
}
мұндағы, try («орындап кӛру, байқап кӛру» - деген мағынаны білдіреді) сӛзімен басталып,
{…} фигуралы жақшаға алынған программа мәтінінің фрагменттерін қорғалған блоктар
немесе уақытша блоктар деп атайды, яғни ерекше жағдай туғызуы мүмкін программа коды
осы қорғалған блокта орналасуы керек.
Ӛңдеуші код catch қызметші сӛзінен басталады. Содан кейін жай жақшаның ішінде
ЕЖ типі кӛрсетіледі, егер жай жақшаның ішінде кӛп нүкте /... / тұрса онда ол ол кез-келген
ЕЖ ӛңдей алады, мысалы:
catch(int i)
{ // int типті ЕЖ ӛңдеуші код
}
catch(char* str)
{ // char* типті ЕЖ ӛңдеуші код
}
catch (...)
{ //кез-келген типті ЕЖ ӛңдеуші код
}
Жаттығу жұмыстары
1-жаттығу. Консолдық қосымшада қарапайым ЕЖ ӛңдеуді орындап кӛру.
#include
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main()
{
double d = 1.0;
for (int i=0; i<4; i++)
{
try
{
cout << endl<< "try-block bastaldi..." <switch (i)
{
case 0:
throw " goldi laktiru "; // char* типті жолды лақтыру
case 1:
throw 5; // int.-бүтінді лақтыру.
default:
throw d; // double –ді лақтыру.
}
// Келесі оператор ЕЖ байланысты орындалмай
cout<< "Byl try-block-ka bailanisti orindalmaidi" << endl;
} // try-блоктың соңы
catch(int i)
{ // int типті ЕЖ ӛңдеуші код
cout << "Int laktirildi /thrown /: " << 1 << endl;
}
catch(char* str)
{ //char* типті ЕЖ ӛңдеуші код
cout << "string-gol laktirildi: " << str << endl;
}
catch (...) { //Кез-келген ЕЖ ӛңдеуші код
cout << "kalgan type laktirildi."<< "Program will.terminate." << endl;
cin.ignore () ;
return -1; // Программадан шығу
}
cout<< "sikldin soni"<< endl;
} // циклдың соңы.
cout << "progr soni" << endl; // Бұл операторлар орындалмайды
себебі, үшінші catch (...) //программаны аяқтап тастайды
return 0;
}
Бұл мысалда цикл тӛрт рет орындалуы керек. Цикл ішінде і- цикл параметрінің
мәндеріне сәйкес int, char* және double типті ЕЖ шақыратын қорғалған блок орналасқан.
і=0 болғанда throw операторы char* типті жолды лақтырады, ал оны char* типті екінші
тұрған ӛңдеуші ұстап алады да, соған сәйкес жазуды шығарады, себебі кодта содан басқа
ештеңе жазылмаған, тура сол сияқты і=1 болғанда қорғалған блоктағы throw операторы int
типті ЕЖ лақтырады, оны бірінші тұрған catch(int i) ӛңдейді. і=2 болғанда double типті
ЕЖ пайда болады, ал оған сәйкес catch қарастырылмаған, бірақ оны кез-келген жағдай үшін
орындалатын үшінші catch (...) ұстайды және ондағы кодтағы cin.ignore () және return -1;
командалары программадан шығуды немесе аяқтауды орындайды, яғни цикл тӛртінші рет
і=3 үшін орындалып үлгермейді.
Программаның нәтижесі:
2-жаттығу. Windows-ға арналған қосымшада қарапайым ЕЖ-ды
1.
жалпы ӛңдеушінің /глобальный обработчик/ кӛмегімен орындап кӛру;
2.
дербес ӛңдеуші кӛмегімен орындап кӛру.
Дербес ӛңдеушінің жұмысын кӛру үшін жалпы ӛңдеушіні уақытша тоқтата тұру керек,
ол үшін Tools -> Debugger Options командаларын орындап, пайда болған терезеде Language
Exceptions жапсырмасының Stop on Delphi Exceptions және Stop On C++ Exceptions немесе
Integrated debugging опцияларындағы флажокты алу керек /4.14(А,Б,С)-4.15(А,Б,С) суреттер/
.
Программа мәтіні:
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float a,b,c;
float d,x1,x2;
a=StrToInt(Edit1->Text);
b=StrToInt(Edit2->Text);
c=StrToInt(Edit3->Text);
try
{ d=b/a;
x1=log(c);
x2= d;
Edit4->Text=FloatToStrF(x1,ffGeneral,5,2);
Edit5->Text=FloatToStrF(x2,ffGeneral,5,2);
}
catch(...)
{ MessageDlg("try-блокта кате бар",mtError, TMsgDlgButtons()
<< mbOK, 0);
//return;
}
Edit6->Text="Мен орындалдым";
Программа орындалуының нетижелері:
1) ЕЖ –ды жалпы ӛңдеуші / глобальный обработчик/ ұстады.
4.14-сурет. а)Ерекше жағдайларды жалпы ӛңдеуші
/глобальный обработчик/ ұстады.
4.14-сурет. б)Ерекше жағдайларды жалпы ӛңдеуші
/глобальный обработчик/ ұстады.
4.14-сурет. с)Ерекше жағдайларды жалпы ӛңдеуші
/глобальный обработчик/ ұстады.
2) ЕЖ –ды дербес ӛңдеуші /локальный обработчик/ ұстады.
4.15-сурет. а) Ерекше жағдайларды дербес ӛңдеуші /локальный
обработчик/ ұстады және оны қолданушының коды ӛңдеді.
4.15-сурет. б) Ерекше жағдайларды дербес ӛңдеуші /локальный
обработчик/ ұстады және оны қолданушының коды ӛңдеді.
4.15-сурет. с) Ерекше жағдайларды дербес ӛңдеуші /локальный
обработчик/ ұстады және оны қолданушының коды ӛңдеді.
try…__ finally операторының (немесе қорғалған блогының) программадағы жазылуы:
try
{
//қорғалған блок
}
__ finally
{
// ерекше жағдайлар туса да орындалатын код
}
Ӛзіндік жұмыс тапсымалары
Келесі мазмұндағы есептерді шешу программаларындағы ерекше жағдайларды
анықтап оны екі жолмен ӛңдеуді /жалпы және дербес ӛңдеушілер/ қарастырыңыз .
1.
Пирамиданың кӛлемін табу.
2.
Үш қабырғасы бойынша үшбұрыштың ауданын есептеу.
3.
Параллелипедтің кӛлемін есептеу.
4.
Тізбектің жалпы кедергісін есептеу (параллель қосылған).
5.
Трапецияның ауданын есептеу.
6.
Тізбектің жалпы кедергісін есептеу (тізбектей қосылған).
7.
Екі қабырғасы және арасындағы бұрышы бойынша үшбұрыштың ауданын есептеу.
8.
Бүтін сандармен арифметикалық амалдарды орындай алатын калькулятор программа
жасау.
9.
Тригонометриялық функцияларды және түбір табуды орындай алатын калькулятор
жасау.
10.
Цилиндр кӛлемін табу.
9 - зертханалық жұмыс.
Wіndows интерфейсінің компоненттерін қолданып файлдарды басқару
Әдістемелік нұсқаулар
Windows ОЖ стандартты диалогтық терезелерінде жұмыс жасау, мысалы файлды
таңдау, сақтау, түсін ӛзгерту және т.б.. C++ Builder ортасында диалогты терезелермен жұмыс
жасау үшін TOpenDialog, TSaveDialog компоненттері қолданылады.
Компоненттердің қасиеттерімен әдістері:
Filter – диалогпен кӛрсетілетін файл типі;
FilerIndex – үнсіздік бойынша қолданылатын фильтр нӛмірі;
DefaultExt – стандартты кеңейтілім, қолданушы кӛрсетпеген жағдайда;
Files – қолданушы таңдаған файл аты;
Title – текст, диалог тақырыпшасында кӛрінетін;
Execute() – диалогты шақыру.
Опциялары:
ofReadOnly — диалогты терезе пайда болғанда "Read only" жалаушасы белгіленген
болады;
ofHideReadOnly — диалогты терезе пайда болғанда "Read only" жалаушасын
кӛрсетпейді;
ofNoReadOnlyRetum — ОК батырмасын басқанда ―тек оқуға арналған‖ файлды таңдауға
тиым салып, басқа файл таңдау қажеттін хабарлайды.
ofPathMustExist — файл тек бар каталогтардың бірінде болатының кӛрсетеді.
Қолданушы файлды жоқ каталогтан іздеген жағдайда қате екенін хабарлайды;
ofFileMustExist — тек бар файлдардың бірін таңдауға болатынын кӛрсетеді;
ofOverwritePrompt — егер қолданушы жазба үшін бар файлды таңдаса, оны бекітуді
сұрайды;
ofShowHelp — диалогқа Help батырмасын қосады;
ofNo Validate — файл атын енгізгенде рұқсат етілмеген символдардын болмауын
тексереді;
ofAllowMultiSelect — бірнеше файлды бір мезгілде таңдауға мүмкіндік береді;
ofShareAware — таңдалынған файлды басқалардың қолдануына тексеруді сӛндіреді.
Бұл опция болмаған жағдайда файл басқа қосымшамен ашылған болса, басқалары бұл
файлды қолдана алмайды.
Файлды ашу мысалы:
OpenDialog1->Execute();
if (OpenDialog1->FileName!="")
{
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
Form1->Caption=OpenDialog1.Filename+” - My Text Editor”;
}
Бұл жерде файлды ашудан басқа, таңдалынған файл аты форма тақырыбында "My Text
Editor" мәтінімен жазылады.
TColorDialog компоненті – қолданушы түсті анықтауға арналған.
Color –түстер;
Опциялары:
cdFullOpen — диалогты толық кӛрсету. Қолданушы түсті таңдағанда түстердің жүйелік
палитрасынан ғана емес, ӛзі де түс бере алады;
cdPreventFullOpen — диалогты толық кӛрсетуге рұқсат бермейді;
cdShowHelp — Help батырмасын кӛрсетеді.
TPrintDlalog компоненті – тексті принтерге шығару параметрлерін орнатуға арналған.
TSavePictureDialog, TSavePictureDialog компоненттері –файл-бейне атын таңдауға
арналған, келешекте жазу немесе оқу үшін қолдануға болатын.
TFindDialog компоненті – бұл диалог арқылы мәтіндегі қажетті фрагментті іздеуді
және оған дайындықты жүзеге асырады, программист жазған кодтар арқылы.
Опциялары:
frDown — бұл опцияны қолданған жағдайда іздеудің алғашқы бағыты – тӛменге
(басынан аяғына дейін). Сәйкесінше радиокнопка орнатылады;
frDisableUpDown — бағытты таңдауға тиым салады. Радиокнопкалар тобы сұр түспен
кӛрсетіледі;
frHideUpDown — бағытты таңдауға тиым салады және радиокнопкалар тобын
кӛрсетпейді.
Жалаушалар күйіне келесі опциялар жауапты:
frHideMatchCase — регистр жалаушасын кӛрсетпейді;
frDisableMatchCase — регистр жалаушасын кӛрсетеді, бірақ ол белсенді болмайды.
Егер осы опциялар орнатылмаса, жалауша диалогта белсенді болады, және оның мәнін
қолданушы ӛзгерте алады. Оның мәні Options-тағы frMatchCasc опциясына сәйкес болады.
Қасиеті, әдістері және оқиғалары:
FindText – ізделінетін мәтін;
CloseDialog – диалогты жабады.
TrayIcon – жүйелік треймен жұмыс жасауға арналған.
Қасиеті:
PopupMenu – трейді контекстті мәзірмен байланыстырады, контекстті мәзір жеке
компонентпен қосылған болуы керек;
PopupMenuOn – контекстті мәзірді ашу;
RestoreOn – басты терезені жаю.
СSpinButton компоненті – жұп батырмалар қарама-қарсы бағытшамен, басқан кезде
белгілі бір ӛлшемде арттыруға немесе кемітуге арналған. Жоғарғы немесе тӛменгі
батырманы басқанда сәйкесінше OnDownClick, OnUpClick оқиғалары пайда болады.
СDirectoryOutline – бұл компонент файлдың иерархиялық бұтағын және ағымдағы
диск каталогтарын кӛрсетуге арналған.
Қасиеті:
Drive – ағымдағы диск мәні, яғни бұтақта кӛрсететін файлдық жүйе құрамы;
Directory – ағымдағы каталог;
Ауыстыру буферімен жұмыс жасайтын функциялар:
CopyToClipBoard() – буферге кӛшіру;
PasteFromClipBoard() – буферге қою;
CutToClipBoard() – буферге қию;
Ӛзіндік жұмыс тапсымалары
Келесі нұсқалар бойынша мәтіндік редактор құру:
1.
Файлды ашу, сақтау;
2.
Файлды баспаға шығару;
3.
Фон түсін ӛзгерту;
4.
Буфермен жұмыс жасау функциясын қосу;
5.
Жүйелік трейге жұлдызша қосу;
6.
Контекстті мәзірді жүйелік трейге шақыру мүмкіндігін қарастыру;
7.
Жүйелік трейдегі жұлдызшаны тышқанмен бір басқанда терезенің қалпына келуін
орнату;
8.
Трейді контекстті мәзірмен байланысын орнату;
9.
Файлдың иерархиялық бұтағын және диск каталогтарын кӛрсетуге арналған қосымша
құру;
10.
Ауыстыру буферімен жұмыс жасайтын қосымша құру.
10 - зертханалық жұмыс.
С++ Buildеr 6 ортасындағы графика. Объектіні қозғалысқа келтіру. Анимация
Әдістемелік нұсқаулар
1.Графиктік файлдардың форматтары. C++ Builder ортасында графиктік файлдардың
3 түрлі типімен жұмыс жасауға болады.
Файл типі
Кеңеймесі
Биттік матрица (Bitmaps)
Пиктограммалар
Метафайлдар (Metafiles)
IPEG Image file
EnhancidMetafiles
. bmp
. ico
. wmf
. ipg; . ipeg
. emf
Бұл файлдардың барлығында суреттер немесе кескіндер сақталады, бірақ бұлардың
файлдағы сақталу тәсілдері әртүрлі болады. Мысалы, .btm; .ico - кескіндер файлға биттік
матрица түрінде сақталады.Бұл биттік матрицалар кескіндегі әрбір пиксельдің (нүктенің)
түсін кӛрсетеді. Бұл биттік матрицада сақталған кескінді кез келген компьютер ӛзінің
мүмкіндігіне қарай кӛрсете алады. Келесі .іco кеңеймесімен берілген файлда
пиктограммалар (значоктар) сақталады. Пиктограммалардың ӛлшемін ӛзгерту қажет емес.
Метафайлдарда кескіннің биттері сақталмайды, керісінше сол кескінді салу әдістері
сақталады. Яғни олар сурет салу командалары.
2.Графиктік файлдарды сақтауға арналған C++ Builder-дің класстары. C++ Builder
ортасында графиктік кескінді сақтауға арналған келесі кластар қолданылады:
TBitMap Бұл кластардың барлығы үшін түпкі класс
TIcon TGraphic. Мұндағы TРicture класы – ӛзінде
TMetafile қалған 3 кластың қасиеттерін қамти алады.
TPicture
Сондықтан, тӛмендегідей і
TPicture.TІcon; TРicture.TМetafile;
ТРicture.TBitMap
қасиеттерін шақыру мүмкін болады.
3. Кескінді немесе суретті қарау және суретті салу.
1.Image компоненті. Бұл Additational жапсырмасында орналасқан. Мұнда жоғарыда
айтылған графиктік файлдар сақталған кескінді кӛруге болады.
Негізгі қасиеттері:
Қасиеттің аты
Қызметі және қабылдайтын мәндері
Picture(TPicture)
бұл қасиет файлдағы кескінді Image терезесіне жүктейді. Image
терезесінде суретті кӛруге ғана емес, сақтауға да болады.
AvtoSize (Boolean)
Егер бұл қасиет true мәнге ие болса, онда іmage компонентінің
ӛлшемдері ол кӛрсететін кескін ӛлшеміне қарай келтіріледі.
Stretch (Boolean)
Егер бұл қасиет true мәнге ие болса, керісінше, кескін немесе
сурет ӛлшемдері іmage компонентінің ӛлшемдеріне келтіріледі.
Бұл
қасиет
пиктограммаларға
әсер
етпейді,
себебі
пиктограммалардың ӛлшемдері ӛзгермейді.
Center (Boolean)
Егер бұл қасиет true мәнге ие болса, онда бұл кескін іmage
компонентінің ортасында орналасады.
Transparent (Boolean)
Егер бұл қасиет true мәнге ие болса, онда кескін кӛрінбей
тұрады, (түссіз (празрачный) болып кетеді), бұл әсіресе бір
кескіннің үстіне екіншісін беттестіргенде жиі қолданылады. Бұл
қасиет тек биттік матрицаларға ғана жүреді.
Іmage компонентінің терезесіне кескінді жүктеу үшін немесе сақтау үшін сәйкесінше
OpenPictureDialog және SavePictureDialog стандарт диалогтық терезе қолданылады.
4. Канва (Холст, кенеп, Canvаs. C++ Builder ортасында графикамен жұмыс істеу үшін
кескінді орналастыратын орын немесе бет керек. C++ Builder – де ол үшін Canvаs қасиеті
анықталған. Мұндай қасиет Image, Form, PaintBox, ListBox, StringGrid, BitMap, т.б. бар.
Канваның ӛзінің қасиеттері және әдістері бар. Канва нүктелерден тұрады, бұл нүктелердің
(х,у) координаталары болады. (4.16-сурет) Канваның (0,0) нүктесі оның сол жақ тӛбесінде
орналасады.
Бұл (х,у) координаталары пиксельмен есептеледі.
Пиксельдің ең негізгі қасиеті - оның түсі. Канвада сурет салу
үшін оның Pixels қасиеті қолданылады. Бұл екі
ӛлшемді массив түрінде анықталады және ол пикселдің түсін береді, яғни типі Pixels[X] [Y]
: clColor;
х
у
(0,0)
4.16-сурет
Жаттығу жұмыстары
f(x)=exp(0.5*Х) графигін [-5,5 ] аралығында h=0.01қадаммен салу керек /4.17-сурет/.
4.17-сурет. f(x)=exp(0.5*Х) функция графигі
Программа мәтіні:
#include
#pragma hdrstop
#include "Unit1.h"
#include "math.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float f(float x) //функцияның мәндерін есептеу
{
float f=exp(0.5*x);
return f;
}
void GrafSizy() // график сызатын функция
{ float x1,x2,y1,y2,x0,y0;
float x,mx,my;
//график салынатын облысты даярлау
int Ibik=Form1->Image1->ClientHeight; // image1-дин биктги
int Iyz=Form1->Image1->Width; //image1-дин узындыгы
// Y осьти сызу, ол (xY,yY) басталып (xY,cY) нүктеде бітеді;
float xY=Iyz/2;
float yY=10;
float cY=Ibik-10;
Form1->Image1->Canvas->MoveTo(xY,yY);
Form1->Image1->Canvas->LineTo(xY,cY);
// X осьти сызу ол (xХ,yХ) басталып (сХ, yX ) нүктеде бітеді;
float xX=10;
float yX=Ibik/2;
float cX=Iyz-10;
Form1->Image1->Canvas->MoveTo(xX,yX);
Form1->Image1->Canvas->LineTo(cX,yX);
//бастапкы мандерди аныктау
x1=-5; x2=5; y1=f(x1); y2=f(x2);
//масштабты тагайындау
mx=Iyz/(x2-x1); my=Ibik/(y2-y1);
//координата бас нуктеге (xY,yX) бару
x0=xY; y0=yX;
Form1->Image1->Canvas->MoveTo(x0,y0);
//график сызу басталды
x=x1;
while (x{
Form1->Image1->Canvas->Pixels[x0+mx*x][y0-my*f(x)]=clBlack;
x=x+0.01;
}
//
Form1->Image1->Canvas->TextOutA(x0,y0,'0');
Form1->Image1->Canvas->TextOutA(xY,yY,"Y");
Form1->Image1->Canvas->TextOutA(cX,yX,"X");
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
GrafSizy();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Text="Программа у=ехр(х) функциясынын [-5,5] аралыгындагы графигин 0.01
кадаммен салып шыгады";
}
5. Канвада қолданылатын сурет салу құралдарын пайдалану, Pen(қалам,қарындаш, ,
қылқалам. Канваның Pen(ТPen) қасиеті бар. ТРen қасиеті объект ретінде қарастырылады.
Бұл объектінің ӛзінің де қасиеттері бар.
Негізгі қаситтері:
Color – қалам түсі
Width – қалыңдығы (қалыпты жағдайда 1 пикселге тең!)
Height - биіктігі
Style – қалам стилін білдіреді
Канваның келесі қасиеттерін пайдаланып суреттер салуға болады:
PenPos(TPoint) – бұл қасиет канваның қаламының бастапқы позициясын анықтайды,
яғни қаламның қай жерде тұрғанының координатасын кӛрсетеді.
K=Image1->Canvas-> PenPos ;
MoveTo(x,y) – қасиеті қаламды координаталары (x,y) нүктесіне апарып қояды;
Draw(x,y; Graphic:); - бұл графиктік обьектіні канваға шығарады. График обьектісінің
орнында .bmp, .ico немесе метафайл болуы мүмкін.
6. Суретке мәтін шығару.TextOut(x,y; const AnsiString Text); - бұл х,у нүктесінен
бастап текст тұрақтысында сақталған мәтінді канваға шығарады.
7. Тұйық облыстарды бояу.FillRect(const TRect Rect); - канвада Rect тӛртбұрышын
бояйды. Бояу үшін қылқаламның түсі және стилі қолданылды.
FloodFill(x,y; TColor Color; TFillStyle FillStyle); - х,у нүктесінен бастап немесе х,у
нүктесі жататын тұйық облысты Color түске FillStyle стилмен немесе ӛрнекпен /узор/
бояйды.
Brush – бұл канваның қасиеті болып табылады. Канвадағы тұйық фигураларды бояйды.
Канваның ӛзінің фонын кӛрсетеді.
Brush обьектісінің негізгі қасиеттер:
Color – түсін береді
Достарыңызбен бөлісу: |