Кафедра атқ Кафедра меңг



Дата03.12.2023
өлшемі0,81 Mb.
#194807
түріБағдарламасы
Байланысты:
Азамбеков Дилмурод



Қарағанды мемлекеттік техникалық университеті

Кафедра АТҚ




Курстық жұмыс
C++ бағдарламасы бойынша практикум
( пәннің атауы)
Тақырып: С++ тілінде массивтерді сұрыптау және іздеуді ұйымдастыру
қосымшасын әзірлеу

Қабылдады:
Сайлауқызы Ж
(баға) (оқытушының аты-жөні)
(қолы) (уақыты)
Комиссия мүшелері: Орындаған:
Азамбеков Дилмурад
(қолы, аты-жөні) (студенттің аты-жөні)
ВТ-22-1
(қолы, аты-жөні) (группа)
(қолы, аты-жөні)
Қ арағанды 2022


Қарағанды мемлекеттік техникалық университеті
Факультет ИТ «БЕКІТЕМІН»
Кафедра АТҚ Кафедра меңг.
(қолы)
«_____» ________ 2022 ж.


КУРСТЫҚ ЖҰМЫСҚА ТАПСЫРМА
C++ бағдарламасы бойынша практикум пәні бойынша
В Т-22-1 тобының студенті Азамбеков Дилмурад
Т ақырып: С++ тілінде массивтерді сұрыптау және іздеуді ұйымдастыру қосымшасын әзірлеу
Б астапқы мәліметтер:  С++ бағдарламалау тілі, MS Visual Studio бағдарлама құру ортасы

Т апсырма берілді « » 2022ж


Ж етекші Сайлауқызы Ж қолы
С тудент Азамбеков Дилмурад қолы




Мазмұны





Кіріспе

4

1

Пәндік аймақты сипаттау

5

1.1

Бағдарламалау тілдерінің жіктелуі

5

1.2

С++ бағдарламалау тілі

6

1.2.1

Стандартты кітапхана

9

1.2.2

Массивтер

10

1.2.3

Көрсеткіштер (Указатели)

11

1.2.4

Функция

12

1.2.5
1.2.6

С++артықшылықтары мен кемшіліктері
Мектеп кітапханасы қосымшасын құруға керекті талаптар

13
15

2

Жобалау

16

2.1

Есепті шешу алгоритмін сипаттау

16

2.2

Қосымша сипаттамасы

17

2.3
3

Қосымшаның операторлары мен функциялары
Бағдарламалық қамтаманы жүзеге асыру

17
20

3.1

Қосымша жұмысының нәтижелері
Қорытынды

21
23




Қолданылған әдебиеттер

24




Қосымша А

25




Қосымша Б

31







































Кіріспе


Әр адам деректерді өзінде сақтайды - бұл факт, ол өзі сақтаған кейбір ақпаратты басқа адамдармен бөліскісі келеді. Жақында осындай жүйелер пайда болды, бұл адамдарға бір-бірімен әртүрлі ақпарат алмасуға және оны сақтауға мүмкіндік берді. Олар мұндай жүйелерді мәліметтер базасы деп атады.


Мәліметтер базасы (ДБ) - мұндай ұйым болған жағдайда сыртқы деректерді сақтау тасушыларында бірге сақталатын өзара байланысты мәліметтер жиынтығы және оларды бір немесе бірнеше қосымшаларға оңтайлы пайдалануға мүмкіндік беретін минималды резервтер; деректер сақталады және пайдаланылады, олар осы деректерді қолданатын бағдарламаларға тәуелсіз, ал бағдарламалар деректерді сақтау әдісі мен құрылымына тәуелсіз; Жаңа деректерді қосу немесе бұрыннан бар деректерді өзгерту, сондай-ақ дерекқорда деректерді іздеу үшін жалпы басқару әдісі қолданылады.
Деректер базасын құруды және оны үнемі жаңартып отыруды жүзеге асыратын, сонымен қатар әр түрлі пайдаланушыларға дерекқорда сақталған ақпаратты өз мақсаттары үшін пайдалануға мүмкіндік беретін бағдарламалар жиынтығы дерекқорды басқару жүйесі (ДББЖ) деп аталады. Ең көп таралған ДҚБЖ бірі - Microsoft SQL Server 2019.
DBMS Microsoft SQL Server 2019, курстық жобаны жасауда қолданылады, клиент-сервер технологиясын қолдана отырып, реляциялық деректер базасымен жұмыс істеуге мүмкіндік беретін ең кең таралған және танымал ДҚБЖ бірі болып табылады.
Курстық жұмыстың нысаны: Java бағдарламалау тілі.
Пән: Деректер қоры;
Мақсаты: тапсырманың жеке нұсқасына сәйкес клиенттің қосымшасы мен мәліметтер базасын құру (№6 нұсқа - «Қойма есебінің» ішкі жүйесі).
Мақсатқа сүйене отырып, тапсырманы орындау үшін келесі міндеттерді қойдым:

  1. Деректер қорымен жұмыс жасауды тереңдете үйрену

  2. Деректер қорын теориялық тұрғыдан меңгеру

  3. Клиенттік қосымша әзірлеу

  4. 4.Жасалған бағдарлама арқылы ДҚ-н зерттеу

Бұл жұмыстың өзектілігі:
Қолданушыға қолайлы және түсінікті түрде C# бағдарламалау тілінде ДҚ-н пайдалана отырып клиенттік қосымша жасау.
1 Пәндік аймақты сипаттау

1.1 Бағдарламалау тілдерінің жіктелуі


Бағдарламалау тілі-компьютерлік бағдарламаларды жазуға арналған ресми тіл. Бағдарламалау тілі бағдарламаның сыртқы түрін және орындаушы (әдетте компьютер) басқаратын әрекеттерді анықтайтын лексикалық, синтаксистік және семантикалық ережелер жиынтығын анықтайды.


Алғашқы бағдарламаланатын машиналар пайда болғаннан бері адамзат сегіз мыңнан астам бағдарламалау тілдерін ойлап тапты (эзотерикалық, визуалды және ойыншық). Жыл сайын олардың саны артып келеді. Кейбір тілдерді өз әзірлеушілерінің аз ғана бөлігі қолдана алады, ал басқалары миллиондаған адамдарға белгілі болады. Кәсіби бағдарламашылар бірнеше бағдарламалау тілдерін меңгере алады.
Бағдарламалау тілі компьютерге белгілі бір есептеу процесін жүргізуге, әртүрлі нысандарды басқаруды ұйымдастыруға және т. б. мүмкіндік беретін ережелер жиынтығы болып табылатын компьютерлік бағдарламаларды жазуға арналған. өзі. Көптеген бағдарламалау тілдері Деректер құрылымын анықтау және басқару және есептеу процесін басқару үшін арнайы дизайнды қолданады.Процедуралық бағдарламалау дегеніміз-бағдарлама деректерден бөлініп, деректерді өңдейтін командалар тізбегінен тұратын бағдарламалау. Деректер әдетте айнымалы ретінде сақталады. Есептеудің бүкіл процесі олардың мазмұнын өзгертуге дейін азаяды.Декларативті бағдарламалау тілдері-бұл жарнама және құрылымды құру тілдері. Оларға Функционалды және логикалық бағдарламалау тілдері жатады. Бұл тілдерде алгоритмдік әрекеттер нақты жасалмайды, яғни алгоритмді бағдарламашы орнатпайды, бірақ бағдарламаның өзі жасайды. Декларативті тілдерде қандай да бір құрылым немесе жүйе құрылады, яғни құрылатын объектінің қандай да бір қасиеттері декларацияланады (жарияланады). Бұл тілдер автоматтандырылған жобалау жүйелерінде (АЖЖ), CAD деп аталатын пакеттерде, модельдеуде, жасанды интеллект жүйелерінде кеңінен қолданылады.
Нысанға бағытталған бағдарламалау-Бұл тілдерде айнымалылар мен функциялар сыныптар (шаблондар) деп аталады. Осының арқасында бағдарламаны құрылымдаудың жоғары деңгейіне қол жеткізіледі. Кластардан пайда болған нысандар бір-бірінің әдістерін (функцияларын немесе процедураларын) шақырады және осылайша қасиеттердің (айнымалылардың) күйін өзгертеді. Формальды-математикалық жағынан, бағдарламаларды жазудың объектіге бағытталған әдісі бағдарламалаудың процедуралық моделіне негізделген, бірақ мазмұнды жағынан OOP функцияға емес, стандартты автоматты объектаралық интерфейсі бар тұтас жүйе ретінде объектіге негізделген.
Желілік тілдер - бұл қашықтағы компьютерлердің өзара әрекеттесуін қарқынды интерактивті режимде ұйымдастыруға арналған Тілдер, сондықтан олар интерпретация принциптеріне негізделген, яғни компьютерлердің желілік өзара әрекеттесуінің кейбір сценарийін (сценарийін) сипаттайтын бағдарламалық кодтың жолдарын сызып, интерактивті өңдеу, сондықтан оларды көбінесе сценарий тілдері деп атайды, дегенмен сценарий тілдері міндетті түрде желі емес, мысалы мысалы, әртүрлі операциялық орталардың пакеттік командалық тілдері.
Машинаға бағытталған тілдер-бұл компьютерлер сипаттамаларына (ішкі тіл, жад құрылымы және т.б.) байланысты болатын операторлар жиынтығы мен бейнелеу құралдары. Машинаға бағытталған тілдер барлық мүмкіндіктер мен мүмкіндіктерді пайдалануға мүмкіндік береді.

1.2 С++ бағдарламалау тілі


C++ - құрастырылатын, статикалық типтелген жалпы мақсаттағы бағдарламалау тілі.


Процедуралық бағдарламалау, объектіге бағытталған бағдарламалау, жалпыланған бағдарламалау сияқты бағдарламалау парадигмаларын қолдайды. Тілде кең таралған контейнерлер мен алгоритмдер, енгізу-шығару, тұрақты өрнектер, көп ағынды қолдау және басқа да мүмкіндіктер бар бай стандартты кітапхана бар. C++ жоғары және төмен деңгейлі тілдердің қасиеттерін біріктіреді.Бұрынғы С тілімен салыстырғанда объектіге бағытталған және жалпыланған бағдарламалауды қолдауға көп көңіл бөлінеді.C++ бағдарламалық жасақтаманы жасау үшін кеңінен қолданылады, ең танымал бағдарламалау тілдерінің біріОның ауқымы операциялық жүйелерді, әртүрлі қолданбалы бағдарламаларды, құрылғы драйверлерін, ендірілген жүйелерге арналған қосымшаларды, жоғары өнімді серверлерді, сондай-ақ ойындарды құруды қамтиды. C++ тілін ақысыз да, коммерциялық та, әртүрлі платформалар үшін де көптеген енгізулер бар. Мысалы, x86 платформасында бұл GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder және басқалар. C++ басқа бағдарламалау тілдеріне, ең алдымен Java және C#тілдеріне үлкен әсер етті.
C++ синтаксисі C тілінен мұра болып табылады, бастапқыда даму принциптерінің бірі c-мен үйлесімділікті сақтау болды, алайда C++ қатаң мағынада C-тің көп бөлігі емес; C компиляторлары да, c++ компиляторлары да бірдей сәтті тарата алатын көптеген бағдарламалар өте үлкен, бірақ C-Тегі барлық мүмкін бағдарламаларды қамтымайды.
Тіл 1980 жылдардың басында, Bell Labs қызметкері Бьерн Страуструп өз қажеттіліктері үшін C тіліне бірқатар жақсартулар жасаған кезде пайда болды. 1970 жылдардың аяғында Страуструп кезек теориясының міндеттері бойынша Bell Labs-та жұмыс істей бастағанда (телефон қоңырауларын модельдеуге арналған қосымшада), ол сол кездегі модельдеу тілдерін қолдану әрекеттері тиімсіз болып шықты, ал жоғары тиімді машиналық ТІЛДЕРДІ ҚОЛДАНУ олардың шектеулі экспрессивтілігіне байланысты өте қиын болды. Сонымен, Симулдың тілінде үлкен бағдарламалық жасақтаманы жасау үшін өте пайдалы болатын, бірақ өте баяу жұмыс істейтін және BCPL тілі өте жылдам, бірақ төмен деңгейлі тілдерге тым жақын және үлкен бағдарламалық жасақтаманы жасауға жарамсыз мүмкіндіктер бар.
Диссертациясының тәжірибесін еске түсіре отырып, Страуструп С тілін (bcpl мұрагері) Симул тіліндегі мүмкіндіктермен толықтыруға шешім қабылдады. Bell компьютерлері жұмыс істейтін UNIX жүйесінің негізгі тілі бола отырып, C тілі тез, көп функциялы және портативті. Страуструп оған сыныптармен және объектілермен жұмыс істеу мүмкіндігін қосты. Нәтижесінде модельдеудің практикалық міндеттері даму уақыты тұрғысынан да (Симула тәрізді сыныптарды қолдану арқылы) және есептеу уақыты тұрғысынан да (c жылдамдығына байланысты) шешуге қол жетімді болды. Біріншіден, C-ге сыныптар (инкапсуляциямен), сыныпты мұрагерлік, түрді қатаң тексеру, кірістірілген функциялар және әдепкі дәлелдер қосылды. Бастапқыда "C with classes" ("си с классами") деп аталған тілдің алғашқы нұсқалары 1980 жылдан бастап қол жетімді болды.С — ны сыныптармен дамыта отырып, Страуструп cfront бағдарламасын жазды-C бастапқы кодын сыныптармен қарапайым C бастапқы кодына өңдейтін аудармашы, бұл жаңа тілде жұмыс істеуге және оны іс жүзінде қолдануға мүмкіндік берді, Unix-те бар инфрақұрылымды C-де дамыту үшін қолдана отырып, автор үшін күтпеген жерден жаңа тіл әріптестер арасында үлкен танымалдылыққа ие болды және көп ұзамай Страуструп енді ол мыңдаған сұрақтарға жауап бере отырып, оны жеке қолдай алмады.1983 жылға қарай тілге виртуалды функциялар, функциялар мен операторлардың шамадан тыс жүктелуі, сілтемелер, тұрақтылар, жадты басқаруды пайдаланушы бақылауы, жақсартылған типті тексеру және жаңа түсініктеме стилі (//) сияқты жаңа мүмкіндіктер қосылды. Алынған тіл қазірдің өзінде классикалық c нұсқасының толықтырылуын тоқтатты және C-ден "C++"деп өзгертілді. Оның алғашқы коммерциялық шығарылымы 1985 жылдың қазан айында өтті.
C++ стандарты екі негізгі бөліктен тұрады: тілдің негізгі сипаттамасы және стандартты кітапхананың сипаттамасы.
Алдымен тіл формальды шеңберден тыс, өздігінен дамыды, өйткені оның алдында міндеттер тұрды. Тілдің дамуы cfront кросс-компиляторының дамуымен қатар жүрді. Тілдегі жаңалықтар кросс-компилятор нұсқасының нөмірінің өзгеруінде көрініс тапты. Бұл кросс-компилятор нұсқаларының нөмірлері тілдің өзіне де қатысты болды, бірақ қазіргі уақытта C++ тілінің нұсқалары туралы айту мүмкін емес. Тек 1998 жылы Тіл стандартталған болды.

  • C++ C стиліндегі пікірлерді (/* түсініктеме*/) және бір жолды (// жолдың қалған бөлігі-түсініктеме) қолдайды, мұнда // түсініктеменің басталуын және \ (немесе оған балама белгілеу арқылы алдын-ала жасалмаған жаңа жолдың ең жақын келесі таңбасын білдіреді ??/), қалулардың аяқталуы болып табылады пікір. Бұл түсініктеменің артықшылығы-оны аяқтаудың қажеті жоқ, яғни түсініктеменің аяқталуын көрсету.

  • Функцияларға арналған Inline спецификаторы. Класс денесінің ішінде анықталған Функция әдепкі бойынша inline болып табылады. Бұл спецификатор компилятордың кеңесі болып табылады және функцияның денесін тікелей шақырудың орнына кодқа енгізе алады.

  • Const және volatile жіктеуіштері. С-тен айырмашылығы, мұндағы const тек оқуға қол жетімділікті білдіреді, C++ тілінде const квалификаторы бар айнымалы инициализациялануы керек. volatile айнымалыларды сипаттауда қолданылады және компиляторға берілген айнымалының мәнін компилятор бақылай алмайтын жолмен өзгертуге болатындығын хабарлайды. Volatile жариялаған айнымалылар үшін компилятор жадтағы айнымалының орнын өзгертетін оңтайландыру құралдарын қолданбауы керек (мысалы, оны регистрге қою) немесе оған берілген екі мән арасындағы аралықта айнымалы мәннің өзгермейтіндігіне сүйенуі керек. Көп ядролы жүйеде volatile 2 типті жад кедергілерін болдырмауға көмектеседі .

  • Аттар кеңістігі(namespace)

Арнайы жағдайы болып табылады атсыз атаулар кеңістігі. Онда сипатталған барлық атаулар тек ағымдағы трансляция бірлігінде қол жетімді және жергілікті байланысы бар. Std аттар кеңістігінде стандартты C++кітапханалары бар.Жадпен жұмыс істеу үшін жаңа, жаңа[], жою және жою [] операторлары енгізілді. C-тен келген malloc және free кітапханаларынан айырмашылығы, бұл операторлар объектіні баптауды жүзеге асырады. Сыныптар үшін бұл конструкторға қоңырау, POD типтері үшін инициализацияны жүргізуге болмайды (Жаңа Pod;) немесе нөлдік мәндермен инициализацияны жүргізуге болады (жаңа Pod (); жаңа Pod{};).
C++ тілінде келесі кіріктірілген типтер бар. C++ түрлері C-де деректер түрлерін толығымен қайталайды:

  • Таңбалар: char, wchar_t (char16_t және char32_t, C++11 стандартында).

  • Бүтін сандар белгісі: таңбаланған char, қысқа int, int, ұзын int (және ұзын ұзын, C++11 стандартында).

  • Қол қойылмаған бүтін сандар: қол қойылмаған char, қол қойылмаған қысқа, қол қойылмаған, ұзақ қол қойылмаған(және ұзақ қол қойылмаған, C++11 стандартында).

  • Қалқымалы нүкте: float, double, long double.

  • Логикалық: шын немесе жалған мәндері бар bool.

  • Салыстыру операциялары bool түрін қайтарады. Жақшадағы өрнектер if, while bool түріне келтіріледі.

Тіл сілтемелер ұғымын енгізді, ал C++11 rvalue стандартынан-сілтемелер мен берілетін сілтемелер (ағылш. forwarding reference). (сілтемені қараңыз (c++))
C++ C объектісіне бағытталған мүмкіндіктерді қосады. Ол OOP-тің ең маңызды үш қасиетін қамтамасыз ететін сыныптарды ұсынады: инкапсуляция, мұрагерлік және полиморфизм
C++ стандартында класс (класс) дегеніміз-class, struct немесе union кілт сөздерінің бірін қолдана отырып жарияланған пайдаланушы түрі, құрылым (құрылым) дегеніміз-struct Кілт сөзі арқылы анықталған класс, ал бірлестік (одақ) дегеніміз-union кілт сөзі арқылы анықталған класс.Класс анықтамасының денесінде функциялардың декларациясын да, олардың анықтамасын да көрсетуге болады. Соңғы жағдайда функция ендірілген (кірістірілген)). Статикалық емес мүше функцияларында const және volatile жіктеуіштері, сондай-ақ сілтеме жіктеуіші (& немесе&&) болуы мүмкін.
Оператор-бұл компиляторға белгілі бір математикалық немесе логикалық манипуляцияларды орындау туралы есеп беретін символ. C ++ ендірілген операторларға бай және келесі оператор түрлерін ұсынады:

  • Арифметикалық операторлар

  • Реляциялық операторлар

  • Логикалық операторлар

  • Бит операторлары

  • Тағайындау операторлары

  • Басқа операторлар

1.2.1 Стандартты кітапхана

Стандартты C++ кітапханасы бағдарламашыларға тілдік құралдарды ыңғайлы пайдалануды қамтамасыз ету және кең ауқымды қолданбалы қосымшаларды да, мамандандырылған кітапханаларды да дамыту үшін негіз құру үшін кез-келген тілді жүзеге асыру үшін қол жетімді құралдар жиынтығын қамтиды. C++ стандартты кітапханасы c стандартты кітапханасының бір бөлігін қамтиды, C++ стандарты 1990 жылғы С стандартына нормативтік сілтемені қамтиды және C стандартты кітапханасынан алынған стандартты кітапхананың функцияларын өздігінен анықтамайды.C++ стандартты кітапханасының мүмкіндіктеріне қол жеткізу бағдарламаға (#include директивасы арқылы) тиісті стандартты тақырып файлдарын қосу арқылы қамтамасыз етіледі. Барлығы C++11 стандартында осындай 79 файл анықталған. Стандартты кітапхана құралдары std аттар кеңістігіне кіреді деп жарияланады. Атаулары "cX" үлгісіне сәйкес келетін тақырып файлдары, мұндағы X — кеңейтусіз стандартты C кітапханасының тақырып файлының атауы (cstdlib, cstring, cstdio және т. б.) стандартты C кітапханасының осы бөлігіне сәйкес келетін жарнамаларды қамтиды. C кітапханасының стандартты функциялары std аттар кеңістігінде де кездеседі.


Стандартты кітапхана келесі бөлімдерді қамтиды:

  • Тілді қолдау. Бағдарламалардың жұмыс істеуі үшін қажетті құралдарды, сондай-ақ іске асыру ерекшеліктері туралы ақпаратты қамтиды. Жадты бөлу, RTTI, негізгі ерекшеліктер, сандық деректер түрлеріне арналған мәндер шегі, жүйелік сағат, UNIX сигналдарын өңдеу, бағдарламаны аяқтау сияқты қоршаған ортамен өзара әрекеттесудің негізгі құралдары.

  • Стандартты контейнерлер. Стандартты кітапханаға келесі контейнерлерге арналған шаблондар кіреді: динамикалық массив (векторлық), статикалық массив(array), бір және екі бағытты тізімдер(тізім, forward_list), стек(stack), Деко(deque), ассоциативті массивтер(map, multimap), жиындар(set, multiset), басымдық кезегі(priority_queue).

  • Негізгі утилиталар. Бұл бөлімде стандартты кітапханада қолданылатын негізгі элементтердің сипаттамасы, жад таратқыштары және C стиліндегі уақыт пен күнді қолдау бар.

  • Итераторы. Итератор шаблондарын қамтамасыз етеді, олардың көмегімен стандартты кітапханада контейнер элементтеріне деректерді өңдеу алгоритмдерін топтық қолданудың стандартты механизмі жүзеге асырылады.

  • Алгоритмдер. Стандартты кітапхана механизмдерін қолдана отырып, кез-келген элементтер тізбегіне, соның ішінде контейнерлердегі элементтерге қолдануға болатын өңдеу операцияларын сипаттауға арналған шаблондар. Сондай-ақ, бұл бөлімде стандартты C кітапханасынан bsearch() және qsort() функциясының сипаттамалары бар.

  • Жолдан. C++стиліндегі жол шаблондары. Сондай-ақ, С стиліндегі жолдармен және символдармен жұмыс істеуге арналған кітапханалардың бір бөлігі осы бөлімге енеді.

  • Енгізу-шығару. Жалпы типтегі кіріс-шығыс ағындарының шаблондары мен көмекші сыныптары, жолды енгізу-шығару, манипуляторлар (c++стиліндегі кіріс-шығыс ағынын басқару құралдары).

  • Локализация. Ұлттық ерекшеліктер мен ұсыну форматтарын (күндер, валюталар және т. б.) C++ және C стилінде қолдау үшін қолданылатын анықтамалар.

  • Диагностика. Бірқатар ерекшеліктер мен жұмыс уақытында растауды тексеру тетіктерін анықтау (assert). C стиліндегі қателерді өңдеуді қолдау.

  • Санының. Күрделі сандармен, математикалық векторлармен жұмыс істеуге арналған анықтамалар, жалпы математикалық функцияларды қолдау, кездейсоқ сандар генераторы.

1.2.2 Массивтер

Массив-бұл бір атпен біріктірілген бір типтегі жасушалар тобы ретінде ұсынылған мәліметтер құрылымы. Массивтер бірдей типтегі көптеген мәліметтерді өңдеу үшін қолданылады. Массивтің аты-көрсеткіш, бұл көрсеткіштер сәл кейінірек айтылады. Массивтің жеке деректер ұяшығы массив элементі деп аталады. Массивтің элементтері кез-келген түрдегі деректер болуы мүмкін. Массивтерде бір немесе бірнеше өлшем болуы мүмкін. Өлшеу санына байланысты массивтер бір өлшемді массивтерге, екі өлшемді массивтерге, үш өлшемді массивтерге және т.б. n өлшемді массивке бөлінеді. Көбінесе бағдарламалауда бір өлшемді және екі өлшемді массивтер қолданылады, сондықтан біз тек осы массивтерді қарастырамыз.


Бір өлшемді массив-бір өлшемді массив элементтерінің санын сипаттайтын бір параметрі бар массив. Шын мәнінде, бір өлшемді массив — бұл тек бір жол және бағандардың N Саны болуы мүмкін массив. Бір өлшемді массивтегі бағандар-бұл массив элементтері. 1.1-суретте бүтін Бір өлшемді массивтің құрылымы көрсетілген а. Бұл массивтің өлшемі - 16 ұяшық.



Сурет 1.1 – С++ тіліндегі массивтер


Бір өлшемді А массивінің максималды индексі 15 екенін ескеріңіз, бірақ массивтің өлшемі 16 ұяшық, өйткені массивтің ұяшықтарын нөмірлеу әрқашан 0-ден басталады. Индексі ұяшық – бұл бүтін неотрицательное саны, ол болады әрбір ұяшықта массивті орындауға қандай іс-әрекеттерді над ней (ұяшықты).


Осы уақытқа дейін біз әрқашан шектеле алмайтын бір өлшемді массивтерді қарастырдық. Кестеден кейбір деректерді өңдеу керек делік. Кестеде екі сипаттама бар: Жолдар саны және бағандар саны. Сондай-ақ, екі өлшемді массивте массив элементтерінің санынан басқа, екі өлшемді массивтің жолдар саны мен бағандар саны сияқты сипаттамалар бар. Яғни, көзбен, екі өлшемді массив-бұл жолдар мен бағандары бар қарапайым кесте. Шын мәнінде, екі өлшемді массив — бұл бір өлшемді массивтердің бір өлшемді массиві. Екі өлшемді массивтің құрылымы, аты a, өлшемі M N төменде көрсетілген (1.2-суретті қараңыз).



Сурет 1.2 – С++ тіліндегі массивтер


1.2.3 Көрсеткіштер (Указатели)
Көрсеткіш-мәні жад ұяшығының адресі болатын айнымалы. Яғни, көрсеткіш жад аймағындағы деректер блогына және оның басына сілтеме жасайды. Көрсеткіш айнымалыға немесе функцияға сілтеме жасай алады. Ол үшін айнымалының немесе функцияның мекен-жайын білу керек. Сонымен, белгілі бір айнымалының мекен-жайын білу үшін c++ мекен-жайын алудың бір унарлы әрекеті бар &. Мұндай операция көрсеткішке тағайындау үшін жарияланған айнымалылардың мекенжайын алады.
Көрсеткіштер деректерді сілтеме арқылы беру үшін қолданылады, бұл деректерді өңдеу процесін едәуір жылдамдатады (Егер деректер көлемі үлкен болса), өйткені оларды көшіру қажет емес, мәні бойынша беру кезінде, яғни айнымалы атауды қолдану арқылы. Негізінен, көрсеткіштер жадтың динамикалық таралуын ұйымдастыру үшін қолданылады, мысалы, массивті жариялау кезінде оны мөлшерде шектеу қажет болмайды. Өйткені, бағдарламашы белгілі бір пайдаланушыға қандай массив қажет екенін алдын-ала біле алмайды, бұл жағдайда массив үшін динамикалық жад бөлу қолданылады. Кез-келген көрсеткіш, кез-келген айнымалы сияқты, қолданар алдында жариялануы керек. Көрсеткіштерді жариялау принципі айнымалыларды жариялау принципімен бірдей. Айырмашылық тек атаудың алдына жұлдызша * белгісі қойылатындығында. Көрнекі көрсеткіштер айнымалылардан тек бір таңбамен ерекшеленеді. Көрсеткіштерді жариялау кезінде компилятор жадта кейбір ақпаратты сақтау үшін бөлінген мәліметтер түріне байланысты бірнеше байт жадын бөледі. Алу үшін маңызы бар, жазылмаған кейбір облысының, оған сілтеме көрсеткіші қажет пайдалана операция разыменования көрсеткіштің *. Атаудың алдына жұлдызша қойып, көрсеткіш мәніне қол жеткізу керек. Көрсеткіштерді қолданатын бағдарлама әзірлейміз.
1.2.4 Функция

Функциялар-бұл белгілі бір операцияларды орындайтын код блоктары. Қажет болса, функция қоңырау шалушы объектілерге дәлелдер беруге мүмкіндік беретін кіріс параметрлерін анықтай алады. Қажет болса, функция шығыс ретінде мәнді қайтара алады. Функциялар бірнеше рет қолдануға болатын бір блоктағы негізгі операцияларды инкапсуляциялау үшін пайдалы. Идеал жағдайда, бұл блоктың атауы функцияның мақсатын нақты сипаттауы керек. Келесі функция қоңырау шалушыдан екі бүтін санды алады және олардың сомасын қайтарады; A және b-int типті параметрлер.Функцияны бағдарламаның кез-келген жерінен шақыруға немесе шақыруға болады. Функциялар арқылы берілетін мәндер-бұл функциялар анықтамасындағы параметрлер түрлерімен үйлесімді болуы керек дәлелдер.


Функцияның ұзындығы іс жүзінде шектеусіз, бірақ кодтың максималды тиімділігі үшін әрқайсысы бір, нақты белгіленген тапсырманы орындайтын функцияларды қолданған жөн. Мүмкін болса, күрделі алгоритмдерді түсіну үшін қысқа және қарапайым функцияларға бөлген дұрыс.Сыныптың ауқымында анықталған функциялар мүше функциялар деп аталады. C++ тілінде, басқа тілдерден айырмашылығы, функцияларды аттар кеңістігінің көріну аймағында да анықтауға болады (жасырын Ғаламдық аттар кеңістігін қоса). Мұндай функциялар тегін немесе мүше емес функциялар деп аталады; олар стандартты кітапханада кеңінен қолданылады.Функциялар шамадан тыс жүктелуі мүмкін, яғни функцияның әртүрлі нұсқалары ресми параметрлердің саны және (немесе) түрі бойынша ерекшеленетін болса, бірдей атауды қолдана алады.
Функцияның параметрлерінің тізімі бар, онда үтір арқылы түрлердің қажетті (мүмкін нөл) саны тізімделеді. Әр параметрге функция денесінде қол жеткізуге болатын атау беріледі. Функция үлгісінде параметрлердің қосымша түрлері немесе мәндері көрсетілуі мүмкін. Қоңырау шалушы объект нақты мәндер болып табылатын аргументтерді жібереді, олардың түрлері параметрлер тізімімен үйлесімді.Әдепкі бойынша, аргументтер функциялар мәні бойынша беріледі, яғни функция берілетін объектінің көшірмесін алады. Ірі нысандарды көшіру ресурстарды қажет етеді және негізсіз болуы мүмкін.
Рекурсивті функция-бұл өзін-өзі шақыратын функция. Бұл тікелей Рекурсия жағдайында. Жанама рекурсия да бар-екі немесе одан да көп функция бір-бірін шақырған кезде. Функция өзін шақырған кезде, оның параметрлері мәндерінің көшірмесі стекте жасалады, содан кейін Басқару функцияның бірінші орындалатын операторына беріледі. Қайта қоңырау шалған кезде процесс қайталанады. Рекурсивті функциялар циклдерге балама болып табылады. Санның факторын, берілген интервалдағы сандардың қосындысын есептеу және санды дәрежеге көтеру үшін рекурсивті функциялардың мысалдарын қарастырыңыз.
1.2.5 С++артықшылықтары мен кемшіліктері

C++ тілінің артықшылықтары мен кемшіліктерін қарастырмас бұрын, Бьерн Страуструптың осы тілді жобалау кезінде қолданған ережелерімен танысу керек:



  • Статикалық деректер түрлері, Си тілінің тиімділігі мен тасымалдануы бар әмбебап тіл ретінде жасалған.

  • Бағдарламалаудың көптеген стильдерін (процедуралық бағдарламалау, деректер абстракциясы, объектіге бағытталған бағдарламалау және жалпыланған бағдарламалау) тікелей және жан-жақты қолдау үшін жасалған.

  • Бағдарламашыға дұрыс емес таңдау жасауға мүмкіндік берсе де, таңдау еркіндігін беруге арналған.

  • Әзірленді болатындай барынша сақтап, үйлесімділік Си, осылайша мүмкін жеңіл көшу бағдарламалау Си.

  • Платформаға тәуелді немесе әмбебап емес ерекшеліктерден аулақ болады.

  • Ешқандай мүмкіндікті пайдаланбайтын бағдарламаға артық жүктеме салмайды.

  • Ол тым күрделі бағдарламалау ортасын қажет етпейтіндей етіп жасалған.

Бірінші ереже C++ негізгі артықшылықтарының бірін анық көрсетеді-айнымалы өзінің деректер түрін өзгерте алмайды. Бұл дегеніміз, автотолтыру кезінде интеграцияланған даму ортасы тек осы деректер түріне қолданылатын әдістерді ұсынады. Статикалық теру қателер санын едәуір азайтады; олардың көпшілігі қосымшаны құрастыру сатысында алынып тасталады. Алайда, статикалық теруді қолдану алгоритмдерді іске асыруда және кодты оқуда белгілі бір қиындықтарды тудырады.
C++ әмбебаптығы-бұл бағдарламалау тілінің тағы бір маңызды артықшылығы. Негіздерді игере отырып, әзірлеуші Windows Forms көмегімен Windows-қа арналған қарапайым жұмыс үстелі қосымшаларын, Windows және Linux-қа арналған күрделі бағдарламаларды, әртүрлі платформаларға арналған ойындарды (соның ішінде Windows және Android), сайттардың серверлік бөлігін (back-end) және т.б. жаза алады.
Екінші ереже C++артықшылықтарына да қатысты болуы керек. Жаңадан келген әзірлеуші алдымен процедуралық бағдарламалауды игеріп, содан кейін OOP-ті үйренуге кіріседі. Үшінші ережені тек осы бағдарламалау тілінің оң немесе теріс ерекшелігі ретінде сипаттау мүмкін емес. Бастапқы кезеңде негізгі қателер (әдістердің айнымалы түрімен сәйкес келмеуі, бір айнымалыны басқа деректер түріне келтіруге тырысу) құрастыру сатысында алынып тасталады, сондықтан бастаушы бағдарламашылар үшін "таңдау еркіндігі" туралы ереже жарамсыз.
C++ әмбебаптығы-бұл бағдарламалау тілінің тағы бір маңызды артықшылығы. Негіздерді игере отырып, әзірлеуші Windows Forms көмегімен Windows-қа арналған қарапайым жұмыс үстелі қосымшаларын, Windows және Linux-қа арналған күрделі бағдарламаларды, әртүрлі платформаларға арналған ойындарды (соның ішінде Windows және Android), сайттардың серверлік бөлігін (back-end) және т.б. жаза алады.
Осы мақаланың авторы C++ бағдарламалау тілінің артықшылықтары мен кемшіліктерін бастаушы әзірлеуші үшін алғашқы платформа ретінде қарастыратындықтан, төртінші тармақ (Си үйлесімділігі) маңызды емес. Алайда, тәжірибе жинақтай отырып, әзірлеуші C-де жұмыс істейтін кейбір функцияларды c++ (мысалы, scanf() және printf () ақпарат экранына енгізу/шығару функциялары, stdio кітапханасы да қолдайтынын байқайды.h). Нәтижесінде кейбір бағдарламашылар с++ деп "Ц с класстармен" деп атайды.
C++ кросс-платформасы-бастаушы бағдарламашылар үшін маңызды артықшылық. Windows, MacOS және Linux үшін нұсқалары бар көптеген компиляторлар мен IDE бар (Code::BlocksIDE Windows және Linux үшін, Clion – Windows, Linux және MacOS үшін). Әзірлеуші IDE жүйесі мен компилятор үшін "жергілікті" қолдана отырып, әртүрлі платформаларға қосымшалар жасай алады. 1996 жылы жасалған QT-framework әсіресе платформалық тапсырманы жеңілдетті.
Страуструптың алтыншы ережесі C++тілінде жазылған бағдарламалардың тиімділігі туралы айтады. Егер бағдарламаның функционалдығы пайдаланылмаса, онда ол жүйелік ресурстарды аз тұтынады және тезірек орындалады. Жаңадан бастаушылар үшін бұл тармақ қосымшаның тезірек құрастырылатындығын білдіреді. Мұны тәуелсіз сынақтар көрсетеді: мысалы, C++ тілінде жазылған және GCC арқылы құрастырылған Фибоначчи[6] санын есептейтін бағдарлама 0.014 секундта жиналды. Бұл тестте C++ тек si-ге жол берді: si бағдарламасы 0.013 секундта құрастырылды. C++ статикалық терудің арқасында бағдарламаларды тезірек құрастырады: компилятор JavaScript, Python, PHP және т.б. сияқты көптеген түсіндірілген тілдердегідей айнымалы түрін анықтауға уақыт жұмсамайды (айтпақшы, Фибоначчи алгоритмі сәйкесінше JavaScript, Python 2 және PHP-де 0.689 сек, 1.109 сек және 1.307 сек орындалды).Жетінші Ереженің артықшылықтары өте шартты болып көрінеді, өйткені бүгінде көптеген өндірушілер әртүрлі бағдарламалау тілдеріне ыңғайлы IDE ұсынады. Сонымен қатар, мұнда C++ айтарлықтай төмен, мысалы, JavaScript. JavaScript-те минималды құралдар жиынтығы қажет-блокнот пен веб-шолғыш (көптеген операциялық жүйелердегі бұл қосымшалар бастапқыда енгізілген), ал c++ үшін компилятор қажет, оны одан әрі жүктеп, конфигурациялау керек. Көп жағдайда бастаушы әзірлеушіге "даму ортасы + компилятор"пакетін орнатуға тура келеді.
1.2.6 Мектеп кітапханасы қосымшасын құруға керекті талаптар

Қосымшаның толық және мінсіз орындалу әрекетін қамтамасыз ету мақсатында компьютерге қажетті талаптар:



  • Компьютер процессоры: Intel немесе Ryzen;

  • 64 разрядты операциялық жүйелер: Microsoft Windows XP, 7, 8 немесе 10;

  • Жедел жад: 4 гб-тан басталады;

  • Компьютердің сақтау құрылғысы: кем дегенде 10 гб бос болуы.

2. Жобалау


2.1 Есепті шешу алгоритмін сипаттау


Алгоритм әзірлеушінің көптеген мәселелерін уақыт пен өнімділіктің оңтайлы тәсілімен шешуге көмектеседі. Біздің қосымша жеке-дара бес алгоритм кезеңінен құралады:


Бірінші қадамда тапсырманың мағынасын ашып, берілген шарттарымен және мағлұматтарымен толықтай танысу үрдісі. Бұл кезеңде тапсырманы толыққанды және анық түсіну жұмыстың жасалу уақытын қысқартады.
Екінші қадам тапсырманың қалай орындалатынын және ішінде қандай шарттар ретімен орындалатынын қадағалау және ұйымдастыру. Осы қадам барысында алгоритмді жеңілдету және мейліңше анық жазу қосымшаның жасалу барысына тікелей рөл ойнайды.
Үшіншісінде, жоғарыда болған қадамдарға сүйене отырып, кодтың толыққанды жазылуын қамтамасыз ету болып табылады.
Төртінші сатысында толықтыру немесе шарттарды жақсарту мақсаты бойынша айналысу.
Соңғы сатысында пайдаланушыға жасалған ісінің нәтижесін шығару болып табылады. Бұл тарапта нәтиженің берілу дұрыстығымен және тәртібімен жұмыс істеу оқылу және түсіну процессін жеңілдетеді. 2-суретте алгоритм орындалуы көрсетілген.

Сурет 2.1 - Use-case сызбасы


2.2 Қосымша сипаттамасы


Қосымшаның жалпы сипаттамасы, ол нақты дайын тұрған мағлұматты пайдаланушы сұранысы бойынша консольға алып шығу болып табылады. Негізгі міндеті пайдаланушыға арнайы таңдау мүмкіндігін беру арқылы ішінен арнаулы мәліметтер қорынан керегін шарттың орындалуы бойынша алып шығу. Қосымша нақты сұраныс болған жағдайда ешқандай мүлтіксіз жауабын көрсетуі тиіс. Менің жұмысымның орындалу барысында қысқа да нұсқа ойын қолдаумен айналыстым. Яғни, тек қана сыртқы ақпаратты қолданушы ғана емес, кез келген бағдарламашы құрушы мен жазған сценарийді еш кедергісіз оқи алу мақсатын жасалу барысында алғышарттары ретінде қойдым.


Жеке қосымшаның объектілерін қарастырайық. Ең алғашқы орындалу кезеңі ретінде функциялар мен операциялар орындалу мақсатында кітапханалар мен жалпылау үшін қосымша кеңістік қосылады.
Екінші қадам ретінде бізде міндетті түрде сандар түріндегі басты функция жазылады. Осы функция ішінде біздің барлық операцияларымыз жүзеге асатын болады.
Қосымшада ақпарат жеткізілу кезінде біздің шығыс сөйлемдеріміз оқылуға ыңғайлы болу үшін кириллицаның локальді жүйесін орнатамыз. Қолданушы қосымшаны қосқан кезде бізге таныстыру мақсатында оқылатын қандай да ақпарат шығарылуы тиіс. Бұл процессті іске асыру үшін cin, cout функциялары арқылы таныстыру бөлімі және тізім бойынша қолданушы қолдана алатын ақпарат шығарамыз. Және де қосымша шарты бойынша тізімді ерікті түрде таңдау мүмкіндігі міндетті түрде болуы тиіс, сондықтан тізімнің таңдауын сақтайтын сандарды қабылдайтын айнымалы жасаймыз. Қолданушы еркі бойынша таңдалған тізім бөлімі сол айнымалыға келіп түседі және біз сонымен келешекте жұмыс атқара аламыз. Қолданушының қалауы бойынша барлық ақпаратты алғаннан кейін оны өңдеумен және оның жауабын шығаруымен айналысайық. Ендігі жоғарыдағы айнымалының ақпаратын қолдану арқылы шартты тіркестіреміз. Яғни, бізде бес таңдау нұсқасы берілгендіктен әрқайсысына жеке шарт қоюмен айналысамыз. Осы жерде шартты операторымызға енгізу фунцкиясы арқылы айнымалымызға қабылдаған ақпаратымыз тізімнің бірінші нұсқасына сай келсе ғана операцияларды орындауы бекітіледі. Шарттың ішкі құрылымына ағын арқылы файлдың оқылу және ақпаратты шығару барысы сипатталады.

2.3 Қосымшаның операторлары мен функциялары


Қосымшаның іргелі процессінің жиынтығы негізгі денедегі функциялар арқылы жүзеге асады. Осы процесті жеңілдетіп, дұрыс құрастыру бізге тіпті маманға да кодтың жақсы оқылуына мүмкіндік береді және оқу жылдамдығын қамтамасыз етеді.


Оператор – бұл компиляторға белгілі бір математикалық немесе логикалық манипуляцияларды орындауға нұсқау беретін таңба. C++ кірістірілген операторларға бай келеді. Қосымшада қолданысқа шартты оператор if үшін салыстыру операторымен шектелдім. Түрлері және сипаттамалары 2-кестеде салыстыру операторлары көрсетілген.

Кесте 2.1


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

Оператор

Сипаттамасы

Түрлері

Функциялары

Салыстыру нәтижесі

==

Тең

(A = = B) false

!=

Тең емес

(A! = B) true

>

Үлкен

(A> B) false

<

Кіші

(A

>=

Үлкен немесе тең

(A> = B) false

<=

Кіші немесе тең

(A <= B) true

Шартты оператор if есептеу процесін екі бағытқа бөлу үшін қолданылады. Алдымен арифметикалық түрі немесе көрсеткіш түрі болуы мүмкін өрнек есептеледі. Егер ол тең болмаса шарт нөлге тең, бірінші оператор орындалады, әйтпесе екіншісіне көшеді. Егер кез-келген тармақта бірнеше операторды орындау қажет болса, оларды блокқа салу керек, әйтпесе компилятор тармақталудың қай жерде аяқталатынын түсіне алмайды. Блокта кез-келген операторлар, соның ішінде сипаттамалар және басқа шартты операторлар болуы мүмкін.


Cin – пернетақтадан енгізуді өңдеуге арналған әдіс; >> операторының шамадан тыс қолдануын пайдалана отырып, қандай айнымалы кірісті алатынын көрсетуге мүмкіндік беретін оператор.
Cout – консольде айнымалыларды немесе жай мәтінді көрсету мақсатында қолданылады. << негізгі операторы консольге қандай мән шығу керектігін анықтайды.
Get – функциясы кіріс ағынынан таңбаларды оқуға арналған.
Getline – get әдісіне ұқсас, ол істеген нәрсенің барлығын қамтиды, одан бөлек string түріндегі жолдарды оқиды.
Файлмен жұмыста енгізу және шығару кезінде деректер байт ағыны ретінде қарастырылады. Физикалық тұрғыдан ағын – бұл файл немесе құрылғы, мысалы, пернетақта немесе дисплей, файлдың ерекше жағдайы. Ағынмен жұмыс оны ашудан басталады. Ағынды екілік немесе мәтіндік режимде оқу және/немесе жазу үшін ашуға болады, бұл үшін біздің қосымшамызда ReadFile функциясы қолданылады. Жанына EOF функциясын қосамыз. Ақпараттың оқылуын тездету үшін линия арқылы жүретін get() функциясы арқылы мағлұматты «суырып аламыз» және бекітілген көлемі бар массивке орналастырамыз. Бағдарлама мәтіндік файлдан деректерді буферлік айнымалыға қатарынан оқиды, содан кейін олардан құрылым қалыптастырады және оны екілік режимде шығыс файлына жазады.
While операторы белгілі бір шарт орындалған кезде цикл денесінің циклдік орындалуын ұйымдастыру үшін қолданылады. Алдымен логикалық типтегі нәтижені қайтаратын шарт есептеледі. Егер өрнек true (нөлдік емес мән) мәнін қайтарса, онда цикл денесінің операторы орындалады, содан кейін шартты анықтайтын өрнек қайтадан есептеледі.
Getch функциясы пернетақтадан бір таңбаны оқу үшін қажет, бұл таңба экранда көрсетілмейді. Көбінесе бұл функция консольдің мерзімінен бұрын жабылуына жол бермеу үшін қолданылады. Бұл функция пайдаланушының таңбаны енгізуін күтеді, содан кейін ғана консольді жабады.
Return операторы функцияның аяқталу механизмін қамтамасыз етеді. Егер оператор болса қайтару кейбір мәнмен бірге жүреді, бұл мән функцияның қайтарылатын мәніне айналады.

3. Бағдарламалық қамтаманы жүзеге асыру


3.1 Қосымша жұмысының нәтижелері


Шығыс мәліметтері ретінде мәселені шешудің көрінісін қабылдаймыз. Бұл бөлімге біз оның құрылысын тек дұрыс жазған уақытта мәліметтің нақты пайдаланушыға берілетінін ұға аламыз. Бұл бөлімін зерделесек, кіріс мәліметті алу мақсатын жеңілдету және пайдаланушының әрекетің жылдамдатуына табуляция, жаңа жол секілді функциялар өз септігін тигізеді.


Шығыс мәліметтері пайдаланушының алдында дұрыс баруы үшін логикалық барысы жасалады. Яғни, шарттың тек пайдаланушы қалаған бөлігін шығаруы мақсатында шартты операторлар қолданылады. Шарттардың орындалу барыстары бойынша қандай жауап қайтарылатынын көрейік. 3.1 -cуретте берілген тізімнің нұсқасын таңдауы көрсетілген.



Сурет 3.1 – Бастапқы бет


Қолданушы бірінші нұсқаны таңдау кезінде шартты операторға айнымалы арқылы таңдалған нұсқамыз жетіп барады. Келесі де файлдың оқылуы бойынша жолы зақымдалған болмаса жауабын көреміз. 3.2 - суретте алғашқы нұсқамыздың шығыс мәні көрсетілген.





Сурет 3.2 - Бірінші нұсқаның нәтижесі


Сонымен қатар, екінші нұсқаның таңдалуы бізге сол шарт арқылы орындалады және нәтижесі өз көрінісін табады. 3.3-суретте екінші нұсқамыздың болуы кезіндегі қайтарылатын жауабы белгіленген.

Сурет 3.3 - Екінші нұсқаның нәтижесі


Үшінші шарттың орындалуы тура жоғарыда секілді, бірақ та мағлұматы өзгеше нәтижені шығарумен айналысады. 3.3-суретте үшінші нұсқаның орындалуы баяндалған.





Сурет 3.4 - үшінші нұсқаның орындалуы


Төртінші нұсқаның орындалуы алдыңғы үлгілерден кішкене толықтыруымен ерекшеленеді, бұл жерде шарттың ішінде кірістірілген шарт ұсынылады. Сол шарт бірнеше жауап қайтаруға мүмкіндік ашады. 3.5-суретте төртінші нұсқаның орындалуы көрсетілген.





Сурет 3.5 - Төртінші нұсқаның жауабы


Төртінші нұсқадан кейін жүретін бесінші нұсқа орындайды. Егер таңдалған жағдайға келетін болса, дәл солай жауаптары консольға шығарылады, бұл процесс 3.6-суретте жақсы берілген.



Сурет 3.6 - Бесінші нұсқаның нәтижесі


Бесінші нұсқадан кейін жүретін соңғы нұсқа орындалады.Ол шығу батырмасы, бұл процесс 3.7-суретте жақсы берілген.





Сурет 3.7 – Шығу батырмасы.


Қорытынды


Мен бірінші пәндік аймақты сипаттадым,бағдарламалау тілдерін жіктедім,кітәпханалар жане массивтер,көрсеткіштер,функциялар туралы жаздым.С++ тын артыкшылыктарымен жане кемшиликтерин издендим.Одан кейін сіз берген іздеулер мен сурыптаулардың кодтарын visual studio ға шығардым.

Қолданылған әдебиеттер


1. Герберт Шилдт. С++ для начинающих. Шаг за шагом

2. Роберт Лафоре. Объектно-ориентированное программирование в С++


3. https://purecodecpp.com/algoritmy-v-c
4. https://function-x.ru/cpp_algoritmy_sortirovki.html

5. Мейерс Скотт. Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14

6. Яцек Галовиц. С++17 STL. Стандартная библиотека шаблонов


7. Энтони Уильямс. Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
8. https://habr.com/ru/post/267855/

Қосымша А


#include


#include
#include
#include
#include

using namespace std;


struct Book {


string title;
int publicationYear;
string category;
int depositAmount;
bool isReturned;
time_t dueDate;
};

struct Student {


string name;
int studentClass;
vector borrowedBooks;
};

class Library {


private:
vector books;
vector students;

public:
void addBook(const string& title, int publicationYear, const string& category, int depositAmount) {


Book book;
book.title = title;
book.publicationYear = publicationYear;
book.category = category;
book.depositAmount = depositAmount;
book.isReturned = true;
books.push_back(book);
}

void addStudent(const string& name, int studentClass) {


Student student;
student.name = name;
student.studentClass = studentClass;
students.push_back(student);
}

void displayMenu() {


cout << "Школьная библиотека\n";
cout << "1. Общее количество учеников и каких классов получили книги\n";
cout << "2. Залоговая сумма ученика за i-ю книгу\n";
cout << "3. Выдать список книг, имеющихся в библиотеке по «i-му» разделу классификатора\n";
cout << "4. Рассчитать сумму штрафа за каждый день просрочки возврата книги\n";
cout << "5. Выдать список книг, изданных в период 2000 - … года\n";
cout << "0. Выйти\n";
}

void processChoice(int choice) {


switch (choice) {
case 1:
displayBorrowerSummary();
break;
case 2:
calculateDeposit();
break;
case 3:
displayBooksByCategory();
break;
case 4:
calculateOverdueFines();
break;
case 5:
displayBooksPublishedAfter2000();
break;
case 0:
cout << "Выход из программы.\n";
break;
default:
cout << "Некорректный ввод. Пожалуйста, выберите существующий пункт меню.\n";
}
}

private:
void displayBorrowerSummary() {


int totalStudents = students.size();
cout << "Общее количество учеников: " << totalStudents << endl;

vector uniqueClasses;


for (const auto& student : students) {
if (find(uniqueClasses.begin(), uniqueClasses.end(), student.studentClass) == uniqueClasses.end()) {
uniqueClasses.push_back(student.studentClass);
}
}

cout << "Какие классы получили книги: ";


for (const auto& studentClass : uniqueClasses) {
cout << studentClass << " ";
}
cout << endl;
}

void calculateDeposit() {


int studentIndex, bookIndex;
cout << "Введите индекс ученика: ";
cin >> studentIndex;

if (studentIndex < 0 || studentIndex >= students.size()) {


cout << "Некорректный индекс ученика.\n";
return;
}

cout << "Введите индекс книги: ";


cin >> bookIndex;

if (bookIndex < 0 || bookIndex >= books.size()) {


cout << "Некорректный индекс книги.\n";
return;
}

students[studentIndex].borrowedBooks.push_back(books[bookIndex]);


cout << "Залоговая сумма ученика за i-ю книгу: " << books[bookIndex].depositAmount << endl;
}

void displayBooksByCategory() {


// Выведем все категории, чтобы убедиться, что они правильно заполнены
cout << "Доступные категории книг:\n";
for (const auto& book : books) {
cout << book.category << endl;
}

string category;


cout << "Введите категорию книг: ";
cin >> category;

cout << "Список книг в категории '" << category << "':\n";


bool found = false;

for (const auto& book : books) {


if (book.category == category) {
cout << "Название: " << book.title << ", Год издания: " << book.publicationYear << ", Залог: " << book.depositAmount << " руб.\n";
found = true;
}
}

if (!found) {


cout << "Книги в указанной категории не найдены.\n";
}
else {
cout << "Книги в указанной категории найдены.\n";
}
}

void calculateOverdueFines() {


int studentIndex;
cout << "Введите индекс ученика: ";
cin >> studentIndex;

if (cin.fail() || studentIndex < 0 || studentIndex >= students.size()) {


cout << "Ошибка ввода или некорректный индекс ученика.\n";
cin.clear(); // сброс флага ошибки
cin.ignore(numeric_limits::max(), '\n'); // очистка буфера ввода
return;
}

double totalFine = 0.0;


for (const auto& borrowedBook : students[studentIndex].borrowedBooks) {


time_t currentTime;
time(¤tTime);

if (!borrowedBook.isReturned && borrowedBook.dueDate < currentTime) {


// Рассчет штрафа
double overdueDays = difftime(currentTime, borrowedBook.dueDate) / (60 * 60 * 24);
double fine = overdueDays * 5; // Пример штрафа 5 рублей за день просрочки
cout << "Книга '" << borrowedBook.title << "', Штраф за просрочку: " << fine << " рублей\n";
totalFine += fine;
}
}

cout << "Общий штраф для ученика " << students[studentIndex].name << ": " << totalFine << " рублей\n";


}

void displayBooksPublishedAfter2000() {


cout << "Список книг, изданных после 2000 года:\n";
for (const auto& book : books) {
if (book.publicationYear > 2000) {
cout << book.title << " (Год издания: " << book.publicationYear << ")\n";
}
}
}
};

int main() {


Library library;

// Добавление книг


library.addBook("Book1", 2005, "Фантастика", 50);
library.addBook("Book2", 2010, "Детектив", 40);
library.addBook("Book3", 2022, "Приключения", 30);
library.addBook("Book4", 2008, "Фантастика", 45);
library.addBook("Book5", 2015, "Детектив", 35);
library.addBook("Book6", 2018, "Приключения", 25);
library.addBook("Book7", 2012, "Фантастика", 55);
library.addBook("Book8", 2007, "Детектив", 42);
library.addBook("Book9", 2019, "Приключения", 28);
library.addBook("Book10", 2011, "Фантастика", 48);

// Добавление учеников


library.addStudent("Student1", 8);
library.addStudent("Student2", 9);
library.addStudent("Student3", 7);
library.addStudent("Student4", 8);
library.addStudent("Student5", 9);
library.addStudent("Student6", 7);
library.addStudent("Student7", 8);
library.addStudent("Student8", 9);
library.addStudent("Student9", 7);
library.addStudent("Student10", 8);

int choice;


do {
library.displayMenu();
cout << "Выберите пункт меню (0-5): ";
cin >> choice;

library.processChoice(choice);


} while (choice != 0);


return 0;


}

Қосымша Б


Студент: Азамбеков Дилмурад ____


(қолы)

Жетекші: Сайлауқызы Ж. ____
(қолы)
Кафедра меңгерушісі: Коккоз М.М ___
(қолы)




Достарыңызбен бөлісу:




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет