Тармақталу және циклдық алгоритмдерді программалау
Сабақтың тақырыбы: Тармақталу және циклдық алгоритмдерді программалау
Сабақтың мақсаты:
а) білімділік: оқушылардың алған білімдерін арттыру, жүйелеу, блок-схема және программа құру практикалық білімдерін тексеру;
ә) дамытушылық: алған білімдерін практикада қолдана білуге, логикалық ойлау қабілеттерін дамыту;
б) тәрбиелік: шығармашылық білігін, танымдық қабілетін, өзі тұжырым жасауға, өзінің айтқанын дәлелдеуге тәрбиелеу.
Сабақтың типі: Іскерлік пен дағдыны қалыптасытру
Сабақтың түрі: Практикалық жұмыс
Сабақтың әдісі: Информатикадан есептер шығаруда проблемалық-іздену
Сабақтың техникалық құралы: Компьютер
Сабақтың жүрісі:
- Ұйымдасытру
1) Оқушыларды тексеру
2) Сабаққа дайындығын тексеру
- Өткен білімдерін тексеру
1) тармақталу алгоритмінің жазылуы, блок-схемасы, программада жазылуы
2) циклдық алгоритмдердің түрлері, жазылулары
- Жаттығу жұмыстары
№ 1 есеп: Оқушыларға бірінші мынандай есепті беремін: Үш берілген санның ең үлкенін табу. Тақтаға бірнеше үштік сандарды жазамын: мысалы, 568, 742,390.
Оқушылар олардың ішінен 742 атайды.
Енді мені сұрақ қоямын: «Осы санның үлкен екенін неліктен айтып отырсыңдар?»
Егер осы сұрақтарға жауап беруге қиналып отырса, онда мұғалім тарапынан көмектесу керек.
Сендер оны салыстырдыңдар ма?
Математика сабағынан сіздер олардың қалай салыстырар едіңдер:
Жауап: Олардың разрядына қарап, жүздік разрядтың ең үлкенін таңдаймыз. Егер жүздік разряд тең болған жағдайда ондық разрядты, т.с.с кете береді.
Шығатыны: Яғни, үлкен сан 742 болады.
Проблема: « Ал енді компьютер оларды қалай салыстырады?!
Оларды мынаған көңіл бөлгіземін, яғни ол машина тек қана екі санды салыстыра алатын ескертемін.
Олар әуелі екі санды салыстырып, сонда кейін үлкенімен үшінші салыстыруды айтады.
Мен оларға сол салыстырудың болк-схемасын дәптерлеріне салдыртамын. Осыдан кейін сол блок-схамаға қарап отырып, оларға программасын жаздыртамын. Олар өздіктерінен программа дайындайды.
Дайындаған программаларына берілген сандарды ендіртіп, программаның дұрыстығын тексертемін.
Проблема: Программа орындалу барысында А айнымалысының мәні өзгеруі мүмкін бе?
Ол қалай өзгереді? Жауаптарыңды түсіндіріңдер.
Шешуі:1. А және В сандарын салыстыру, одан олардан шыққан үлкенін С санымен салыстыру.
Program Max1;
Var A,B,C, max:real;
Begin
Writeln(‘A,B,C’); readln(A,B,C);
If A>B then max:=A else max:=b;
If C>max then max:=C;
Writeln(‘max=’,max);
End.
Мұғалім: Қалай ойласыңдар, осы есепті басқаша жолмен шешуге бола ма?
2 жолы: А саны үлкен бе екенін тексеріп, ол үлкен боламса В мен С салыстаруға бола ма?
If (A>B) and (A<C) then max:=A;
if B>C then max:=B else max:=C;
3 жолы: Оларды пар-парымен салыстыруға бола ма?
If (a>b) and (a>c) then max:=a;
If (b>a) and (b>c) then max:=b;
If (c>a) and (c>b) tneh max:=c;
Жоғарыда берілген жолдардың барлығы дұрыс екенін тексеру үшін программасын орындап тексереміз. Барлық нұсқаларын қарастыру керек. Әр оқушы өзінше құруы мүмкін: A>B>C, A>C>B, B>C>A, C>B>A, B>A>C, C>A>B.
Проблема: Осы программаны берілген сандардың өсу немесе кему ретімен орналастыратындай етіп жазуға бола ма?
Оқушылар өздерінің нұсқаларын ұсынады.
Сандарды кему ретімен орналастыру:
If (a>b) and (a>c) and (b>c) then writeln (a,’ ‘,b,’ ‘,c);
If (b>c) and (b>a) and (a>c) then writeln (b,’ ‘,a,’ ‘,c);
If (c>a) and (c>b) and (a>b) then writeln (c,’ ‘,a,’ ‘,b);
If (a>b) and (a>c) and (c>b) then writeln (a,’ ‘,c,’ ‘,b);
If (b>c) and (b>a) and (c>a) then writeln (b,’ ‘,c,’ ‘,a);
If (c>b) and (c>a) and (b>a) then writeln (c,’ ‘,b,’ ‘,a);
Ең үлкенін , ең кішісін , орта санын шығару программасы:
If a>b then max:=a else max:=b;
If C>max then max:=c;
If a<b then min:=a else min:=b;
If c<min then min:=c;
If (a>b) and (a<c) then sr:=a;
If (b>a) and (b<c) then sr:=b;
If (c>a) and (c<b) then sr:=c;
If (a>b) and (c<b) then sr:=b;
If (b>a) and (c<a) then sr:=a;
If (a>c) and (c<b) then sr:=c;
Writeln(‘max=’,max);
Writeln(‘min=’,min);
Writeln(‘sr=’,sr);
№ 2 есеп: Үш натурал сан берілген Олардың ортақ ең үлкен бөлгішін табыңдар.
Сұрақ: ЕҮОБ табудың қандай әдістері бар?
- сандарды жай сандардың көбейтіндісі түрінде жазу;
- Евклид алгоритмі;
- бүтін бөлу.
ЕҮОБ(48,36,24):
Оларды жай сандардың көбейтіндісі түрінде жазу:
48=2*2*2*2*3
36=2*2*3*3
24=2*2*2*3
Осыдан келіп ЕҮОБ(48,36,24)=2*2*3=12
x,y,z үш саны үшін қорытындылаңыз.
Проблема: ЕҮОБ алгоритмін табу үшін қандай білім мен білік керек?
Алгоритмді тұрғызу үшін, жасай білу керек:
- берілген сандардың жай бөлгіштерінің бәрін білу керек.
- Оларды сақтап, соларға қарау керек;
- Барлық бөлгіштерін сақтау керек;
- Олардың ішінен бірдейлерін шығару керек.
Осыдан талдау жасайық: Бұл жолды қолданып алгоритм құру қиын болып отыр.
Екінші әдіс – қайталанатын. Екі санның ЕҮОБ табудың Евклид алгоритмі.
Үшінші әдіс – бүтін бөлу.
Осыларды қолға ала отырып, есепті шешу алгоритмін жазайық:
- х және у натурал сандарын енгізу
- r – х-ті у-ке бөлгендегі қалдығы болсын;
- r нолге тең болса , онда у табамыз.
- Үйге тапсырмасын беру
Осы алгоритмдердің қайсысы ыңғайлы. Программасын дайындаңыздар.
Проблема: ЕҮОБ табу программасын қалай құрамыз?
Олар өздерінің құрған программаларының бірін көрсетейін:
Program NOD;
Var A,B,C,S:integer;
Begin readln(a,b,c);
Repeat
If a>b then a:=a mod b else b:=b mod a;
Until (a=0) or (b=0);
Writeln (‘NOD=’,a+b);
S:=a+b;
Repeat
If s>c then s:=s mod c else c:=c mod s;
Until (s=0) or (c=0);
Writeln( ‘NOD=’,s+c);
Readln;
End.