Құрылымдық программалаудың базалық конструкциялары
МАЗМҰНЫ
Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...3
I. Құрылымдық программалау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..4
1.1. Құрылымдық программалаудың базалық конструкциялары ... ... ... ..5
1.3. Құрылымдaр ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ... ... .8
1.4. Интерфейстік бөлім ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... .10
II. Модульдік программалау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 11
2.2. Функцияларды жариялау және анықтау ... ... ... ... ... ... ... ... ... .15
2.3. Модульдер компиляциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ...18
2.4. Функциялардың шаблондары ... ... ... ... ... ... . ... ... ... ... ... ... .19
2.5. Стандартты кітапхана функциялары ... ... ... ... ... ... ... ... ... ... ..22
2.6. Енгізушығару функциялары ... ... ... ... ... ... ... ... ... ... ... ... ...22
Қорытынды ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... .24
Пайдаланылған әдебиеттер тізімі ... ... ... ... ... ... ... . ... ... ... ... ... ..25
КІРІСПЕ
Модуль немесе жалпы жағдайда, модульдік программалау ұғымы есептеу ісінің дамуының белгілі бір кезеңінде пайда болды және ең алдымен программалаудың ұлғаймалы көлемімен, олардың ішкі қиындықтарымен артуы мен жобалардың ұжымдық сипатымен түсіндіріледі. Қазіргі кездегі модуль ұғымы өз эволюциясында үлкен жол жүріп, программа текістік "бөлшектеу" немесе фрагменттер кітапханасын құру түсінігінен жеке түрде жобаланып, сақталатын және қатаң белгіленген интерфейісті тәуелсіз түрде құрастырылатын, тестіленетін программа бірліктеріне дейін жетті. С++ версиасынан бастап оған модуль ұғымын ендіру оны қазіргі заманғы программалау технологиясы деңгейінде өндірістік және комерцияалық мақсаттағы ірі жобаларға жарайтын тілге айналуы жолындағы шешуі қадам болды.
С++ модульдік құралдар, модульдік жобалау принципі базалық тілдердің тиісті мүмкіндіктеріне қарағанда айтарлықтай нашар.
Дегенмен, С++ әзірлеушілері классикалық С++ тілін қарастырайық оның тұтастығына, әсемдігіне және қарапайымдылығына нұқсан келтірмей жаңа тұжырымдаманы енгізу, сонымен қатар, біз мүмкіндіктерімізді айтарлықтай кеңейттік.
Осы курстық жұмыстың мақсаты құрылымдық-модульдік бағдарламаны қалыптастыру болып табылады. Ғылыми зерттеулер және бағдарламаларды әзірлеу. Осы мақсатқа жету үшін тақырыпқа сәйкес теориялық материалдарды толтыру. Негізінен, бұл модульді бағдарламалау және олардың әрекеттегі формалары., стандартты құрылымды сақтау қажет. Сондай-ақ модульдік құрылым, көмекші бағдарламалар, оларды құрастыру және синтаксистік схемалар оны қарсы алу керек.
Бұл жоба негізінен кіріспеден, екі бөлімнен және қорытындыдан тұрады пайдаланылған көздерден. Курстық жұмыстың мақсатына кіріспе, тапсырмалар жалпы сипаттамаларда берілген. Және соңында олар қалай үйренген модульдік бағдарламаларды енгізу, орындау және іске асыру сізге не қажет туралы.
1.1.Құрылымдық программалау.
Дəстүрлі программалау технологиясы программалардың негізгі тұтыну- шылары ғылыми мекемелер ғана болған кезде, есептеу ресурстары шектеулі болып, ал программаны сүйемелдеумəселелеріəлі белгісіз болған жағдайда қалыптасты. Программа сапасының негізгі көрсеткіштері ретінде оның тар мағынасындағы тиімділігі мен жинақылығы есептелді. Уақыт өте келе, про- граммалар күрделілігінің артуына байланысты, оларды құруға үлкен ұжымның бірнеше жыл еңбегі кететін болды, осылардың нəтижесінде программалық жүйелер мерзімінен кешігіп жəне көптеген қателермен шығарылып отырды.
Программалық жабдықтамалар жасаудың дағдарысы программаның өмір- лік циклі барысында - оны жазу жоспары пайда болғаннан бастап қолданудан алып тастағанға дейінгі кезеңде - программалар құрудың жалпы шығындарын азайтатын жаңа тəсіл табу қажеттілігіне алып келді. Мұндай технология өткен ғасырдың 70-ші ж. басында пайда болып, құрылымдық программалау деген атауға ие болды. Оның негізін программалау теориясы мен жоғары білікті мамандардың жеке тəжірибесінің дамуын ескеру, сонымен қатар программаларға қойылатын соңғы талаптар мен оларды жасаудың өндірістік сипат алуын есепке алу құрайды.
Программаларға қойылатын негізгі талап - олардың специфика- цияларымен толық үйлесімді түрде жұмыс істеуі жəне қолданушының кез келген іс-əрекеттеріне дұрыс жауап қайтаруы болып табылады. Соны- мен қатар, программа көрсетілген мерзімде шығуы керек жəне қажетті өзгертулер мен толықтыруларды жедел енгізуге мүмкіндік беруі тиіс. Өкінішке орай, мұндай жағдайдапайдаланылатын жады көлемі мен алгоритм- дер тиімділігі кейінгі орындарға қойылады. Басқаша айтқанда, программалар сапасының қазіргі кездегі критерийлері - бұл, алдымен, сенімділік, сонымен қатар программаны жазып бітіру жұмысы мен оны сүйемелдеуді дұрыс жоспарлау. Осындай мақсаттарға қол жеткізу үшін программа құрылымы қарапайым болып, ол жеңіл оқылуы жəне жылдам өзгертілуі қажет.
Құрылымдық программалау - бұл белгілі бір ережелерге сүйене отырып, программаның жасалу уақыты мен қателер санын азайтуға, сондай-ақ оны түрлендіруді жеңілдетуге мүмкіндік беретін программалар құру техноло- гиясы. Құрылымдық тəсіл жоба құрудың барлық сатыларын қамтиды, олар: спецификациялау, жобалау, программалаудың өзі жəне оны тесттен өткізу.
С++ тілінде программалау барысында белгілі бір тəртіпке жүгінудің маңызы аса зор. Бұл тілдің икемділігі мен мүмкіндіктерінің кеңдігі соншалықты, егер бастан-аяқ өзіңізді белгіленген бір шекаралық аймақта ұстамасаңыз, програм- ма тез арада түзету мен басқаруға келмейтін бір ірі құбыжыққа айналып кетеді.
Программалаудың құрылымдық тəсілі айтарлықтай ірі жобаларды сəтті құруға мүмкіндік берді, бірақ программалық жабдықтамалар күрделілігі күннен-күнге арта түсті, сол себепті осы қиындықты шешетін құралдарды үздіксіз дамыту қажеттілігі туындады. Құрылымдық программалау идеяла- ры ары қарай объектіге бағытталған программалау (ОБП) ісіне жалғасып, өз шешімін тапты. ОБП - бұл өте көлемді программалық жүйелер құрылымын қарапайым түрде жасап, олардың басқарылуын жеңілдетіп құруға мүмкіндік беретін технологиялар.
Программа құрудың ең жақсы жалғыз ғана тəсілі болмайды. Əртектіжəне күрделілік деңгейі əртүрлі есептерді шығару үшін программалау технологияларының да бірнеше түрін қолдану қажет. Қарапайым жағдай- ларда программаларды құрылымдық түрде жазу негіздерін меңгеру жеткілікті. Ал күрделі жобалар құру үшін тілдің толық көлемін еркін меңгеру жеткіліксіз, оған қоса программаларды жобалау мен түзету қағидаларын, стандартты жəне басқа да кітапханалар мүмкіндіктерін, т.б. білген жөн. Көбінесе есеп неғұрлым күрделенген сайын, оны шешуге қажетті құралдарды меңгеруге соғұрлым көп уақыт керек болады.
Біз тілдің құрамы мен негізгі құрылымын - программаларды жазуға қажетті, бірақ оған толық жеткілікті бола қоймайтын саланы оқып үйренуден бастаймыз.
1.2. Құрылымдық программалаудың базалық конструкциялары
Программалау теориясында кез келген күрделі есептерді шешуге арналған программаны тізбектелу, тармақталу жəне цикл деп аталатын үш құрылым көмегімен құруға болатыны көрсетілген. Бұл қағиданы БоймжəнеЯкопини 1966 жылы анықтаған, олар кез келген программаны тек осы құрылымдар мен солардың комбинацияларынан тұратын эквивалентті программаға түрлендіруге болатынын дəлелдеген.
Тізбектелу, тармақталу жəне цикл құрылымдық программалаудың базалық конструкциялары деп аталады. Тізбектелу, яғни сызықтық құрылым екі немесе одан да көп операторлардың (қарапайым немесе құрама) тізбектеле орындалуын бейнелейтін конструкция болып табылады. Тармақталу құрылымы кез келген бір шарттың орындалуына байланысты бірнеше операторлардың ішіндегі біреуінің орындалуын білдіреді. Цикл оператордың бірнеше рет қайталанып орындалуын көрсетеді. Бұл базалық конструкциялардың ерекшелігі - олардың кез келгенінің бір кіріс жəне бір шығыс нүктесінің болуында, сондықтан конструкциялар бір-бірімен кез кел- ген тəртіпте байланысуы мүмкін, мысалы цикл ішінде екі тармақталудан құралатын сызықтық құрылым болып, ал тармақталудың əрқайсысы басқа бір циклдерден тұратын болуы мүмкін.
Базалық конструкцияларды қолданудың мақсаты - қарапайым құрылымдағы программа алу. Мұндай программаны оқу (программаларды жазуға қарағанда жиірек оқуға тура келеді), түзету жəне қажет болғанда, оған өзгерістер енгізу жеңіл орындалады. Құрылымдық программалауды көбінесе gotoбұйрығынсыз программалау деп атайды, бұл шындыққа жанасады: программаның кез келген бір нүктелерінде - басқаруды басқа жаққа беру опе- раторын жиі қолдану - оның жұмыс істеу логикасын бақылауды қиындатады. Басқа жағынан алғанда, ешбір қағиданы абсолютті түрде нəтижелі деп санауға болмайды, goto операторын қолдану тиімді болып, программа құрылымын қарапайым ететін жағдайлар да туындап жатады. Олар туралы gotoоперато- ры бөлімінде айтылады (46 б.).
Жоғарғы деңгейдегі тілдердің көпшілігінде базалық конструкциялардың бірнеше нұсқалары қолданылады; C++ тілінде циклдің үш түрі, тармақталудың екі түрі (екі тармаққа жəне одан артық тармақтарға) бар. Олар программа- лау ыңғайлы болуы үшін енгізілген жəнеəртүрлі жағдайларда олардың керектісін таңдай білу керек. Қарапайым программалардың өзін жазу кезінде де ең негізгі есте сақтау құралы - кез келген программа алдын ала анықталған құрылымдағы блоктардың бір-бірімен байланыстырылған айқын тізбегінен тұруы тиіс. Айқын ойлайтын адам ойын да анық жеткізеді деген ұғым арқылы құрылған саналық түйсік стилінде жазылған программалардың практикада онша өміршең бола алмайтыны жəне көркемдік жағынан да ұтылатыны дəлелденген. Элементтерінің бəрі бір типте болып табылатын жиыммен салыстырғанда, құрылымдар əртүрлі типтегі элементтерден тұруы мүмкін. C++ тілінде құрылым кластың бір түрі болып табылады жəне оған кластың барлық қасиеттері тəн, алайда құрылымды көбінесе С тілінде анықталғандай түрде қолдану жеткілікті болып саналады:
struct [ тип_аты ] {
тип_1 элемент_1;
тип_2 элемент_2;
...
тип_nэлемент_n;
} [ сипаттауыштар_тізімі ];
Құрылым элементтері құрылымның өрістері деп аталады жəне олар осы құрылым типінен басқа кез келген типте болуы мүмкін немесе осықұрылымға нұсқауыш та болуы мүмкін. Егер типтің атауы берілмеген болса, онда айнымалылардың, нұсқауыштардың немесе жиымдардың сипаттауыш- тары тізімі көрсетілуі керек. Мұндайда құрылымның сипаттамасы осы тізім элементтерінің анықтамасы ретінде қолданылады:
Құрылымдар жиымын жəне құрылымға нұсқауышты анықтау:
struct {
charfio[30];
intdate, code;
doublesalary;
} stuff[100], *ps;
Егер тізім берілмесе, құрылымның сипаттамасы жаңа типті анықтайды, оның атын кейіннен стандартты типтермен қатар қолдануға болады, мысалы:
structWorker{
charfio[30];
intdate, code;
doublesalary;
};
* Worker типті жиымды жəнеWorker типіне нұсқауышты анықтау: *
Workerstuff[100], *ps;
Компилятордың құрылым мөлшерін білуі міндетті болмаған кезде құрылымды жариялағаннан кейін бірден оның атын қолдана беруге болады (анықтамасын кейінірек беруге рұқсат етіледі), мысалы:
structList;
structLink{
List *p;
Link *prev, *succ;
List құрылымын жариялау
List құрылымына нұсқауыш
Link құрылымына нұсқауыштар
Worker жаңа типінің сипаттамасы
сипаттама нүктелі үтірмен аяқталады
};
structList { * List құрылымының анықтамасы *};
Бұлар бір-бірімен байланысқан құрылымдар тізімдерін құруға мүмкіндік береді.
Құрылымды инициалдау үшін оның элементтерінің мəндерін жүйелі жақшаның ішінде сипатталу реті бойынша тізіп жазу керек:
struct{
charfio[30];
intdate, code;
doublesalary;
} worker = {"Страусенко", 31, 215, 3400.55}
Құрылымдардан тұратын жиымдарды инициалдау кезінде жиымның əрбір элементін жүйелі жақшаның ішіне жазу керек (көпөлшемді жиым - бұл жиымдардан құралған жиым екенін ескеру қажет):
structcomplex{
floatreal, im;
} compl [2][3] = {
{{1, 1}, {1, 1}, {1, 1}},
1 жол, яғни comp1[0] жиымы
{{2, 2}, {2, 2}, {2, 2}}
2 жол, яғни comp1[1] жиымы
};
Құрылымдық типтері бірдей болып келетін айнымалылар үшін меншіктеу операциясы анықталған, мұнда əр элементті жеке-жеке көшіріп жазу жүзеге асырылады. Құрылымды функцияға беруге жəне функция мəні ретінде қайтаруға болады.Құрылымдарға қолданылатын басқа операцияларды қолданушылардың өздері анықтайды (Операциялардың асыра жүктелуі тақырыбын қараңыз, 205 б.). Құрылымның өлшемі оның элементтерінің өлшемдерінің қосындысына тең болмауы мүмкін, себебі олар сөздің шекара- ларына байланысты тураланады.
Құрылымның өрістеріне қол жеткізу (пайдалану) - құрылым атауы арқылы орындалғанда . (нүкте) жəненұсқауыш арқылы орындалғанда - таңдау операциялары көмегімен жүзеге асырылады, мысалы:
Workerworker, stuff[100], *ps;
...
worker.fio = "Страусенко";
stuff[8].code = 215;
ps-salary = 0.12;
Егер құрылым элементі ретінде басқа құрылым қолданылса, онда оның элементтеріне қол жеткізу екі таңдау операциясы арқылы орындалады:
struct A {int a; double x;};
struct В {A a; double x;} х[2];
х[0].а.а = 1;
х[1].х = 0.1;
Осы мысалдан байқайтынымыздай, əртүрлі құрылымдардың өріс ата- улары бірдей болуы мүмкін, себебі олардың көріну аймағы əртүрлі. Егер құрылымдық айнымалыны анықтау кезінде struct сөзі қолданылса, онда бір көріну аймағында бірдей атау берілген құрылым мен басқа объектіні (мысалы, айнымалыны немесе жиымты) жариялауға болады, алайда бұлай жасамаған жөн - компилятор программаны дұрыс орындағанмен, өзіңіздің қателесуіңіз əбден мүмкін.
1.3.Құрылымдaр.
Элементтерінің бəрі бір типте болып табылатын жиыммен салыстырғанда, құрылымдар əртүрлі типтегі элементтерден тұруы мүмкін. C++ тілінде құрылым кластың бір түрі болып табылады жəне оған кластың барлық қасиеттері тəн, алайда құрылымды көбінесе С тілінде анықталғандай түрде қолдану жеткілікті болып саналады:
struct [ тип_аты ] {
тип_1 элемент_1;
тип_2 элемент_2;
...
тип_nэлемент_n; } [ сипаттауыштар_тізімі ];
Құрылым элементтері құрылымның өрістері деп аталады жəне олар осы құрылым типінен басқа кез келген типте болуы мүмкін немесе осы
құрылымға нұсқауыш та болуы мүмкін. Егер типтің атауы берілмеген болса, онда айнымалылардың, нұсқауыштардың немесе жиымдардың сипаттауыш- тары тізімі көрсетілуі керек. Мұндайда құрылымның сипаттамасы осы тізім элементтерінің анықтамасы ретінде қолданылады:
Құрылымдар жиымын жəне құрылымға нұсқауышты анықтау:
struct {
char fio[30];
int date, code;
double salary;
} stuff[100], *ps;
Егер тізім берілмесе, құрылымның сипаттамасы жаңа типті анықтайды, оның атын кейіннен стандартты типтер мен қатар қолдануға болады,
Мысалы:
struct Worker{
char fio[30];
int date, code;
double salary;
};
* Worker типті жиымды жəне Worker типіне нұсқауышты анықтау: *
Worker stuff[100], *ps;
Компилятордың құрылым мөлшерін білуі міндетті болмаған кезде құрылымды жариялағаннан кейін бірден оның атын қолдана беруге болады. (анықтамасын кейінірек беруге рұқсат етіледі),
Мысалы:
struct List;
struct Link{
List *p;
Link *prev, *succ;
List құрылымын жариялау
List құрылымына нұсқауыш
Link құрылымына нұсқауыштар
Worker жаңатипінің сипаттамасы
сипаттама нүктелі үтірмен аяқталады
};
struct List { * List құрылымының анықтамасы *};
Бұл әр бір-бірімен байланысқан құрылымдар тізімдерін құруға мүмкіндік береді. Құрылымды инициалдау үшін оның элементтерінің мəндерін жүйелі жақшаның ішінде сипатталу реті бойынша тізіп жазу керек:
struct{
char fio[30];
int date, code;
double salary;
} worker = {"Страусенко", 31, 215, 3400.55};
Құрылымдардан тұратын жиымдарды инициалдау кезінде жиымның əрбір элементін жүйелі жақшаның ішіне жазукерек (көп өлшемді жиым - бұл жиымдардан құралған жиым екенін ескеру қажет):
struct complex{
float real, im;
} compl [2][3] = {
{{1, 1}, {1, 1}, {1, 1}},
1 жол, яғни comp1[0] жиымы
{{2, 2}, {2, 2}, {2, 2}}
2 жол, яғни comp1[1] жиымы};
Құрылымдық типтері бірдей болып келетін айнымалылар үшін меншіктеу операциясы анықталған мұнда əр элементті жеке-жеке көшіріп жазу жүзеге асырылады. Құрылымды функцияға беруге жəне функция мəні ретінде қайтаруға болады. Құрылымдарға қолданылатын басқа операцияларды қолданушылардың өздері анықтайды (Операциялардың асыра жүктелуі тақырыбын қараңыз, 205 б.). Құрылымның өлшемі оның элементтерінің өлшемдерінің қосындысына тең болмауы мүмкін, себебі олар сөздің шекараларына байланысты тураланады.
Құрылымның өрістеріне қол жеткізу (пайдалану) - құрылым атауы арқылы орындалғанда . (нүкте) жəне нұсқауыш арқылы орындалғанда -таңдау операциялары көмегімен жүзеге асырылады,
Мысалы:
Worker worker, stuff[100], *ps;
...
worker.fio = "Страусенко";
stuff[8].code = 215;
ps-salary = 0.12;
Егер құрылым элементі ретінде басқа құрылым қолданылса, онда оның элементтеріне қол жеткізу екі таңдау операциясы арқылы орындалады:
struct A {int a; double x;};
struct В {A a; double x;} х[2];
х[0].а.а = 1;
х[1].х = 0.1;
Осы мысалдан байқайтынымыздай, əртүрлі құрылымдардың атаулары бірдей болуы мүмкін, себебі олардың көріну аймағы əртүрлі. Егер құрылымдық айнымалыны анықтау кезінде struct сөзі қолданылса, онда бір көріну аймағында бірдей атау берілген құрылым мен басқа объектіні (мысалы, айнымалыны немесе жиымты) жариялауға болады, алайда бұлай жасамаған жөн - компилятор программаны дұрыс орындағанмен, өзіңіздің қателесуіңіз əбден мүмкін.
1.4. Интерфейстік бөлім.
Интерфейс - мүше айнымалылары жоқ класс және оның барлық әдістері таза виртуалды функциялар болып табылады!Интерфейстер интерфейс кластары немесе интерфейс кластары деп те атайды.
Интерфейс кластары әдетте басында I деп аталады.
IErrorLog мұрагері болатын кез келген класс IErrorLog сыныбының барлық 3 әдісінің өзіндік орындалуын қамтамасыз етуі керек. FileErrorLog деп аталатын еншілес класс жасай аласыз, мұнда openLog() дискідегі файлды ашады, closeLog() файлды жабады және writeError() файлға хабарлама жазады. OpenLog() және closeLog() ештеңе жасамайтын және writeError() қалқымалы терезеде хабарды басып шығаратын ScreenErrorLog деп аталатын басқа еншілес класс жасай аласыз.
Енді сіз қателер журналын пайдаланатын бағдарламаны жазғыңыз келеді делік. FileErrorLog немесе ScreenErrorLog сыныптарын тікелей жазсаңыз, бұл тиімсіз. Мысалы, келесі функция mySqrt() деп шақыратын барлық нысандарды FileErrorLog пайдалану үшін мәжбүрлейді, бұл әрқашан сәйкес келмеуі мүмкін.
Енді пайдаланушы объектілерді тасымалдау арқылы қай классты шақыру керектігін өз бетінше анықтай алады. Егер ол қатенің файлға жазылуын қаласа, ол FileErrorLog класының объектісін mySqrt() функциясына жібереді. Егер ол қатенің экранда көрсетілуін қаласа, онда ол ScreenErrorLog класының объектісін өткізеді. Немесе ол сіз болжамаған нәрсені істегісі келсе, мысалы, біреуге қате туралы хабарды электрондық пошта арқылы жіберу, онда ол IErrorLog жүйесінен мұраланатын жаңа EmailErrorLog еншілес сыныбын жасай алады және сол сыныптың нысанына өтеді! Осылайша, IErrorLog арқылы іске асыру біздің функциямызды икемді және тәуелсіз етеді.
Интерфейс нұсқағышы жойылған кезде сәйкес (еншілес) сыныптың деструкторы шақырылуы үшін интерфейс сыныптарыңызға виртуалды деструкторларды қосуды ұмытпаңыз.
Интерфейстер өте танымал, себебі оларды пайдалану оңай, техникалық қызмет көрсету оңай және кеңейту оңай.Java және C++ сияқты кейбір тілдер тіпті синтаксисіне интерфейс кілт сөзін қосты, бұл бағдарламашыларға барлық әдістердің абстрактілі екенін анық көрсетпей интерфейс класын тікелей анықтауға мүмкіндік береді.
2.1. Модульдік программалау.
Құрылымдық бағдарламалау алгоритмдік мінездемесі бар математикалық есептерді шығаруда тиімді қолданылады. Программалау процесін жақсартатын және кең қолданылатын әдістердің бірі - құрылымдық программалау. Құрылымдық программалаудың 3 бөлігі (құраушысы) бар:
1. Модульдік программалау
2. Құрылымдық кодтау
3. Жоғарыдан төменге қарай жобалау
Модульдік программалау дегеніміз - программаны логикалық бөліктерге бөлу процесі. Программа бірнеше модульдерге бөлінеді және мына 2 мақсат орындалуы тиіс: 1) модулдің дұрыс болуы және оның контекстерден тәуелсіз болуы қажет; 2) модулдің ішкі жұмыстарын білмей тұра әр түрлі модулдерден программа құру мүмкіндігінің болуы қажет.
Мысал ретінде стандарт математикалық функциялардың есептелу программасын қарастыруға болады. Программист sin(x) функциясын программаның кез-келген жерінде қолдана алады және оған функцияның есептелуіне қай әдістің қолданып тұрғанын білудің қажеттілігі жоқ. Модуль өлшемі 60 жолдан аспауы керек және модульдер өзара тәуелсіз болуы керек. Байланысқан элементтерді бір модульге, байланыспаған элементтерді әр түрлі модульге жинау керек. Модульдерді қолдана отырып программа күрделілігін төмендетуге болады.
С++тілінде модуль процедуралар мен функциялардың көмегімен құрылады, Cи тілінде функциялардың көмегімен құрылады. Құрылымдық кодтау деп программада басқарушы конструкциялардың - шартты операторлардың, циклдің (параметрлі, цикл-әзір, цикл-дейін) қолданылуын айтады.
Шартсыз көшу операторы программада сирек қолданылуы керек немесе шартты оператордың, циклдің көмегімен өзгертілуі керек. Программаны жоғарыдан төмен қарай жобалаудың өз иерархиялық құрылымы бар және қысқа есеп қойылымынан басталады. Одан кейін есеп бірнеше ұсақ ішкі есептерге бөлінеді. Ішкі есептердің өзі де ішкі есептерге бөлінуі мүмкін. Әр қадамда ішкі есептің орындайтын негізгі функциялары анықталуы керек. Бөлу процесі әр ішкі есеп қарапайым болғанға дейін, яғни әр ішкі есепке бір модуль сәйкес келгенше созылады.
Модульдік бағдарламалау Бөліп билей принципі бойынша жұмыс істейді.
Модульдік бағдарламалау әдетте модульдері аталады тәуелсіз шағын блоктар, көптеген ретінде бағдарламасын ұйымдастыру көздейді, мінез-құлық және құрылымы әбден толық бағынысты жекелеген қағидалары болып табылады. синтаксистік бір көрінісі болған кезде ол бірлік тұжырымдамасын пайдалану бөлісуге тұр тілдік бірлік бағдарламасы және қашан ол рәсімдерді түрінде, сондай-ақ іске асыруға болады, бірнеше блоктарға үлкен бағдарламаның ұнтақтау бөлімшесі болып табылады функцияларын түрінде. модульдік бағдарламалау пайдалану жеңілдетуге мүмкіндік береді тестілеу бағдарламасын және қателіктер дер кезінде анықтауды. Ол қатаң белгіленген бағдарламалардың ұтқырлығын арттыруға мүмкіндік береді, басқа подзадач, аппараттық-тәуелді тапсырмаларды бөлуге болады. уақыт-сын модульдер айтарлықтай процесін жеңілдетеді және тиімділігін әлдеқайда жоғары етеді, ол бөлек өзгертуге болады. модульдері тиімді басқа бағдарламаларға арналған блоктар құрылыс ретінде пайдалануға болады, өйткені Сонымен қатар, модульдік бағдарламалау, түсіну әлдеқайда оңай.
Бағдарламаларды жазу кезінде термині модулі өзі модульдік принципін енгізу байланысты бағдарламалау пайдаланылуы бастады. жетпісінші, модуль белгілі бір ережелерге сәйкес жазылған функциясы немесе рәсімін қандай, деп аталады. сол уақытта жалпы қабылданған талаптарға құрылған жоқ болғандықтан, модуль, оның мөлшері елу желілері дейін кез келген процесс деп аталады. модуль үшін Parnassus бірінші нақтыланды талаптар қалыптастырылды: бір модулін қалыптастыру мақсатында басқа мазмұны туралы аз білім үшін жеткілікті болуы тиіс. Ол Parnassus бағдарламалау жасырынып ақпарат ұғымы қалыптасады алғаш рет шықты. Оның анықтамасы модуль төменгі және иерархияның ең жоғарғы деңгейі ретінде кез келген бірыңғай тәртібі аталады мүмкін, бұл шын мәнінде бізге әкеледі.
Қауіпсіз олар жаһандық айнымалылар драмалық әсері жатады және олардың мінез-құлық кешенді бағдарламаларына болжау қиын, өйткені ақпарат уақытта бар құрылымдардың пайдалану арқылы қол мүмкін емес жасыру. Ол осы айнымалы оқшауланған құрылымын құру қажет болды. Ол оның және атындағы модуль болды, және оған негізделген, және модульдік бағдарламалау дүниеге келген.
Бастапқыда ол құрылыс нақты подзадачи іске бөлшектер біріктіреді және жасырады ретінде күрделі бағдарламалық қамтамасыз жүйесін енгізу функциялар мен процедуралар бар тең модуль көмегімен жүзеге асыруға болады деп болжанған. Бірақ С++тілінде ол толығымен модульдік бағдарламалау қағидасы жүзеге асырылды жоқ. ол кез келген басқа модульдерден нысандарды импорттау мүмкіндік бермейді, өйткені бұл тілде толық ішкі модульдерін қолдамайды, импорт, жеткіліксіз икемді жүзеге асырылуда. дербес компьютерлер таратпау бар айтарлықтай теориялық дайындықтың орташа деңгейі төмендейді бағдарламалау адамдар, ауқымын кеңейтті, бұл шын мәнінде осы фактіні аралас әсері, қолдану модульдер әзірлеу функциялар мен процедуралардың кітапханалардың проблемасын құру құралы ретінде пайдаланылды, бұл шын мәнінде әкелді. Тек білікті бағдарламашылар операцияларды құрылымдау барлық нысандар үшін тілдік құрылымдардың толық қуатын пайдаланылады.
Егер сіз бағдарламашы тұрғысынан Паскаль бірлік қарасақ, олардың саны қосалқы міндеттерді, бір-біріне тәуелсіз бірқатар Мәселенің ыдырау арқылы айқындалуы тиіс. ... жалғасы
Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...3
I. Құрылымдық программалау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..4
1.1. Құрылымдық программалаудың базалық конструкциялары ... ... ... ..5
1.3. Құрылымдaр ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ... ... ... .8
1.4. Интерфейстік бөлім ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... .10
II. Модульдік программалау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 11
2.2. Функцияларды жариялау және анықтау ... ... ... ... ... ... ... ... ... .15
2.3. Модульдер компиляциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ...18
2.4. Функциялардың шаблондары ... ... ... ... ... ... . ... ... ... ... ... ... .19
2.5. Стандартты кітапхана функциялары ... ... ... ... ... ... ... ... ... ... ..22
2.6. Енгізушығару функциялары ... ... ... ... ... ... ... ... ... ... ... ... ...22
Қорытынды ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ... ... ... .24
Пайдаланылған әдебиеттер тізімі ... ... ... ... ... ... ... . ... ... ... ... ... ..25
КІРІСПЕ
Модуль немесе жалпы жағдайда, модульдік программалау ұғымы есептеу ісінің дамуының белгілі бір кезеңінде пайда болды және ең алдымен программалаудың ұлғаймалы көлемімен, олардың ішкі қиындықтарымен артуы мен жобалардың ұжымдық сипатымен түсіндіріледі. Қазіргі кездегі модуль ұғымы өз эволюциясында үлкен жол жүріп, программа текістік "бөлшектеу" немесе фрагменттер кітапханасын құру түсінігінен жеке түрде жобаланып, сақталатын және қатаң белгіленген интерфейісті тәуелсіз түрде құрастырылатын, тестіленетін программа бірліктеріне дейін жетті. С++ версиасынан бастап оған модуль ұғымын ендіру оны қазіргі заманғы программалау технологиясы деңгейінде өндірістік және комерцияалық мақсаттағы ірі жобаларға жарайтын тілге айналуы жолындағы шешуі қадам болды.
С++ модульдік құралдар, модульдік жобалау принципі базалық тілдердің тиісті мүмкіндіктеріне қарағанда айтарлықтай нашар.
Дегенмен, С++ әзірлеушілері классикалық С++ тілін қарастырайық оның тұтастығына, әсемдігіне және қарапайымдылығына нұқсан келтірмей жаңа тұжырымдаманы енгізу, сонымен қатар, біз мүмкіндіктерімізді айтарлықтай кеңейттік.
Осы курстық жұмыстың мақсаты құрылымдық-модульдік бағдарламаны қалыптастыру болып табылады. Ғылыми зерттеулер және бағдарламаларды әзірлеу. Осы мақсатқа жету үшін тақырыпқа сәйкес теориялық материалдарды толтыру. Негізінен, бұл модульді бағдарламалау және олардың әрекеттегі формалары., стандартты құрылымды сақтау қажет. Сондай-ақ модульдік құрылым, көмекші бағдарламалар, оларды құрастыру және синтаксистік схемалар оны қарсы алу керек.
Бұл жоба негізінен кіріспеден, екі бөлімнен және қорытындыдан тұрады пайдаланылған көздерден. Курстық жұмыстың мақсатына кіріспе, тапсырмалар жалпы сипаттамаларда берілген. Және соңында олар қалай үйренген модульдік бағдарламаларды енгізу, орындау және іске асыру сізге не қажет туралы.
1.1.Құрылымдық программалау.
Дəстүрлі программалау технологиясы программалардың негізгі тұтыну- шылары ғылыми мекемелер ғана болған кезде, есептеу ресурстары шектеулі болып, ал программаны сүйемелдеумəселелеріəлі белгісіз болған жағдайда қалыптасты. Программа сапасының негізгі көрсеткіштері ретінде оның тар мағынасындағы тиімділігі мен жинақылығы есептелді. Уақыт өте келе, про- граммалар күрделілігінің артуына байланысты, оларды құруға үлкен ұжымның бірнеше жыл еңбегі кететін болды, осылардың нəтижесінде программалық жүйелер мерзімінен кешігіп жəне көптеген қателермен шығарылып отырды.
Программалық жабдықтамалар жасаудың дағдарысы программаның өмір- лік циклі барысында - оны жазу жоспары пайда болғаннан бастап қолданудан алып тастағанға дейінгі кезеңде - программалар құрудың жалпы шығындарын азайтатын жаңа тəсіл табу қажеттілігіне алып келді. Мұндай технология өткен ғасырдың 70-ші ж. басында пайда болып, құрылымдық программалау деген атауға ие болды. Оның негізін программалау теориясы мен жоғары білікті мамандардың жеке тəжірибесінің дамуын ескеру, сонымен қатар программаларға қойылатын соңғы талаптар мен оларды жасаудың өндірістік сипат алуын есепке алу құрайды.
Программаларға қойылатын негізгі талап - олардың специфика- цияларымен толық үйлесімді түрде жұмыс істеуі жəне қолданушының кез келген іс-əрекеттеріне дұрыс жауап қайтаруы болып табылады. Соны- мен қатар, программа көрсетілген мерзімде шығуы керек жəне қажетті өзгертулер мен толықтыруларды жедел енгізуге мүмкіндік беруі тиіс. Өкінішке орай, мұндай жағдайдапайдаланылатын жады көлемі мен алгоритм- дер тиімділігі кейінгі орындарға қойылады. Басқаша айтқанда, программалар сапасының қазіргі кездегі критерийлері - бұл, алдымен, сенімділік, сонымен қатар программаны жазып бітіру жұмысы мен оны сүйемелдеуді дұрыс жоспарлау. Осындай мақсаттарға қол жеткізу үшін программа құрылымы қарапайым болып, ол жеңіл оқылуы жəне жылдам өзгертілуі қажет.
Құрылымдық программалау - бұл белгілі бір ережелерге сүйене отырып, программаның жасалу уақыты мен қателер санын азайтуға, сондай-ақ оны түрлендіруді жеңілдетуге мүмкіндік беретін программалар құру техноло- гиясы. Құрылымдық тəсіл жоба құрудың барлық сатыларын қамтиды, олар: спецификациялау, жобалау, программалаудың өзі жəне оны тесттен өткізу.
С++ тілінде программалау барысында белгілі бір тəртіпке жүгінудің маңызы аса зор. Бұл тілдің икемділігі мен мүмкіндіктерінің кеңдігі соншалықты, егер бастан-аяқ өзіңізді белгіленген бір шекаралық аймақта ұстамасаңыз, програм- ма тез арада түзету мен басқаруға келмейтін бір ірі құбыжыққа айналып кетеді.
Программалаудың құрылымдық тəсілі айтарлықтай ірі жобаларды сəтті құруға мүмкіндік берді, бірақ программалық жабдықтамалар күрделілігі күннен-күнге арта түсті, сол себепті осы қиындықты шешетін құралдарды үздіксіз дамыту қажеттілігі туындады. Құрылымдық программалау идеяла- ры ары қарай объектіге бағытталған программалау (ОБП) ісіне жалғасып, өз шешімін тапты. ОБП - бұл өте көлемді программалық жүйелер құрылымын қарапайым түрде жасап, олардың басқарылуын жеңілдетіп құруға мүмкіндік беретін технологиялар.
Программа құрудың ең жақсы жалғыз ғана тəсілі болмайды. Əртектіжəне күрделілік деңгейі əртүрлі есептерді шығару үшін программалау технологияларының да бірнеше түрін қолдану қажет. Қарапайым жағдай- ларда программаларды құрылымдық түрде жазу негіздерін меңгеру жеткілікті. Ал күрделі жобалар құру үшін тілдің толық көлемін еркін меңгеру жеткіліксіз, оған қоса программаларды жобалау мен түзету қағидаларын, стандартты жəне басқа да кітапханалар мүмкіндіктерін, т.б. білген жөн. Көбінесе есеп неғұрлым күрделенген сайын, оны шешуге қажетті құралдарды меңгеруге соғұрлым көп уақыт керек болады.
Біз тілдің құрамы мен негізгі құрылымын - программаларды жазуға қажетті, бірақ оған толық жеткілікті бола қоймайтын саланы оқып үйренуден бастаймыз.
1.2. Құрылымдық программалаудың базалық конструкциялары
Программалау теориясында кез келген күрделі есептерді шешуге арналған программаны тізбектелу, тармақталу жəне цикл деп аталатын үш құрылым көмегімен құруға болатыны көрсетілген. Бұл қағиданы БоймжəнеЯкопини 1966 жылы анықтаған, олар кез келген программаны тек осы құрылымдар мен солардың комбинацияларынан тұратын эквивалентті программаға түрлендіруге болатынын дəлелдеген.
Тізбектелу, тармақталу жəне цикл құрылымдық программалаудың базалық конструкциялары деп аталады. Тізбектелу, яғни сызықтық құрылым екі немесе одан да көп операторлардың (қарапайым немесе құрама) тізбектеле орындалуын бейнелейтін конструкция болып табылады. Тармақталу құрылымы кез келген бір шарттың орындалуына байланысты бірнеше операторлардың ішіндегі біреуінің орындалуын білдіреді. Цикл оператордың бірнеше рет қайталанып орындалуын көрсетеді. Бұл базалық конструкциялардың ерекшелігі - олардың кез келгенінің бір кіріс жəне бір шығыс нүктесінің болуында, сондықтан конструкциялар бір-бірімен кез кел- ген тəртіпте байланысуы мүмкін, мысалы цикл ішінде екі тармақталудан құралатын сызықтық құрылым болып, ал тармақталудың əрқайсысы басқа бір циклдерден тұратын болуы мүмкін.
Базалық конструкцияларды қолданудың мақсаты - қарапайым құрылымдағы программа алу. Мұндай программаны оқу (программаларды жазуға қарағанда жиірек оқуға тура келеді), түзету жəне қажет болғанда, оған өзгерістер енгізу жеңіл орындалады. Құрылымдық программалауды көбінесе gotoбұйрығынсыз программалау деп атайды, бұл шындыққа жанасады: программаның кез келген бір нүктелерінде - басқаруды басқа жаққа беру опе- раторын жиі қолдану - оның жұмыс істеу логикасын бақылауды қиындатады. Басқа жағынан алғанда, ешбір қағиданы абсолютті түрде нəтижелі деп санауға болмайды, goto операторын қолдану тиімді болып, программа құрылымын қарапайым ететін жағдайлар да туындап жатады. Олар туралы gotoоперато- ры бөлімінде айтылады (46 б.).
Жоғарғы деңгейдегі тілдердің көпшілігінде базалық конструкциялардың бірнеше нұсқалары қолданылады; C++ тілінде циклдің үш түрі, тармақталудың екі түрі (екі тармаққа жəне одан артық тармақтарға) бар. Олар программа- лау ыңғайлы болуы үшін енгізілген жəнеəртүрлі жағдайларда олардың керектісін таңдай білу керек. Қарапайым программалардың өзін жазу кезінде де ең негізгі есте сақтау құралы - кез келген программа алдын ала анықталған құрылымдағы блоктардың бір-бірімен байланыстырылған айқын тізбегінен тұруы тиіс. Айқын ойлайтын адам ойын да анық жеткізеді деген ұғым арқылы құрылған саналық түйсік стилінде жазылған программалардың практикада онша өміршең бола алмайтыны жəне көркемдік жағынан да ұтылатыны дəлелденген. Элементтерінің бəрі бір типте болып табылатын жиыммен салыстырғанда, құрылымдар əртүрлі типтегі элементтерден тұруы мүмкін. C++ тілінде құрылым кластың бір түрі болып табылады жəне оған кластың барлық қасиеттері тəн, алайда құрылымды көбінесе С тілінде анықталғандай түрде қолдану жеткілікті болып саналады:
struct [ тип_аты ] {
тип_1 элемент_1;
тип_2 элемент_2;
...
тип_nэлемент_n;
} [ сипаттауыштар_тізімі ];
Құрылым элементтері құрылымның өрістері деп аталады жəне олар осы құрылым типінен басқа кез келген типте болуы мүмкін немесе осықұрылымға нұсқауыш та болуы мүмкін. Егер типтің атауы берілмеген болса, онда айнымалылардың, нұсқауыштардың немесе жиымдардың сипаттауыш- тары тізімі көрсетілуі керек. Мұндайда құрылымның сипаттамасы осы тізім элементтерінің анықтамасы ретінде қолданылады:
Құрылымдар жиымын жəне құрылымға нұсқауышты анықтау:
struct {
charfio[30];
intdate, code;
doublesalary;
} stuff[100], *ps;
Егер тізім берілмесе, құрылымның сипаттамасы жаңа типті анықтайды, оның атын кейіннен стандартты типтермен қатар қолдануға болады, мысалы:
structWorker{
charfio[30];
intdate, code;
doublesalary;
};
* Worker типті жиымды жəнеWorker типіне нұсқауышты анықтау: *
Workerstuff[100], *ps;
Компилятордың құрылым мөлшерін білуі міндетті болмаған кезде құрылымды жариялағаннан кейін бірден оның атын қолдана беруге болады (анықтамасын кейінірек беруге рұқсат етіледі), мысалы:
structList;
structLink{
List *p;
Link *prev, *succ;
List құрылымын жариялау
List құрылымына нұсқауыш
Link құрылымына нұсқауыштар
Worker жаңа типінің сипаттамасы
сипаттама нүктелі үтірмен аяқталады
};
structList { * List құрылымының анықтамасы *};
Бұлар бір-бірімен байланысқан құрылымдар тізімдерін құруға мүмкіндік береді.
Құрылымды инициалдау үшін оның элементтерінің мəндерін жүйелі жақшаның ішінде сипатталу реті бойынша тізіп жазу керек:
struct{
charfio[30];
intdate, code;
doublesalary;
} worker = {"Страусенко", 31, 215, 3400.55}
Құрылымдардан тұратын жиымдарды инициалдау кезінде жиымның əрбір элементін жүйелі жақшаның ішіне жазу керек (көпөлшемді жиым - бұл жиымдардан құралған жиым екенін ескеру қажет):
structcomplex{
floatreal, im;
} compl [2][3] = {
{{1, 1}, {1, 1}, {1, 1}},
1 жол, яғни comp1[0] жиымы
{{2, 2}, {2, 2}, {2, 2}}
2 жол, яғни comp1[1] жиымы
};
Құрылымдық типтері бірдей болып келетін айнымалылар үшін меншіктеу операциясы анықталған, мұнда əр элементті жеке-жеке көшіріп жазу жүзеге асырылады. Құрылымды функцияға беруге жəне функция мəні ретінде қайтаруға болады.Құрылымдарға қолданылатын басқа операцияларды қолданушылардың өздері анықтайды (Операциялардың асыра жүктелуі тақырыбын қараңыз, 205 б.). Құрылымның өлшемі оның элементтерінің өлшемдерінің қосындысына тең болмауы мүмкін, себебі олар сөздің шекара- ларына байланысты тураланады.
Құрылымның өрістеріне қол жеткізу (пайдалану) - құрылым атауы арқылы орындалғанда . (нүкте) жəненұсқауыш арқылы орындалғанда - таңдау операциялары көмегімен жүзеге асырылады, мысалы:
Workerworker, stuff[100], *ps;
...
worker.fio = "Страусенко";
stuff[8].code = 215;
ps-salary = 0.12;
Егер құрылым элементі ретінде басқа құрылым қолданылса, онда оның элементтеріне қол жеткізу екі таңдау операциясы арқылы орындалады:
struct A {int a; double x;};
struct В {A a; double x;} х[2];
х[0].а.а = 1;
х[1].х = 0.1;
Осы мысалдан байқайтынымыздай, əртүрлі құрылымдардың өріс ата- улары бірдей болуы мүмкін, себебі олардың көріну аймағы əртүрлі. Егер құрылымдық айнымалыны анықтау кезінде struct сөзі қолданылса, онда бір көріну аймағында бірдей атау берілген құрылым мен басқа объектіні (мысалы, айнымалыны немесе жиымты) жариялауға болады, алайда бұлай жасамаған жөн - компилятор программаны дұрыс орындағанмен, өзіңіздің қателесуіңіз əбден мүмкін.
1.3.Құрылымдaр.
Элементтерінің бəрі бір типте болып табылатын жиыммен салыстырғанда, құрылымдар əртүрлі типтегі элементтерден тұруы мүмкін. C++ тілінде құрылым кластың бір түрі болып табылады жəне оған кластың барлық қасиеттері тəн, алайда құрылымды көбінесе С тілінде анықталғандай түрде қолдану жеткілікті болып саналады:
struct [ тип_аты ] {
тип_1 элемент_1;
тип_2 элемент_2;
...
тип_nэлемент_n; } [ сипаттауыштар_тізімі ];
Құрылым элементтері құрылымның өрістері деп аталады жəне олар осы құрылым типінен басқа кез келген типте болуы мүмкін немесе осы
құрылымға нұсқауыш та болуы мүмкін. Егер типтің атауы берілмеген болса, онда айнымалылардың, нұсқауыштардың немесе жиымдардың сипаттауыш- тары тізімі көрсетілуі керек. Мұндайда құрылымның сипаттамасы осы тізім элементтерінің анықтамасы ретінде қолданылады:
Құрылымдар жиымын жəне құрылымға нұсқауышты анықтау:
struct {
char fio[30];
int date, code;
double salary;
} stuff[100], *ps;
Егер тізім берілмесе, құрылымның сипаттамасы жаңа типті анықтайды, оның атын кейіннен стандартты типтер мен қатар қолдануға болады,
Мысалы:
struct Worker{
char fio[30];
int date, code;
double salary;
};
* Worker типті жиымды жəне Worker типіне нұсқауышты анықтау: *
Worker stuff[100], *ps;
Компилятордың құрылым мөлшерін білуі міндетті болмаған кезде құрылымды жариялағаннан кейін бірден оның атын қолдана беруге болады. (анықтамасын кейінірек беруге рұқсат етіледі),
Мысалы:
struct List;
struct Link{
List *p;
Link *prev, *succ;
List құрылымын жариялау
List құрылымына нұсқауыш
Link құрылымына нұсқауыштар
Worker жаңатипінің сипаттамасы
сипаттама нүктелі үтірмен аяқталады
};
struct List { * List құрылымының анықтамасы *};
Бұл әр бір-бірімен байланысқан құрылымдар тізімдерін құруға мүмкіндік береді. Құрылымды инициалдау үшін оның элементтерінің мəндерін жүйелі жақшаның ішінде сипатталу реті бойынша тізіп жазу керек:
struct{
char fio[30];
int date, code;
double salary;
} worker = {"Страусенко", 31, 215, 3400.55};
Құрылымдардан тұратын жиымдарды инициалдау кезінде жиымның əрбір элементін жүйелі жақшаның ішіне жазукерек (көп өлшемді жиым - бұл жиымдардан құралған жиым екенін ескеру қажет):
struct complex{
float real, im;
} compl [2][3] = {
{{1, 1}, {1, 1}, {1, 1}},
1 жол, яғни comp1[0] жиымы
{{2, 2}, {2, 2}, {2, 2}}
2 жол, яғни comp1[1] жиымы};
Құрылымдық типтері бірдей болып келетін айнымалылар үшін меншіктеу операциясы анықталған мұнда əр элементті жеке-жеке көшіріп жазу жүзеге асырылады. Құрылымды функцияға беруге жəне функция мəні ретінде қайтаруға болады. Құрылымдарға қолданылатын басқа операцияларды қолданушылардың өздері анықтайды (Операциялардың асыра жүктелуі тақырыбын қараңыз, 205 б.). Құрылымның өлшемі оның элементтерінің өлшемдерінің қосындысына тең болмауы мүмкін, себебі олар сөздің шекараларына байланысты тураланады.
Құрылымның өрістеріне қол жеткізу (пайдалану) - құрылым атауы арқылы орындалғанда . (нүкте) жəне нұсқауыш арқылы орындалғанда -таңдау операциялары көмегімен жүзеге асырылады,
Мысалы:
Worker worker, stuff[100], *ps;
...
worker.fio = "Страусенко";
stuff[8].code = 215;
ps-salary = 0.12;
Егер құрылым элементі ретінде басқа құрылым қолданылса, онда оның элементтеріне қол жеткізу екі таңдау операциясы арқылы орындалады:
struct A {int a; double x;};
struct В {A a; double x;} х[2];
х[0].а.а = 1;
х[1].х = 0.1;
Осы мысалдан байқайтынымыздай, əртүрлі құрылымдардың атаулары бірдей болуы мүмкін, себебі олардың көріну аймағы əртүрлі. Егер құрылымдық айнымалыны анықтау кезінде struct сөзі қолданылса, онда бір көріну аймағында бірдей атау берілген құрылым мен басқа объектіні (мысалы, айнымалыны немесе жиымты) жариялауға болады, алайда бұлай жасамаған жөн - компилятор программаны дұрыс орындағанмен, өзіңіздің қателесуіңіз əбден мүмкін.
1.4. Интерфейстік бөлім.
Интерфейс - мүше айнымалылары жоқ класс және оның барлық әдістері таза виртуалды функциялар болып табылады!Интерфейстер интерфейс кластары немесе интерфейс кластары деп те атайды.
Интерфейс кластары әдетте басында I деп аталады.
IErrorLog мұрагері болатын кез келген класс IErrorLog сыныбының барлық 3 әдісінің өзіндік орындалуын қамтамасыз етуі керек. FileErrorLog деп аталатын еншілес класс жасай аласыз, мұнда openLog() дискідегі файлды ашады, closeLog() файлды жабады және writeError() файлға хабарлама жазады. OpenLog() және closeLog() ештеңе жасамайтын және writeError() қалқымалы терезеде хабарды басып шығаратын ScreenErrorLog деп аталатын басқа еншілес класс жасай аласыз.
Енді сіз қателер журналын пайдаланатын бағдарламаны жазғыңыз келеді делік. FileErrorLog немесе ScreenErrorLog сыныптарын тікелей жазсаңыз, бұл тиімсіз. Мысалы, келесі функция mySqrt() деп шақыратын барлық нысандарды FileErrorLog пайдалану үшін мәжбүрлейді, бұл әрқашан сәйкес келмеуі мүмкін.
Енді пайдаланушы объектілерді тасымалдау арқылы қай классты шақыру керектігін өз бетінше анықтай алады. Егер ол қатенің файлға жазылуын қаласа, ол FileErrorLog класының объектісін mySqrt() функциясына жібереді. Егер ол қатенің экранда көрсетілуін қаласа, онда ол ScreenErrorLog класының объектісін өткізеді. Немесе ол сіз болжамаған нәрсені істегісі келсе, мысалы, біреуге қате туралы хабарды электрондық пошта арқылы жіберу, онда ол IErrorLog жүйесінен мұраланатын жаңа EmailErrorLog еншілес сыныбын жасай алады және сол сыныптың нысанына өтеді! Осылайша, IErrorLog арқылы іске асыру біздің функциямызды икемді және тәуелсіз етеді.
Интерфейс нұсқағышы жойылған кезде сәйкес (еншілес) сыныптың деструкторы шақырылуы үшін интерфейс сыныптарыңызға виртуалды деструкторларды қосуды ұмытпаңыз.
Интерфейстер өте танымал, себебі оларды пайдалану оңай, техникалық қызмет көрсету оңай және кеңейту оңай.Java және C++ сияқты кейбір тілдер тіпті синтаксисіне интерфейс кілт сөзін қосты, бұл бағдарламашыларға барлық әдістердің абстрактілі екенін анық көрсетпей интерфейс класын тікелей анықтауға мүмкіндік береді.
2.1. Модульдік программалау.
Құрылымдық бағдарламалау алгоритмдік мінездемесі бар математикалық есептерді шығаруда тиімді қолданылады. Программалау процесін жақсартатын және кең қолданылатын әдістердің бірі - құрылымдық программалау. Құрылымдық программалаудың 3 бөлігі (құраушысы) бар:
1. Модульдік программалау
2. Құрылымдық кодтау
3. Жоғарыдан төменге қарай жобалау
Модульдік программалау дегеніміз - программаны логикалық бөліктерге бөлу процесі. Программа бірнеше модульдерге бөлінеді және мына 2 мақсат орындалуы тиіс: 1) модулдің дұрыс болуы және оның контекстерден тәуелсіз болуы қажет; 2) модулдің ішкі жұмыстарын білмей тұра әр түрлі модулдерден программа құру мүмкіндігінің болуы қажет.
Мысал ретінде стандарт математикалық функциялардың есептелу программасын қарастыруға болады. Программист sin(x) функциясын программаның кез-келген жерінде қолдана алады және оған функцияның есептелуіне қай әдістің қолданып тұрғанын білудің қажеттілігі жоқ. Модуль өлшемі 60 жолдан аспауы керек және модульдер өзара тәуелсіз болуы керек. Байланысқан элементтерді бір модульге, байланыспаған элементтерді әр түрлі модульге жинау керек. Модульдерді қолдана отырып программа күрделілігін төмендетуге болады.
С++тілінде модуль процедуралар мен функциялардың көмегімен құрылады, Cи тілінде функциялардың көмегімен құрылады. Құрылымдық кодтау деп программада басқарушы конструкциялардың - шартты операторлардың, циклдің (параметрлі, цикл-әзір, цикл-дейін) қолданылуын айтады.
Шартсыз көшу операторы программада сирек қолданылуы керек немесе шартты оператордың, циклдің көмегімен өзгертілуі керек. Программаны жоғарыдан төмен қарай жобалаудың өз иерархиялық құрылымы бар және қысқа есеп қойылымынан басталады. Одан кейін есеп бірнеше ұсақ ішкі есептерге бөлінеді. Ішкі есептердің өзі де ішкі есептерге бөлінуі мүмкін. Әр қадамда ішкі есептің орындайтын негізгі функциялары анықталуы керек. Бөлу процесі әр ішкі есеп қарапайым болғанға дейін, яғни әр ішкі есепке бір модуль сәйкес келгенше созылады.
Модульдік бағдарламалау Бөліп билей принципі бойынша жұмыс істейді.
Модульдік бағдарламалау әдетте модульдері аталады тәуелсіз шағын блоктар, көптеген ретінде бағдарламасын ұйымдастыру көздейді, мінез-құлық және құрылымы әбден толық бағынысты жекелеген қағидалары болып табылады. синтаксистік бір көрінісі болған кезде ол бірлік тұжырымдамасын пайдалану бөлісуге тұр тілдік бірлік бағдарламасы және қашан ол рәсімдерді түрінде, сондай-ақ іске асыруға болады, бірнеше блоктарға үлкен бағдарламаның ұнтақтау бөлімшесі болып табылады функцияларын түрінде. модульдік бағдарламалау пайдалану жеңілдетуге мүмкіндік береді тестілеу бағдарламасын және қателіктер дер кезінде анықтауды. Ол қатаң белгіленген бағдарламалардың ұтқырлығын арттыруға мүмкіндік береді, басқа подзадач, аппараттық-тәуелді тапсырмаларды бөлуге болады. уақыт-сын модульдер айтарлықтай процесін жеңілдетеді және тиімділігін әлдеқайда жоғары етеді, ол бөлек өзгертуге болады. модульдері тиімді басқа бағдарламаларға арналған блоктар құрылыс ретінде пайдалануға болады, өйткені Сонымен қатар, модульдік бағдарламалау, түсіну әлдеқайда оңай.
Бағдарламаларды жазу кезінде термині модулі өзі модульдік принципін енгізу байланысты бағдарламалау пайдаланылуы бастады. жетпісінші, модуль белгілі бір ережелерге сәйкес жазылған функциясы немесе рәсімін қандай, деп аталады. сол уақытта жалпы қабылданған талаптарға құрылған жоқ болғандықтан, модуль, оның мөлшері елу желілері дейін кез келген процесс деп аталады. модуль үшін Parnassus бірінші нақтыланды талаптар қалыптастырылды: бір модулін қалыптастыру мақсатында басқа мазмұны туралы аз білім үшін жеткілікті болуы тиіс. Ол Parnassus бағдарламалау жасырынып ақпарат ұғымы қалыптасады алғаш рет шықты. Оның анықтамасы модуль төменгі және иерархияның ең жоғарғы деңгейі ретінде кез келген бірыңғай тәртібі аталады мүмкін, бұл шын мәнінде бізге әкеледі.
Қауіпсіз олар жаһандық айнымалылар драмалық әсері жатады және олардың мінез-құлық кешенді бағдарламаларына болжау қиын, өйткені ақпарат уақытта бар құрылымдардың пайдалану арқылы қол мүмкін емес жасыру. Ол осы айнымалы оқшауланған құрылымын құру қажет болды. Ол оның және атындағы модуль болды, және оған негізделген, және модульдік бағдарламалау дүниеге келген.
Бастапқыда ол құрылыс нақты подзадачи іске бөлшектер біріктіреді және жасырады ретінде күрделі бағдарламалық қамтамасыз жүйесін енгізу функциялар мен процедуралар бар тең модуль көмегімен жүзеге асыруға болады деп болжанған. Бірақ С++тілінде ол толығымен модульдік бағдарламалау қағидасы жүзеге асырылды жоқ. ол кез келген басқа модульдерден нысандарды импорттау мүмкіндік бермейді, өйткені бұл тілде толық ішкі модульдерін қолдамайды, импорт, жеткіліксіз икемді жүзеге асырылуда. дербес компьютерлер таратпау бар айтарлықтай теориялық дайындықтың орташа деңгейі төмендейді бағдарламалау адамдар, ауқымын кеңейтті, бұл шын мәнінде осы фактіні аралас әсері, қолдану модульдер әзірлеу функциялар мен процедуралардың кітапханалардың проблемасын құру құралы ретінде пайдаланылды, бұл шын мәнінде әкелді. Тек білікті бағдарламашылар операцияларды құрылымдау барлық нысандар үшін тілдік құрылымдардың толық қуатын пайдаланылады.
Егер сіз бағдарламашы тұрғысынан Паскаль бірлік қарасақ, олардың саны қосалқы міндеттерді, бір-біріне тәуелсіз бірқатар Мәселенің ыдырау арқылы айқындалуы тиіс. ... жалғасы
Ұқсас жұмыстар
Пәндер
- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.
Ақпарат
Қосымша
Email: info@stud.kz