135
орындалу барысында айнымалы аргумент мәні өзгереді. Бұл жағдайда функция
аргумент айнымалы сілтеме арқылы бірнеше мән қайтара алады.
Өзін өзі шақыратын функция рекурсия деп аталады.
Рекурсия тереңдігі дегеніміз – функция мәнін есептеуде өзін-өзі шақыру саны.
Рекурсивті программалау стек принципіне сүйенеді.
Рекурсия түрлері мынадай:
сызықтық рекурсия;
параллель рекурсия;
қосалқы рекурсия;
жоғары ретті рекурсия.
Әдебиеттер:[
1. Керниган Б., Ритчи Д.,- Язык программирования Си. – М.: Финансы и
статистика, 1985 г.
2. Вирт Н. Алгоритмы и структуры данных: Пер. с анг.- М.: Мир, 1989 г.
3. Д.Кнут Искусство программирования для ЭВМ. Основные алгоритмы. М.:
Мир, 1976. 3.
4. Н.Культин., С/С++ в задачах и примерах – БХБ-Петербург, 2002 г.
5. Крис Паппас., Программирование на С и С++ - BHV, Киев, 2000 г.
6. Т. А. Павловская, А. Ю. Щупак С/С++ Структурное программирование:
Практикум- СПб.: Питер, 2005
7. Уэйт М . Язык Си. Руководство для начинающих: Пер. с англ. – М., Мир,
1988 г.
Практикалық жұмыс №8.
Тақырыбы: Көрсетекіштер. Көрсеткіштерге қолданылатын амалдар
Сабақтың мақсаты:
Динамикалық құрылымды мәліметтермен жұмыс жасау
дағдыларын қалыптастыру, көрсеткіштерге қолданылатын арифметикалық
амалдарды үйрету.
Материалдар және құрылғылар: тақта, бор.
Жұмыстың мазмұны және орындалу тәртібі:
1. Тапсырманы орындау мысалын қарау.
2. Ретімен келесі тапсырмаларды орындау.
3. Орындалған практикалық жұмыс туралы есепті дайындау.
136
Тапсырманы орындау мысалы
Нақты типті элементтерден тұратын массивті тез сұрыптау әдісімен реттейтін
программа құру.
#include
#include
int main()
{
const int n=20;
float arrn, middle, temp;
int *stackl=new int n, *stackr=new int n, sp=0;
int i,j, left, right;
clrscr();
cout <<" массив элементтерін енгізіңіз ");
for (i=0, i>arri;
// Сортировка
sp=1; stackl 1=0; stackr 1=n-1;
while (sp>0)
{
// Соңғы сұраныс стегінен таңдау
left= stackl sp;
right= stackr sp;
sp--;
while (left< right) {
// Разделение
i= left; j= right;
middle= arr( left+ right)/2;
while (i< j) {
while (arri< middle) i++;
while (middle if (i <=j) {
temp= arri; arri= arrj; arrj=temp;
i++; j--;
}
}
if (i < right) {
// Оң жақтағы сұраныс стегін жазу
sp++;
stackl sp=i; stackr sp= right;
}
right=j;
// Енді left және right сол жақ бөлікті шектейді
}
}
137
// Нәтижені шығару
for (i=0, icout<return 0;
}
Студенттердің өз бетімен орындауға арналған тапсырмалары
1. Нақты типті n элементтен тұратын массивтегі соңғы теріс элементтің оң
жағында орналасқан элементтердің қосындысын есептейтін программа
жазыңыз.
2. Нақты типті n элементтен тұратын массивтегі алғашқы оң элементтен кейін
орналасқан элементтердің қосындысын есептейтін программа жазыңыз.
3. Тізім берілген. Оның ақпараттық бөлігі оң сандардан тұрады. Ең үлкен санды
табу керек.
4. Ақпараттық бөлігі студенттердің фамилиясынан тұратын тізім құру керек. Тегі
«Петров» болып келген студенттер санын табу керек.
5. Ақпараттық бөлігі нақты сандардан тұратын тізім құру керек. Тізімнің оң
элементтерінің көбейтіндісін табу керек.
6. Ақпараттық бөлігі бүтін сандардан тұратын тізім құру керек. Олардың
қосындысын табу керек.
7. Ақпараттық бөлігі бүтін сандардан тұратын тізім құру керек. Тізімнің 2-ге еселі
элементтерінің санын табу керек.
8. Кітап атауларының реттелген тізімі берілген. Тізімдегі реттілікті сақтай
отырып жаңа кітап туралы ақпарат қосу керек.
Практикалық жұмыстың орындалуы туралы есептің формасы
Есепте болуы қажет:
Кез-келген орындалған тапсырма үшін
1.
Есептің шешімінің математикалық моделі;
2.
Есептің шешімінің алгоритмі;
3.
Есеп шешімінің алгоритмі орындалған программа.
Блиц-тест
1. С++ тілінде көрсеткіш дегенімі не?
a) мәліметтер регистріні нөмірі
b) оперативті жадыда стек сегментін анықтаушы
c) басқа айнымалының адресі бар айнымалы
d) жіберуді басқаруды анықтайтын белгі
e) кейбір пернетақтада жоқ пернелерді бейнелейтін символдар тізбегі
2. Стек- бұл бір бағытталған тізімнің дербес түрі, мұнда:
a) элементті басына қосуға, ал соңынан кез-келген элементті жоюға рұқсат
етіледі;
b) шыңы деп аталатын бір шетіне элементтерді қосуға және жоюға рұқсат
етіледі;
c) бірінші және соңғы элементтер арасында байланыс анықталған;
138
d) элементті соңына қосуға және басынан жоюға рұқсат етіледі;
e) аталған нұсқалардың кез-келгені;
3. Сызықты байланысқан структураға жатады:
a) Стектер, ширеттер, тізімдер
b) Ағаштар, желілер
c) Стектер, ағаштар
d) Ширеттер, тізімдер, желілер
e) Тізімдер, желілер
Бақылау сұрақтары
1. Статикалық айнымалылар мен динамикалық айнымалылар арасындағы
айырмашылықты көрсетіңіз.
2. Көрсеткіштермен жұмыс жасау кезінде базалық типтің рөлін түсіндіріңіз.
3. Динамикалық айнымалылардың қолданылу себептерін көрсетіңіз.
4. Қолданушы анықтаған типті базалық тип ретінде қолдануға бола ма?
5. Динамикалық жады шектелген бе?
Глоссарий
Көрсеткіштер дегеніміз - басқа айнымалыларының адресінен тұратын айнымалы.
Көрсеткіш - адрес сақтаған ұяшықтар тобы (2 н/се 4 ұяшық).
Ұяшықтардың нақты адрестерін қолдану үшін арнайы операторлар
қарастырылған:
& унарлық операторы объектінің адресін береді.
Р=&C - инструкциясы С ұяшығының адресін Р айнымалысынаа
меншіктейді немесе Р айнымалысы С-ға сілтейді деп аталады.
* унарлық операторы көрсеткішті сипаттауда қолданылады.
Көрсеткіш
бұл операторды қолданылғанда осы көрсеткіш сілтейтін объектіні береді.
Си тілінде функция өз аргументі ретінде параметр-мәнді қабылдайды, сондықтан
шақырған функцияның айнымалысын шақырылған функция денесінде отырып
өзгерту мүмкін емес. Мұны орындау үшін мәнге көрсеткіштерді қолдану керек.
Көрсеткіш – бұл айнымалы, сондықтан оны р=a немесе р++ деп жазуға
болады. Ал, массив аты тұрақты ретінде қатысады, яғни айнымалы емес,
сондықтан оны а=p немесе а++ деп жазуға болмайды.
Көрсеткіштерді инициализациялау
Көрсеткіштерді сипаттау барысында инициализациялауға болады.
Көрсеткіштегі адресті кез-келген бүтін санды қосу және алу арқылы
өзгертуге де болады. Мысалы, адресті 14 ұяшыққа жылжыту үшін
prb=prb+14;
Көрсеткіштен бүтін мәнді шегеруге де болады, бұл жағдайда ағымды
ұяшықта тұрған көрсеткіш солға қарай көрсетілген шамаға ығысып,
сондағы элементке сілтейді.
Бір көрсеткішті екінші көрсеткіштен шегеруге болады (2кКөрсеткіш те 1
массивке сілтеуі тиіс) мұның нәтижесі олар сілтеп тұрған ұяшықтар
Достарыңызбен бөлісу: |