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


----------------------------------- ----------------------------------- ----------
Әбілқас Сағынов атындағы Қарағанды техникалық университеті
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Кафедра АТҚ
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Курстық жұмыс
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
C++ бағдарламасы бойынша практикум
----------------------------------- ----------------------------------- ----------
( пәннің атауы)
----------------------------------- ----------------------------------- ----------
Тақырып: С++ тілінде массивтерді сұрыптау және іздеуді ұйымдастыру
----------------------------------- ----------------------------------- ----------
қосымшасын әзірлеу
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Қабылдады:
----------------------------------- ----------------------------------- ----------
Сайлауқызы Ж
----------------------------------- ----------------------------------- ----------
(баға) (оқытушының аты-жөні)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
(қолы) (уақыты)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Комиссия мүшелері: Орындаған:
----------------------------------- ----------------------------------- ----------
Жолдасілов Қ
----------------------------------- ----------------------------------- ----------
(қолы, аты-жөні) (студенттің аты-жөні)
----------------------------------- ----------------------------------- ----------
СИБ-21-2
----------------------------------- ----------------------------------- ----------
(қолы, аты-жөні) (группа)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
(қолы, аты-жөні)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Қарағанды 2022
----------------------------------- ----------------------------------- ----------
Әбілқас Сағынов атындағы Қарағанды техникалық университеті
Факультет ФИТ БЕКІТЕМІН
Кафедра АТҚ Кафедра меңг.
(қолы)
_____ ________ 2022 ж.
КУРСТЫҚ ЖҰМЫСҚА ТАПСЫРМА
C++ бағдарламасы бойынша практикум пәні бойынша
СИБ-21-2 тобының студенті Жолдасілов Қ
Тақырып: С++ тілінде массивтерді сұрыптау және іздеуді ұйымдастыру қосымшасын әзірлеу
Бастапқы мәліметтер: С++ бағдарламалау тілі, MS Visual Studio бағдарлама құру ортасы
Тапсырма берілді 2022ж
Жетекші Сайлауқызы Ж қолы
Студент Жолдасілов Қ қолы
Мазмұны
Кіріспе 4
1 Пәндік аймақты сипаттау 5
1.1 Бағдарламалау тілдерінің жіктелуі 5
1.2 С++ бағдарламалау тілі 5
1.2.1 С++ тілінің негізгі операторлары 6
1.2.2 Массивтер 7
1.2.3 Көрсеткіштер 8
1.3 Жобалауға міндеттерді қою 10
1.4 Әзірленетін қосымшаға қойылатын талаптарды негіздеу 11
2 Сұрыптау және іздеу алгоритмдеріне шолу 12
2.1 Таңдау әдісі арқылы сұрыптау 12
2.2 Көпіршік әдісі арқылы сұрыптау 14
2.3 Қарапайым қою әдісі арқылы сұрыптау 16
2.4 Шейкер әдісі арқылы сұрыптау 18
2.5 Екілік ағаш әдісі арқылы сұрыптау 20
2.6 Бинарлы іздеу алгоритмі 22
2.7 Интерполяциялық іздеу алгоритмі 23
2.8 Решето Эратостен іздеу алгоритмі 24
3. Бағдарламалық қамтаманы жүзеге асыру 25
3.1 Қолданушыға нұсқаулық 25
3.2 Тестілеу нәтижелері 29
Қорытынды 30
Қолданылған әдебитеттер тізімі 31
Қосымша А (код программы) 32
Қосымша Б (Антиплагиат) 35
Кіріспе
Курстық жұмысымыз да С++ бағдарламалау тілін пайдалана отырып массивтерге сұрыптау, іздеу жүргізу арқылы оның артықшылығын көрсету. Қазіргі уақытта ақпараттық бағдарламалау тілі үлкен үдеріске түсуде. Соның ішінде C++ тілі. С++ компиляторлары жасаған программа кодтары шағын, әрі жылдам істейді, оның үстіне тілдің аппараттық құралдарға жақындығы ассемблер тіліменен қатар жылдамдықпен жұмыс істеуге мүмкіндік береді.
С++ бағдарламалау туралы қысқаша тарихын жаза кететін болсам. Оны 1980 жылдың басында Бъерн Строусиһтроп Bell Laboratories-сында өңдеп шығарған. С++ С тілінің кеңейтілген түрі болып табылады және оның бірнеше қасиеттерін реттеуді қамтамасыз етеді және ең маңыздысы объекті-бағдарланған бағдарламалық мүмкіндігін қамтамасыз етеді. Бұл Бағдарламамен қамтамасыздандыру әлемдегі революциялық идея болып табылады.
Кез-келген күнделікті жағдайда біз сұрыптау және іздеу үрдістерімен жұмыс жасаймыз. Әр адамда неліктен деген сұрақ туады. Жауап өте қарапайым. Себебі бұл үрдістермен жұмыс жасау өте ыңғайлы әрі тиімді. Тіпті өзіміздің күнделікті қолданып жүрген персоналды компьютерімізде сол принциппен жұмыс істейді. Олар сіз енгізген мәліметтерді сұрыптап қояды да сіз оларды іздегенде лезде тауып бере қояды. Сұрыптау мен іздеу тәсілдерін кеңінен қолданады. Бұл тәсілдерді қарапайым студентте кәсіпқой программисттер қолдана алады. Жалпы алғанда кез-келген программа сұрыптаудан басталады. Ал тез сұрыптап қажет элементті табу үшін сұрыптау және іздеу тәсілдерін жетік білген жөн. Сондықтан сұрыптау мен іздеу тәсілдерін қарастырып көреміз. Сонымен қатар оларды консольға өзіміз сан енгізу арқылы немесе рандом сандар арқылы сұрыптап ізеуді үйренеміз.
Курстық жұмысымыздың мақсаты - C++ бағдарламасымен жұмыс істеу, MS Visual Studio бағдарлама құру ортасында білімімді нығайту, массивпен көрсеткіштермен еркін қолдана алу, сұрыптау мен іздеу түрлерін меңгеріп түсіну.
Міндеттер:
Біріншіден C++ негізгі операторлары, массивтер мен көрсеткіштерді меңгеру.
Eкіншіден C++ сұрыптау мен іздеу алгоритмін талдау арқылы білімімді арттыру.
Үшіншіден С++ бағдарламалау тілінің MS Visual Studio ортасында нұсқаулық көрсету, алынған білімді қолдана отырып қорытынды нұсқаны орындау және осы жұмысты қорытындылау.
1.Пәндік аймақты сипаттау
1.1 Бағдармалау тілдерінің жіктелуі
Барлық бағдармалау тілдерінің негізгі процедуралық тілдер болып табылады, өйткені копмьютер (орталық процессор) жұмысының негізінде ең төменгі деңгейде процессорға не істеу керектігін анық көрсететін қарапайым командаларды орындау мүмкіндігі жатыр.
Басқа түрдегі тілдерді бағдармалаудың процедуралық тілдеріне қондырма ретінде қарастыруға болады. Бұл тілдерде (функционалдық және логиқалық) белгілі бір математикалық модельдер салынған және іске асырылған, олар еептердің кейбір ерекше түрлерін неғұрлым тиімді бағдармалауға мүмкіндік береді. Бірақ транслятор (компиляторлар), кітапханалар және осы бағдарламалау тілдерінің басқа да құралдары әлі де бағдарламалаудың процедуралық тілдері арқылы жүзеге асырылады.
Процедуралық бағдарламалау тілдері.
Бағдарлама императивті командалардың реттілігін тұрады (деректерді қандай өзгерістер жасалатыны анық). Деректер айнымалы түрінде сақталады.
Логикалық бағдармалау тілдері
Бұл түрдегі бағдармалау тілдері формальды логикаға және буль алгебрасына негізделеді. Бағдарламада анық алгоритмдер жох. Бағдарламалау жүйесі қорытынды нәтижені құрастыратын және есептің шешімін табатын логикалық арақатынастар мен есеп шарттарының сипаттамасы қойылды.
Функционалдық бағдармалау тілдері.
Функционалдық бағдармалау тізімдер мен функцияларды пайдалануға негізделеді. Айнымалылар мүлдем болмауы мүмкін.
Объектілі-бағытталған бағдарламалау.
Айнымалы және функциялар объектілер мен класстарға топталады. Осының арқасында бағдарламаның құрылымы мен абстракциясының жоғары деңгейіне қол жеткізіледі.
1.2 C++Бағдарламалау тілі
Программаларды компьютерде тікелей орындауға арналған алгоритмдерді жазу тәсілі, яғни алгоритмдерді компьютерге түсінікті мәтін ретінде жазуға арналған қарапайым жасанды тіл программалау тілдері деп аталады. Әрбір компьютердің өзінің машиалық программалау тілі болады, оны командалар тілі немесе кодтар (арнайы таңбалау) тілі дейді. Компьютер тек өз ана тілінде, яғни машиналық тілде жазылғн программаларды ғана орындай алады.
Include тақырыптық файл аты-программа мәтінінде стандатты кітапханамен бірге берілетін Тақырыптық файлдар каталогынан мәтін қосылатынын білдіреді. Тақырыптық файлдардың біреуінде С тілінің әрбір кітпханалық функциясының атына сәйкес сипаттамасы болады.Тақырыптық файлдар тізімі тілі стандартты кітапхананы іске қоспайды, ол тек көрсетілген тақырыптық файлдан алынатын керекті сипаттамаларды программа мәтініне енгізуге мүмкіндік береді. Кітапханадан алынатын қажетті кодтар программаға компиляциядан кейін орындалатын біріктіру кезеңінде қосылады.Тақырыптық файлдарда стандартты функциялардың барлығының да сипаттамалары болғанмен, программа кодына тек соның ішінде қолданылатын функциялар ғана кірістіреді.
Компиляция кезінде программа компьютерге түсінікті кодтарға түрлендіріледі. Егер осы түрлендіру кезінде стандартқа сәйкес келмейтін қателер кездесе, оны компилятор бірден көрсетеді. Ал қате жоқ болса, компилиятор объектілік код немесе объектілік модуль болып табылатын программа мәтінін береді.
Барлық программа бөліктері-функциялар компиляциядан өткен соң, объектілік модульдер біріктіргішке (компоновщикке) беріледі. Ол модульдерді біріктіріп,оған стандарты кітапхана функцияларын қосады да, функцияда қате болса, соны анытайды. Біріктіргіш жұмысы нәтижесінде программаның екілік сандар түрінде жазылған атқарылатын машиналық коды жасалады да, ол орындалып жұмыс нәтижесін береді. Барық программалау тілдері осы схемамен жұмыс істейді.
Программа сипаттамалары мен анықтамалардан, оераторлардан құрастырылған бірнеше функциялар жиынынан тұратын мәтін түрінде болады. Сол функциялар ішінде main атты басты функция міндетті түрде болуы тиіс. Ондай функциясыз программа орындалмайды. Функция атының алдында сол функция қайтаратын мәннің типі (нәтиже типі) көрсетіледі. Егер функция ешқандай нәтиже қайтармайтын болса, онда void типі көрсетіледі мысалы: void main (). Әрбір функцияның, соның шінде main функциясының да, параметрлері болуы тиіс, бірақ олар жоқ та болуы мүмкін, ондай жағдайа жақша ішінде (void) сөзі көрсетіледі.
Функция тақырыбынан соң, жүйелі жақша ішінде оның операторлары, яғни ішкі тұлғасы (денесі) орналасады. Функция тұлғасы дегеніміз-анықтаулар, сипаттамалар, орындалатын оперпаторлар жиынын тұратын, жүйелі жақшаға алынған символдар тізбегі. Әрбір анықтама, сипаттама немесе оператор нүтелі үтірмен аяқталады.
1.2.1 С++ тілінің негізгі операторлары
Операторлар бағдарламаның орындалу процесін басқарады. С++ тіл операторларының жиынтығы құрылымдық бағдарламалаудың барлық басқару құрылымдарын қамтиды.
Программалау тілінің белгілі бір іс-әрекетті орындай алатын тиянақты мағынасы бар ең қарапайым сөйлемі оператор болып табылады. Тіл объектілерін, яғни программада пайдаланылатын мәліметтердің атаулары мен типтерін, олардың алғашқы мәндерін алдын ала тағайындау программаның сипатталуы болып саналады.
Құрама оператор бұйра жақшалармен шектеледі. Барлық басқа операторлар нүктелі үтірмен аяқталады.
Бос оператор - ;
Бос оператор-бұл тек нүктелі үтірден тұратын оператор. Ол синтаксиске сәйкес оператор қажет болатын бағдарламаның кез келген жерінде пайда болуы мүмкін. Бос операторды орындау бағдарламаның күйін өзгертпейді.
Құрама оператор-{...}
Құрамдас оператордың іс-әрекеті қандай да бір оператор басқаруды бағдарламаның басқа орнына анық беретін жағдайларды қоспағанда, ондағы операторлардың дәйекті орындалуынан тұрады.
С тілінде сыртықы ортамен мәліметтер алмасу stdio.h енгізу-шығару функциялары кітапханасын пайдалану арқылы орындалады. Ол тақырып файлы ретінде былай жазылады:
#include stdio.h
printf() функциясы мәліметтерді экранға шығару үшін қолданылады.
Оның жалпы жазылу түрі:
printf(формат тіркесі,аргуметтер тізімі ) ;
(формат тіркесі)-формат спецификаторларының,бос орыннан және әртүрлі символдардан тұрады. Ол қостырнақшамен (") шектеліп, аргуметтердің қалай бейнелейтінін көрсетіп тұрады, экранға (баспаға) шығару алдында барлық аргуметтер формат спецификациясына сәйкес түрлендіріледі,спецификация % символымен басталады және мәліменттер типін, оларды түрлендіру тәсілін көрсететін бір әріп-спецификация коды жазылады. Объектілер ретінде айнымалылар, константалар, өрнектер қолданылуы мүмкін.
1.2.2 Массивтер
Программалау тілінде типтер қарапайым және күрделі болып бөлінеді. Қарапайым тип-стандартты, саналатын, шектейтін типтер жатады. Күрделі типке-массивтер, жиындар, файлдар жатады. Программалау тілінде жеке айнымалылардың жиынын да өңдеуге болады. Массив дегеніміз-бір типтегі берілгендер жиыны. Массив бір ғана атпен белгіленеді. Массивтің әр элементң массивтің атымен белгіленеді де, оның индексі қойылады.
Массив деген ұғыммен ғылыми-техникалық және экономикалық мәселелерді шешу барысында кездесеміз. Себебі біз мұндай жағдайда көп көлемді есептеулер мен цифрлармен жұмыс істеуге мәжбүр боламыз. Массив-бұл жалпы атпен біріккен және компьютердің жадында белгілі бір орынды алатын бір типті элементтердің жиынтығы болып келеді. Массивтегі элементтер саны әрдайым шектеулі болады. Жалпы алғанда массив бұл-мәлімттердің құрылымдық жиыны, ол шектелген сан элементтер болады. Массивтердің біз жүйелі тип атаумыздың себебі масситер өзіне біртиптік элементтерді жиғаны, олар индекстері бойынша сұрыпталған , индекс-әр элементтің ішіндегі өз орнын белгілейтін айнымалы.
Массивті жариялау келесі синтаксистен тұрады:
тип сипаттамасыаты[тұрақты өрнек];
тип сипаттамасыаты[];
Мұнда квадрат жақшалар синтаксистің элементі болып табылады.
Массивті жариялау мысалдары:
int x[10]; 10 бүтін саннан тұратын бір өлшемді массив. Көрсеткіштер 0-ден 9-ға дейін өзгереді.
double y[2][10]; 2 қатардан және 10 бағандардан нақты сандарды екі өлшемді массиві.
Массивті инициализациялау.
Қарапайым айнымалылар сияқты, массивтер жариялаған кезде инициалдануы мүмкін.
Құрама типтегі объектілерге арналған инициализатор үтірлермен бөлінген және жақшаға салынған инициализатордың тізімін тұрады.
Тізімдегі әр инициализатор сәйкес типтегі тұрақты мән немесе тұрақты иницизаторлар тізімі болады. Бұл құрылым көпөлшемді массивтерді инициализациялау үшін қолданылады.
Массивті инициализациялау мысалдары:
int а[3] ={0,1,2}; инициализатор саны элементтер санына тең.
double b[5] ={0.1,0.2,0.3}; инициализатор саны элементтер санынан аз.
1.2.3 Көрсеткіштер
Көрсеткіштер, олaр жaдтың белгілі бір бөліктерін көрсетеді. Көрсеткіш мәндері-белгілі бір типтегі объектілер үшін бөлінген жад бөлімдерінің мекенжaйлaры. Көрсеткіштер қaрaпaйым aйнымалaр сияқты дәл жaриялaнaды.Тек деректер түрі мен идентификaтор aрaсындaғы жұлдызшaмен *;
int *iPtr; int тип мәнін көрсеткіші
doable *dPtr; double тип мәнін көсеткіші
int* iPtr3; дұрыс синтаксис(рұқсат етілген, бірақ қажетті емес)
int * iPtr4; дұрыс синтаксис (мұны жасамаңыз)
int *iPtr5, *iPtr6; int типті айнымалыларға арналған екі көрсеткішті жариялаймыз.
Синтаксис тұрғыдан, С++ тілі жұлдызша деректер түріне жақын, идентификаторы бар немесе тіпті ортасында болған кезде көсеткіш декларациясын қабылдайды. Назар аударыңыз, бұл жұлдызша тарату операторы емес. Бұл көрсеткіш декларациясының синтаксисінің бір бөлігі ғана.
Алайда, бірнеше көрсеткіштерді жарияланған кезде жұлдызша әр идентификатордың жанында болуы керек. Егер сіз айнымалы атаудың жанында емес. Деректер түрінің жанында жұлдызшаны көрсетуге дағдыланған болсаңыз, оны ұмытып кету оңай. Мысалы:
int* iPtr3, iPtr4; iPtr3-бұл int типінің мәні,ал iPtr4-қарапайым int типті айнымалы!
Осы себепті, көрсеткішті жариялау кезінде айнымалы атаудың жанында жұлдызшаны көрсету ұсынылады. Кәдімгі айнымалылар сияқты, көрсеткіштер жарияланған кезде инициализацияланбайды. Инициализацияланбаған көрсеткіштің мазмүны кәдімгі қоқыс болып табылады.
Сілтемеде тек мекен - жайлар болғандықтан, көрстекішке мән берген кезде - бұл мән мекен - жай болуы керек. Айнымалы адресті алу үшін адрес операторы қолданылады:
int value = 5;
int *рtr = &value; айнымалы мәннің мекен-жайы бойынша рtr инициализациялаймыз
Жоғарыда айтылғандарды келесідей сурттеуге болады.(Сурет 1.1)
Сурет 1.1 - Элементттің мекен - жайы
Сондықтан көрсеткіштерде мұндай атау бар:рtr мәні value айнымалының мекен-жайын қамтиды және рtr осы мәнді көрсетеді деп айтуға болады.
Төмендегілерді жиі көруге болады:
#include iostream
using namespace std;
int main()
{
int value = 5;
int *рtr =&value; айнымалы мәнінің мекен-жайы бойыншв рtr инициализациялаймыз
сout &value '\n'; мән айнымалы value адресін көрсету
сout рtr '\n'; рtr сақтайтын мекен-жайыды көрсету
return 0;
}
Нәтиже:
003AFCD4
003AFCD4
Сондықтан көрсеткіштер деректер түріне ие болуы керек. Түрі болмаса, көрсеткіш ол көрсететін мазмұнды қалай түсіндіруді білмейді (өзгерту кезінде). Сондай-ақ, көрсеткіш түрі айнымалы типке сәйкес келуі керек. Егер олар сәйкес келмесе, онда көсеткіш биттерді дұрыс түсінбеуі мүмкін (мысалы, value орнына int түрін қолданыңыз).
Көрсеткіштер-бұл жад адрестерін қамтитын айнымалылар. Оларды жад
мекен-жайы бойынша сақталған мәндерді алу үшін бөлу операторларымен *
ауытыруға болады. Мәніқоқыс болып табылатын көрсеткішті жою сіздің бағдарламаңыздың бұзылуна әкеледі.
Кеңес: Көрсеткішті жариланған кезде айнымалы атаудың жанында жұлдызшаны көрстеңіз.
1.3 Жобалауға міндеттерді қою
Жобалауға міндетті қою - бұл қосымшаның негізгі ойын ашады. Сол арқылы қосымша құрылып, негізгі ойды алып қолданылады. Жобалауға міндет қоюдың басты ерекшелігі-ол тақырыптың тікелей ашылып, дұрыс мағынада талқылауына септігін тигізеді. Жоба үшін ережеге сүйенсек біз оған бірнеше тақырыптар арасында үлкен ақпарат жиынтығын құрып, оның мән-мағынасын айқындаған дұрыс. Қателік кетпеуін қадағалап, үтір нүктесін тексеріп қараған жөн.
Біз қарастыратын сұрыптаудың 5 түрі және іздеу әдісінің 3 түрі бағдарламаны құрудың бұл әдістері әдетте деректерді абстракциялау болады.
Жалпы, біздің жасалатын проекттің ең басты міндеттерін айта кететін болсақ. Біз қарастыратын сұрыптау түрлерінмен және іздеу әдістерін танысып, олардың тиімілігін анықтап, алгоритмдерін құру қажет.
Жалпы, біздің жұмысымыздың мақсаты - қай сұрыптау ең жылдам жұмыс істейтінін анықтау ғана емес, алгоритмдерді зерттеу, олардың мүмкіндігінше тез жұмыс істеу үшін оптимизациялау.
1.4 Әзірленетін қосымшаға қойылатын талаптарды негіздеу
Қосымша А бөлімінде тізілген кодтар жүйесі - бұл қолданушыға әзірленген программалық кодтар қатары. Ол арқылы қолданушыға тақырыпта негізделген информацияны қолдана отырып, білімін толықтыра алады. Ондағы кодты көшіру - қою арқылы Visual Studio - дағы проектке қояды.
Анықтама бөлімінде жобалаушының antiplagiat.ru сайтынан алынған плагиаттылыққа зерттеу нәтижесі скринмен тұруы керек. Бұл оның өзіндік бағалау нәтижесі болып табылады.
2 Сұрыптау және іздеу алгоритмдеріне шолу
Сұрыптaу-элементтер бaстaпқыдa кездейсоқ ретпен орнaлaстырылғaн мaссивті сaндaрды ретке келтіру. Сұрыптaу элементтер мәнінің өсуменде, олaрды кему ретпенде жүргізілуі мүмкін. Сұрыптaу мaңызды және мәлімметтер бaзасындa жиі қолдaнылaды. Өйткені реттелген массивте ақпaрaтты іздеу әлдеқaйдa жылдам.
Сұрыптаудың мақсаты - сұрыпталғанжиынтықтағы элементтерді кейінірек табуды жеңілдету.
Қазіргі сұрыптау әдістерінің прототиптерін әздеу 19 ғасырда басталады. Герман Холлерит 1888 жылы разряд бойынша сұрыптау принципіне негізделген электр табулятор ойлап тапты.
Сұрыптау - бірдей тапсырманы орындайтын алгоритмдердің алуан түрлілігінің мысалы, олардың көпшілігі оңтайлы, басқаларынан артықшылығы бар. Сұрыптау алгоритмін таңдау мәліметтер құрылымына тәуелді боып келеді.
Сұрыптау алгоритмдері әдетте 3 өлшем бойынша бағаланады:
Сұрыптау уақыты - алгоритм жылдамдығын сипаттайтын негізгі параметр.
Жад - бірқатар алгоритмдер уақытша деректерді сақтау үшін қосымша жадыны бөлуді қажет етеді.
Тұрақтылық - тұрақты сұрыптау тең элеметттердің өзара орналасуын өзгертпейді. Бұл қасиет өте пайдалы болуы мүмкін, егер олар бірнеше өрістерден тұрса және сұрыптау солардың бірімен жүрсе.
Іздеу тaпсырмaлaрындa сұрыптaу әрекеті өте үлкен деректер үшін бірнеше рет орындалуы керек болғaндықтaн, сұрыптау уақыты өте маңызды. Сондықтaн сұрыптaу алгоритмінің тиімділігі өте мaңызды. Белгілі бір мәліметтер жиынтығындa тиімді болaтын көптеген сұрыптау aлгоритмдері жaсaлды.
2.1 Таңдау әдісі арқылы сұрыптау
Таңдау арқылы сұрыптау - алгоритмінің жұмыс істеу принципі келесі командалармен сипаттауға болады:
Деректер массивіндегі ең кіші немесе ең үлкен элементті табамыз.
Және оны ең бірінші немесе ең соңғы тұрған массив элементімен ауыстырыамыз.
Соңғы немесе бірінші тұрған элементсіз 1-2 қадамды орындап, бастапқы индекс деректер массивінің соңына бармайынша 1-3 қадамдарды қайталаңыздар.
Бұл процесті төменде тұрған (Сурет 2.1) - ден көре аласыздар.
Сурет 2.1 - Қарапайым таңдау арқылы сұрыптаудың суреті.
Төмендегі кодтар арқылы сұрыптауды жүзеге асырамыз.
#include iostream
#include locale
#include ctime
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
const int N = 50;
cout "Массив:" endl;
int mass[N];
for (int i = 0; i N; i++)
{
mass[i] = rand() % 50;
cout mass[i] " ";
}
cout endl;
cout "Массив сортировка:";
for (int i = 0; i N - 1; i++)
{
int max = i;
for (int j = i + 1; j N; j++)
{
if (mass[j] mass[max])
max = j;
}
swap(mass[i], mass[max]);
}
cout endl;
for (int i = 0; i N; i++)
{
cout mass[i] " ";
}
}
Нәтижесі: (Сурет 2.2 - көрсетіліген)
Сурет 2.2 - Қарапайым таңдау арқылы сұрыптаудың нәтижесі.
2.2 Көпіршік әдісі арқылы сұрыптау
Қарапайым алмасуды сұрыптау алгоритмі келесі принципке негізделген: барлық маасив элементтері ең төменгі салмағы бар элементтң анықтау үшін сканерленеді, табылған элемент массивтің бірінші орнына жылжытылады, ал негізгі элеметтер ауысады. Алгоритмнің келесі қайталауында процедура қайталанады, бірақ бірінші элемент ескерілмейді және т.б. Көбінесе бұл әдіс көпіршік деп аталады, салмағы аз элемент су бетіне қалқып шығады. Егер массив тігінен көрсетілсе, алгоритм жұмысы айқынырақ көрінеді (Сурет 2.3 - көрсетілген).
Сурет 2.3 - Көпіршік әдісі арқылы сұрыптаудың суреті.
Процесті массив элементтерін ыдыс ішіндегі көпіршіктер сияқты қарастыруға болатындықтан солай атаған. Үлкен көпіршіктер бара - бара ұлғая отырып, жоғарыға көтіріле береді.
Бірінші қадамда деректер ауқымы басынан аяғына дейін өтеді. Бірінші элемент өзінің ізбасарларымен салыстырылады. Содан кейін келесі элементпен дәйекті салыстырылады. Бұл деректер массивінің соңына дейін орындалады. Осылайша, ең үлкен элемент деректер массивінің соңына жылжиды.
Келесі қадамдарда осы принцип қолданылады. Егер деректер ауқымы, мысалы, төрт элемент болса, бұл қадамдарды үш рет қайталаңыз. Жалпы N элементтер болған кезде (N-1) қадамдар талап етіледі.
Бірінші қадам деректер массивінің соңына дейін, екінші - алдыңғы элементке дейін өтеді, өйткені ең үлкен элемент соңында тұр және т.б.
Енді С++ те алгоритмді қолданайық:
#include iostream
#include locale
#include ctime
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
const int N = 50;
cout "Массив:" endl;
int mass[N];
for (int i = 0; i N; i++)
{
mass[i] = rand() % 50;
cout mass[i] " ";
}
cout endl;
cout "Массив сортировка пузырковый:";
for (int i = 0; i N; i++)
{
int c;
for (int j = 0; j N - 1; j++)
{
if (mass[j] mass[j + 1])
{
c = mass[j];
mass[j] = mass[j + 1];
mass[j + 1] = c;
}
}
}
cout endl;
for (int i = 0; i N; i++)
{
cout mass[i] " ";
}
}
Нәтижесі: (Сурет 2.4 ... жалғасы
Әбілқас Сағынов атындағы Қарағанды техникалық университеті
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Кафедра АТҚ
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Курстық жұмыс
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
C++ бағдарламасы бойынша практикум
----------------------------------- ----------------------------------- ----------
( пәннің атауы)
----------------------------------- ----------------------------------- ----------
Тақырып: С++ тілінде массивтерді сұрыптау және іздеуді ұйымдастыру
----------------------------------- ----------------------------------- ----------
қосымшасын әзірлеу
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Қабылдады:
----------------------------------- ----------------------------------- ----------
Сайлауқызы Ж
----------------------------------- ----------------------------------- ----------
(баға) (оқытушының аты-жөні)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
(қолы) (уақыты)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Комиссия мүшелері: Орындаған:
----------------------------------- ----------------------------------- ----------
Жолдасілов Қ
----------------------------------- ----------------------------------- ----------
(қолы, аты-жөні) (студенттің аты-жөні)
----------------------------------- ----------------------------------- ----------
СИБ-21-2
----------------------------------- ----------------------------------- ----------
(қолы, аты-жөні) (группа)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
(қолы, аты-жөні)
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
----------------------------------- ----------------------------------- ----------
Қарағанды 2022
----------------------------------- ----------------------------------- ----------
Әбілқас Сағынов атындағы Қарағанды техникалық университеті
Факультет ФИТ БЕКІТЕМІН
Кафедра АТҚ Кафедра меңг.
(қолы)
_____ ________ 2022 ж.
КУРСТЫҚ ЖҰМЫСҚА ТАПСЫРМА
C++ бағдарламасы бойынша практикум пәні бойынша
СИБ-21-2 тобының студенті Жолдасілов Қ
Тақырып: С++ тілінде массивтерді сұрыптау және іздеуді ұйымдастыру қосымшасын әзірлеу
Бастапқы мәліметтер: С++ бағдарламалау тілі, MS Visual Studio бағдарлама құру ортасы
Тапсырма берілді 2022ж
Жетекші Сайлауқызы Ж қолы
Студент Жолдасілов Қ қолы
Мазмұны
Кіріспе 4
1 Пәндік аймақты сипаттау 5
1.1 Бағдарламалау тілдерінің жіктелуі 5
1.2 С++ бағдарламалау тілі 5
1.2.1 С++ тілінің негізгі операторлары 6
1.2.2 Массивтер 7
1.2.3 Көрсеткіштер 8
1.3 Жобалауға міндеттерді қою 10
1.4 Әзірленетін қосымшаға қойылатын талаптарды негіздеу 11
2 Сұрыптау және іздеу алгоритмдеріне шолу 12
2.1 Таңдау әдісі арқылы сұрыптау 12
2.2 Көпіршік әдісі арқылы сұрыптау 14
2.3 Қарапайым қою әдісі арқылы сұрыптау 16
2.4 Шейкер әдісі арқылы сұрыптау 18
2.5 Екілік ағаш әдісі арқылы сұрыптау 20
2.6 Бинарлы іздеу алгоритмі 22
2.7 Интерполяциялық іздеу алгоритмі 23
2.8 Решето Эратостен іздеу алгоритмі 24
3. Бағдарламалық қамтаманы жүзеге асыру 25
3.1 Қолданушыға нұсқаулық 25
3.2 Тестілеу нәтижелері 29
Қорытынды 30
Қолданылған әдебитеттер тізімі 31
Қосымша А (код программы) 32
Қосымша Б (Антиплагиат) 35
Кіріспе
Курстық жұмысымыз да С++ бағдарламалау тілін пайдалана отырып массивтерге сұрыптау, іздеу жүргізу арқылы оның артықшылығын көрсету. Қазіргі уақытта ақпараттық бағдарламалау тілі үлкен үдеріске түсуде. Соның ішінде C++ тілі. С++ компиляторлары жасаған программа кодтары шағын, әрі жылдам істейді, оның үстіне тілдің аппараттық құралдарға жақындығы ассемблер тіліменен қатар жылдамдықпен жұмыс істеуге мүмкіндік береді.
С++ бағдарламалау туралы қысқаша тарихын жаза кететін болсам. Оны 1980 жылдың басында Бъерн Строусиһтроп Bell Laboratories-сында өңдеп шығарған. С++ С тілінің кеңейтілген түрі болып табылады және оның бірнеше қасиеттерін реттеуді қамтамасыз етеді және ең маңыздысы объекті-бағдарланған бағдарламалық мүмкіндігін қамтамасыз етеді. Бұл Бағдарламамен қамтамасыздандыру әлемдегі революциялық идея болып табылады.
Кез-келген күнделікті жағдайда біз сұрыптау және іздеу үрдістерімен жұмыс жасаймыз. Әр адамда неліктен деген сұрақ туады. Жауап өте қарапайым. Себебі бұл үрдістермен жұмыс жасау өте ыңғайлы әрі тиімді. Тіпті өзіміздің күнделікті қолданып жүрген персоналды компьютерімізде сол принциппен жұмыс істейді. Олар сіз енгізген мәліметтерді сұрыптап қояды да сіз оларды іздегенде лезде тауып бере қояды. Сұрыптау мен іздеу тәсілдерін кеңінен қолданады. Бұл тәсілдерді қарапайым студентте кәсіпқой программисттер қолдана алады. Жалпы алғанда кез-келген программа сұрыптаудан басталады. Ал тез сұрыптап қажет элементті табу үшін сұрыптау және іздеу тәсілдерін жетік білген жөн. Сондықтан сұрыптау мен іздеу тәсілдерін қарастырып көреміз. Сонымен қатар оларды консольға өзіміз сан енгізу арқылы немесе рандом сандар арқылы сұрыптап ізеуді үйренеміз.
Курстық жұмысымыздың мақсаты - C++ бағдарламасымен жұмыс істеу, MS Visual Studio бағдарлама құру ортасында білімімді нығайту, массивпен көрсеткіштермен еркін қолдана алу, сұрыптау мен іздеу түрлерін меңгеріп түсіну.
Міндеттер:
Біріншіден C++ негізгі операторлары, массивтер мен көрсеткіштерді меңгеру.
Eкіншіден C++ сұрыптау мен іздеу алгоритмін талдау арқылы білімімді арттыру.
Үшіншіден С++ бағдарламалау тілінің MS Visual Studio ортасында нұсқаулық көрсету, алынған білімді қолдана отырып қорытынды нұсқаны орындау және осы жұмысты қорытындылау.
1.Пәндік аймақты сипаттау
1.1 Бағдармалау тілдерінің жіктелуі
Барлық бағдармалау тілдерінің негізгі процедуралық тілдер болып табылады, өйткені копмьютер (орталық процессор) жұмысының негізінде ең төменгі деңгейде процессорға не істеу керектігін анық көрсететін қарапайым командаларды орындау мүмкіндігі жатыр.
Басқа түрдегі тілдерді бағдармалаудың процедуралық тілдеріне қондырма ретінде қарастыруға болады. Бұл тілдерде (функционалдық және логиқалық) белгілі бір математикалық модельдер салынған және іске асырылған, олар еептердің кейбір ерекше түрлерін неғұрлым тиімді бағдармалауға мүмкіндік береді. Бірақ транслятор (компиляторлар), кітапханалар және осы бағдарламалау тілдерінің басқа да құралдары әлі де бағдарламалаудың процедуралық тілдері арқылы жүзеге асырылады.
Процедуралық бағдарламалау тілдері.
Бағдарлама императивті командалардың реттілігін тұрады (деректерді қандай өзгерістер жасалатыны анық). Деректер айнымалы түрінде сақталады.
Логикалық бағдармалау тілдері
Бұл түрдегі бағдармалау тілдері формальды логикаға және буль алгебрасына негізделеді. Бағдарламада анық алгоритмдер жох. Бағдарламалау жүйесі қорытынды нәтижені құрастыратын және есептің шешімін табатын логикалық арақатынастар мен есеп шарттарының сипаттамасы қойылды.
Функционалдық бағдармалау тілдері.
Функционалдық бағдармалау тізімдер мен функцияларды пайдалануға негізделеді. Айнымалылар мүлдем болмауы мүмкін.
Объектілі-бағытталған бағдарламалау.
Айнымалы және функциялар объектілер мен класстарға топталады. Осының арқасында бағдарламаның құрылымы мен абстракциясының жоғары деңгейіне қол жеткізіледі.
1.2 C++Бағдарламалау тілі
Программаларды компьютерде тікелей орындауға арналған алгоритмдерді жазу тәсілі, яғни алгоритмдерді компьютерге түсінікті мәтін ретінде жазуға арналған қарапайым жасанды тіл программалау тілдері деп аталады. Әрбір компьютердің өзінің машиалық программалау тілі болады, оны командалар тілі немесе кодтар (арнайы таңбалау) тілі дейді. Компьютер тек өз ана тілінде, яғни машиналық тілде жазылғн программаларды ғана орындай алады.
Include тақырыптық файл аты-программа мәтінінде стандатты кітапханамен бірге берілетін Тақырыптық файлдар каталогынан мәтін қосылатынын білдіреді. Тақырыптық файлдардың біреуінде С тілінің әрбір кітпханалық функциясының атына сәйкес сипаттамасы болады.Тақырыптық файлдар тізімі тілі стандартты кітапхананы іске қоспайды, ол тек көрсетілген тақырыптық файлдан алынатын керекті сипаттамаларды программа мәтініне енгізуге мүмкіндік береді. Кітапханадан алынатын қажетті кодтар программаға компиляциядан кейін орындалатын біріктіру кезеңінде қосылады.Тақырыптық файлдарда стандартты функциялардың барлығының да сипаттамалары болғанмен, программа кодына тек соның ішінде қолданылатын функциялар ғана кірістіреді.
Компиляция кезінде программа компьютерге түсінікті кодтарға түрлендіріледі. Егер осы түрлендіру кезінде стандартқа сәйкес келмейтін қателер кездесе, оны компилятор бірден көрсетеді. Ал қате жоқ болса, компилиятор объектілік код немесе объектілік модуль болып табылатын программа мәтінін береді.
Барлық программа бөліктері-функциялар компиляциядан өткен соң, объектілік модульдер біріктіргішке (компоновщикке) беріледі. Ол модульдерді біріктіріп,оған стандарты кітапхана функцияларын қосады да, функцияда қате болса, соны анытайды. Біріктіргіш жұмысы нәтижесінде программаның екілік сандар түрінде жазылған атқарылатын машиналық коды жасалады да, ол орындалып жұмыс нәтижесін береді. Барық программалау тілдері осы схемамен жұмыс істейді.
Программа сипаттамалары мен анықтамалардан, оераторлардан құрастырылған бірнеше функциялар жиынынан тұратын мәтін түрінде болады. Сол функциялар ішінде main атты басты функция міндетті түрде болуы тиіс. Ондай функциясыз программа орындалмайды. Функция атының алдында сол функция қайтаратын мәннің типі (нәтиже типі) көрсетіледі. Егер функция ешқандай нәтиже қайтармайтын болса, онда void типі көрсетіледі мысалы: void main (). Әрбір функцияның, соның шінде main функциясының да, параметрлері болуы тиіс, бірақ олар жоқ та болуы мүмкін, ондай жағдайа жақша ішінде (void) сөзі көрсетіледі.
Функция тақырыбынан соң, жүйелі жақша ішінде оның операторлары, яғни ішкі тұлғасы (денесі) орналасады. Функция тұлғасы дегеніміз-анықтаулар, сипаттамалар, орындалатын оперпаторлар жиынын тұратын, жүйелі жақшаға алынған символдар тізбегі. Әрбір анықтама, сипаттама немесе оператор нүтелі үтірмен аяқталады.
1.2.1 С++ тілінің негізгі операторлары
Операторлар бағдарламаның орындалу процесін басқарады. С++ тіл операторларының жиынтығы құрылымдық бағдарламалаудың барлық басқару құрылымдарын қамтиды.
Программалау тілінің белгілі бір іс-әрекетті орындай алатын тиянақты мағынасы бар ең қарапайым сөйлемі оператор болып табылады. Тіл объектілерін, яғни программада пайдаланылатын мәліметтердің атаулары мен типтерін, олардың алғашқы мәндерін алдын ала тағайындау программаның сипатталуы болып саналады.
Құрама оператор бұйра жақшалармен шектеледі. Барлық басқа операторлар нүктелі үтірмен аяқталады.
Бос оператор - ;
Бос оператор-бұл тек нүктелі үтірден тұратын оператор. Ол синтаксиске сәйкес оператор қажет болатын бағдарламаның кез келген жерінде пайда болуы мүмкін. Бос операторды орындау бағдарламаның күйін өзгертпейді.
Құрама оператор-{...}
Құрамдас оператордың іс-әрекеті қандай да бір оператор басқаруды бағдарламаның басқа орнына анық беретін жағдайларды қоспағанда, ондағы операторлардың дәйекті орындалуынан тұрады.
С тілінде сыртықы ортамен мәліметтер алмасу stdio.h енгізу-шығару функциялары кітапханасын пайдалану арқылы орындалады. Ол тақырып файлы ретінде былай жазылады:
#include stdio.h
printf() функциясы мәліметтерді экранға шығару үшін қолданылады.
Оның жалпы жазылу түрі:
printf(формат тіркесі,аргуметтер тізімі ) ;
(формат тіркесі)-формат спецификаторларының,бос орыннан және әртүрлі символдардан тұрады. Ол қостырнақшамен (") шектеліп, аргуметтердің қалай бейнелейтінін көрсетіп тұрады, экранға (баспаға) шығару алдында барлық аргуметтер формат спецификациясына сәйкес түрлендіріледі,спецификация % символымен басталады және мәліменттер типін, оларды түрлендіру тәсілін көрсететін бір әріп-спецификация коды жазылады. Объектілер ретінде айнымалылар, константалар, өрнектер қолданылуы мүмкін.
1.2.2 Массивтер
Программалау тілінде типтер қарапайым және күрделі болып бөлінеді. Қарапайым тип-стандартты, саналатын, шектейтін типтер жатады. Күрделі типке-массивтер, жиындар, файлдар жатады. Программалау тілінде жеке айнымалылардың жиынын да өңдеуге болады. Массив дегеніміз-бір типтегі берілгендер жиыны. Массив бір ғана атпен белгіленеді. Массивтің әр элементң массивтің атымен белгіленеді де, оның индексі қойылады.
Массив деген ұғыммен ғылыми-техникалық және экономикалық мәселелерді шешу барысында кездесеміз. Себебі біз мұндай жағдайда көп көлемді есептеулер мен цифрлармен жұмыс істеуге мәжбүр боламыз. Массив-бұл жалпы атпен біріккен және компьютердің жадында белгілі бір орынды алатын бір типті элементтердің жиынтығы болып келеді. Массивтегі элементтер саны әрдайым шектеулі болады. Жалпы алғанда массив бұл-мәлімттердің құрылымдық жиыны, ол шектелген сан элементтер болады. Массивтердің біз жүйелі тип атаумыздың себебі масситер өзіне біртиптік элементтерді жиғаны, олар индекстері бойынша сұрыпталған , индекс-әр элементтің ішіндегі өз орнын белгілейтін айнымалы.
Массивті жариялау келесі синтаксистен тұрады:
тип сипаттамасыаты[тұрақты өрнек];
тип сипаттамасыаты[];
Мұнда квадрат жақшалар синтаксистің элементі болып табылады.
Массивті жариялау мысалдары:
int x[10]; 10 бүтін саннан тұратын бір өлшемді массив. Көрсеткіштер 0-ден 9-ға дейін өзгереді.
double y[2][10]; 2 қатардан және 10 бағандардан нақты сандарды екі өлшемді массиві.
Массивті инициализациялау.
Қарапайым айнымалылар сияқты, массивтер жариялаған кезде инициалдануы мүмкін.
Құрама типтегі объектілерге арналған инициализатор үтірлермен бөлінген және жақшаға салынған инициализатордың тізімін тұрады.
Тізімдегі әр инициализатор сәйкес типтегі тұрақты мән немесе тұрақты иницизаторлар тізімі болады. Бұл құрылым көпөлшемді массивтерді инициализациялау үшін қолданылады.
Массивті инициализациялау мысалдары:
int а[3] ={0,1,2}; инициализатор саны элементтер санына тең.
double b[5] ={0.1,0.2,0.3}; инициализатор саны элементтер санынан аз.
1.2.3 Көрсеткіштер
Көрсеткіштер, олaр жaдтың белгілі бір бөліктерін көрсетеді. Көрсеткіш мәндері-белгілі бір типтегі объектілер үшін бөлінген жад бөлімдерінің мекенжaйлaры. Көрсеткіштер қaрaпaйым aйнымалaр сияқты дәл жaриялaнaды.Тек деректер түрі мен идентификaтор aрaсындaғы жұлдызшaмен *;
int *iPtr; int тип мәнін көрсеткіші
doable *dPtr; double тип мәнін көсеткіші
int* iPtr3; дұрыс синтаксис(рұқсат етілген, бірақ қажетті емес)
int * iPtr4; дұрыс синтаксис (мұны жасамаңыз)
int *iPtr5, *iPtr6; int типті айнымалыларға арналған екі көрсеткішті жариялаймыз.
Синтаксис тұрғыдан, С++ тілі жұлдызша деректер түріне жақын, идентификаторы бар немесе тіпті ортасында болған кезде көсеткіш декларациясын қабылдайды. Назар аударыңыз, бұл жұлдызша тарату операторы емес. Бұл көрсеткіш декларациясының синтаксисінің бір бөлігі ғана.
Алайда, бірнеше көрсеткіштерді жарияланған кезде жұлдызша әр идентификатордың жанында болуы керек. Егер сіз айнымалы атаудың жанында емес. Деректер түрінің жанында жұлдызшаны көрсетуге дағдыланған болсаңыз, оны ұмытып кету оңай. Мысалы:
int* iPtr3, iPtr4; iPtr3-бұл int типінің мәні,ал iPtr4-қарапайым int типті айнымалы!
Осы себепті, көрсеткішті жариялау кезінде айнымалы атаудың жанында жұлдызшаны көрсету ұсынылады. Кәдімгі айнымалылар сияқты, көрсеткіштер жарияланған кезде инициализацияланбайды. Инициализацияланбаған көрсеткіштің мазмүны кәдімгі қоқыс болып табылады.
Сілтемеде тек мекен - жайлар болғандықтан, көрстекішке мән берген кезде - бұл мән мекен - жай болуы керек. Айнымалы адресті алу үшін адрес операторы қолданылады:
int value = 5;
int *рtr = &value; айнымалы мәннің мекен-жайы бойынша рtr инициализациялаймыз
Жоғарыда айтылғандарды келесідей сурттеуге болады.(Сурет 1.1)
Сурет 1.1 - Элементттің мекен - жайы
Сондықтан көрсеткіштерде мұндай атау бар:рtr мәні value айнымалының мекен-жайын қамтиды және рtr осы мәнді көрсетеді деп айтуға болады.
Төмендегілерді жиі көруге болады:
#include iostream
using namespace std;
int main()
{
int value = 5;
int *рtr =&value; айнымалы мәнінің мекен-жайы бойыншв рtr инициализациялаймыз
сout &value '\n'; мән айнымалы value адресін көрсету
сout рtr '\n'; рtr сақтайтын мекен-жайыды көрсету
return 0;
}
Нәтиже:
003AFCD4
003AFCD4
Сондықтан көрсеткіштер деректер түріне ие болуы керек. Түрі болмаса, көрсеткіш ол көрсететін мазмұнды қалай түсіндіруді білмейді (өзгерту кезінде). Сондай-ақ, көрсеткіш түрі айнымалы типке сәйкес келуі керек. Егер олар сәйкес келмесе, онда көсеткіш биттерді дұрыс түсінбеуі мүмкін (мысалы, value орнына int түрін қолданыңыз).
Көрсеткіштер-бұл жад адрестерін қамтитын айнымалылар. Оларды жад
мекен-жайы бойынша сақталған мәндерді алу үшін бөлу операторларымен *
ауытыруға болады. Мәніқоқыс болып табылатын көрсеткішті жою сіздің бағдарламаңыздың бұзылуна әкеледі.
Кеңес: Көрсеткішті жариланған кезде айнымалы атаудың жанында жұлдызшаны көрстеңіз.
1.3 Жобалауға міндеттерді қою
Жобалауға міндетті қою - бұл қосымшаның негізгі ойын ашады. Сол арқылы қосымша құрылып, негізгі ойды алып қолданылады. Жобалауға міндет қоюдың басты ерекшелігі-ол тақырыптың тікелей ашылып, дұрыс мағынада талқылауына септігін тигізеді. Жоба үшін ережеге сүйенсек біз оған бірнеше тақырыптар арасында үлкен ақпарат жиынтығын құрып, оның мән-мағынасын айқындаған дұрыс. Қателік кетпеуін қадағалап, үтір нүктесін тексеріп қараған жөн.
Біз қарастыратын сұрыптаудың 5 түрі және іздеу әдісінің 3 түрі бағдарламаны құрудың бұл әдістері әдетте деректерді абстракциялау болады.
Жалпы, біздің жасалатын проекттің ең басты міндеттерін айта кететін болсақ. Біз қарастыратын сұрыптау түрлерінмен және іздеу әдістерін танысып, олардың тиімілігін анықтап, алгоритмдерін құру қажет.
Жалпы, біздің жұмысымыздың мақсаты - қай сұрыптау ең жылдам жұмыс істейтінін анықтау ғана емес, алгоритмдерді зерттеу, олардың мүмкіндігінше тез жұмыс істеу үшін оптимизациялау.
1.4 Әзірленетін қосымшаға қойылатын талаптарды негіздеу
Қосымша А бөлімінде тізілген кодтар жүйесі - бұл қолданушыға әзірленген программалық кодтар қатары. Ол арқылы қолданушыға тақырыпта негізделген информацияны қолдана отырып, білімін толықтыра алады. Ондағы кодты көшіру - қою арқылы Visual Studio - дағы проектке қояды.
Анықтама бөлімінде жобалаушының antiplagiat.ru сайтынан алынған плагиаттылыққа зерттеу нәтижесі скринмен тұруы керек. Бұл оның өзіндік бағалау нәтижесі болып табылады.
2 Сұрыптау және іздеу алгоритмдеріне шолу
Сұрыптaу-элементтер бaстaпқыдa кездейсоқ ретпен орнaлaстырылғaн мaссивті сaндaрды ретке келтіру. Сұрыптaу элементтер мәнінің өсуменде, олaрды кему ретпенде жүргізілуі мүмкін. Сұрыптaу мaңызды және мәлімметтер бaзасындa жиі қолдaнылaды. Өйткені реттелген массивте ақпaрaтты іздеу әлдеқaйдa жылдам.
Сұрыптаудың мақсаты - сұрыпталғанжиынтықтағы элементтерді кейінірек табуды жеңілдету.
Қазіргі сұрыптау әдістерінің прототиптерін әздеу 19 ғасырда басталады. Герман Холлерит 1888 жылы разряд бойынша сұрыптау принципіне негізделген электр табулятор ойлап тапты.
Сұрыптау - бірдей тапсырманы орындайтын алгоритмдердің алуан түрлілігінің мысалы, олардың көпшілігі оңтайлы, басқаларынан артықшылығы бар. Сұрыптау алгоритмін таңдау мәліметтер құрылымына тәуелді боып келеді.
Сұрыптау алгоритмдері әдетте 3 өлшем бойынша бағаланады:
Сұрыптау уақыты - алгоритм жылдамдығын сипаттайтын негізгі параметр.
Жад - бірқатар алгоритмдер уақытша деректерді сақтау үшін қосымша жадыны бөлуді қажет етеді.
Тұрақтылық - тұрақты сұрыптау тең элеметттердің өзара орналасуын өзгертпейді. Бұл қасиет өте пайдалы болуы мүмкін, егер олар бірнеше өрістерден тұрса және сұрыптау солардың бірімен жүрсе.
Іздеу тaпсырмaлaрындa сұрыптaу әрекеті өте үлкен деректер үшін бірнеше рет орындалуы керек болғaндықтaн, сұрыптау уақыты өте маңызды. Сондықтaн сұрыптaу алгоритмінің тиімділігі өте мaңызды. Белгілі бір мәліметтер жиынтығындa тиімді болaтын көптеген сұрыптау aлгоритмдері жaсaлды.
2.1 Таңдау әдісі арқылы сұрыптау
Таңдау арқылы сұрыптау - алгоритмінің жұмыс істеу принципі келесі командалармен сипаттауға болады:
Деректер массивіндегі ең кіші немесе ең үлкен элементті табамыз.
Және оны ең бірінші немесе ең соңғы тұрған массив элементімен ауыстырыамыз.
Соңғы немесе бірінші тұрған элементсіз 1-2 қадамды орындап, бастапқы индекс деректер массивінің соңына бармайынша 1-3 қадамдарды қайталаңыздар.
Бұл процесті төменде тұрған (Сурет 2.1) - ден көре аласыздар.
Сурет 2.1 - Қарапайым таңдау арқылы сұрыптаудың суреті.
Төмендегі кодтар арқылы сұрыптауды жүзеге асырамыз.
#include iostream
#include locale
#include ctime
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
const int N = 50;
cout "Массив:" endl;
int mass[N];
for (int i = 0; i N; i++)
{
mass[i] = rand() % 50;
cout mass[i] " ";
}
cout endl;
cout "Массив сортировка:";
for (int i = 0; i N - 1; i++)
{
int max = i;
for (int j = i + 1; j N; j++)
{
if (mass[j] mass[max])
max = j;
}
swap(mass[i], mass[max]);
}
cout endl;
for (int i = 0; i N; i++)
{
cout mass[i] " ";
}
}
Нәтижесі: (Сурет 2.2 - көрсетіліген)
Сурет 2.2 - Қарапайым таңдау арқылы сұрыптаудың нәтижесі.
2.2 Көпіршік әдісі арқылы сұрыптау
Қарапайым алмасуды сұрыптау алгоритмі келесі принципке негізделген: барлық маасив элементтері ең төменгі салмағы бар элементтң анықтау үшін сканерленеді, табылған элемент массивтің бірінші орнына жылжытылады, ал негізгі элеметтер ауысады. Алгоритмнің келесі қайталауында процедура қайталанады, бірақ бірінші элемент ескерілмейді және т.б. Көбінесе бұл әдіс көпіршік деп аталады, салмағы аз элемент су бетіне қалқып шығады. Егер массив тігінен көрсетілсе, алгоритм жұмысы айқынырақ көрінеді (Сурет 2.3 - көрсетілген).
Сурет 2.3 - Көпіршік әдісі арқылы сұрыптаудың суреті.
Процесті массив элементтерін ыдыс ішіндегі көпіршіктер сияқты қарастыруға болатындықтан солай атаған. Үлкен көпіршіктер бара - бара ұлғая отырып, жоғарыға көтіріле береді.
Бірінші қадамда деректер ауқымы басынан аяғына дейін өтеді. Бірінші элемент өзінің ізбасарларымен салыстырылады. Содан кейін келесі элементпен дәйекті салыстырылады. Бұл деректер массивінің соңына дейін орындалады. Осылайша, ең үлкен элемент деректер массивінің соңына жылжиды.
Келесі қадамдарда осы принцип қолданылады. Егер деректер ауқымы, мысалы, төрт элемент болса, бұл қадамдарды үш рет қайталаңыз. Жалпы N элементтер болған кезде (N-1) қадамдар талап етіледі.
Бірінші қадам деректер массивінің соңына дейін, екінші - алдыңғы элементке дейін өтеді, өйткені ең үлкен элемент соңында тұр және т.б.
Енді С++ те алгоритмді қолданайық:
#include iostream
#include locale
#include ctime
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
const int N = 50;
cout "Массив:" endl;
int mass[N];
for (int i = 0; i N; i++)
{
mass[i] = rand() % 50;
cout mass[i] " ";
}
cout endl;
cout "Массив сортировка пузырковый:";
for (int i = 0; i N; i++)
{
int c;
for (int j = 0; j N - 1; j++)
{
if (mass[j] mass[j + 1])
{
c = mass[j];
mass[j] = mass[j + 1];
mass[j + 1] = c;
}
}
}
cout endl;
for (int i = 0; i N; i++)
{
cout mass[i] " ";
}
}
Нәтижесі: (Сурет 2.4 ... жалғасы
Ұқсас жұмыстар
Пәндер
- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.

Ақпарат
Қосымша
Email: info@stud.kz
Реферат
Курстық жұмыс
Диплом
Материал
Диссертация
Практика
Презентация
Сабақ жоспары
Мақал-мәтелдер
1‑10 бет
11‑20 бет
21‑30 бет
31‑60 бет
61+ бет
Негізгі
Бет саны
Қосымша
Іздеу
Ештеңе табылмады :(
Соңғы қаралған жұмыстар
Қаралған жұмыстар табылмады
Тапсырыс
Антиплагиат
Қаралған жұмыстар
kz