- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •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) Тізбектелген, циклдық, тармақталу
- •Мазмұны
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
Тақырыбы: Рекурсивті алгоритмдердің таралымы. Лабиринт есебі.
Тапсырмалар:
«Семь лунок». Вдоль доски расположено 7 лунок, в которых лежат 3 черных и 3 белых шара так, как показано на рис. 1. Передвинуть черные шары на место белых, а белые;—на место черных. Шар можно передвинуть либо в соседнюю с ним пустую лунку, либо в пустую лунку, находящуюся непосредственно за ближайшим шаром.
«Прыгающие шарики». Эта игра похожа на предыдущую. Исходная позиция—8 лунок, в которых расставлены 4 черных и 3 белых шара (рис. 2). Поменять местами черные и белые шары. В отличие от предыдущей игры черные шары можно передвигать только вправо, а белые только влево.
Вдоль доски расположены лунки и в каждой лунке лежит шар черного или белого цвета (пример приведен на рис3. а). Одним ходом разрешается менять местами два любых шара. Добиться того, чтобы сначала шли белые шары, а за ними – черные (рис 3, б). Если общее число лунок равно n, то для решения задачи достаточно сделать не более [n/2] ходов.
4. Пусть теперь, в отличии предыдущей задачи, в каждой лунке лежит красный, белый или синий шар. Одним ходом разрешается менять местами два любых шара. Добиться того, чтобы все красные шары шли первыми, все синие— последними, а белые - посередине. Это вариант «задачи о голландском флаге» (поле голландского флага разделено на три полосы – синюю, белую, красную). Если общее число лунок равно n, то достаточно сделать не более n-1 хода.
5.Задача о лабиринте. Прямоугольное клеточное поле ограничено препятствиями. Кроме того, на поле задается произвольная система препятствий, начальная клетка, на которой находится Черепашка, и конечная клетка. Найти маршрут выхода из лабиринта, если он существует, и пронумеровать клетки маршрута в том порядке, в котором проходит их Черепашка. Черепашка может делать шаг на одну клетку в любом из четырех направлений: влево, вправо, вверх, вниз.
әдебиет:
1.Негізгі – 3, 5, 9-12
2. Қосымша - 4
Әдістемелік нұсқау:
В Тапсырмаларх с 1 по 4 рассматриваются программы, основное назначение которых—поддержка необходимой игровой обстановки. Играющему предлагается исходная ситуация порождаемая, как правило, с помощью датчика случайных чисел, все его ходы контролируются: если ход сделан по правилам игры, ситуация изменяется. В задачах смена игровой ситуации означает смену положений цветных шаров на игровой доске. В противном случае выдается соответствующее сообщение, ситуация остается неизменной. Программа также обязана отслеживать достижение целевой ситуации.
Решение Тапсырмалар №5
Структуры данных. Клеточное поле размером N x M опишем двумерным массивом А размерности N + 2, М + 2. При этом будем считать, что
A[I, j] = 0, если клетка [i, j] свободна и не посещалась Черепашкой;
A[I, j]=-1, если клетка [i, j] является клеткой, на которой находится препятствие, или находится за пределами лабиринта.
Координаты входа — i1,j1, координаты выхода — i2,j2. Они задаются пользователем. Блок Тапсырмалар исходных данных в программе и вывод массива Z достаточно просты, поэтому остановимся на разборе основной логики. Черепашка, перемещаясь по свободным клеткам (A[i,j] = 0), должна найти клетку выхода (A[i2,j2] = 0), запоминая при этом свой путь, и после нахождения отметить свой путь числами, то есть в каждую клетку пути записать номер шага, на котором она проходит эту клетку.
Предположим, что Черепашка находится в клетке a[i,j]. Из этой клетки она может сделать либо шаг на север, либо шаг на восток, либо шаг на запад, либо шаг на юг, если соответствующее направление не закрыто препятствием. Пусть Черепашка осуществляет поиск свободного поля для выполнения хода в следующем порядке:
- соответствует уменьшению координаты i (Dec(i));
-соответствует уменьшению координаты j (Dec(j));
- соответствует увеличению координаты j (Inс(j));
- соответствует увеличению координаты i (Inс (i)).
Рассмотрим процесс поиска прохода на примере. Пусть в представленном выше лабиринте Черепашка должна найти проход из клетки с координатами i1 = 1, j1 = 3 в клетку с координатами i2 = 6, j2 = 1. Первый шаг делается в начальную клетку, то есть a[1,3]:=1. Из начальной клетки она может сделать шаг только в направлении 4 (inc(i)), так как в направлении 1, 2 произойдет выход за пределы лабиринта, в направлении 3 Черепашка наткнется на препятствие. Следовательно, надо присвоить а[3, 2] значение 2 (шаг сделан). Далее снова производится анализ направлений хода в том же порядке: направление 1 отбрасывается, так как приводит к возврату, направления 2, 3 тоже отбрасываются, так как там препятствия. Черепашка должна сделать ход вновь в четвертом направлении: а[3, 3]:= 3. Четвертый шаг можно сделать в направлении 3 и 4. Пусть Черепашка всегда выбирает первый из всех допустимых вариантов, в данном случае 3 (): а [3, 4] := 4. Это тупик — с трех сторон клетка с координатами 4, 5 окружена препятствиями. Следовательно, надо вернуться на один шаг назад и попытаться по-другому сделать четвертый шаг. Из предыдущей клетки можно шагнуть еще и в четвертом направлении, то есть а [4, 3]:=4. Затем вновь делается шаг в четвертом направлении, единственно возможном (а[5, 3]:=5). И так далее до тех пор, пока Черепашка не доберется до конечной клетки.
Таким образом, при анализе вариантов очередного хода Черепашке необходимо проверить, свободна ли рассматриваемая клетка. В этом случае a[i,j] = 0. Ход делать нельзя в клетку, для которой a[i,j] = -1 (выход за границы лабиринта, вклетке препятствие), или а[i, j] > 0 (ход назад). При выполнении 1-го хода в клетку с координатами i, j надо a[i, j] присвоить значение 1.
Если Черепашка зашла в тупик (в трех направлениях препятствия или границы лабиринта), то она должна попытаться сделать новый вариант прохода. Для этого ей надо вернуться на один шаг назад и проверить оставшиеся варианты из предыдущей позиции. При этом необходимо «занулить» значение a[i, j].
Выбор варианта хода осуществляется из четырех возможных вариантов. В массивах b и с, содержащих по 4 элемента, будем хранить приращения к значениям текущих координат, в сумме с которыми они дают возможные координаты нового хода Черепашки:
b:Array[l..4] Of Integer=(-1,0,0,1);
c:Array[l..4] Of Integer= (0,-1,1,0);
Тогда выбор хода и проверку его возможности можно организовать с помощью цикла
For k:=l To 4 Do
If a[i+b[k],j+c[k]]=0 Then...
Опишем этот процесс в виде рекурсивной процедуры Move(i,j, I:Integer), входными параметрами которой являются значения текущих координат Черепашки i, j и l — номер ее очередного шага. Если текущие значения координат совпадут с заданными конечными значениями i2, J2, то необходимо вывести лабиринт с отмеченным проходом Черепашки и закончить работу. Вывод осуществляется процедурой Print(a:my array).
Если прохода из заданной начальной клетки в заданную конечную клетку не существует, то необходимо вывести информацию об этом на экран. В этом случае, после того как Черепашка проверит все возможные способы прохода, и необходимый результат не будет получен, значение a[i2, j2] по-прежнему будет равно 0.
Program Example;
Uses Crt;
Const n=5; m=6; {размеры поля}
b:Array[l..4] Of Integer= (-1,0,0,1);
c:Array[1..4] Of Integer=(0,-1,1,0);
Type myarray=Array [0..n+1,0..m+1] Of Integer;
Var a: myarray; {исходный лабиринт} i, j, il,i2,jl,j2 : Integer;
Procedure Init; {формирование массива а из файла}
Var i, j, t: Integer; f: text;
Begin
Assign(f,'c:\l.dat'); Reset(f);
For i:=0 To n+1 Do For j:=0 To m+1 Do a[i,j]:=-l;
For i:=l to n Do For j:=l To m Do Read(f,a [i,j]) ;
Close(f) ;
End;
Procedure Print(a: myarray); {печать лабиринта}
Var i, j: integer;
Begin
For i:=l To n Do
Begin
For j :=1 To m Do
Case a[i,j] Of
-1: Write(‘*') ;
0 : Write ( ' ' ) ;
Else Write (a[i, j] :3) ;
End;
Writeln;
End;
End;
procedure Move (i, j, 1: Integer);
Var k: Integer;
Begin
(i=i2) And (J=J2) Then {достигнута конечная клетка}
Begin print (a); exit End
Else
Begin
Fok-l To 4 Do {выбор направления хода}
If a[i+b[k], j+c[k]]=0 Then {шаг сделать можно}
Begin
a[i+b[k],j+c[k]]:=l; {сделать шаг}
hod(i+b[k],j+c[k],l+1);
a[i+b[k],j+c[k]]:=0; {возврат на 1 шаг назад}
End;
End;
End;
Begin
Clrscr; Writeln ( ' ДАННЫЙ ЛАБИРИНТ : ' ) ;
Writeln(‘___________________'); Init; Print (a);
Writeln(‘ВВЕДИТЕ КООРДИНАТЫ ВХОДА’); Readln(il, jl);
Writeln ( ' ВВЕДИТЕ КООРДИНАТЫ ВЫХОДА ' ) ; Readln ( i2 , j 2 );
A[i1,j1]:=1;
{первый шаг в начальную клетку с координатами il, jl}
Move(i1,j1,2);
If a[i2, j2]=0 Then Writeln(‘ПРОХОД НЕВОЗМОЖЕН');
Readln;
End.
№39-40 жұмыс
