Консольдық программа құру
Программа мәтіні келесідей болады:
. . .
typedef double (*TFun)(double);
// Көрсеткіштер типін функцияға жүктеу
double fun1(double);
// Функция прототиптерін қолданушыға жүктеу
double fun2(double);
void Out_Rez (TFun,double,double,double);
void main()
{
double a, b, h;
puts("Input a,b,h");
scanf("%lf%lf%lf", &a, &b, &h);
puts("\n\t Function - 2*exp(x)");
Out_Rez (fun1,a,b,h);
puts("\n\t Function - sin(x)*sin(x)"); Out_Rez (fun2,a,b,h);
puts("\n Press any key ... ");
getch();
}
//---------- қолданушы функциясын жүзеге асыру ---------------------------------
double fun1( double r){
return 2*exp(r*r);
}
double fun2(double r) {
return pow(sin(r), 2);
}
62
void Out_Rez (TFun f,double xn,double xk,double h) {
for(double x=xn; x<=xk; x+=h)
printf(" x = %5.2lf, y = %8.4lf\n",x,f(x));
Өзіндік жұмысқа тапсырмалар варианттары :
1. Төмендегі есептерді функцияны пайдаланып шешіњдер:
1.
)!
(
!
!
m
n
m
n
C
m
n
2.
!
)!
(
!
k
k
m
m
F
2. Цилинддр көлемін есептейтін функцияны жаз . Функция параметрлері ретінде
цилиндрдің радиусы және биіктігі алынады .
3. Үлес (вклад ) бойынша кірісті (доход) есептейтін Dohod функцияны жаз .Функция
берілгендері : үлес шамасы , проценттік қойылым (жылдық ) және үлес уақыты (күндер
саны ).
4. Квадрат теңдеуді шешуді қамтамасыз ететін функцияны жаз . Функция параметрлері
ретінде теңдеудің коэффициенттері мен түбірлері алынады . Теңдеудің түбірлері туралы
функцияның қайтаратын мәндері : 2-әртүрлі түбір , 1-түбірлері бірдей , 0-теңдеудің
түбірлері жоқ . Сонымен қатар , функция берілгендердің дұрыстығын тексеру керек . Егер
берілгендер дұрыс болмаса , онда функция -1-ді қайтарады .
5. Аргумент ретінде алынған 2 бүтін санның ең үлкенін қайтаратын функцияны жаз .
6. Экранға бірдей параметрлерден тұратын жолды шығаратын функцияны жаз . Жол
ұзындығы және символ функция параметрлері болады .
7. Берілген санды дәрежелеу функциясын жазыңыз .
8. Берілген массив элементтерін өсу ретімен орналастыратын функция жазыңыз .
9. Берілген массив элементтерін кему ретімен орналастыратын функция жазыңыз .
10. Берілген массив элементтерінің ішіндегі оң элементтерін 0- мен , ал теріс элементтерін
1-мен ауыстыратын функция жазыңыз .
11. Берілген бүтін санды 2-еселеп , сол санның факториалын есептейтін функция құрыңыз .
12. 1-ден 100-ге дейінгі тақ сандардың қосындысын беретін функцияны жазыңыз.
13. 1-ден 100-ге дейінгі жұп сандардың қосындысын беретін функцияны жазыңыз .
14. 1-ден 100-ге дейінгі жай сандардың қосындысын беретін функцияны жазыңыз .
15.
Матрицаны транспонирлеуді атқаратын функцияны жазыңыз .
Бақылау сұрақтары:
1. Функцияларды құру кезінде неге көңіл аудару керек ?
2. Функцияны шақыруды қалай ұйымдастырамыз ?
3. Функция операторлары қалай орындалады ?
4. «Функция» терминнің мағынасы қандай?
5. Функцияны анықтаудың жалпы синтаксисі қандай?
6. Функцияның формальды және фактілі параметрлердің бір бірінен айырмашылығы
қандай?
7. Функцияның белгілі және белгісіз хабарлаудың айырмашылығы қандай?
8. Функцияны шақыру үрдісін сипаттандар?
9. «Рекурсивті функция» терминнің мағынасы қандай?
Блиц-тест
1. Компоненттердің С++ тілінің басқа объектілер класстарынан ерекшеліктері келесі
түрде болады
A. барлық жауап дұрыс
B. компоненттердің барлығы ортақ TComponent класынын ұрпағы
63
C. компоненттер жаңа класс құру үшін базалық класс ретінде пайдаланыла алмайды;
D. компоненттер new операторы арқылы динамикалық жадыда (heap) орналасады
E. компоненттердің көбісі қолданушы интерфейсін басқару элементтері болып табылады;
2. Қасиеттер дегеніміз
A. объект, әдістер, қасиеттер
B. компоненттің сыртқы түрі мен жұмысын анықтайтын атрибуттар.
C. инкапсуляция, полиморфизм, мұралау
D. класс, базалық класс, туынды класс
E. ашық, жабық, қорған режим
3. Қасиеттерді сипаттау синтаксисі:
A. property <қасиеттипі> <қасиет аты> = {< атрибуттар тізімі>} ;
B. property <қасиет аты> = {< атрибуттар тізімі>} ;
C. public <қасиеттипі> <қасиет аты> = {< атрибуттар тізімі>} ;
D. private <қасиеттипі> <қасиет аты> = {< атрибуттар тізімі>} ;
E. protected <қасиеттипі> <қасиет аты> = {< атрибуттар тізімі>} ;
4. void __fastcall TForm1::Button1Click(TObject *Sender)
{float x,y;
//айнымалыны сипаттау
x=StrToFloat(Edit1->Text);// х айнымалысының мәнін жолдықтан нақты
айналдырып //енгізу
y=3*pow(x,2)+7;
//у функциясының мәні
Edit2->Text=FloatToStr(y);
X=3 болғанда нәтиже неге тең болады?
A. 15
B. 25
C. 34
D. 19
E. 29
5. #pragma package(smart_init) директивасының қызметі қандай
А)инициализация пакеттерінің тізімін анықтайды.
Б)Unit1.h файлын іске қосады
В)берілген файлмен атымен аты сәйкес болатын *.dfm файлын формада қолдану
қажеттігі
Г)форма объектісін хабарлау
Д)hdrstop опциясы препроцессор жұмысының өзгешеліктерімен байланысты
Жұмысты орындауға тапсырмалар
1. Лекциялар, әдебиеттер, әдістемелік нұсқау бойынша теориялық материалды қайталау.
2. Бақылау сұрақтарына ауызша жауап беру.
3. Тапсырма вариантын таңдау және орындау
4. Есеп жазу
Есеп мазмұны
1. Жұмыстың тақырыбы және мақсаты.
2. Бақылау сұрақтарына жауап жазу.
3. Тапсырманың блок-схема, алгоритмі.
4. C++ Builder тілінде программасы
64
Әдебиеттер
1. Атымбаева Объектіге бағытталған программалау негіздері.Алматы, 2005 ж.
2. Програ ммирование в среде С ++ Builder. А. Вальвачев, Д. Сурков, К. Сурков.
Мин.1998г
3. С ++ Builder. С.В.Глушаков, В.Н. Зорянский, С.Н. Хоменко
4. С++ и информатика . Н.Культин, М. 2002г.4. 4 4
5. С ++ Builder книга рецептов. В. Ермолаев. Кудиц. – образ. 2006г.
6. Справочник по С ++ Builder. Учебное пособие. 2005г.
7. Разработка приложений в среде С ++ Builder 6 и решение задач информационно-
радиационного профиля. Учебное пособие. А.И. Купчишин, Т.А. Шмыгалева.
Лабораториялық жұмыс № 19-20
Тақырыбы: C++ Builder ортасында графикамен жұмыс
Мақсаты: - С/С++ тілінің графикалық мәліметтерді өңдеу мүмкіндіктерімен, графикалық
компоненттер танысу.
-
, файлдарында сипатталған негізгі графикалық
функциялардың прототиптерін үйрену.
Материалдар және жабдықтар: ДК, C++ Builder программалау ортасы
Жұмыстың мазмұны және орындалу тәртібі:
1. Вариант бойынша тапсырманы алу
2. Есептің қойылымы
3. Есепті шешу алгоритмі
4. Есепті шешу программасын C++ Builder программалау ортасында құру
5. Программа листингі
6. Орындалған жұмыс жөнінде есеп беру
Әдістемелік нұсқау
Графикалық компоненттер
Windows операциялық жүйесі өңдеушілерге графикалық бейнелерді құруға арналған
қосымша құрал GDI (Graphics Device Interface) графикалық қондырғылардың интерфейсін
ұсынады. GDI өзінің көптеген қосымша әрекеттерімен көп уақыт алады. Бұл әрекеттер
программисттерді негізгі міндеті – графика құрудан алаңдатады.
C++ Builder Windows GDI функцияларын әртүрлі деңгейде қолданады. Ең қажет
тәсілдерінің бірі – бұл графикалық компоненттердің өз бейнелерін монитор экранында
көрсетуі болып табылады. GDI функциясын тікелей шақырғанда таңдалған сурет салуға
арналған құрал-жабдықтың міндеттелуі үшін контекст қондырғысының дескрипторын беру
қажет. Графикалық бейнелермен жұмыс жасап болған соң контекст қондырғысын қалпына
келтіру керек. Сонда ғана одан шығуға болады. Осындай деңгейдегі графикамен жұмыс
орындауға қарағанда C++ Builder қарапайым әрі аяқталған графикалық компонент
интерфейсі Canvas(Канва) ұсынады. Бұл дұрыс контект қондырғысын көрсеттеді және бұл
графикалық компонент жұмыс аяқталғаннан кейін немесе қажет болмаған жағдайда оны
тоқтатуға болады. істен шығуға болады.
Windows
GDI функциясына қарағанда канва
негізінен барлық құралдардың сипаттамасын көрсететін қасиеттерге ие.
Негізінде қолданушының орындайтын әрекеті бұл графикалық компоненттермен
жұмыс жасауда қолданылатын құрал-жабдықтың сипаттамаларын білу қажет. Қолданатын
құрал –саймандардың тоқтатуда, жүйелік ресурстарды құруда қадағаламауға болады яғни
канва бұл әрекеттерді өзі атқарады C++ Builder-дің графикамен жұмыс істеудегі
ерекшеліктерінің бірі – бұл жүйенің графикалық ресурстарына кэш жадыны қолдану болып
табылады. Егер программада сурет салуға арналған құрал-жабдықтардың бірі қайтадан
65
құрып қолдану қажет болса онда барлық қадамдарды қайталауға тура келеді. C++ Builder
кэш жадыны графикалық ресурстарды сақтауға қолданады. Сондықтан жаңадан сурет
салатын болсақ онда көп қолданылатын құрал-жабдық кэш жадыдан өздігінен таңдалады.
Графикалық қосымшаның қайталану операциясының тиімділігі өсуде.
Суреттермен жұмыс
C++ Builder ортасындағы графикалық жұмыстардың негізгі мазмұны Canvas бұл
канвада өзіңізге қажет формада сурет салу немесе онда орналасқан басқа да
компоненттерден тұрады. Сонымен бірге сыртқы бейнелерді яғни пиктограммаларды,
метафайлдарды, палитраларды автоматты түрде басқаруды орындайды. C++ Builder
ортасында графикаға қатысты 3 негізгі обхект бар. Олар:
-Канва – формада, графикалық компоненттерде, принтеде және сурет салуға арналған
биттік карта бетін көрсетеді. Канва өзіндік объект емес. Ол әрқашанда басқа графикалық
объект қасиеті болып табылады.
-Графика – кейбір файлдар мен ресурстардың растрлық бейнесі болып келеді. C++
Builder Tbitmap, Ticon және Tmetafile объектілі класын Tgraphic өзіңіздің қосымшаңызда
әртүрлі графиканы қолдануға арналған минимальді стандартты интерфейсті көрсетеді.
- Сурет – әртүрлі объектілердің класын және графиканың контейнерін көрсетеді.Сөйтіп
Tpicture контейнерлі класы метафайлдар мен пиктограммаларды жүктейді. Көптеген
бейнелерді басқару компоненттері Tpicture қасиетіне ие. Бұл әртүрлі түрдегі графикадағы
бейнелерді көрсетуге мүмкіндік береді. Әдетте суретпен жұмыс жасауда Tpicture контейнері
арқылы қатынау ашық болғандықтан графикалық объект бөлігімен жұмыс орындаймыз. Егер
сізге белгілі бір графикалық объектке қатынау көрсету қажет болса онда оны берілген
суретке graphic қасиетін береміз.
Графикалық файлдар
Кез-келген уақытта C++ Builder қосымшасымен жұмыс жасауда суреттермен
графикаларды бейнелер файлардарының стандартты форматында сақтау керек. Бейнелердің
сақталатын және бастапқы файлдарының аты әрқашан сәйкес келуі немесе өзге болуы
мүмкін. Файлдағы суреттің бейне түрінде жүктелуі LoadFromFile әдісін қолдануға болады.
Ал бейнені файлда сақтау үшін SaveToFile сурет әдісін пайдаланамыз. Бұл әдістердің жалғыз
параметрі файл аты болып табылады. LoadFromFile әдісі графикалық объектілерді құру мен
жүктеу кезіндегі түрлерін тануда файлдар кеңейтілуін қолданады.
Void_fastcall TForm1::FormCreate(TObject*Sender) {
Image1->Picture->LoadFromFile (“C:\\windows\\clouds.bmp”);
Мұнда сурет биттік образдағы файлдің стандартты кеңкйтілімін анықтайды және Tbitmap
объектілі класы сияқты өз графикасын құрады. Одан кейін көрсетілгенатпен файлдан
бейнелерді жүктеу үшін LoadFromFile әдісін шақырады.
Биттік бейнені көшіру
C++ Builder бір канвадан келесі канваға бейнелерді көшірудің төрт тәсілін көрсетеді.
Өзіңізге қажет көшіру тәсілін келесі кестеден таңдауға болады.
Қажет нәтиже
Әдіс
Графиканы толығымен көшіру
Draw
Масштабтау арқылы көшіру
StretchDraw
Канваның тікбұрышты аумағын көшіру
CopyRect
Растрлық операциялармен көшіру
BrushCopy
66
Күрделі графикалық бейнелерді құруда форма немесе компоненттерді канвада
салудан алшақтаған жөн.Ол үшін алдымен биттік бейнедегі объектіні құру үшін оны канвада
салуға болады және содан кейін оны көшіруге мүмкіндік туады. Биттік бейнені экраннан тыс
канвада салу үшін графикалық компоненттердің Paint әдісі қолданылады. Биттік образдағы
экраннан тыс күрделі бейнелерді салуға Samples бетіндегі Индикатор (Gauge) арқылы жүзеге
асады.
Форманы жобалау
Қосымшаны жобалауда келесі компоненттерді палитрадан формаға алып бару арқылы
жүзеге асады:
Additional бетіндегі Timage контейнері мен System бетіндегі TpaintBox контейнері.
DrawBox объектісінің Timage және PaintBox класының TPaintBox класы
графикаларды екі есе буферлейді. Алдымен DrawBox объектілерінде канвада фигура
мен фон салады одан кейін PaintBox объектісінде канва бейнесін экранға көшіреді.
Standard бетінде TPanel құрал – саймандар панелі.
System бетіндегі таймер TTimer.
Анимация жылдамдығын басқару үшін Samples бетіндегі TspinEdit компонентін
редакциялау.
Программаның жұмыс жасауын басқару үшін Additional бетіндегі TSpeedButton
батырмасы.
Dialogs бетінің TopenDialog компоненті
Анимация
1-сурет негізінен қосымша формасын көрсетеді. Clouds.bmp файлындағы
бұлтты күннің бейнесі фон түрінде көрсетіледі. Ал қозғалмалы фигура міндетін Planes
файлындағы екі самолет пен Helicopters.bmp. файлдағы вертолеттер атқарады. Figures
объектілі компонентінің Picture қасиетін екі рет тышқанмен шерт арқылы бейнелердің
редакторын ашуға болады. Әрбір фигураның бейнесі үштік биттік образда көрсетілген. Яғни
алғашқы екеуі фигура анимациясының фазасы, ал үшіншісі сыртқы контурдың бинарлы
қалқасын (маска) көрсетеді. Екі фигурада түстерімен ажыратылады. Олар бірдей формада
сондықтан бір қалқаны бөліседі.
1-сурет
TSpeedButton компонентінің батырмалары программаны басқаруға арналған. Бірінші
батырмасы Background объектісін TImage класының фон бейнесін файлдан ашады әрі
жүктейді.Ал екінші батырма Figures объектісінің Timage класындағы фигура бейнесін
файлдан ашады және жүктейді. Үшінші батырма фигураларды бастапқы күйіне әкеледі және
таймерді қосады. TSpinEditредакциялау компонентінің батырмасы негізінде таймер
интервалының мәнін үлкейтіп және кішірейтіп отырады. Timerl объектісінің OnTimer
67
қасиеті қосымша ядросының өңдеушісі болып табылады.
2-сурет. DrawBox және PaintBox объектілерінің канвадағы структурасы
Мысал
Сhart және Image компоненттерінің көмегімен таңдалған функцияның графигін сызатын
программу құру.
Форманы қалыпқа келтіру
Программа мәтіні:
. . .
//---------------------------------------------------------------------------
double a,b,h,y_min,y_max;
int n;
typedef double (*Tfun)(double);
Tfun f;
double fun0(double);
double fun1(double);
double fun2(double);
//----------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Text="-3,1416";
// a
Edit2->Text="3,1416";
// b
Edit3->Text="50";
// n
RadioGroup1->ItemIndex = 0;
}
//----------------- Задать начальные значения ------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double x, r;
68
a=StrToFloat(Edit1->Text);
b=StrToFloat(Edit2->Text);
n=StrToInt(Edit3->Text);
h = (b-a)/n;
switch(RadioGroup1->ItemIndex) {
case 0: f = fun0; break;
case 1: f = fun1; break;
case 2: f = fun2; break;
}
y_min = y_max = f(a);
for (x = a+h; x<=b; x+=h) {
r = f(x);
if(y_min>r) y_min = r;
if(y_max
}
}
//------------------------ Построить график в Chart ----------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Chart1->Series[0]->Clear();
// Очистка графика
for(double x=a; x<=b; x+=h)
Chart1->Series[0]->AddXY(x,f(x));
}
//--------------------- Копировать в буфер ----------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Chart1->CopyToClipboardMetafile(True);
}
//--------------------- Построить график в Image ---------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int xmax, ymax, xt, yt, y0, x0;
double hx,hy,x;
Image1->Canvas->Pen->Color=clBlack; // Установка цвета пера
// Поиск координат правого нижнего угла холста Image
xmax = Image1->Width;
ymax = Image1->Height;
// Закрашивание холста Image текущей белой кистью
Image1->Canvas->Rectangle(0,0,xmax,ymax);
// Поиск середины холста
y0=ymax/2; x0=xmax/2;
// Вычерчивание координатных линий
Image1->Canvas->MoveTo(0,y0);
Image1->Canvas->LineTo(xmax,y0);
Image1->Canvas->MoveTo(x0,0);
Image1->Canvas->LineTo(x0,ymax);
Image1->Canvas->Pen->Color=clRed;
// Установка цвета пера
Image1->Canvas->Pen->Width=2;
// Установка ширины пера
// Поиск шагов по х и у с масштабированием
hx=(b-a)/xmax;
hy=(y_max-y_min)/ymax;
Image1->Canvas->MoveTo(ceil(x0+a/hx),ceil(y0-f(a)/hy));
for(x=a; x<=b; x+=h)
Image1->Canvas->LineTo(ceil(x0+x/hx),ceil(y0-f(x)/hy));
69
}
//------------------------------------------------------------
double fun0(double r) {
return sin(r);
}
double fun1(double r) {
return r*r;
}
double fun2(double r) {
return r*r*r;
}
Тапсырма: Берілген функция үшін масштаб және ауысуды анықтаңыз. Функцияның
графигін берілген интервалда және берілген ауысуы бойынша сызатын программа құрыңыз.
Координат өстерін енгізуді карастырыңыз. -
Аргументтердің және функцияның мәндерінің таблицасын сызатын программа құрыңыз.
Тапсырма варианттары.
Вариант
функция
Интервал
шаг
1
y=e
x
sinx
[0;2
]
/10
2
y=x
3
[-5;5]
0,5
3
y=xsinx
[0;2
]
/10
4
y=|x|
[-10;10]
1
5
y=
x
[0;64]
4
6
y=(sinx)/x
[
/;2]
/10
7
y=xcosx
[0;2
]
/10
8
y=x
2
+4x
[-5;5]
1
9
y=tgx
[-
;]
/5
10
y=x
2
+sinx
[-
;]
/8
11
y=2x
2
+x+4
[-5;5]
1
12
y=shx
[-1;1]
0,1
13
y=thx
[0;2]
0,2
14
y=chx
[-1;1]
0,1
15
y=-2x
2
[-5;5]
1
Бақылау сұрақтары:
1. С++ Builder ортасының графикалық мүмкіндіктері
2. С++ Builder ортасының графикалық примитивтерді құру арналған компоненттері
3. Графиктерді тұрғызу ерекшеліктері
4. Пиксел дегеніміз не?
5. Графикалық ақпарат қалай сақталады?
6. Графикалық режимге қалай ауысуға болады?
7. Текстік режимге қалай оралуға болады?
8. Шрифттерді қалай таңдауға болады?
9. Сызық сипаттамасы мен қалындығын қалай тағайындауға болады?
10. Бояу стилін қалай тағайындауға болады?
11. Графикалық экранда терезені қалай ашуға және қалай жабуға
болады?
12. Горизонталь және вертикаль бойынша нүктелердің максимальді
координат мәндерін қалай алуға болады?
70
13. Терезенің координаттар жүйесінде ағымдық координаттарды алуға
болады?
Блиц-тест
1. ListBox компонентінің Columns қасиет
A. тізімде белгіленген элементтің реттік номерін көрсетеді
B. компонент терезесіне тізім толық бейнеленбеген болса, бағандар санын анықтайды
C. тізімдегі жолдардың санын анықтайды.
D. тізімдегі жолдар автоматты түрде алфавит бойынша сұрыпталатындығын көрсетеді
E. тізімнің қандай элементтері белгіленгендігін анықтайтын индекстік массив.
Достарыңызбен бөлісу: |