Курстық жұмыс н тарму 11/1 53-2018



бет8/10
Дата06.01.2022
өлшемі395,5 Kb.
#14294
1   2   3   4   5   6   7   8   9   10
Орындалу алгоритмі

1-жолда біз логикалық қателерді болдырмау үшін array1 екі өлшемді массивінің бірінші мәнімен min айнымалысын бастаймыз. Шын мәнінде min айнымалысын бастамауға болады, және бағдарлама дұрыс жұмыс істейтін болады. Бірақ логикалық қатенің пайда болу ықтималдығы бар, яғни Бағдарлама жұмыс істейді,бірақ дұрыс жұмыс істемейді. Мәні айнымалы деп жарияланған кезде, онда бастапқыда қандай да бір мән(бұл мән қоқыс деп аталады) болады, және бастапқыда ауыспалы мағынада қандай мән мазмұнға байланысты, бұл айнымалыны еріксіз инициализациялаусыз бағдарлама дұрыс жұмыс істемейді. Себебі массивтің мәнін қоқыспен салыстырады. Әдетте қоқыс әрқашан оң, яғни массивте ең аз мән қатесіз іздейді. Максималды мән массивінде Сызықтық іздеу алгоритмі болған жағдайда, бағдарлама әрқашан дұрыс жұмыс істемейді. Осы арқылы біз min немесе max айнымалысын бастапқы мәнмен мәжбүрлейміз. сонда сұрақ туындайды: "бұл айнымалыны қалай бастау керек?». Иә, бәрі оңай, min айнымалысын массивтен кез келген мәнмен бастаңыз. Иә, массивтен бірінші мәнмен инициализацияны орындау міндетті емес, кез келген нәрсені алуға болады. Бірақ қарапайымдылық үшін массивтің бірінші мәнін алуға кеңес беремін. Екі өлшемді массивте Сызықтық іздеу алгоритмі қатты өзгерген жоқ, дәлірек айтқанда, мүлдем өзгерген жоқ. Тағы бір for циклы қосылды, өйткені іздеу екі өлшемді массивте орындалады.

2.2 Бағдарламаның орындалуы және есептің шешімінің нәтижесін талдау
Сұрыптау алгоритмдері бізге әлі белгісіз болғандықтан, массивты қолмен жүзеге асырамыз және міндетті түрде ретке келтіреміз. 21-жолда массивтің іздестірілетін элементін көрсетеміз және бағдарламаны іске қосамыз (2 суретті қараңыз).

// binary_search.cpp: консоль қолданбасы үшін кіріс нүктесін анықтайды.

{

const int size_array = 10;



int array_[size_array] = {-8, -7, -6, -6, -4, 2, 6, 7, 8, 15 }; // бір өлшемді массивті сипаттау

first_index = 0, / / массивтегі бірінші элемент индексі

last_index = size_array -1, // массивтегі соңғы элементтің индексі

//--------------------------------------------------------

search_value = 15; / / іздеу (негізгі) мәні

//--------------------------------------------------------

if (last_index = = = -1) cout < < "\narray is empty " < endl; / / бос массив
while (first_index < last_index)

{

average_index = first_index + (last_index - first_index) / 2; / / орташа мән индексін өзгерту



search_value <= array_[average_index] ? last_index = average_index : first_index = average_index + 1; // негізгі элемент табылды немесе жоқ

}
Сонымен, 9-жолда бүтін айнымалы константасы жарияланды, ол 10 мәні — бір өлшемді массивтің өлшемі. Жақсы бағдарламалау тонына сәйкес, статикалық массив көлемі бөлек айнымалы, const квалификаторы бар берілуі тиіс. 10-жолда тиісті өлшемдегі бір өлшемді массив жарияланды. 11-16 жолдар кейбір безендірілген массив элементтерін экранға шығарады. 17 -19 жолдарда айнымалылар жарияланады. 21 жолда екілік іздеу алгоритмінде пайдаланылатын айнымалы, мәні іздестірілетін болады. 23 — 33-жолда массивтерді екілік іздеу алгоритмі бар. Алдымен негізгі мән ізделетін массив мөлшерін тексеру керек, 23-жол. Массив мөлшері 1-ден артық немесе тең болса, онда негізгі мәнді іздеуді бастаймыз. 25-29 жолының while циклын жариялау циклда мәндерді іздеу ұйымдастырылған, бұл циклден шыққаннан кейін табылған мән индексі last_index айнымалысында сақталады. Телециклде, 28 жол шартты операция жарияланды ма ? :, if else таңдау операторын қолдануға болады. Соңында, 30-33 жолдарда if else шартты таңдау операторы жарияланды, ол іздеу мәні бар ма, жоқ па екенін көрсетеді.


Сурет 1. Екілік іздеу әдісі


С++ де массивте сызықтық іздеу

Бағдарлама көрсеткендей, мән -26-бұл array1 массивінің ең аз мәні.

Біз массивте Сызықтық іздеу алгоритмін пайдалана отырып, массивте ең аз мәнді қалай іздеуге болатынын білеміз. Бұл бағдарламаны массивте ең көп мән іздейтін етіп шығарамыз. Барлық өзгерту керек, сондықтан бұл қатаң қарым-қатынас белгісі, if шартты таңдау операторында, қарама-қарсы, 22-жол.
int min = array1[counter_string][counter_column]; / / ең аз мәнді сақтау үшін айнымалы

үшін (инт counter_string = 0; counter_string < counter_string; counter_string++)

{

үшін (инт counter_column = 0; counter_column < counter_column; counter_column++)



{

if (min > array1[counter_string][counter_column]) / / / екі өлшемді массивте ең аз мәнді іздеу

мин = массив1[counter_string][counter_column];

}

}


Сурет 2. Сызықтық іздеу әдісі


12 жолда const квалификаторы бар айнымалы деп жарияланды. For циклінде 14-18 жолдар array1 алабы толтырылады және бірден массив элементтерінің мәндері басылады. Екі әрекет бір циклге біріктірілген, осылайша массив мәндерін шығару үшін жеке циклді жариялау қажет емес. 19-жолда массивте желілік іздеу барысында табылған ең аз мәнді сақтау үшін min айнымалысы жарияланды. Min айнымалысы массивтің бірінші мәнімен бастамаланады, себебі салыстыру алдында алдымен айнымалыны бастамаландыру қажет. 20-24 жолдарда массивтерде желілік іздеу алгоритмі орындалатын for циклі жарияланды. Айнымалы-for цикліндегі санағыш бірлік болып табылады, яғни массивті өңдеу екінші элементтен басталады, өйткені массивтің бірінші элементі циклдің денесінде min айнымалысында бар if шартты таңдау операторы жарияланды, ол min айнымалы мәнін array1 массивінің мәндерімен дәйекті салыстыратын болады. Циклдың әрбір итерациясында 22-жолда шартты тексеру орындалады, егер шарт шын болса, онда min айнымалысына, егер ондай массивте болса, барлық аз және аз мән жазылады. Әйтпесе, min айнымалы мәні өзгермейді. Массивте Сызықтық іздеу алгоритмінің жұмыс нәтижесі (2 суретті қараңыз).

Келесі мысал Файлдан Аты жөніңді енгізсең тізім бойынша қаншасыншы нөмірде тұрсың соны тауып беретін көрсететін программа



int main()

{

std::fstream fs("1.txt", std::ios::in | std::ios::out | std::ios::app);



if(fs.is_open())

{

std::string sName, sSurname, tName, tSurname;



std::size_t id(0), found(0);

std::cout << "Input your name and surname\n";

std::cin >> sName >> sSurname;

while(fs >> id >> tName >> tSurname)

{

if(sName == tName && sSurname == tSurname)



{

std::cout << id << std::endl;

found = 1;

}

}


Файлдан іздеу алгоритмі



Аты жөніңді енгізу арқылы мәтіндік файлдағы студенттер тізімінен енгізілген студенттің реттік нөмірін шығарып беру керек


Егер файлда іздеген студент аты –жөні болмаса, онда сол студентті файлдағы студенттер тізімінің соңғысы ретінде нөмірлеп файлға жазады

ҚОРЫТЫНДЫ


Курстық жұмысты қорыта келіп, мен осы жұмысты жүргізгенде келтірілген мысалдарға, тақырыптарға қысқасаша сипаттама берілді.

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

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

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

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



Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10




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

    Басты бет