2. C++ Builder-де форма модулінің кеңеймесін көрсетіңіз
A. *.res
B. *.cpp
C. *.dcu
D. *.dof
E. *.dfm
42
3. Программаны компиляциялау C++ Builder -де қалай орындалады?
A. Ctrl+F9 пернелер комбинациясын басу арқылы
B. F9 пернесін басу арқылы
C. Shift+F12 пернелер комбинациясын басу арқылы
D. F8 пернесін басу арқылы
E. F4 пернесін басу арқылы
4. Әдіс
A. инкапсуляция, полиморфизм, мұралау
B. компоненттің сыртқы түрі мен жұмысын анықтайтын атрибуттар.
C. объект, әдістер, қасиеттер
D. компонентпен байланысты болатын және объекттің бөлігі ретінде қарастырылатын
функция болып табылады
E. класс, базалық класс, туынды класс
5. #include "Unit1.h" директивасының қызметі
A. hdrstop опциясы препроцессор жұмысының өзгешеліктерімен байланысты
B. берілген файлмен атымен аты сәйкес болатын *.dfm файлын формада қолдану
қажеттігі
C. форма объектісін хабарлау
D. Unit1.h файлын іске қосады
E. инициализация пакеттерінің тізімін анықтайды.
Жұмысты орындауға тапсырмалар
1. Лекциялар, әдебиеттер, әдістемелік нұсқау бойынша теориялық материалды қайталау.
2. Бақылау сұрақтарына ауызша жауап беру.
3. Тапсырма вариантын таңдау және орындау
4. Есеп жазу
Есеп мазмұны
1. Жұмыстың тақырыбы және мақсаты.
2. Бақылау сұрақтарына жауап жазу.
3. Тапсырманың блок-схема, алгоритмі.
4. C++ Builder тілінде программасы
Әдебиеттер
1. Атымбаева Объектіге бағытталған программалау негіздері.Алматы, 2005 ж.
2. Програ ммирование в среде С ++ Builder. А. Вальвачев, Д. Сурков, К. Сурков.
Мин.1998г
3. С ++ Builder. С.В.Глушаков, В.Н. Зорянский, С.Н. Хоменко
4. С++ и информатика . Н.Культин, М. 2002г.4. 4 4
5. С ++ Builder книга рецептов. В. Ермолаев. Кудиц. – образ. 2006г.
6. Справочник по С ++ Builder. Учебное пособие. 2005г.
7. Разработка приложений в среде С ++ Builder 6 и решение задач информационно-
радиационного профиля. Учебное пособие. А.И. Купчишин, Т.А. Шмыгалева.
43
Лабораториялық жұмыс № 11-12
Тақырыбы: С++ Builder ортасында жазбаларды өңдеу
Мақсаты: Стандартты компоненттерді қолданып программалау әдістерін, матрицаларды
енгізу және шығару әдістерін меңгеру.
Материалдар және жабдықтар: ДК, C++ Builder программалау ортасы
Жұмыстың мазмұны және орындалу тәртібі:
6. Вариант бойынша тапсырманы алу
7. Есептің қойылымы
8. Есепті шешу алгоритмі
9. Есепті шешу программасын C++ Builder программалау ортасында құру
10. Программа листингі
6. Орындалған жұмыс жөнінде есеп беру
Әдістемелік нұсқау
Структура – бір атпен біріктірілген бір немесе бірнеше әр түрлі типті айнымалылар
тобы. Структура struct қызметші сөзімен құрылады. Структураның жалпы құрылымы
төмендегідей:
struct тег {
тип1 иден1;
тип2 иден2;
… …
типN иденN;
};
мұндағы тег мәліметтердің жаңа типі болып саналады және оны айнымалыны сипаттауда
қолдануға болады.
Сипатталған структура негізінде айнымалы құру үшін
struct <тег> <айнымалы>
С++ тілінде struct қызметші сөзін көрсетпесе де болады:
<тег> <айнымалы>
Айнымалыны структураны құру кезінде де анықтауға болады:
struct тег {
тип1 иден1;
тип2 иден2;
… …
типN иденN;
} <айнымалы>;
Егер структура типті басқа айнымалылар құрылмайтын болса, структура тегін көрсетпеуге
болады. Мұндай структура атаусыз (безымянный) деп аталады:
struct {
тип1 иден1;
тип2 иден2;
… …
типN иденN;
} <айнымалылар тізімі>;
Структуралар іштестірілген де болуы мүмкін:
struct тег1 {
тип1 иден1;
44
тип2 иден2;
тип3 иден3;
};
struct тег2 {
тип1 иден1;
тип2 иден2;
struct тег1 иден3;
};
Структура элементтерін нүкте операторының көмегімен алуға болады:
<айнымалы>.<элемент>
Кейбір жағдайларда структураны функция денесінде қолдану қажеттігі туындайды. Ондай
жағдайда функция прототипінде структураны функция параметрі ретінде беру керек (С++
тілінде struct қызметші сөзін көрсету міндетті емес):
// С және С++ тілдерінде
<функция типі> <функция аты> (struct <тег> <айнымалы>)
// Тек қана С++ тілінде
<функция типі> <функция аты> (<тег> <айнымалы>)
Структуралар массиві. Структуралар массивін сипаттау структура типті айнымалыны
сипаттауға ұқсас. Мысалы, struct <тег> <айнымалы-массив>
Структураларға көрсеткіш. Көрсеткіш келесі түрде сипатталуы мүмкін:
struct <тег> *<айнымалы>
Бұндай жағдайда структуралық айнымалының кез-келген элементін мына әдістердің бірімен
алуға болады:
(*<айнымалы>).<элемент> немесе <айнымалы> –> <элемент>
Мысал: 9 адамнан тратын оқушылардың сабақ үлгерімін анықтайтын қосымша құру. Әрбір
жазба фамилиясы, Аты-жөні, сонымен қатар физика, математика және шығармадан алған
бағалардан тұрады. Орташа балл бойынша сұрыпталған тізімді шығару.
Формадағы компоненттердің орналасуы:
#include
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
45
TForm1 *Form1;
typedef struct {
AnsiString FIO;
int otc[3];
double srb;
} TStudent;
TStudent Stud[100],st;
int nzap=-1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FromCreate(TObject *Sender)
{
Edit1->Text=””;
Edit2->Text=””;
Edit3->Text=””;
Edit4->Text=””;
Memo1->Clear();}
void __fastcall TForm1::BitButton1Click(TObject *Sender)
{nzap++;
Stud[nzap].FIO=Edit1->Text;
Stud[nzap].otc[0]=StrToInt(Edit2->Text);
Stud[nzap].otc[1]=StrToInt(Edit3->Text);
Stud[nzap].otc[2]=StrToInt(Edit4->Text);
Stud[nzap].srb=( Stud[nzap].otc[0]+ Stud[nzap].otc[1]+ Stud[nzap].otc[2])/3.0;
Memo1->Lines->Add(Stud[nzap].FIO+””+IntToStr(Stud[nzap].otc[0])+””+
IntToStr(Stud[nzap].otc[1])+””+ IntToStr(Stud[nzap].otc[2]));
Edit1->Text=””;
Edit2->Text=””;
Edit3->Text=””;
Edit4->Text=””;
}
void __fastcall TForm1::BitButton2Click(TObject *Sender)
{
Memo1->Lines->Add(“Result”);
for(int i=0;i<=nzap-1;i++)
for(int j=i+1;j<=nzap-1;j++)
if (Stud[i].srb>Stud[j].srb)
{
St=Stud[i];
Stud[i]=Stud[j];
Stud[j]=st;}
for(int i=0;i<=nzap;i++)
if (Stud[i].srb>4.5)
Memo1->Lines->Add(Stud[i].FIO+””+IntToStr(Stud[i].otc[0])+””+ IntToStr(Stud[i].otc[1])+””+
IntToStr(Stud[i].otc[2]));
}
46
Тапсырма варианттары.
1. Тек қана "өте жақсы", "өте жақсы", " жақсы", тек қана " жақсы" және "қанағаттанарлық",
тек қана "қанағаттанарлық" бағалары бар студенттердің тізімін шығару программасын
құр.
2. Бір курс ішінен бірдей фамилиялалы адамдар оқитын группаны табу программасын құр.
3. Берілген мекемедегі фамилиялары "А" әрпінен басталатын жұмысшылар тізімін және
олардың орташа айлық жалақысын шығаратын программа құр.
4. Етік магазинінің әмбебаб тізімі жазу түрінде берілген. Ең қымбат әйел адам етігін
анықтаңыз, сонымен қатар ер адам етігінің әмбебаб аттары және олардың бағаларын
шығаратын программа құрыңыз.
5. Телефон анықтамасын модельдейтін программа құрыңыз. Әйел адамдардың телефон
нөмірлерін және үйінің адресстерін шығарыңыз.
6. Берілген жөндеу мекемесінде жөндеуден өткен машиналар тізімі жазу түрінде берілген.
Қызыл түсті машиналардың нөмірлерін және маркасын табу программасын құрыңыздар.
7. Кейбір мекеменің жұмысшылары туралы мағлұмат жазу түрінде берілген. Экранға
мамандығы және жасы көрсетілген ер адамдар тізімін шығаратын парограмма жазыңыз.
8. Атын, автор фамилиясын, шыққан жылын, бағасын және тиражын көрсетіп, кітаптар
каталогын құрыңыздар. Экранға алфавит және тираж бойынша реттелген кітаптар тізімін
шығаратын программа құр.
9. Теміржол кассасында келесі ақпараттар бар: поездар нөмірі, белгіленген станция, бар
билет. Белгіленген станцияға 125 билет бар поезд нөмірін анықтайтын программа
жазыңыз.
10.
Өз группаңыздың тізімін алфавит және туған жылы бойынша реттеңіз. Жауапты
жалпылама түрінде щығарыңыз.
11.
Кітапханаға қарыз адамдар туралы ақпарат беретін программа құрыңыз. Олардың
фамилиялары, адресстері және жұмыс орны. Қарызы бар қолданушы кітапхананың жалпы
клиенттері тізімінде "қ" әрпі бойынша кездесуі керек.
12.
Фамилиялары бас әрпі Б мен Л әріптері аралығында жатқан стомотология клиенттері
тізімін шығартын программа жаз.
13.
Осы оқу жылы бойы жалғыз төрт алған студенттің анкетасын шығаратын программа
құрыңыз, тек егер қалған бағалары бес болса.
14. Группаның орташа балын тауып, экранға балы орташадан жоғары болатын студенттердің
тізімін шығарыңыз.
15. Кейбір мекеменің жұмысшылары туралы мағлұматтар келесі түрде шығару керек: егер
әйел адам болса, онда оның аты- жөнін және көзінің түсін, егер ер адам болса, онда оның
аты- жөнін және темекіге көзқарасын шығарыңыз.
Бақылау сұрақтары
1.
С/С++ тілінің қандай қосымша типтерін білесіңдер?
2.
Структура дегеніміз не?
3.
Тегі көрсетілмеген структура қалай аталады?
4.
Структураны қандай түрде сипаттауға болады?
5.
Біріктірудің структурадан айырмашылығы неде?
6.
Жадыны үнемдеу кезінде нені қолданған тиімді? (структураны, әлде біріктіруді)
Блиц-тест
1. Return операторы
A. қайталану операторы
B. қайтып оралу операторы
C. бос оператор
D. меншіктеу операторы
E. үзіп тастау операторы
47
2. Ақпаратты жасыру принципіне сәйкес модуль мәтіні
A. интерфейстің бас (заголовочный) файлы, жүзеге асырушы файлы болып 2-ге бөлінеді
B. интерфейстің бас (заголовочный) файлы, жүзеге асырушы файлы, бас меню болып 3-ке
бөлінеді
C. жүзеге асырушы файлы мен программадан тұрады
D. функцияны хабарлау мен сипаттаудан тұрады
E. объектілі бағытталған тәсіл кезінде қосымша өтіп жатқан оқиғалар мен олардың
объектілеріне әрекетін анықтаудан тұрады
3. Инкапсуляция
A. класс айнымалаларын инициализациялауға және ждыдан орын бөлуге арналған
айрықша функция болып табылады.
B. бұл туыстық объектілердің қасиеттері .
C. бір структурада мәліметтермен қатар оларды өңдеуге арналған функциялардың
берілуі.
D. жаңа класты ескі класс түрінде құру механизмі
E. бұл айрықша функция, жойылатын объект алып тұрған динамикалық жадыны босату
қызметін атқарады
4. Келесі программа орындалғаннан кейін экранға қандай мән шығады:
{ int x= 1, y;
y=1;
if (x<=0) if (x= =0) y=0; else y=-1;
Edit1->Text=FloatToStr(y); }
A. x=1 y=1
B. y=-1
C. y=0
D. y=1
E. x=-1 y=-1
5. Protected-бұл
A. кластың экземпляры
B. кластың қорғалған бөлігі
C. кластың қасиеттері мен әдістері
D. кластың ашық бөлігі
E. кластың тасаланған бөлігі
Жұмысты орындауға тапсырмалар
1. Лекциялар, әдебиеттер, әдістемелік нұсқау бойынша теориялық материалды қайталау.
2. Бақылау сұрақтарына ауызша жауап беру.
3. Тапсырма вариантын таңдау және орындау
4. Есеп жазу
Есеп мазмұны
5. Жұмыстың тақырыбы және мақсаты.
6. Бақылау сұрақтарына жауап жазу.
7. Тапсырманың блок-схема, алгоритмі.
8. C++ Builder тілінде программасы
Әдебиеттер
1. Атымбаева Объектіге бағытталған программалау негіздері.Алматы, 2005 ж.
2. Програ ммирование в среде С ++ Builder. А. Вальвачев, Д. Сурков, К. Сурков.
48
Мин.1998г
3. С ++ Builder. С.В.Глушаков, В.Н. Зорянский, С.Н. Хоменко
4. С++ и информатика . Н.Культин, М. 2002г.4. 4 4
5. С ++ Builder книга рецептов. В. Ермолаев. Кудиц. – образ. 2006г.
6. Справочник по С ++ Builder. Учебное пособие. 2005г.
7. Разработка приложений в среде С ++ Builder 6 и решение задач информационно-
радиационного профиля. Учебное пособие. А.И. Купчишин, Т.А. Шмыгалева.
Лабораториялық жұмыс № 13-14
Тақырыбы:С++ Builder ортасында файлдармен жұмыс жасау алгоритмдері
Жұмыс мақсаты: файлдық мәліметтер структурасын программалау және алгоритмдеуді
үйрену; файл структурасын проектілеу; файлға мәліметтерді енгізу; файлдан мәліметтерді
оқу.
Материалдар және жабдықтар: ДК, C++ Builder программалау ортасы
Жұмыстың мазмұны және орындалу тәртібі:
1. Оқып білу:
Файлдық мәліметтер структурасымен байланысты негізгі терминологияны;
Файлдарды өңдеуде программалау тілінің мүмкіндіктері.
2. Берілген тапсырма бойынша алгоритм құру.
3. Есептің программасын құру.
4. Программаның және негізгі мәліметтердің тексттік варианттарын жасау.
Әдістемелік нұсқау
Дискідегі файлмен жұмыс жасау потокқа көрсеткішті хабарлаудан басталады. Мұндай
хабарлаудың форматы мынадай болады:
FILE *көрсеткіш аты
Мысал: FILE*fp;
Файл сөзі структуралық тектің стандарттық аты. Ол тақырып файлында
хабарлануы болады, FILE структурасында потоктың ағымдағы орнының буфердегі
көрсеткіші жғне көрсеткіш ақпараты болады. Келесі қадам потокты ашу болып табылады..
Ол стандартты функция fopen() арқылы ашылады.
Бұл функция поток көрсеткішіне дәл мән береді және оның мәні алдын-ала
хабарланѓан көрсеткішке меншіктеледі.
Көрсеткіш аты=fopen (файл аты, ашу режимі).
Fopen функциясының параметрі символдық массивтің көрсеткіштері немесе т±рақтылар
болуы мүмкін.
Fp=fopen (“star.dat,” ”r”)
star.dat- ағымдағы каталогтағы файылдың аты. “r” pежим параметрі - бұл файлдың оқу үшін
ашылғанын көрсетеді.
Потокты ашу параметрі мен режимдері
Параметрлер:
R - оқу үшін ашу.
W - жазу үшін құру.
A - қосымша жазбалар қосу үшін ашу.
R+ - оқу және жазу үшін ашу.
W+ - оқу және жазу үшін құру.
а+ -қосу үшін ашу немесе оқу және қосу үшін құру.
Поток – текстік немесе екілік жүйедегі, алмасу режимі үшін ашылуы мүмкін.
Текстік файл - символдар тізбегі болып табылады. Ол арнайы код арқылы жазу қатарына
49
бµлінеді. (код13) каретканы жылжыту және (код10) қатарды келесі жолға көшіреді. Егер
файл текстік режимде ашылған болса, онда бұл файлдан оқығанда "каретканы жылжыту,
келесі жолға көшіру" комбинациялары \n-жолға көшу символына түрленеді. Файлға жазу
кезінде керісінше түрлендіру ж‰ргізіледі..
Екілік жүйедегі файлмен жұмыс істегенде ешқандай түрлендірулер болмайды.
Ақпарат үздіксіз тасымалданады. Егер екілік жүйедегі файлды көрсету керек болса, онда
жоғарғы параметрге в әрпі қосылады: (r+b, a+b, w+b,). Кейбір компиляторларда текстік
режим t әрпімен белгіленеді, яѓни, a+t, rt деп жазылады.. Егер потокты ашуда қателескен
болсақ, fopen ( ) функциясы NULL мәнін қабылдайды. Бұл константа мәні
файлында анықталады. Қате - ашылатын файлдың дискіде жоқ болуына байланысты немесе
динамикалық жадыда орын болмауына байланысты шыѓуы м‰мкін. Сондықтан, былай
ашқан дұрыс:
FILE *fp;
If (fp=fopen(“test.dat”,”r”)==NULL)
{puts(“файлды аша алмаймын\n”);}
return;
}
Қате шыққан жағдайда программа бұрын ашылған барлық файлдарды жауып барып,
тоқтатылады. Потокты (файлды) жабуды fclose() функциясы орындайды.
int fclose(FILE*fpfr)
fpfr- жабылатын потоктағы көрсеткіштің форматының аты. Егер операцияны жабу
дұрыс орындалатын болса, функция – NULL-ді қабылдайды.
Тапсырманы орындау үлгісі
Мысал: Студенттердің рейтингінен құралған ақпарат сақталған файлды өңдеу программасын
құру. Әрбір өріс Ф.А.ӘА., және рейтинг баллдарын тұрады.Рейтингтің өсу реті бойынша
сұрыпталған ақпаратты шығару қажет. Программаның орындалу нәтижесін текстік файлға
жазу. Файлмен жұмыс жасаған кезде келесі әрекеттер орындалу қажет: құру, қарау, жаңа
жазбаны қосу, сұрыптау, нәтижені сақтау
Қосымша құру
OpenDialog және SaveDialog компоненттерін баптау
Dialogs бетінен
,
компонеттерді таңдау ( OpenDialog және SaveDialogҚ
Қажетті файды таңдау үшін фильтрді орнату: ол үшін компонентті таңдап, объектілер
инспекторындағы Filte қасиетінде тышқанның оң жағын екі рет шерту қажет, шыққан Filter
Editor диалогтық терезенің сол жағына таңдау мүмкіндігін беретін мәтінді, ал оң жағына –
маска жазу керек. OpenDialog1 үшін маска мәнін, *.dat деп қою қажет. 1 суреттегідей болу
керек.
1-сурет
Файл dat кеңеймесімен автоматты түрде жазылу үшін , DefaultExt қасиетіне – . dat
50
жазу керек.
Тап осылайша кеңеймесі .txt болатын мәтіндік файл үшін SaveDialog1 бапталады.
Программамен жұмыс
Форма 2-суреттегідей етіп құрастырылады.
Edit1, Edit2, Button1-Button6, Memo1, OpenDialog1, SaveDialog1
.2-сурет
Программа мәтіні
. . .
#include
#include
. . .
//---------------------------------------------------------------------------
struct TZap{
char FIO[30];
double s_b;
} Zap;
int size = sizeof(TZap);
FILE *Fz;
AnsiString File_Zap;
void Out(TZap, TMemo*);
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit1->Text=""; Edit2->Text="";
Memo1->Clear();
}
//------------------ Құру----------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
OpenDialog1->Title="Жаңа файл құру";
if (OpenDialog1->Execute()){
File_Zap = OpenDialog1->FileName;
if ((Fz=fopen(File_Zap.c_str(),"wb"))==NULL) {
ShowMessage(" ФАЙЛды құру қате!");
return;
}
}
Memo1->Lines->Add("Жаңа файлды құрдық: "+AnsiString(File_Zap));
fclose(Fz);
}
51
//----------------- Қосу-----------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Fz = fopen(File_Zap.c_str(),"ab");
strcpy(Zap.FIO, Edit1 -> Text.c_str());
Zap.s_b = StrToFloat(Edit2->Text);
Out(Zap, Memo1);
fwrite(&Zap, size, 1, Fz);
Edit1->Text=""; Edit2->Text="";
fclose(Fz);
}
//--------------------- Сұрыптау --------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TZap st, *mas_Z;
Fz = fopen(File_Zap.c_str(),"rb");
int D_f = fileno(Fz);
// Файл дескрипторын табу
int len = filelength(D_f);
// файл өлшемін табу
int i, j, kol;
kol = len/size;
//файлдағы жаазба саны
mas_Z = new TZap[kol];
// Файлдағы жазбаны динамикалық массивке жүктеу
for (i=0; i < kol; i++)
fread((mas_Z+i), size, 1, Fz);
fclose(Fz);
Memo1->Lines->Add("Сұрыптау жөнінде мәлімет");
for (i=0; i < kol-1; i++)
for (j=i+1; j < kol; j++)
if (mas_Z[i].s_b > mas_Z[j].s_b) {
st = mas_Z[i];
mas_Z[i] = mas_Z[j];
mas_Z[j] = st;
}
for (i=0; i
Out(mas_Z[i], Memo1);
delete []mas_Z;
}
//------------------- Сақтау --------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
SaveDialog1->Title="Нәтиже файлын сақтау";
if (SaveDialog1->Execute()) {
AnsiString FileNameRez = SaveDialog1->FileName;
Memo1->Lines->SaveToFile(FileNameRez);
}
}
//-------------------- Ашу ----------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
OpenDialog1->Title=" файлды ашу";
if (OpenDialog1->Execute()) {
52
File_Zap = OpenDialog1->FileName;
if ((Fz=fopen(File_Zap.c_str(),"rb"))==NULL) {
ShowMessage("ФАЙЛды ашу қате!");
return;
}
}
Memo1->Lines->Add("--------- Барлық мағлұмат ---------");
while(1){
if(!fread(&Zap,size,1,Fz)) break;
Out(Zap, Memo1);
}
fclose(Fz);
}
//----------------- Memoны тазарту -------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
Memo1->Clear();
}
//----------------- Бір жазбаны шығару функциясы -----------------------
void Out(TZap z, TMemo *Memo1)
{
Memo1->Lines->Add(AnsiString(z.FIO)+ " "+FloatToStrF(z.s_b, ffFixed,6,3));
}
Достарыңызбен бөлісу: |