Студенттермен оқушыларды қолданбалы есептер шешу бағдарламаларын құруға үйрету жолдарының бірі қолданбалы есептер шешу. Қолданбалы есептерді кезеңдерге бөліп әрбір кезеңнің өз есебіне алгоритмдер және бағдарламалар құру. Құрылған бағдарламаларды біріктіріп берілген бас есепті шешу әдістерін үйрету. Алынған нәтижелердің дұрыстығын талдау.
Біз төменде бас есепті жеке кезеңдерге бөліп әрбір кезең үшін алгоритім және программа құрып құрылған программаларды бас есепті шешуге пайдалану әдісін қарастырамыз.
Бас есептің қойылуы. Берілген жазықтықта n — деңгей үшбұрыштары (Х[i,j],Y[i,j],Z[i,j]) i=1…n, j=1…3 координаталарымен берілген. Мүнда i – индексі ұшбұрыш номерін, j – индексі ұшбұрыш төбелерінің номерін көрсетеді. Осы деңгей үшбұрыш торабында квадрат торабының (xs[i,j],ys[i,j]), i =1…ns, j = 1…ms, түйін нүктелерінің zs[i,j] деңгей биіктігін табу талап етіледі (1-сурет). Мүнда i,j — түйін нүктелерінің сәйкес жол және баған индекстері.
Жоғарыда сипаталған бас есепті төмендегі кезеңдерге бөліп шешеміз. Мүнда (xs[i,j],ys[i,j]) түйін нүктелерінің әрбірін M(xt,yt) берілген нүкте деп аламыз. Осы M(xt,yt) нүкте үшін төмендегі есептеу жүмыстарын орындаймыз. M(xt,yt) координаталы нүктенің қайсы үшбұрышқа тиістілігін анықтаймыз. M(xt,yt) нүкте тиісті үшбұрышта M(xt,yt) нүктенің zt деңгей биіктігін анықтайтын координатасы табылсын.
Бұл берілген бас есепті шешу бағдарламасын құру үшін төмендегі алгоритмдерді құрамыз.
- M(xt,yt) нүктенің түзуге қатысты орналасуын анықтайтын алгоритм.
- M(xt,yt) нүктенің үшбұрышқа тиістілігін анықтайтын алгоритм.
- M(xt,yt) нүктенің берілген n – үшбұрыштардың қайсысына тиістілігін табу және M(хt,yt) берілген нүктенің деңгей биіктігін табылған деңгей үшбұрышымен аппроксимациялау алгоритмі.
Осы алгоритімдер мен олардың программалары төменде берілген.
- Нүктенің түзуге қатысты орналасуын анықтайтын алгоритм.
1есеп. Жазықтықта берілген M(xt, yt) нүктенің A(x1,y1) және B(x2,y2) екі нүктеден өтуші түзуге қатысты орналасуы анықталсын.
Шешу алгоритмі:
1-қадам. Берілген нүктенің xt, yt координаталарын енгізу.
Екі нүктеден өтуші түзудің x1 y1; x2 y2 координаталарын енгізу.
2-қадам. Екі нүктеден өтуші берілген түзудің теңдеуіне берілген нүктенің xt,yt координатасын қойып
өрнегін аламыз.
3-қадам. zt1 өрнектің мәні zt1>0 болса нүкте берілген түзуге қатысты жоғарыда орналасқан. Егер zt1<0 болса, берілген M(xt, yt) нүкте түзуге қатысты төмен орналасқан.
Егер zt1=0 болса онда нүкте түзу бойында орналасқан.
1-есеп бағдарламасының тексті.
program ntkoa;uses crt;
var xt,yt, x1, y1, x2, y2:real;
zt1: real;
begin clrscr;
write (‘xt, yt=’); read(xt,yt);
write (‘x1, y1, x2, y2=’ ); read (x1, y1, x2, y2);
zt1:= (yt-y1)*(x2-x1)-(xt-x1)*(y2-y1);
write (‘zt1=’, zt1:6:2);
if zt1>0thenwrite(’нүкте жазықтықтан жоғары орналасқан’);
if zt1=0 then write (‘нүкте түзу ойында орналасқан’);
if zt1< 0 then write (‘нүкте түзуден төменде орналасқан’);
readkey;
end.
Ескерту: Мұнда A(x1,y1), B(x2,y2) нүктелердің абсциссаларының х осьіне сәйкес өсуі бойынша енгіземіз, яғни солдан оңға қарай.
Егер A(x1,y1), B(x2,y2) нүктелердің координаталарын кері бағытта енгізсек zt1 мәні қарама-қарсы таңбаға ауысады.
2.Берілген нүктенің үшбұышқа тиістілігн анықтау алгоритімімен программасы.
2-есеп. Жазықтықта берліген M(xt, yt) нүктенің берілген ∆ABC-ға тиістілігін төбелерінің координаталары A(x1,y1), B(x2,y2), C(x3,y3) болғанда анықтау керек.
Шешу алгоритмі:
1-қадам. Берілген M(xt,yt) нүктенің xt,yt координаталарын және ABC үшбұрышының A(x1,y1), B(x2,y2), C(x3,y3) төбелерінің сәйкес (x1,y1),(x2,y2),(x3,y3)- координаталарын енгізу.
2-қадам . Берілген үшбұрыштың әрбір қабырғасына тиісті төбелерінің (x1,y1,x2,y2), (x2,y2,x3,y3) және (x3,y3,x1,y1) координаталарынан өтуші сәйкес өрнектерді түзу теңдеуінеxt,yt координаталарын қойып аламыз.
3-қадам. Егер zt1,zt2,zt3 мәндері бір таңбалы болса, онда берілген M(xt,yt) нүкте үшбұрышқа тиісті. Егер zt1,zt2,zt3 мәндерінің кез келген бірі нолге тең болса, онда берілген M(xt,yt) нүкте үшбұрыш қабырғаларының біріне тиісті.
Егер zt1,zt2,zt3 мәндерінің бір басқа таңбалы болса, онда берілген M(xt,yt)нүкте берілген ∆ABC-ға тиісті болмайды.
2-есеп бағдарламасының тексті.
program Nuta;uses crt;
label 1,2,3;
var xt,yt, x1, y1, x2, y2,x3,y3:real;
zt1,zt2,zt3: real;
begin clrscr;
write (‘xt, yt=’); read(xt,yt);
write (‘x1, y1, x2, y2,x3,y3=’ ); read (x1, y1, x2, y2,x3,y3);
zt1:= (yt-y1)*(x2-x1)-(xt-x1)*(y2-y1);
zt2:= (yt-y2)*(x3-x2)-(xt-x2)*(y3-y2);
zt3:= (yt-y3)*(x1-x3)-(xt-x3)*(y1-y3);
writeln (‘zt1=’, zt1:6:2);
writeln (‘zt2=’, zt2:6:2);
writeln (‘zt3=’, zt3:6:2);
readkey;
if (zt1>0)and (zt2>0)and(zt3>0) then goto 1;
if (zt1<0)and (zt2<0)and(zt3<0) then goto 1;
if (zt1=0)and (zt2=0)and(zt3=0) then goto 2;
write(‘nykte ushubrush sirtinda ‘); goto 3;
1: write(‘nykte ushubrush ishinde ‘); goto 3;
2: write(‘nykte ushubrush kabirgasinda ‘); goto 3;
3: readkey;
end.