- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •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) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
6 Дәріс тақырыбы: Берілгендердің фундаментальді типі. Массив, жазба және жиынның қойылымы.
Паскаль тілінде типтер қарапайым және күрделі болып бөлінеді.
Қарапайым типке – стандартты, саналатын, шектейтін типтер жатады. Күрделі типке – массивтер, жиындар, жазулар жолдар және файлдар жатады. Күрделі типтің элементтері қарапайым немесе күрделі типтер болуы мүмкін. Күрделі типті еңгізу программаны күшейтеді және күрделі есептерді шешуге мүмкіндік береді.
Тұрмыста тізбектелген сандарды, кестелерді, фамилия тізімдерін көп пайдаланамыз, олар бір өлшемді(жатық немесе тік жол) екі өлшемді(матрица) массив болуы немесе жиын болуы мүмкін.
Паскаль тілінде жеке айнымалыларды ғана өңдеп қоймай, айнымалылардың жиынын(тобын) даөңдеуге болады.
Массив дегеніміз бір типтегі берілгендер жиыны. Басқаша айтқанда, массив – бір атауға біріктірілген айнымалылардың реттелген тізбегі. Айнымалылардың – массив элементерінің типтері бірдей болады.массив бір ғана атпен белгіленеді. Мысалы, нақты сандардан сандардан құралған тізбекті R атаулы массив деуге болады. Мысалы:
1.6, 14.9, -5.0, 8.5, 0.46 –ны бір өлшемді массив деп, оған а деп атау беруге болады. Массивтің әр элементі массивтің атымен белгіленеді де, оның индексі қойылады. Массив элементтері индексі бойынша реттеліпжазылады. Мысалы, А1, А2, ... , Аn немесе жалпы түрде Ai,i=1,2,…,n. Паскаль тілінде массив элементтерінің индексі алгоритімдік тілдегі тәрізді тік жақшаға алынып жазылады, мысалы, А[i]. Жоғарыдағы массивте А[1]=1.6, A[2]=14.9 және т.с.с мәндер қабылданады.
Сөйтіп паскаль тіліндегі массив ұйымы алгритімдік тілдегі кесте ұйымына сәйкес келеді. Алгоритімдік тілдегі ТИП АТАУ өлшем (мысалы, нақ таб A[1:N]) орнына Паскаль тілінде атау : массив [индекстердің алғашқы...соңғы мәні] OF элемент типі – түрінде жазылады.
Егер программада массив пайдаланылатын болса, онда ол айнымалы (VAR) бөлігінде немесе тип (TYPE) бөлігінде бейнеленуі қажет.
Массив айнымалы бөлігінде былай бейнеленеді:
VAR массив аты: ARRAY [t1] OF t2;
Мұндағы ARRAY (массив), OF (одан) – қызмет сөздері, t1-REAL, INTEGER базалық типінен өзге кез келген стандартты тип. Индекстің типі ретінде шектелген, саналатын, логикалық және литерлік типтер пайдаланылады.
Мысалы,
VAR lit=array[char] of real;
org=array[5..15] of char;
bol=array[boolean] of integer;
t2-құраушылар типі, Паскаль тілінде пайдалануға болатын массив элементтерінің типі. Мұны пайдалансақ, жоғарыдағы мысалдағы массивті айнымалы бөлігінде былай бейнелеуге болады:
VAR a:array[1..5] of real
Мұндағы A – элементтері REAL типтегі массив аты, ал индекс 1-ден 5-ке дейін өзгереді.
Индекс типі стандартты, бүтін немесе нақты бола алмайды. Сондықтан бейнелеуді былай жазуға болмайды:
VAR a:array[5] of real;
немесе
VAR a:array[integer] of real;
Массивтерді дұрыс жазуға мысалдар келтірейік:
VAR mas:array[1..n] of real;
жыл: array[қаңтар..желтоқсан] of integer;
L: array[жол] of boolean;
M1: array[char] of шеңбер;
Егер бірнеше массив бірдей базалық, және индекстік типте болса, онда оларды бейнелегенде бір массив ретінде үтір арқылы бөліп жазуға болады. Мысалы:
VAR a, b, c :array[1..10] of real;
Мұнда әрбір А, В, С – массивтері, элемент – типтері нақты болатын 10 элементтен тұрады.
Программада «индекс» және «индекстің типі» ұғымдарын шатастыруға болмайды.
Индекс типі массивті бейнелегенде пайдаланылса, индекс массив элементтерін белгілеу үшін пайдаланылады. Индексті бейнелегенде қандай тип берілсе, индекс сол типте ғана болуы қажет.
Индекс өрнек, айнымалы немесе тұрақты болып берілуі мүмкін.
Сондықтан да көп жағдайларда массивтерді индексті айнымалылар деп те атайды. Ал индекссіз айнымалыларды массивтерден ажырату үшін қарапайым айнымалылар дейді. Базалық типтегі айнымалыларға қандай амалдар қолданылса, массив элементтеріне де сондай амалдарды қолдануға болады. Мысалы, программаның операторлық бөлігінде массив элементтеріне мынадай амалдар:
A[3]:=C[4]+5;
S:=S+X[K];
P:=X[3*i+1];
және т.с.с. қолданылады.
Егер массив атауында бір ғана индекс болса, онда ол массивті бір өлшемді, ал екі индекс болса – екі өлшемді және т.с.с. n индекс болса, n өлшемді массив дейді. Бір өлшемді массив вектор элементтері, ал екі өлшемді массив матрица деп аталады.
Массив элементтерін енгізу немесе шығару бөліктерін программа үзінділері арқылы көрсетейік:
А) енгізу:
For i=1 to n do
read (A[i]);
………………….
Ә)шығару:
For i=1 to n do
write(A[i],’ ‘)
………………….
Массив элементтерін кездейсоқ сандармен де енгізуге болады. Мысалы, массив өлшемі алдын ала енгізіледі де, 100-ге дейінгі сандардан кездейсоқ түрде массив элементтері енгізіледі:
Randomize;
For I:=1 to n do
C[i]:=random(100);
Жиындар
Алгебрада жиынның мағынасы қандай болса , Паскаль тіліндегі жиының да мағынасы солай беріледі. Бұл ретелмеген бір-бірінен ерекшелігі бар бір типті элементтер жиынтығы. Жиын элементерінің саны 255-тен артпау қажет. Жиындағы әрбір объект жиын элементі деп аталады. Жиын элементері нақтыдан басқа скалярлық типтердің бірінде жатуы тиіс. Бұл тип жиынның базалық типі деп аталады. Базалық тип аралықпен беріледі.Жиын типтерінің мәндерінің облысы базалық тип элементтерінен құрылған барлық ішкі жиындар жиынтығы болып табылады. Паскаль тілінде жиын элементтерінің мәндері квадрат жақшамен көрсетеді: [1,2,3,4],[‘a’, ‘b’, ‘c’], [‘a’,..’z’]. Жиынның элементтері болмаса, ол бос жиын деп аталады да, квадрат жақшамен «[]» белгіленеді. Жиындық типтерді бейнелеу ушін Set және Of қызметші сөздерді пайдалынады. Жиындық типтер типтерді бейнелеу бөлігінде былай анықталады.
Туре <атау> = set of < элементтер типі>
Мысалы,
Туре К=set of byte;
Var a:K
Жиындық типтер мен сәйкес айнымалдарды біріктіруге болады.
Var Code: set of 0..7;
Digits :set of ‘0’..’9’;
Сондай –ақ жиындық типті айнымалы ретінде бейнелеп, оның алғашқы мәнін тұрақтылар жиыны ретінде бейнелеу бөлігінде беруге болады.
Type up=set of ‘A’..’Z’;
Low=set of ‘A’..’Z’
Const upcase: up=[‘A’..’Z’];
Vocals: Low=[‘a’, ‘e’, ‘i’, ‘o’, ‘y’, ‘и’]
Delimiter: set of char=[‘,’, ‘/’, ‘:’, ‘..’, ‘?’];
Жиынның бір элементінің жадыдан алатын көлемі 1 битті құрайды. Жиын типті айнымалының жадыдан алатын көлемі:
Жады көлемі =(Max div 8)+(Min div 8)+1
Формуласымен есептеледі. Мұндағы Мах және Min базалық типтің төменгі және жоғарғы шекаралары.
Жиындарға қолданылатын амалдар
Жиындық типтердің берілгендері үшін қиылыстыру, біріктіру, айырымдық және іп амалдары анықталған. Сондай-ақ, “<”, “>”. “<=”, “>=”, “=” және “<>” қатынас белгілері пайдаланылады.
“=” қатынас белгісі. Егер А және В жиындары бірдей элементтерден тұратын болса, онда бұл жиындар тең болып есептеледі. Салыстырылатын жиындардағы элементтердің орналасу ретінің теңдік шартына әсері болмайды.
А жиынының мәні В жиынының мәні Өрнек Нәтиже
[1, 2, 3, 4] [1, 2, 3, 4] A=B True
[‘a’, ‘b’, ‘c’] [‘c’, ‘a’] A=B False
[‘a’..’z’] [‘z’..’a’] A=B True
Тең емес қатынас (< >). А және В жиындарының кем дегенде бір элементі өзгеше болатын болса, онда олар тең емес болып есептеледі.
А жиынының мәні В жиынының мәні Өрнек Нәтиже
[1, 2, 3] [3, 1, 2, 4] A<>B True
[‘a’..’z’ ] [‘b’, ‘z’] A<>B True
[‘c’..’t’] [‘t’..’c’] A<>B False
Үлкен немесе тең қатынас белгісі (>=). Егер В жиынының барлық элементтері А жиынының құрамына кіретін болса, A>=B қатынасының нәтижесі ақиқат болады, ал кері жағдайда жалған болады.
А жиынының мәні В жиынының мәні Өрнек Нәтиже
[1, 2, 3, 4] [3, 2, 4] A>=B True
[‘a’..’z’ ] [‘b’, ‘t’] A>=B True
[‘c’, ‘x’, ’t’] [‘t’..’c’] A>=B True
Кіші немесе тең (<=) қатынас белгісі. Алдыңғы операцияда пайдаланылғанындай, егер А жиынының барлық элементтері В жиынының құрамына кіретін болса, онда A<=B өрнегінің нәтижесі ақиқат болады, кері жағдайда жалған болады.
А жиынының мәні В жиынының мәні Өрнек Нәтиже
[1, 2, 3] [2, 3, 4] A<=B True
[‘d’..’h’ ] [‘b’, ‘t’] A<=B True
[‘c’, ‘x’, ’t’] [‘t’..’c’] A<=B True
In операциясы. Бұл операция қайндай да бір мәннің көрсетілген жиында жататындығын тексеру үшін пайдаланылады. Әдетте шартты операторда пайдаланылады.
А жиынының мәні Өрнек Нәтиже
[1, 2, 3, 4] if A in [2, 3, 4] then True
[‘a’..’z’ ] if A in [‘a’..’n’] then False
[‘c’, ‘x’, ’t’] if A in [x0, x1, x2, x3] True
In операциясы бірқатар басқа да амалдарды алмастыра отырып, күрделі шартты тексерулерді тиімді, көрнекі сипаттауға мүмкіндік береді.
Мысалы, if (a=1) or (a=2) or (a=3) or (a=4) or (a=5) then … өрнегін өте қысқа, әрі көрнекі түрде былай сипаттауға болады: if A in [1..6] then…
Жиындардың бірігуі (+). Екі жиынның бірігуі осы екі жиынның элементтерінен тұратын үшінші жиын болып табылады.
А жиынның мәні В жиынның мәні Өрнек Нәтиже
[1,2,3] [1,4,5] A+B [1,2,3,4,5]
[‘a’..’z’] [‘e’..’z’] A+B [‘a’..’z’]
[] [] A+B []
Жиындардың қиылысуы. Екі жиынның қиылысуы бір мезгілде екі жиынға да кіретін ортақ элементтерден тұратын үшінші жиын болып табылады.
А жиынның мәні В жиынның мәні Өрнек Нәтиже
[1,2,3,4] [3,4,1] A-B [2]
[‘a’..’z’] [‘d’..’z’] A-B [‘a’..’c’]
[x1,x2,x3,x4] [x4,x1] A-B [x3,x4]
Жазбалар
Жазбалар күрделі объектілерді бейнелеуде қолданылатын, икемді де, қолайлы мәліметтер құрылымы. Олар әртүрлі қасиеттерімен сипатталады, әртүрлі ақпараттық жүйелерді құруда қолданылады. Жазба-бұл әртүрлі типті тіркелген сандар шамасынан тұратын тізбек, ол өріс немесе жазудың компоненті деп аталады. Жазба массив тәрізді бірқатар жеке компоненттерден құралады, бірақ жазба компоненті әртүрлі типті мәліметтер болуы мүмкін. Мысалы, адрестік мәліметтер (индек, қала, көше, үй нөмірі, пәтер нөмірі). Мұны жазба түрінде былай сипаттауға болады:
Type adress=record
Index: string [6];
City: String [20];
Street: string [20];
House, flat: integer;
End;
Бұл мысалдан жазбаны былай анықтауға болады:
Type <жазба атауы>=record
1-өріс атауы: тип;
2-өріс атауы: тип;
.............................
n-өріс атауы: тип;
end;
Массивтерді бейнелегендегідей, жазбалар типі мен сәйкес айнымалыларды біріктіруге болады. Мысалы екі студент туралы мәліметті былай бейнелейміз:
Var stud1,stud2:record
Fio:string [20];
Fac: string [20];
Group:string [3];
End;
Жазба түріндегі айнымалының алғашқы мәнін тұрақты ретінде анықтауға болады:
Const aтау: тип атау=тұрақты мәні;
Тұрақты мән дегеніміз-өріс атауы мәні дөңгелек жақшаға алынған тізім элементтері. Тізім элементтері нүктелі үтірмен ажыратылып жазылады. Мысалы, координаттар жүйесінің бас нүктесін анықтайтын жазба былай сипатталады:
Type point=record
x,y,z:integer;
end;
Const or: point=(x:0;y:0;z:0);
Жазба компоненттеріне оралу өріс атауын нүкте арқылы көрсетудің көмегімен жүзеге асырылады. Мысалы, Х айнымалысының типі адрес болса, онда Var директивасы былай бейнеленеді:
Var х: adress;
Болса, онда төмендегідей меншіктеулерді жазуға болады:
х. House: =67; х. Street: =’Ғ.Құрманғалиев’; х. City: =’Атырау’; х. flat: =135; х. Index: =’000611’.
Көпшілік жағдайларда, амалдарды орындауда тіркелген жазбаларды өрісімен шығару талап етілсе, онда белгілеуді қысқарту үшін біріктіру операторын with пайдалануға болады. Оның құрылымы мынадай:
With <жазба атауы> do оператор; Мұндай жағдайда do қызметші сөзінен кейін жазылған операторда, көрсетілген жазудағы өріс атауы жазудың атауысыз және нүктесіз бейнеленеді. Меншіктеу операторында тек өріс атауын ғана емес, сондай-ақ жазба атауын да пайдалануға болады: өрістің типі жазба болуы мүмкін.
