- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •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) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
Тақырыбы: Кнут-Морис- Пратта алгоритмін қолдану
Тапсырмалар:
1. Будем использовать этот алгоритм, чтобы выяснить, является ли слово X длины п полсловом слова Удойны т. (Как это делать с помощью специального разделителя #, описано выше.) При этом число действий будет не более С*(п +т), и используемая память тоже. Придумать, как обойтись памятью не более Сп (что может быть существенно меньше, если искомый образец короткий, а слово, в котором его ищут — длинное).
2. Написать соответствующий алгоритм (проверяющий, является ли слово Х = х[1]..х[п] полсловом слова Y=y[1]..y[m]).
әдебиет:
1.Негізгі – 3, 5, 9-12
2. Қосымша - 4
Әдістемелік нұсқау:
К заданию №1 применяем алгоритм КМП к слову А#В. При этом вычисление значений l[1], ..., l[п] проводим для слова X дойны т и запоминаем эти значения. Дальше мы помним только значение l [i] для текущего i — кроме него и таблицы l[1]..l[n] нам доя вычислений ничего не нужно.
На практике слова X и Y могут не находиться подряд, поэтому просмотр слова Х и затем слова У удобно оформить в виде разных циклов. Это избавляет также от хлопот с разделителем.
По заданию №2. Сначала вычисляем таблицу l[1]..l[n], как делали раньше. Затем пишем такую программу:
j:=0; len:=0
{len - длина максимального начала слова X, одновременно являющегося концом слова y[l] …j[j]}
while (len<>n) and (j<>m) do
begin
while (x[len+l]<>y [ j + 1] ) and (len>0) do
begin
{начало оказалось неподходящим, применяем к нему n}
len :=1 [len] ;
end;
{нашли подходящее или убедились в отсутствии}
if х [len+1] =у [ j+1] do
begin {x [1] . .x [len] - самое длинное подходящее начало}
len:=len+l;
end
else begin {подходящих нет} len:=0; end;
end;
{если len=n, слово Х встретилось; иначе мы дошли до конца слова Y, так и не встретив X}
№36 жұмыс
Тақырыбы: Поиск подстроки в строке
Тапсырмалар:
Заданы две строки s и х. Длина первой строки n, длина второй — m, причем 0<=m<=n. Требуется ответить на вопрос, является ли строка х подстрокой строки s, при этом поиск подстроки должен обнаруживать первое вхождение х в s.
Даны строка и подстрока. Составить программу, которая определяет вхождение подстроки в строку по алгоритму Бойера—Мура.
әдебиет:
1.Негізгі – 3, 5, 9-12
2. Қосымша - 4
Әдістемелік нұсқау:
Решение Тапсырмалар №1.
Самым простым методом поиска является метод прямого поиска. Рассмотрим его на примере. Пусть s = «воротник», а х = «рот». Длина первой строки п = 8, длина второй — т = 3. В данном случае х является подстрокой s, следовательно, надо найти такое значение индекса i, что для любого значения индекса k (1,,k,,3) будет выполняться равенство s[i+k] = x[k].
Начальное значение i равно 0.
1-й шаг: i= 0, k= 1 — сравниваем s[l] и х[1]: «в» «р», значит, с первой позиции вхождения нет, надо увеличить на 1 значение i.
2-й шаг: i= 1, k= 1 — сравниваем s[2] и х[1]: «о» «р», снова надо перейти к следующему i.
3-й шаг: i = 2, k=1 — сравниваем s[3] и х[1]: «р» = «р», следовательно, возможно совпадение, надо увеличить k.
4-й шаг: i = 2, k= 2 — s[4] = х[2] («о» = «о») — снова надо увеличить k.
5-й шаг: i = 2, k-3 — s[5]=x[3] («т» = «т») — полное совпадение! Далее поиск можно не продолжать, так как требовалось обнаружить лишь первое вхождение х в s.
Таким образом, прямой поиск подстроки в строке сводится к последовательным сравнениям отдельных символов. Поиск продолжается до тех пор, пока не обнаружится вхождение (факт вхождения будем хранить в логической переменной f) или пока не будет пройдена вся строка 5. При этом можно закончить просмотр, когда i будет равно п — т, так как при следующих значениях i длина любого фрагмента строки s с позиции i меньше т.
Program Example;
Var s,x: String; ifj,n,m: Integer; f: Boolean;
Begin
Writeln('введите s, x');
Readln(s);
Readln(x);
n:=length (s);
m:=length (х); {определение длин строк}
i:=0;
f:=False; {признак того, что подстрока найдена}
Repeat
j:=1;
While (j<=m) And (s [i + j ] =x [j ] ) Do Inc(j);
If j=m+l Then f:=True Else Inc(i);
Until f Or (i>n-m);
If f Then Writeln(x,'является подстрокой',s,'с позиции-‘,I)
Else Writeln (x, 'не является подстрокой',s);
Readln;
End.
Этот алгоритм требует достаточно больших временных затрат, поскольку, когда п значительно больше m, число выполняемых сравнений — (п — т) т ~ пт.
Решение Тапсырмалар №2.
Поиск ведется от начала строки s, но с конца искомой подстроки х, для которой формируется таблица, размерность которой равна 256 (число всех возможных символов). Элементами таблицы являются расстояния от последнего символа искомой подстроки х до ее каждого символа. (Если в х встречаются одинаковые символы, то в таблицу заносится расстояние до ближайшего из них.) Если символ в х не входит, то в соответствующую ячейку таблицы заносится т — длина подстроки х. Когда очередной символ подстроки не совпадает с очередным символом строки s, для последнего из таблицы расстояний определяется соответствующее расстояние, после чего х сдвигается вправо на соответствующее число позиций. Тем самым ряд позиций пропускается, сокращая время поиска.
Program Example;
Var s,x: String; sd: Array[0..255] Of Integer;
Procedure search(s,x:String);
Var i,j,n,m: Integer; f: Boolean; h: Char;
Begin
n:=Length (s); m:=Length(x);{определение длин строки и подстроки; начальное заполнение массива расстояний}
For i:=0 To 255 Do sd[i]:=m;
For i:=1 To m-1 Do {заполнение массива расстояний}
Begin
h:=x[i]; sd[Ord(h)]:=m-i;
End;
i:=0; f:=False; {признак того, что подстрока найдена}
While (i<n-m+l) And (Not f) Do
Begin
j :=m;
While (j>0) And (s[i+j]=x[j]) Do j:=j-l;
If j=0 Then f:=True {полное совпадение!} Else i:=i+sd[0rd(s[i+j])]; End;
If f Then Writeln(x,'является подстрокой',s,'с позиции',i+1)
Else Writeln('нет вхождения.');
End;
Begin (Негізгі программа}
Writeln('Введите строку s.');
Readln(s);
Writeln('Введите подстроку х.');
Readln(x);
search (s,x);
Readln
End.
№37 жұмыс
