- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •1. Пәннің оқу бағдарламасы - syllabus
- •1.1. Оқытушы жөнінде мәліметтер:
- •1.2. Пән бойынша мәліметтер:
- •1.3. Осыған дейінгі пәндер тізімі: Информатика, Математикалық талдау, Алгебра және геометрия, Математикалық логика.
- •1.4. Шектес пәндер тізімі: Сандық әдістер, Бағдарламалау тілі, Компьютерде тәжірибе
- •1.5. Пән мақсаты:
- •1.6. Пән бойынша берілген тапсырмаларды орындау және тапсыру графигі
- •11. Рашбаев ж.М. Массивті реттеу алгоритмдерін программалау. Оқу және методикалық әдебиеттер жөніндегі Республикалық баспа кабинеті. Алматы-1991 ж.
- •1.8. Бағалау ақпараттары
- •1.9. Курс саясаты және процедурасы
- •2. Пән бойынша оқу-әдістемелік кешен материалдары
- •2.1. Курстың тақырыптық жоспары
- •2.2. Дәріс сабақтар
- •1 Дәріс тақырыбы: Алгоритмдер. Алгоритмдерді талдау. Алгоритмдер құру.
- •2 Дәріс тақырыбы: Программа құру тілі. Программа құрылымы. Енгізу және шығару командалары.
- •3 Дәріс тақырыбы: Есептің қойылымы. Математикалық моделін тұрғызу. Алгоритмін құру. Есепті компьютерде шешу. Проектіні тексеру.
- •4 Дәріс тақырыбы: Циклдік алгоритм. Цикл түрлері. Цикл құрылымы.
- •5 Дәріс тақырыбы: Берілгендердің символдық типі. Жолдық тип.
- •6 Дәріс тақырыбы: Берілгендердің фундаментальді типі. Массив, жазба және жиынның қойылымы.
- •7 Дәріс тақырыбы: Рекурсивті алгоритмдер.
- •Мұндай рекурренттік қатынас п- факториалды санының рекурсивтік есептеу алгоритмін шамалайды.
- •8 Дәріс тақырыбы: Қосалқы программа. Функция. Процедуралық тип.
- •9 Дәріс тақырыбы: Ақпараттық құрылым. Сызықты тізім.
- •10 Дәріс тақырыбы: Ақпараттық құрылымдар. Стектер, кезектер.
- •1 Сурет
- •2 Сурет
- •4 Сурет
- •5 Сурет
- •11 Дәріс тақырыбы: Тізбекті үлестіру. Байланысқан үлестіру.
- •12 Дәріс тақырыбы: Бірбағытталған және екібағытталған байланысқан тізімдер. Көрсеткіштер.
- •13 Дәріс тақырыбы: Ақпараттық құрылым. Ағаш. Ағаштардың қойылымы.
- •14 Дәріс тақырыбы: Көпбайланысқан құрылымдар. Жадыны динамикалық бөлу.
- •15 Дәріс тақырыбы: Ішкі сұрыптау алгоритмдері: таңдау, қосу. Тікелей таңдауға талдау.
- •16 Дәріс тақырыбы: Ішкі сұрыптау алгоритмдері: Екілік қосылымға талдау жасау.
- •17 Дәріс тақырыбы: Көпіршікті және шейкерлік сұрыптауды талдау.
- •18 Дәріс тақырыбы: Бөліп алу көмегімен сұрыптау.
- •19 Дәріс тақырыбы: Медиананы табу.
- •20 Дәріс тақырыбы: Сызықты іздеу.
- •21 Дәріс тақырыбы: Екілік іздеу.
- •22 Дәріс тақырыбы: Қатарда іздеу. Кнут - Моррис - Пратт алгоритмі.
- •23 Дәріс тақырыбы: Қатарда іздеу. Боуер-Мура алгоритмі.
- •24 Дәріс тақырыбы: Жолды өңдеу алгоритмі. Рабин алгоритмі.
- •25 Дәріс тақырыбы: Қайталанбалы алгоритм.
- •26 Дәріс тақырыбы: Қайталанбалы алгоритм. Аттың жүрісі туралы есеп.
- •27 Дәріс тақырыбы: Программалаудың кейбір фундаментальді әдістері. Программаны құрастырудың технологиясы және таралуы.
- •28 Дәріс тақырыбы: Есептеуді тиімдеу. Программаны жөндеу және тестілеу әдістемесі.
- •29 Дәріс тақырыбы:
- •30 Дәріс тақырыбы: Объектіге-бағытталған программалау.
- •2.3. Зертханалық сабақ жоспарлары
- •Алгоритм. Қасиеттері. Алгоритм қойылымы.
- •2.4. Оқытушы жетекшілігімен жүргізілетін студенттердің өзбетіндік жұмысы
- •Орындаушы тәжірибе аяқталғаннан кейін шығыс ақпаратын немесе екі хабардың бірін береді.
- •65387 Санында – 5 цифр !
- •Тақырыбы: Ағаш. Ағашты қалыптастыру. Қалыпты ағашты құру.
- •Ноталардың дыбысталу жиілігі
- •Студенттердің өзбетіндік жұмыс жоспары
- •Тақырыбы: Берілгендер. Берілгендер типі, тұрақты және айнымалы. Өрнектер.
- •Тақырыбы: Динамикалық ақпаратты құрылым. Ағаш.
- •Тақырыбы: Ішкі жолдарды іздеу. Текстке сөз енгізу.
- •Тақырыбы: Ішкі сұрыптау алгоритміне программа құру.
- •Тақырыбы: Сұрыптау алгоритмі
- •Тақырыбы: Массивті сұрыптау алгоритмінің таралымы
- •Тақырыбы: Файлдық тип. Тексттік файлдар.
- •Тақырыбы: Файлмен жұмыс
- •Тақырыбы: Кіру және шығу файлдарымен жұмыс.
- •Тақырыбы: Файлдарды сұрыптау және последовательностей
- •Тақырыбы: Кнут-Морис- Пратта алгоритмін қолдану
- •Тақырыбы: Поиск подстроки в строке
- •Тақырыбы: Манипулирование строками
- •Тақырыбы: Рекурсивті алгоритмдердің таралымы. Лабиринт есебі.
- •Тақырыбы: Рекурсивті алгоритмдер құрастыру.
- •2 Мысал:
- •Тақырыбы: Мәтіндік режимде экранды басқару. Crt модулін қою.
- •2 Мысал: Күн жүйесінің динамикалық моделі.
- •2.6. Курс бойынша жазба жұмыстарының тақырыптамалары
- •Курстық жұмыс және проектілер тақырыптамалары
- •Алгоритм дегеніміз -
- •B) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
9 Дәріс тақырыбы: Ақпараттық құрылым. Сызықты тізім.
Элементтердің бірқатар жиынын біріктірудің немесе байланыстырудың ең қарапайым тәсілі – бұл “оларды бір сызыққа созу”, тізім немесе кезек ұйымдастыру. Бұл жағдайда әрбір элементпен келесі элементті көрсететін бір жалғыз сілтемені ғана салыстыру қажет.
Төменде көрсетілген сияқты анықталған Node и Ptr екі типі бар делік. Node типінің әрбір айнымалысы үш компоненттен тұрады, атап айтқанда теңестіру кілтінен (key), келесі элементке сілтемеден (next) және біз осы жерде түсіретін қандай да бір басқа ақпараттан тұруы мүмкін:
TYPE Ptr = ^Node;
Node = RECORD key: INTEGER;
next: Ptr;
data: ...
END;
VAR p, q: Ptr;
Сурет. Тізімнің мысалы.
Суретте төбелер тізімі, р айнымалысы берілген бірінші элементке сілтеме берілген. Осындай тізіммен жасауға болатын ең қарапайым операция – оның басына бірқатар элемент қосу. Алдымен Node типті элемент жадыға орналастырылады және оған сілтеме q кейбір көмекші айнымалысын иеленеді. Осыдан кейін сілтемелерге жаңа мән беріледі де операция осымен аяқталады. Бұл былайша программаланады:
Allocate(q, SIZE(Node)); q^.next := p; p := q;
Бұл жерде осы операторлардың реті маңызды екеніне назар аударыңыз.
Элементті тізімнің басына қосу операциясы кез келген тізімді қалай қалыптастыруға болатынын бірден түсіндіреді: бос тізімнен бастау және басына жүйелеп элементтерді қосып отыру. Тұтастай тізім қалытастыру процесін келесідей фрагментпен береміз (байланыстырылатын элементтер саны – п):
p := NIL; (* басында тізім бос *)
WHILE n > О DO BEGIN
Allocate(q, SIZE(Node)); q^.next := p; p := q;
q^.key := n; n := n-1
END;
Бұл тізім құрудың ең қарапайым тәсілі, алайда онда тізімдегі элементтер реті олардың ену ретіне кері болады. Кейбір жағдайларда бұл орынсыз, сондықтан жаңа элементтерді тізімнің басына емес, соңына қосу қажет. Тізімнің соңын барлық тізімді қарай отырып оңай табуға болады, бірақ бұл белгілі бір шығындарды талап ететін өте аңғырт шешім. Соңғы элементті көрсететін q екінші сілтемесін енгізсе жеткілікті. Мұндай әдістің кемшілігі мынада, бірінші болып қосылатын элементтерді қалғандарына қарағанда басқаша өңдеу қажет.
Сілтемені анық пайдалану кейбір операцияларды барынша ықшамдайды, олар басқаша болғанда шиеленісіп кеткен болар еді. Қарапайым операциялардың арасында тізімдерде элементтерді қосу және шығарып тастау (тізімді ішінара өзгерту) және тізімді қарау орындалады. Тізімге қосу операциясын талдаудан бастаймыз.
Тізімнің р сілтемесі көрсететін элементінен кейін q (айнымалы) сілтемесімен берілген элементті қосу қажет деп ұйғарамыз. Төменде бұл үшін орындау қажет сілтемелерге меншіктеу, ал суретте – осы амалдардың нәтижелері берілген:
q^.next := p^.next;
p^.next := q;
Егер көрсетілген p^ элементінен кейін емес, оның алдына қосу талап етілсе, онда байланыстардың бірбағытталған тізбегі жұмысты қиындатуы тиіс сияқты болады, өйткені осының алдындағы элементке “жол” жоқ. Алайда бұл проблема қарапайым түрде шешіледі.
Сурет. p^ элементінен кейін тізімге қосу
Сурет. p^ элементінің алдына тізімге қосу
Сәйкес схема суретте келтірілген (бұл жерде — key жаңа элементінің кілті = 8 деп ұйғарылады):
Allocate(q, SIZE(Node)); q^ := р^;
p^.key := k; p^.next := q;
"
Шеберлік
тәсіл"
мынада,
жаңа
компонент
шын
мәнінде
р^-ден
кейін
қосылады,
бірақ
кейін
жаңа
компонент
пен
р^
мәндерін
«ауыстырады».
Сурет. Кейін басқа тізімге енгізе отырып, тізімнен
шығарып тастау
Енді тізімнен шығарып тастау процесін қарастырамыз. р-ден кейінгі белгілі элементті шығарып тастау. Ол шығарылып тасталған элементті келесі тізімнің бас жағына енгізе отырып комбинацияда келтірілген (оны q көрсетеді); сурет мұндай циклдік алмасуды үш сілтеменің мәнімен суреттейді:
r : = p^.next; p^.next := r^.next; r^.next := q; q := r;
Көрсетілген элементтің өзін (одан кейінгіні емес) шығарып тастау қиынырақ, өйткені біз енгізген кездегідей проблемаға тап келеміз. Көрсетілгеннің алдындағы элементке өту мүмкін емес. Алайда енді қарапайым шешім белгілі: келесі элемент шығарылып тасталады, ал оның алдында оның мәні алға «ығысады». р-да келесі бар болса, яғни бұл соңғы элемент болмаса осылай жасауға болды.
Енді негізгі операция - тізім бойынша өтуді талқылаймыз. Тізімнің әрбір элементімен Р(х) операциясын орындау қажет деп шамалаймыз; тізімнің бірінші элементі – Р. Бұл есепті былайша орындауға болады:
WHILE р арқылы белгіленген тізім, DO бос емес
Р операциясын орындау;
келесіге өту
END;
Нақтылағаннан кейін бұл операция енді былайша беріледі:
WHILE р <> NIL DO
Р(р^) := p^.next
END;
Цикл операторының анықтамасынан және тізім құрылымынан Р басқалары үшін емес, тізімнің барлық элементтері үшін орындалатыны келіп шығады.
Барынша жиі қолданылатын операциялардың бірі - тізімнен х берілген кілті бар элементті іздеу. Массивтерден айырмашылығы бұл жағдайда іздестіру қатаң жүйелілікпен жүруі тиіс. Ол элементті тапқан кезде немесе тізімнің соңына дейін жеткен кезде аяқталады. Мұндай шарт мынаған келтіреді, конъюнкция екі қатынастан тұрады. Бұрынғыша тізімнің басы р сілтемесімен беріледі деп есептейміз:
WHILE (р <> NIL) and (p^.key <> х) DO p := p^.next;
р=NIL қатынасы р^ жоқ деп болжамдайды, демек, p^key<>x өрнегі анықталған жоқ. Сондықтан қатынастар тәртібі өте маңызды.
