- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •"Алгоритмдеу және бағдарламалау негіздері" пәні бойынша
- •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 жұмыс.
Тақырыбы: Берілгендер. Берілгендер типі, тұрақты және айнымалы. Өрнектер.
Тапсырмалар:
Сұрақтарға жауап бер:
Берілгендер деген не?
Стандартты берілгендер типі?
Нақты және комплексті сандық берілгендерге мысал келтір.
Символдық берілгендер.
Тұрақты мен айнымалы айырмашылығы
Операнд деген не?
әдебиет:
Негізгі – 2, 8
Қосымша – 2
Әдістемелік нұсқау:
Берілгендер туралы оқиғанда проблемалы берілгендер мен басқарушы берілгендер айырмашылықтарын анықта. Әрбір берілгендерді үш атрибуты бойынша: аты, типі және мәні.
Әрбір программалау тілі өзінің өрнегінің типін анықтайды.
№2 жұмыс
Тақырыбы: Турбо Паскаль тілінің математикалық функциялары.
Тапсырма:
Екі графтан тұратын “Арифметикалық амалдар” кестесін толтыр: амалдар белгіленуі мен сәйкес орындайтын амалын.
Екі графтан тұратын “Математикалық фунциялар” кестесін толтыр: функция аты және Паскаль тіліндегі жазылуы.
Турбо Паскаль тілінде өрнектер қалай жазылады?
Математикалық өрнектің алгоритмдік тілдегі жазбасы мен Турбо Паскаль тіліндегі жазбасының айырмашылығы?
Паскаль тілінде жаз:
(a+bc+def2)-5
((ab-d)x+dby))x-d
x, y, z берілген. a,b есепте
Әдебиеттер:
негізгі – 1, 5, 10, 12
қосымша – 4
Әдістемелік нұсқау:
Турбо Паскаль тілінде дәрежеге шығару амалы жоқ, оны көбейтумен жазамыз. Турбо Паскаль тілінде тангенс, котангенс және кейбір басқа тригонометриялық функциялардың арнайы жазбасы жоқ. Бұл жағдайда қажет функцияны басқа жазбасы бар функциямен түрлендіру керек. Мысалы,
№3 жұмыс
Тақырыбы: Тармақталған алгоритммен жұмыс. Таңдау алгоритмі.
Тапсырма:
1. Ln(x) Лагерр полиномының мәнін есепте:
мәндері
бойынша тексер.
2. Кубтардың максималды мәніне а, b, с, d айнымалыларын және е c айнымалысының белгісін қойыңыз.
Х
= {х
|
ах2
+
bх
+
с = 0, х
C}.
3. Берілген n және х мәндері бойынша cos nx есепте;
4. cоsnх мәнін дәрежені кішірейту формуласы бойынша есепте:
(cоs2x+1)/2, если n=2,
сosnx= (cоs3x + 3 cоsх)/4, если n = 3,
(cоs4x + 4cоs2:r + 3)/8, если n = 4,
(cоs 5х + 5 cоs 3х + 10 cоs х )/16, если n = 5
Мысалы:
саны берілген. Егер
болса,
онда барлық санды квадратымен ауыстыр.
Ал егер
болса, онда әрқайсысын ең үлкенімен
алмастыр, қалған жағдайда әрбір санды
қарама қарсы табамен жаз.
Шешімі:
Шартты төмендегіше келтіреміз:
,
егер
,
если
,
қалған
жағдайда.
Program Example_1;
Var a,b,c: integer;
Begin
Writeln(‘сандар бер’);
Readln(‘a,b,c’);
If
(
)
and (
)
then Begin
a:=sqr(a); b:=sqr(b); c:=sqr(c) end;
Else if (a>b) and (b>c) then begin a:=c; b:=c end;
Else begin a:=-a; b:=-b; c:=-c end;
Writeln(a:=3,b:=3,c:3);
Readln;
End.
Әдебиеттер:
Негізгі –1, 5, 10, 12
Қосымша –4
Әдістемелік нұсқау:
Типі
зат
a
және
b
айнымалылары
тең болады, егер
шарты орындалса
№4 жұмыс
Тақырыбы: Циклдік алгоритмдер. Параметрлі цикл.
Тапсырма:
Қайталау алгоритмдерінің түрлері, орындалу принципі.
Қайталау алгоритмдерінің блок-схемасы мен алгоритмдік тілдегі жазбасына.
Break және Continue жүйелік процедуралары, мысалдар келтір.
Қандай жағдайда goto операторын қолданған тиімді, ал Break операторын қай жағдайда?
Өрнектің мәнін табатын программа құр.
у=((…(202-192)2-182)2-…-12)2.
1 до F16 (от 1 до 1510) оналтылық санау жүйесіндегі көбейту кестесінің програмасын құрастыр
Төмендегі заңдылық бойынша натурал сандарды квадраттау программасын жаз:
12=1
22=1+3
32=1+3+5
42=1+3+5+7
…….
N2=1+3+5+7+9+…+(2n-1)
Определите количество трехзначных натуральных чисел, сумма цифр которых равна заданному числу N.
k натурал саны берілген. K-шы санға дейін тізбектей шығаратын үш программа жаз:
а) 12345678910111213…, қатар жазылған барлық натурал санды;
б) 149162536…, қатар жазылған барлық натурал сандардың квадратын;
в) 1123581321…, Фибоначчи санын.
8. 2,4,8 аяқталатын 3-ке қалдықсыз бөлінетін 20-дан үлкен 100-ден кіші барлық бүтін сандардың қосындысын табатын программа жаз.
Әдебиеттер:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
Параметрлі цикл арқылы 20-дан 1-ге дейінгі тізбекті шығару керек болса, қадам –1-ге тең болады.
Көбейту кестесін шығарғанда оналтылық санау жүйесінің санының цифрлары екіден үлкен болатынын ескеру қажет.
k цифрын іздегенде санның жалпы тізбектелу заңдылығын табу керек.
Мысал: 10-нан 99-ға дейінгі сандардың ішінен (0<n<=18) шартын қанағаттандыратын санның цифрларының қосындысын тап.
Шешімі: k – қарастырылатын сан, p1 - k санының бірінше цифры, p2 – k санының екінші цифры, s – k санының цифрларының қосындысы. Число k санын шығарамыз, егер p1 және p2 қосындысы s-ке тең болса.
Program Example;
Var k, n, p1, p2, s:Integer;
Begin
Writeln(‘бүтін сан енгіз’);
Readln (n); {енгізілген бүтін}
For k:=10 to 99 {(For) үшін k от 10 до (To) 99 (Do) жасау}
Begin
P1:=k Div 10; {бірінші цифр}
P2:=k mod 10; {екінші цифр}
S:=p1+p2; {қосындысын табамыз}
If s=n Then writeln(k); {қосындысы n-ға тең болса , онда K шығарамыз}
End;
Readln;
End.
№5 жұмыс
Тақырыбы: Жолмен жұмыс.
Тапсырмалар:
Жол тек цифрлардан тұрады. Цифрдың алдында тұрған барлық нольдерді жою керек. Мысалы
Берілген жол: 000102001089, нәтижесі: 102001089.
Сөздерден тұратын символдар жолы берілген, сөздердің санын анықтайтын программа құр:
а әрпінен басталатын;
жұп ұзындықтан тұратын;
бірінші және соңғы символы бірдейлерін;
Соңғы екеуі бірдейлерін.
Тек қана цифрлардан тұратын жол берілген. Экранға 9 цифрының тұрған позициясының нөмірін шығару керек.
Пробел арқылы бөлінген үш орынды саннан тұратын жол берілген. Жолдағы үш орынды санның санын анықтайтын программа құр.
Бір немесе бірнеше пробелдермен бөлінген сөздерден тұратын символдар жолы берілген. Жолдағы сөздер санын анықтайтын программа құр.
әдебиет:
1.Негізгі – 3, 5, 9-12
2.Қосымша - 4
Әдістемелік нұсқау:
Тапсырмаларды орындағанда төмендегілерді ескеру қажет:
Мұндай программаларды орындағанда экстремальды жағдайларды ескеру қажет, яғни жолда тек қана нөлдер болатын жағдай. Бұл уақытта цикл тоқтамауы мүмкін. Ол үшін мынадай i>0 шарт жазған дұрыс. Шамамен і-ге жолдың ұзындығын жазыңдар. Сонда циклда і-ң мәні 1–ге азаяды. i>0 шартын қанағаттандырмаған жағдайда циклдан шығады, яғни і 0-ді қабылдайды.
Барлық нөлдерді жойғаннан кейін жол бос болады. Тапсырманы орындау үшін міндетті түрде р-жүйесінен ондық санау жүйесіне айналдыру ережесін қайталау керек. Алтыншы тапсырма үшін:
Символдар позициясының нөмірі
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
|
|
|
а |
b |
с |
d |
е |
f |
|
|
k |
1 |
m |
1 |
|
2 |
3 |
! |
+ |
! |
символы
Жолдағы сөздердің санын санау үшін , әрбір сөзді “қиып алу” керек. Ол үшін сору функциясын қолданамыз.
Ол үшін төмендегі сұрақтарға жауап бер:
1) қай символдан бастап қиямыз?
2) неше символды қию керек?
Программа мәтіні:
k:=0; {сөзді санау}
r:=1; (сөздің оң жақ шекарасы}
while r<= length(st) do begin
while (st[r]= ' ') and (r<=length(st)) do
r:=r+l;
1:=г; (1 — сөздің сол жақ шекарасы}
while (st[r]<>' ') and (r<=length(st)) do
r:=r+l;
stl :=copy(st,l,r-l);
k:=k+l; {1 – сол жақ шекара, г-1 — сөздің ұзындығы}
end;
№6-7 жұмыс
Тақырыбы: Бірөлшемді массивпен жұмыс жасау алгоритмі.
Тапсырмалар:
а және b екі саны берілген. Бір өлшемді массивтегі а-ға еселі және b–ға еселі емес сандарды t-ға меншікте.
3-ке еселік және нөмірімен сәйкес келетін бірөлшемді массив элементтерін тап.
бірөлшемді массив элементтері төмендегі қатынастарды zl < а2< а қанағаттандыратындығын тексеретін программа құр.
Бірөлшемді массивтегі жұп нөмірдегі ең үлкен элементті тап. Оның біреу екендігін анықта.
әдебиет:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
Бірөлшемді массив элементтерін пернетақтадан, формула бойынша, кездейсоқ тәсілмен енгізуге болады. Бұл үш жағдайды циклсыз жазуға болады.
Мысалы: Массив жұп элементтері ішінен ең кіші элементті табу. Массив элементтерін integer бейнелейтін деп болсақ, оны +32767 деп аламыз.
program min_even;
type mas=array[1..10] of integer;
var a:mas; i:integer;
min:integer;
begin
for i:=l to 10 do begin
writeln('жиымның кезекті элементін енгізіңіз');
readln(a[i])
end;
min:=32767;
for i:=l to 10 do
if (a[i<min) and (a[i] mod 2=0) then min:=a[i];
if min=32767 then writeln ('массивте жұп элементтер жоқ')
else writeln (' массивтің жұп элементтері арасындағы ең төмен сан=', min)
end.
№8-9 жұмыс
Тақырыбы: Процедуралар.
Тапсырмалар:
Тізбектегі бірінші теріс санды анықтайтын программа құр.
A=sin(i/100), I=1,2,3,…
Экранға 0..36 аралығындағы 5 кездейсоқ саннан тұратын 10 жол шығаратын программа құр.
For циклі және Odd функциясы көмегімен 1..100 аралығындағы барлық тақ сандарды шығаратын программа құр.
Төмендегідей етіп шығаратын программа құр.
********************************************
* ПРОГРАММА *
* вычисления математических функций *
* автор: Смирнов А.П. *
********************************************
Үш процедурадан және негізгі программадан тұратын программа құр. Бірінші процедура Х және У екі бүтін санды енгізуді ұйымдастыратын болсын. Екіншісі олардың қосындысын есептейтін, үшіншісі нәтижесін алатын. Бұларды негізгі программада қолдан.
n натурал саны берілген. n, n+1, …, 2n сандары аралығынан егіздер табылады ма?, яғни жай сандар-айрымы екіге тең.
әдебиет:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
Мысалы: натурал k (k<n) және n элементті М массиві берілген. Массивтен K-ға тең элементті жоятын программа құр. k-ға тең элементті массивтен алып тастау.
program Massiv;
label 1;
const n=10;
type marray=array[1..n] of integer;
var M:marray;
i,k:integer;
procedure Print(t:integer;a:marray);
var i:integer;
begin for i:=1 to t do write(m[i]:5);
writeln;
end;
begin writeln('*************************************************');
randomize;
writeln('Vvedim massiv sluchinim obrazom:');
for i:=1 to n do m[i]:= random(100);
print(n,M);
1: writeln('vvedite chislo k'); readln(k);
if k>n then begin writeln('takogo elementa v massive net');
goto 1;
end;
for i:=k to n-1 do m[i]:=m[i+1];
writeln('Obrabotanii Massiv:');
Print(n-1,M);
readln;
end.
№10-11 жұмыс
Тақырыбы: Функциямен жұмыс.
Тапсырмалар:
1. Санның цифрларының қосындысын тап.
2. Санның бірінші цифрын тап.
3. Санның бөлгіштерін тап.
4. А және В аралығындағы бөлгіштері көп сандарды шығар.
5. Санның барлық бөлгіштерінің қосындысын есепте.
6. А1,А2,...А15 берілген. А1+А2+...+А12 және А8+А9+...+А15 тауып және табылған қосындылардың көбейтіндісін табуға программа құр.
Берілген сан жай сан екенін анықта.
А және В аралығындағы жай сандарды анықта.
Берілген санның палиндром сан екенін анықтайтын программа жаз. (мысалы, 12721 саны — палиндром).
10. Санның автоморфты екенін анықтайтын программа құр. Яғни санның квадраты сол санның өзімен аяқталуы керек. Мысалы 6-36, 25-625.
11. Алдыңғы есепті пайдаланып А және В аралығындағы барлы автоморфты сандарды шығар.
әдебиет:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
1 мысал. Ол мына формула бойынша есептеледі.
п, k — енгізілетін сан, переменные для хранения введенных чисел; С — нәтижесі деп белгілейік. Сонымен қатар п!,
(п - k )!, k! есептеу керек.
п факториалды есептейтін фукнцияны жазамыз (п! = 1*2* ... *п).
Program Example;
Var n,k: Integer;
аА1, a2, а3, с: Longint;
Function factorial (n:Integer):Longint;
Var i: Integer;
rez: Longint;
Begin
rez:=1;
For i:=l To n Do rez:=rez*i;
factorial:=rez;
End;
Begin
Writeln ('Введите n и k для подсчета числа сочетаний из n no k ');
Readln(n,k);
al:= factorial (n); {n! есептеу}
a2:= factorial(k); {k! есептеу}
a3:= factorial(n-k);{(n-k)! есептеу}
c:=al Div (а2*аЗ); {нәтижесі}
Writeln(с);
Readln;
End.
2-мысал. Санның цифрларының санын анықтайтын функцияны жаз. Сол функцияны қолданып берілген санның цифрларының қайсысы үлкен екенін анықта.
Program Example;
Var nl, n2: Longint;
kl, k2: Byte;
Function Quantity(x: Longint): Byte;
Var k: Byte;
Begin
k:=0;
While x <> 0 Do
Begin
Inc(k);
x:=x Div 10;
End;
Quantity:=k;
End;
Begin
Writeln('Екі сан енгіз'); {сан енгізу}
Readln (nl, n2) ;
kl: = Quantity(nl); {бірінші санның цифрларының саны}
k2: = Quantity(n2); {екінші санның цифрларының саны}
{Санның цифрларының санын салыстыру}
If kl=k2 Then Writeln('цифрлар саны бірдейлер')
Else If kl>k2 Then Writeln(Бірінші санда цифр көп');
Else Writeln('екінші санда цифр көп’);
Readln;
End.
№12-13 жұмыс
Тақырыбы: Екіөлшемді массивпен жұмыс. Элементтермен жұмыс.
Тапсырмалар:
1. n ретті квадрат матрица берілген. bi=1 болатын b1, b2, …bn массивін тұрғызу керек. Қашан і-ші бағанда теріс сан кездескенше және bi=0 болғанша.
2. m*n өлшемді массив берілген. Ең үлкен элемент сол жақ жоғарғы бұрышта болатындай жол мен бағанды кері орналастыру арқылы,
3. Нақты m*n матрицасы берілген. Тиісті бағандар элементтерінің орташа арифметикалық элементтері ретінде анықталатын bi элементі b, векторын қалыптастырыңыз.
4. "Шабуыл алдында" тұрған тақтаның алаңын көрсететін және шахмат тақтайындағы ферзьдің бағытын сұрайтын программаны құру.
5. Бірдей өлшемдегі екі екіөлшемді массив берілді. Дәл сол өлшемдегі үшінші массивті құр. Бастапқы екі элементтерге тең үшінші массив элементтері берілген екі массивтің тиісті сомадағы элементі берілді.
6. А және В бірдей көлемдегі екі өлшемді массив берілді. 1 Әрбір элемент (True) тең С массивін құру керек, егер А және В сәйкес элементтерінің бірдей белгісі болса, онда элемент 0 (False) тең.
7. Арифметкалық төртбұрыштының экранға шығатын программасын құру керек, онда бірінші баған мен бірінші жол 1 (бірлік) толтырылған, ал қалған элемент жоғарыдағы және сол жақтағы өз көршісінің сомасына тең.
әдебиет:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
Бірінші тапсырмада бағандағы теріс элементтерінің санын табу қажет болмағандықтан, бірінші теріс элементті тапқаннан кейін осы бағанның өңдеуін үзуге болады және келесін өңдеуге көшуге болады.
Матрицаларды енгізуді ағыс түрімен ұйымдастыруға болады (Read). Матрицаның кез-келген жолын (Write) ағыс жолымен ұйымдастыруға болады, ал жолды енгізуді аяқтағаннан кейін (WriteLn) келесі жолға өтуді шақыру керек.
Тапсырмалар 1:
program LabRab06;
label 1;
const MaxN = 100;
var
A: array[1..MaxN, 1..MaxN] of Real;
B: array[1..MaxN] of Byte;
I, J, N: Integer;
begin
Write('Введите n - размерность матрицы: '); ReadLn(N);
WriteLn('Введите матрицу построчно:');
for I := 1 to N do
for J := 1 to N do
Read(A[I, J]);
Write('b =');
for J := 1 to N do {бағандар бойынша сыртқы циклды береміз}
begin
for I := 1 to N do
if A[I, J] < 0 then
begin
B[J] := 1; goto 1 {егер кездессе циклды үземіз}
end; {теріс элемент}
B[J] := 0; {егер циклдың барлық итерациясы орындалса, онда bj=0}
1: Write(' ', B[J])
end;
WriteLn
end.
Шешімді қарайқ. №4-тапсырмалар.
Шахмат тақтасын 8х8 көлеміндегі екі еселенген массив түрінде қарау ыңғайлы екенін байқаймыз. Ферьздің бағытын екі санмен енгізуге болады (жол саны және баған саны), бірақ шахматта әріп пен санды енгізу қалыптасқан.
әріп жолдың санына жауап береді, ал сан — бағанның нөміріне жауап береді. Сондықтан, дәстүрден ауыспай бағытты осындай жолмен енгіземіз. Программада енгізудің дұрыстығын тексереміз, және егер бәрі дұрыс болса, әріпті тиісті е санына ауыстырамыз. («а» — 1, «b»- 2, «с» — 3, «d» — 4, «е» — 5, «f» — 6, «g» — 7, «h» — 8), сонда жұмыс жасауға ыңғайлы болады.
Шешу үшін шахмат тақтайының келесі ерекшелігін білу керек. Барлық диагоналдар жоғары және төмен болып бөлінеді:
Жоғары Төмен
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Әрбір диагоналдың қасиеті:
Әрбір жоғары диагонал үшін жол нөмірі сомасы мен бағандар нөмірі тұрақты және түрлі диагоналдар үшін – түрлі, яғни i + j = const1;
Төменгі үшін – жол нөмірінің және баған нөмірінің түрлілігі — жол нөмірінің түрлілігі және баған нөмірі де тұрақты және түрлі диагональдар үшін – түрлі, яғгни - i - j = const2.
Бұл ерекшелікті ферзь қойылған диагоналдың нөмірін анықтау үшін ескеру қажет.
Program Example;
Const n=8;
Type dmyarray=Array[1..n,1. .n] Of Integer;
Var A: dmyarray;
c: Char; str, stl: Integer; {str жолдың нөмірі, stl – бағанның нөмірі}
Function Place(ch: Char): Integer;
Var k: Integer;
Begin
Case ch Of
'a': k:=l; 'b': k:=2; ‘c’: k:=3; ‘d’: k:=4;
'e': k:=5; 'f': k:=6; ‘g’: k:=7; ‘h’: k:=8;
End;
Place:=k;
End;
Procedure Init (k, l:Integer; Var x:dmyarray) ; {k – жол нөмірі, l – ферзь қойылған баған нөмірі)
Var i, j: Integer;
Begin
For i:=l To n Do
For j:=1 To n Do
{Егер біз жоғары диагоналдың тігінен немесе көлденеңінен тұрсақ, онда осы "шабуыл алдындағы" тор болады, сондықтан оны 1 белгілейміз, басқа жағдайларда - 0}
If (i=k) Or (j=l) Or (i+j=k+l) Or (i-j=k-l)
Then x[i,j]:=l Else x[i,jl=-0;
x[k,l]:=2; {бұл жерде ферзь тұр)
End;
Procedure Print (x: dmyarray);
Var i, J= integer;
Begin
For i:=l To n Do
Begin
For j:=l To n Do
Case x[i,j] of
0: Write ( ' ' : J) ;
1: Write ( '*' :3);
2: Write ('F':3);
End;
Writeln;
End;
End;
Begin
Writeln (' ферздің координаттарын енгізіңіз ');
Readln(c, st1);
If (c<’a’) Or (c>’h’) Or (st1<1) Or (st1>n)
Then Writeln ('түзу емес енгізу ‘)
Else Begin
str:= Place (c);
Init(str,stl,A);
Print(A);
End;
Readln;
End.
№14-15 жұмыс
Тақырыбы: Массивпен жұмыс. Массив элементтерін қою, жою, орнын алмастыру.
Тапсырмалар:
Барлық жолдың алдында 0 болса, бірінші жолды, ал теріс элементтері бар барлық бағандардан кейін бірінші бағанды қою керек.
Ең төменгі элементі бар бағанды алып тастау керек. Егер мұндай элемент бірнеше рет кездесетін болса, онда барлық бағандарды алып тастау керек.
k нөмірімен жолды және l. нөмірі бар бағанды алып тастау керек.
Нөлдік элементі жоқ барлық бағандарды алып тастау керек.
Жолында теріс элементтер тұрған барлық жолдар мен бағандарды алып тастау керек.
Екі еселенген жиымда жолдарды келесі ретпен қайта қоюға болады: соңғысымен біріншісін, екіншісін – соңғының алдындағы және бұдан әрі. Егер жолдар дақ сан болса, онда ортасы тұрақты болып қалады, әйтпесе орта жолдарды да ауыстырамыз.
Екі өлшемдік А массиві берілді. Оның бағандарын келесі тәртіппен орына қою керек:
а) соңғы, соңғының алдындағы, ..., екінші, бірінші;
б) бірінші, соңғы, екінші, соңғының алдындағы, үшінші, ....
Екі өлшемдік массив берілді. Бірінші жолдан бастап барлық жолдарды екі төменгі жолға ығыстыру, ал соңғы екеуін бірінші екі жолдың орнына орналастыру қажет.
k-то бағанынан бастап оларды артқа итеру керек, ал соңғы k орнына қою қажет.
k бағанынан бастап оларды алға қарай жылжыту керек, ал бірінші k соңғылардың орнына қоб қажет.
әдебиет:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
Массивтің ең жоғарғы элементін табуға және оның индексіне мынаны басшылыққа алу қажет:
элементтер қайталанғандықтан, бірінші ең жоғарғы индекстерді есте сақтайтын боламыз. Массив берілетін процедураны бейнелейміз және оның қорытындысы элементтің ең жоғарғы мағынасы және осындай мағынадағы бірінші кездесу индексі болып табылады.
Procedure Maximum(x: dmyarray; Var max, maxi, maxj: Integer);
Var i, j: Integer;
Begin
max:=x[1,1]; maxi:=l; maxj:=l; {бастапқы мән}
For i:=l To n Do
For j:=l To m Do If x[i,j]>max Then
Begin {жаңа мәндер беру}
max:=x[i,j];
maxi:=i; maxj:=j;
End;
End.
№16-17 жұмыс
Тақырыбы: Массивті өңдеу: спираль түрінде, седло, пила, квадраттар, тіктөртбұрыштар, мода, покер түрінде.
Тапсырмалар:
Теңдерді іздеу. А[1:2,1:15] массиві берілді Оның элементтері екі және өзара тең екі элементтері болатыны белгілі. Олардың индекстерін басып шығару керек.
X[1:m,1:n] массивінде барлық сандар түрлі болады. Әрбір жолда ең төменгі элемент бар, содан кейін осы сандар арасынан ең жоғарғы таңдалынады. Таңдалынған сан орналасқан Х массив жолының нөмірі басылады.
Спираль. п санын енгізу керек және екі өлшемдік массивті n x n сандарымен толтыру керек, 1, 2, ... спираль бойынша.
1. Нольдер сериясы. А[1: n] сандық массиві берілді. Нольге тең, массивтің қатар келе жатқан элементтерінің ең ұзын тізбегінің ұзындығын табу керек.
2. Ершік нүктесі. А[1:т, 1:п] сандық массиві берілді. Бұл массивтің кейбір элементін ершік нүктесі деп айтайық, Егер ол бір мезгілде өз жолында ең аз болса және өз бағанынынан ең көп болса. Қандай да бір ершік нүктесінің жолы мен бағанының нөмірлерін басу және егер мұндай нүкте болмаса, 0 санын басу керек.
Пила. Х[1:т] массиві берілді. Ең ұзын "аратектес (тістері жоғары қараған)" сандармен қатар келе жатқан бірізділік k ұзындығын табу:
X[p+1]<X[p+2]>X[p+3]<…>X[p+k].
Төртбұрыштар. А[1:т, 1:п], массиві берілді. 0, 1, 5 немесе 11 тең. A[i,j], A[i+1,j], A[i,j+1], A[i+1,j+1], әрқайсында барлық элементтер түрлі.
Тікұшбұрышты. 100*100 қағаздың төртбұрышты тор бетінде бірнеше тікбұрыштылар салынған. Әрбір тікбұрышты тұтас клеткалардан тұрады, түрлі тікұшбұрыштылар бірінің үстіне бірі салынбайды және жанаспайды.
17. Мода. А[1: n] сандық массивінде көп санды қайталайтын санды табу қажет. Егер мұндай сандар көп болса, онда оның біреуі:
18. Покер. Бес саннан тұратын массив берілді. Олардың ішінде:
егер бірдей 5, онда 1 санын салу, әйтпесе
егер бірдей 4, онда 2 санын салу, әйтпесе
егер бірдей 3 немесе 2, онда 3 санын салу, әйтпесе
егер бірдей 3, онда 4 санын салу, әйтпесе
егер бірдей 2 және 2, онда 5 санын салу, әйтпесе
егер бірдей 2, онда 6 санын салу, әйтпесе 7 санын басу керек.
әдебиет:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
№3-тапсырмалар шешімін қараймыз. Спираль орамын төрт тікбұрышты учаскелерге бөлеміз: солдан оңға қарай көлденең, жоғарыдан төмен қарай тігінен, оңнан солға қарай көлденеңнен және төменнен жоғары қарай тігінен. Программада олардың әрқайсысы бөлек толтырылады және бір учаскенің екіншісіне "соғысуы" пайдаланылады. Соңы k= п х п соңғы санның енуімен тексеріледі.
Program Pr_3;
CONST NN=19;
var i,j,k,n : integer;
A : array [1..NN,1..NN] of integer;
function MOV: boolean;
begin
MOV:=FALSE;
if k<=n*n then begin A[i,j]:=k; k:=k+l;
MOV:=TRUE
end
end;
BEGIN
write ('N: = ');
readln(n);
k:=l; i:=l; j:=l;
repeat
while MOV and (i+j<n+l) do j:=j+l;
k:=k-l;
while MOV and (i<j) do i:=i+l;
k:=k-l;
while MOV and (i+j>n+l) do j:=j-l;
k:=k-l;
while MOV and (i>j+l) do i:=i-l;
k:=k-l;
until k=n*n;
for i:=l to n do
begin
for j:=l to n do write(A[i,j]:4);
writeln
end
END.
Тапсырмалар №5 шешімі. Егер mi –ең кіші элемент болса, аij в строке i, a Mj — ең көп элемент, аij бағанда j, то mi < аij < Mj.
Бұл бірнеше ескертулер жасауға мүмкіндік береді:
а) ең кіші кез-келген жолда, яғни әрқашан mi < Mj,
б) егер қандай ма болмасын i и j үшін mi = Mj теңдігі орындалатын болады, онда ең жоғарғы кіші элемент ең төменгі көп элементпен сәйкес келеді, ал жолдарды қайта санауда i жолын j бағанымен ершік нүктесі тұрады: mi = аij= Mj.
в) Егер а у ершік болса, онда ол үшін соңғы шарттар орындалады және ең көп кіші ең төменгі көптікке тең.
Бұны программада іске асыру қалады. Әрбір жолда біз mi, бұл ең кіші арасынан i0 ең жоғарғыны таңдап аламыз. Жолдағы минимумды егер ол Ма ағымдағы мағынасынан кем болса, іздеуді тоқтату қажет.
Ма ең көп элемент табылған мағынаға тең баған ізделінеді, егер ондай баған болмаса, ершік нүктесі де жоқ. Шындығында біз программада егер бағанда үлкен Ма элементтері болмаса, онда баған а) тармағының ізделіп отыратын шамасы болады.
Осында ұғынысы баяндалған программа бая жұмыс жасайтынын атап өту қажет.
Program Рг_5;
const MM = 20; NN = 20;
label SI,BRI;
var m,n,i,j,i0,mi,ma : integer;
A : array [1..MM,1..NN] of integer;
BEGIN
writeln ('M,N:= ');
readln(m,n);
for i:=l to m do
for j:=1 to n do begin
writeln(‘A[‘,I,’,’,j,’]:=’);
readln(A[i,j] )
end;
for i:=l to m do
begin
for j:=1 to n do
begin
if (i>l) AND (A[i,j]<=ma) then goto SI;
if (j>l) OR (A(i,j]<mi) then mi:=A[i,j]
end;
ma:=mi; i0:=i;
SI: end;
for j:=1 to n do
begin
for i:=l to m do if A[i,j]>ma then goto BRI;
writeln (i0:3,j : 3);
exit;
BRI: end;
writeln(0)
END.
Решение Тапсырмалар №6.
Program Pr_6;
const MM=100;
var i,j,k,m : integer;
X : array [1.. MM] of real;
BEGIN
write ( 'M:=' );
readln (m) ;
for i:=l to m do readln (X [i] );
j:=l; k:=l; i:=l;
while i+Km do begin
if (X[i]<X[i+l] ) AND (X [i+1] >X [i+2] )
then begin if k<j then k:=j end
else begin if i+k>=m then i:=m-l; end
end;
writeln;
writeln (k)
END.
№9-тапсырмалар.
Бастапқы массивті реттеуге болады, содан кейін мағына жиілігін есептеп, жиі кездесетін мағынаны табу қажет. Жиілікті жазу үшін массивті бұраудың қажеті жоқ — ең жиі кездесетін үміткерді есте сақтаса болады және оның жиілігін қаралған элементтің табылған жиілігімен салыстыру қажет.
Егер қандай да бір себептермен реттеуден құтылу қажет болса, онда келесі түрде жасау керек: кезекті элемент A[i] (басында бұл — А[1]) одан кейінгімен салыстырылады.
Бұдан, біріншіден, A[i] мағынаның пайда болу жиілігі есептелінеді., екіншіден, A[j] элементтері A[i] тең келген A[i+ 1], A[i + 2], ... элементтері болады. А массиві аяғына дейін қаралғаннан кейін және k элементі жиілігі A[i\ анықталды, A[i + k] (а арасындағы элементі A[i] және A[i+k] өткізіледі) элементтің жиілігі анықталады. Бұл алгоритм тиімді көрінеді және т массивіндегі түрлі элементте т х п әрекетін талап етеді. Бірақ барлық элементтер түрлі болса, онда п х п әрекеті қажет болады.
Program Рг_9;
const NN = 100;
var n,m,am,i,j,k : integer;
A: array [1 . .NN] of integer;
BEGIN
write ('N:= ') ; readln (n) ;
for i:=l to n do readln (A[i] );
writeln;
m:=0; i:=l;
while i+m<=n do begin k:=l;
for j :=i+l to n do if A[j]=A[i] then
begin A[j] :=A[i+k] ; k:=k+l end;
if m<k then begin am:=A[i]; m:=k end;
end;
writeln (am)
END .
№18 жұмыс
Тақырыбы: Жиын. Ребус есептері.
Тапсырмалар:
Мәтін берілген. Мәтінде дауысты дыбыс көп пе, әлде дауыссыз дыбыс көп пе?
Осы 1 ден 50 ге дейінгі диапазоннан мағына массивінен
Фибоначчи санының және 1 немесе 2 бірінші цифра ондық жазуын санын табу керек.
Дауысты және дауыссыз әріптерді есептейтін және қандай әріптер көп екенін анықтайтын программаны жасау керек (дауысты және дауыссыз). Жола әріптен басқа басқа да символдар болуы мүмкін екенін ескеру қажет.
Олардың өзара тәртібін сақтай отырып, осы текстіге латын әрпінің барлық бірінші енуінің баспа программасын жасау керек.
"Эратосфен торы" тәсілін пайдалана отырып, [2 ... 201] аралығынан барлық қарапайым сандардың әріптік іздестіру программасын әзірлеу керек.
әдебиет:
1. Негізгі –5, 6, 8, 9, 10
2. Қосымша - 2
Әдістемелік нұсқау:
1-ші және 2-ші тапсырмада дауысты және дауыссыз дыбыстарды атаңыз, Фибоначчи санын және 1 немесе 2 бірінші цифрасымен көбейту конструкторымен әріптерді атаңыз. Циклда сол немесе басқа көптік элементінің барлығын және элементтер есептеуіштерін тексеріңіз.
Жолдық деректерді клавиатурадан немесе текстік файлдан сандық немесе ең соңында енгізілетін файл жолының санын енгізу керек.
2-тапсырмалар. Орындау үлгісі:
program Lab;
const MaxA = 10;
type
TElem = 1..50;
TM = set of TElem;
var
F, N: TM;
A: array[1..MaxA] of TElem;
I, SF, SN: Integer;
begin
F := [1, 2, 3, 5, 8, 13, 21, 34];
N := [1, 2, 10..29];
WriteLn('MaxA, ' массивінен енгізіңіз, 1 ден 50' ге дейін толық сан);
for I := 1 to MaxA do Read(A[I]);
SF := 0; SN := 0;
for I := 1 to MaxA do
begin
if A[I] in F then SF := SF + 1;
if A[I] in N then SN := SN + 1
end;
WriteLn ('Фибоначчи саны: ', SF,' бірінші цифр саны 1 немесе 2: ', SN)
end.
Мысал: Ребус
Шешім. Әрбір әріп — түрлі әріпке түрлі цифр сәйкес келетін цифра. Әріптерді тең теңдік болатындай етіп ауыстыру қажет.
ШЫБЫН
+ШЫБЫН
ПІЛ
Бұл шешімді табу үшін қайтаруы бар асып түсу тәсілі қолданылады. ШЫБЫН сөзі цифрды сақтау үшін SI көптігін қолданамыз, енгізілген цифрларды ескере отырып оған цифрды кезең-кезеңімен енгіземіз. Бастапқы мағына SI — бос. бірінші сөздің барлық цифрларын таңдағаннан кейін оның сандық эквивалентін және ПІЛ сөзінің сандық бейнесін жасаймыз. ПІЛ цифрларын белгілейміз (S2 көптігі) және сөздер түрлі цифрлардан тұрса (яғни S1 және S2 жолын кесу бос) және Пілдің барлық цифрлары түрлі (яғни көптеген цифрлардың жолын кесу бос), онда оны экранға шығарамаыз. Ал енді қайтару жүріп жатыр — S1 көптігінен соңғы енгізілген цифрды алып тастаймыз және оның тағы бір мағынасын тырысамыз. Осылайша, біз барлық мүмкін тәсілдерін қарастырамыз және экранға тек теңдікті қанағаттандыратын түрлерін шығарымыз.
ШЫБЫН сөзіндегі "М" әрпінің мағынасы 1 ден 4 ке дейін мағынасы болуы мүмкін ал осы сөздегі "А" әрпі 0 тең болмайтынын байқаймыз.
Program Example;
Type mn = Set Of 0..9;
Var m,y,x,a: 0..9; {ШЫБЫН санының цифры}
nl,n2: Integer; {ШЫБЫН және ПІЛ саны}
а1,а2,аЗ,а4: 0..9; {ПІЛ санының цифры}
s1, s2:mn; {әрбір санның цифрасын сақтау үшін}
Procedure Print(x,у:Integer); {ребус түріндегі шешімді шығару}
Begin
Writeln(x:5);
Writeln('+');
Writeln(x:5);
Writeln ( ' ____')
Writeln(y:5);
End;
Begin
sl:=[ ];s2:=[ ];
For m:=l To 4 Do
Begin
sl:=sl + [m]; {бірінші пайдаланылған цифраны кіргіземіз}
For y:=0 To 9 Do
If Not (y In s1) Then {егер бұл сан алынбаған болса, онда оны ШЫБЫН санының түрлі цифрасына қосамыз және келесі әріпке цифраны таңдаймыз}
Begin
sl:=sl+[y];
For x:=0 To 9 Do
If Not (x In s1) Then
Begin
sl:= s1 + [x];
For a:=l To 9 Do
If Not (a In s1) Then
Begin
s1:= sl+[a];
nl:= 1000*m+100*y+10*x+a; {ШЫБЫН сөзі үшін сан)
n2:=2*nl; {Піл сөзі үшін сан}
al: =n2 Div 1000; {Пілдің цифрларын көрсетеміз}
a2: =n2 Div 100 Mod 10;
a3: =n2 Div 10 Mod 10;
a4: =n2 Mod 10;
s2:=[al,а2,аЗ,а4]; {ПІЛдің цифрлар жиыны} {егер сөз әртүрлі сандардан тұрса және ПІЛ сөзінде бірдейлер жоқ, онда ребустың шешімін экранға шығарамыз}
If (sl*s2=[ ]) And ([а1]*[а2]*[аЗ]*[а4]=[ ]) Then Print(nl,n2);
sl:=sl-[a]; {енгізілген цифрды алып тастаймыз}
End;
sl:=sl-[x]; End;
sl:=sl-[y]; End;
si:=sl-[m]; End;
Readln;
End.
№19-20 жұмыс
