29) Функция-белгілі бір әрекеттерді орындайтын аталған нұсқаулар тізбегі. Функциялар программаның денесінде бірдей нұсқаулар блоктарын бірнеше рет қайталамау үшін қолданылады. Мысалы, екі бүтін санның қосындысын есептейтін функцияны анықтаймыз. Функциялар кодты айтарлықтай жеңілдету және азайту, оны әртүрлі платформаларға бейімдеу, ақаулыққа төзімді ету, оңай түзету үшін қажет. Жалпы, функциялардағы тәртіп-бұл басындағы тәртіп.Егер программаның логикасы мүмкіндік берсе, функция ештеңеге тәуелді емес және оның шегінен тыс ештеңеге әсер етпейтініне көз жеткізіңіз. Содан кейін код көп оқылатын болады, ал программистер олардың алдында ойластырылған әзірлеуші бар екенін бірден көреді.
Денедегі кез-келген функция (әдіс) өзін-өзі шақыра алады. Рекурсия-бұл функцияны анықтау әдісі, онда берілген аргумент мәні үшін функциядан қайтару нәтижесі алдыңғы (кіші немесе үлкен) аргумент мәні үшін сол функциядан қайтару нәтижесі негізінде анықталады.
Рекурсивті функция-бұл өзін-өзі шақыратын функция. Бұл тікелей Рекурсия жағдайында болады. Функция өзін шақырған кезде, оның параметрлері мәндерінің көшірмесі стекте жасалады, содан кейін Басқару функцияның бірінші орындалатын операторына беріледі. Қайта қоңырау шалған кезде процесс қайталанады. Рекурсивті функциялар циклдерге балама болып табылады. Санның факторын, берілген интервалдағы сандардың қосындысын есептеу және санды дәрежеге көтеру үшін рекурсивті функциялардың мысалдарын қарастырыңыз.
Пайдаланушының функцияның нақты параметрі болып табылатын санды енгізуін ұйымдастырамыз. Рекурсияны аяқтаудың шарты енгізілген санның нөлге тең болуы болады. Бұл жағдайда функция енді өзін шақырмайды.
Рекурсия түрлері мынадай:
сызықтық рекурсия;
параллель рекурсия;
қосалқы рекурсия;
жоғары ретті рекурсия.
Рекурсивті алгоритмдер мысалдары:
6!- алты факториялды есептеу алгоритмі:
#include double fact(int n);
int n=6;
double f;
f=fact(n);
printf(‘6!=%10.0f\n”,f);
return (0);
}
double fact(int n)
{
if (n<1) return(1.0)
else
return(n*fact(n-1);
}
30) Деректердің динамикалық структурасы өлшемі айнымалы, жадыдан орын босатылмайтын, программаны орындаған сайын мәндері, мәндерінің саны да өзгеріп отыратын деректер болып табылады.Динамикалық деректердің элементтерінің арасында байланыс орнату үшін, көрсеткіштер қолданылады. Олар әр динамикалық элементтің жадыдағы адресін көрсетіп тұрады. Ал динамикалық деректер структурасының элементтері екі өрістен тұрады:
1. деректер өрісі - ақпараттық өріс, ол массив, жазу, вектор тағы басқа болады.
2. байланыс өрісі - белгілі бір элементті басқа структураның элементімен байланыстыратын бір немесе бірнеше көрсеткіштер бола алады.
Деректердің байланыстырылып көрінуінің жетістігі – структураларды барынша өзгерту мүмкіндігінде болып табылады:
1)Структуралардың мөлшері машиналық жадының қолдануға болатын көлемімен шектеледі;
2)Структура элементтері логикалық тізбегін өзгерткенде жадыдағы деректерді ауыстырудың қажеті жоқ, оның орнына көрсеткіштер жылжиды, түзетіледі.
Деректердің байланыстырылып көрінуінің кемшілігі:
3)Көрсеткіштермен жұмыс жасау үшін программисттің квалификациясы жоғары болуы керек;
4)Байланыс қрістеріне қосымша жады бөлінеді;
5)Уақытты үнемдемейді;
Сызықты байланыстырылған тізімдер. Тізім дегеніміз элементтерінің саны өзгермелі, енгізу, шығару операцияларын қолдануға болатын реттелген жиын.Элементтерінің арасында көршілік қатынасты бейнелейтін тізімді сызықты тізім дейді.Бірбайланысты тізімді өңдеу тиімді емес, өйткені қарама қарсы бағытта қозғала алмайды. Ондай мүмкіндіктер тек екі байланысты тізімдерде болады, оларда екі көрсеткіш бар, біріншісі алдыңғы элементі, екіншісі келесі элементті көрсетеді. Сызықты байланысты тізімде NEXT өрісі бар – ол тізімдегі келесі элементті көрсеткіші деп аталады. PREV өрісі бар – ол тізімдегі алдыңғы элементті көрсеткіш деп атайды. Екі көрсеткішті анықтау. Тізімдегі соңғы элементті көрсеткіш те қолданылады, ол NIL болады. , оларды жылжыту процесі элементтерді өңдеу көп уақытты алады, бірақ тізімге қолданылатын кейбір операцияларға тиімдірек.Сызықты емес тармақталған тізімдер.Сызықты емес тармақталған тізімдер деп элементтері тізім болатын тізімдерді атайды. Егер екі байланысты тізімде көрсеткіштердің біреуі басқа көрсеткіш ретіне кері ретпен берілсе, ондай тізім сызықты тізім болады, егер көрсеткіштің біреуі кез келген ретпен берілсе, онда тізім сызықты емес тізім деп аталады.Тармақталған тізім үш ұғыммен сипатталады: реті, тереңдігі, ұзындығы.Реті. Тізім ішінде элементтер пайда болатын тізбекпен анықталатын тізім элементіне транзитивті қатынас берілген. (x,y,z) тізімінде х атомы у-тің алдыңғысы, ал у атомы z-тің алдыңғысы, сонда х атомы z-тің алдыңғысы болатыны білінеді. Берілген тізім (y,z,x) тізіміне эквивалентті болмайды.Тізімді графикалық схема көмегімен бергенде тізім реті горизонтальды стрелкамен анықталады: элементтен стрелка шығып тұрса,онда ол көрсетіп тұрған элементтің алдыңғысы екенін білдіреді.Тереңдігі. Тізім ішіне сиятын элементтердің максималды деңгейі тереңдігін білдіреді. Тізім ішінде ішкі тізім болса, олар кірістірілген тізімдер болады және дөңгелек жақшаға алынады.