ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ
БIЛIМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛIГI
Қаныш Сәтбаев атындағы
ҚАЗАҚ ҰЛТТЫҚ ТЕХНИКАЛЫҚ УНИВЕРСИТЕТI
Ақпараттану және Ақпараттық Технoлогия Институты
Техникалық кибернетика кафедрасы
Программалау пәнi бойынша
КУРСТЫҚ ЖОБАҒА ТҮСIНIК
Тақырыбы:
“5 Ферзі”
Жетекшiсi оқытушы
____________________аты-жөнi
Бақылаушы
____________________аты-жөнi
“__” __________ 2004 ж
Студент Аширбаев Ж.П
Мамандығы 050704
Тобы ВПб-04-5Қ
Алматы 2004
Мазмұны
- Кiрiспе………………………………………………………………………………………………3
- Есептiң математикалық қойылымы…………………………………………………….6
- Есептi шығарудың тәсiлдерiн баяндау………………………………..………….…..7
3.1. Iздеу алгоритмдерi………………………………………………..………………..7
3.1.1. Сызықты iздеу…………………………………………..………………..7
3.1.2. Тосқауылы бар iздеу…………………………………………………..8
3.2.Сорттау алгоритмдерi……………………………………………………………….9
3.2.1. Таңдау арқылы сорттау………………………………………………..9
3.2.2. Айырбаспен сорттау (“көбiкше” тәсiлiмен)..………………10
- Алгоритмнiң негiзгi ойын баяндау…………………………………………………………..12
4.1. Қайталану операторлары…………………………………………………………….12
4.2. Графиктік режиммен жұмыс істеу……………………………………………….13
- Блок-схема……………………………………………………………………………………………..17
- Қолданылған техникалық жабдықтар………………………………………………………22
- Бағдарламаны шақыру және жүктеу………………………………………………………..22
- Есептi шығару алгоритмнiң программалық жазбасы (Паскаль тiлiнде)…….23
- Енгізілген мәліметтер……………………………………………………………………………..27
- Шығарылған мәліметтер……………………………………………………………………….27
- Қорытынды…………………………………………………………………………………………..27
- Пайдаланылған әдебиеттер тiзiмi…………………………………………………………..28
- Кiрiспе
Ойын деген – ойын сауық, демалыс, спорттық жарысқа негiзделген жұмыс түрi. Ойын адамның көңiлiн өсiрiп, ойын сергiтiп қана қоймай, сонымен қатар оның таным-түсiнiгiн арттырады.
Осындай ойындардың бірі – шахмат ойны!!!
Шашмат ойнын кім білмейді, бәрі біледі, кішкентайынан үлкеніне дейін. Бірақ айтып өткенім жөн. Бұл өте қызықты ойын өзінің бастауын Үндістаннан алады. Бұл ойынды сол жердегі ойшылдар махараджаларға арнап жасаған да оларға бұл ойын өте қатты ұнады. Содан бастап бұл ойынды тек қана махараджалар ғана ойнай алды, егер қарапайым адам оны ойнаса ол адам өлім жазасына кесілді. Себебі махараджалар шахмат ойнының арқасында үлкен қолбасшы болуға және соғыста шебер соғысуды үйренуге болады деп есептеді. Сөйтір егер біреулер бұл ойынды үйренсе олар менен асып түседі деп қауіптенде. Шынында да шахмат ойыны өте қызықты және ойлау қабілетін арттыратын ойындардың арасындағы ең күштімі және де көлемді. Шахматта шексіз санды бір – біріне ұқсамаған ойындар ойналу мүмкін. Бұл ойынның түбіне дейін жету мүмкін емес, тек қана жақсы ойыншы шығу үшін бұл ойынды көр ойнау керек оны үйрену керек, омен көп айналасу керек, қысқасы миді істету керек.
Осы шахматтың шығуының бір көп тараған хикаясы бар. Оған сенсек бұл ойынды шығарған адам оны мажараджаға сыйға тартады. Оған бұл ойын қатты ұнап ол бұл адамға сый тартқысы келеді, оған қалаған нәрсесін бермекші болады. Бірақ ол адам көп уақыт қарсы болады, сонда махараджа ренжиді сонда адам келіседі де өзінің тілегін айтады. Оның тілегі бойынша шахматтың 1-ші клеткасына 1 дана күріш салсын дейді, 2-сіне екі есе көп,…, сөйтіп әр клеткаға екі есе көбейте берсін және соңғы клеткаға жеткенде шыққын өнімді алайын дейді. Махараджа кідірместен, ойланбастан өзінің узірлеріне адамның қалауын орындауға бұйрық береді де бір аптадан олардан мәнісін сұрайды, сөйтсе олар санап бітпепті. Тағы да бір айдан ке»н сұраса, олар тағы да сондай жауап қайтарады. Ақыры бір жылдай уақыт өткенде сұраса, олар шамамен санап біттік те сізге жаубымызды айтайық дейді. Махараджа оларды тыңдауға келңседі. Сонда олар сенің қазынаңда бұл адамның тілеін беретіндей байлығың жоқ деп мәнісін түсіндіре бастайды. Егер сен барлық жерді жаулап алып сол жердің бәрін жыртып оғын күрішті 9 жыл бойында егіп өнімін жемей жинасаң онда сен бұл адамның тілеуін орындайсың деп жауап береді. Сонда махараджа ойланып қалады да өзінің қателігіне қайран қалады. Сонда сол адам махараджаға бұл тілегін оның бұл ойыны қандай қиын екенін, және онда қаншалықты көп әртүрлі жағдайлар болу мүмкіндігін көрсету үшін жасырғанын айтады. Сол кезден бастап бұл ойынды махараджаның рұқсатымен барлық адамдар ойнай алатын болды.
Қазіргі кезеңде шахмат ойыны биік шыңға жетті. Оны миллиондаған санды адамдар күнделікті ойнайды. Бұл ойын соншалықты зор – шахмат ойыны олимпичдалық ойындырдың біріне айналды. Шахматтан әлем чемпионаттары да, және де көптеген басқа, әртүрлі жарыстар өткізіледі. Бұл ойынды жақсы меңгерген жас өспірімдер әдетте сабақтан үздік болады. Және бұл ойын адамның болашағына көп – көп көмектеседі.
Жаңа технологиялардың дамуына байланысты компьютерлік шахматтар пайда болды және де енді шахматты Интернет жүйесі арқылы ойнауға болады.
Бұл шахматтың адам баласына қаншалықты маңызды екенін көрсетеді.
Шахмат тақтасы 8 × 8 клеткалы болып келеді. Оның екі жағында ақ және қара түсті екі қарсы жақ болады. Ойынның мақсаты қарсыласын жеңу немесе мат қою.
Негзінен алты түрлі фигуралар бар, олар: пешка, ат, піл, тура, ферзь және король.
Тақтайдың көрінісі келесідей.
|
Бұл тақтада 8 жол және 8 баған бар.
Жолдары: 1,2,3,4,5,6,7,8.
Бағандары: a,b,c,d,e,f,g,h.
Ал енді олар қалай жүреді? Пешка 1 қадам алға, піл диогональ бойынша, ат «Г» әрпі тәрізді, тура перпендикуляр немесе параллель,король жан – жағына бір клеткаға, ал ферзь болса піл және тура сияқты жүре алады. Сондықтан ол ең күшті фигура. Міне сол себепті біз өзіміздің курстық жұмысымызда осы ферздерге арналған программа құрамыз.
- Есептiң математикалық қойылымы
Бұл курстық жұмыста «5 Ферзі» тапсырмасы қарастырылған. Бұл ойын тек қана программа құру ғана емес және де графикалық режимді пайдаланып, оны экранда шығару-бұл деген сөз графикалық режиммен де жұмыс істей білу.
«5 Ферзінің » тапсырмасы виртуалды шахмат тоқтасында 5 ферзіні бір ферзі жейтіндей орналастыру. Және де осы көріністі графикалық режимді пайдаланып оны экранға шығару.
- Есептi шығарудың тәсiлдерiн баяндау
3.1. Iздеу алгоритмдерi
Iздеу алгоритмдерi мысалы массивте белгiлi қасиеттерi бар элементтердi табу үшiн қолданылады. Әдетте элементтiң алғашқы және соңғы кiрулерiн iздеудегi есеп берiлгендерiмен ажыратады. Төменде келтiрiлген барлық алгоритмдерде N бүтiн санды А массивiнде Х-қа тең элемент iздеу керек деп есептеледi.
3.1.1. Сызықты iздеу
Сызықты iздеу екi еселi шарты бар циклмен (while немесе repeat — until) орындалады. Бiрiншi шарт индекстiң массивке тиiстiлiгiн тексередi, мысалы, (i<=N). Екiншi шарт – бұл iздеудiң шарты. Бiздiң жағдайда while циклiнде бұл iздеудi жалғастыру шарты: (A[i]<>X), ал repeat – until циклiнде бұл iздеудi аяқтау шарты: (A[i]=X). Цикл денесiнде әдетте тек жалғыз оператор: массивтегi индекстiң өзгеруi ғана жазылады.
Циклдан шыққаннан кейiн қай шарт бойынша шыққанымызды тексеруiмiз керек. Әдетте if операторында циклдiң бiрiншi шартын қайталайды. Бұл шарт орындалуын while циклi жағдайында шарттың орындалуын, ал repeat – until циклiмен оның бұзылуы кезiнде сәттi iздеу деп айтуға болады.
Мысалы: Сызықты iздеу.
program Poisk1;
var A:array[1..100] of integer;
N, X, i:integer;
begin
read(N); {N<=100}
for i:=1 to N do
writeln(‘Массивтi енгiзiңiз’);
read(A[i]);
writeln(‘Iзделiнетiн санды енгiзiңiз’);
read(X);
i:=1; {i:=0;}
while (i<=N) and (A[i]<>X) do i:=i+1;
{repeat i:=i+1; until (i>N) or (A[i]=X);}
if i<=N then write(‘ A массивiне ‘, i,’ орында’, X ,’ санының бiрiншi кiруi ‘)
else write(‘тапқан жоқпыз’);
end.
Соңғы кiрудi iздеу кезiнде енгiзгеннен кейiн келесi операторлар жүру керек.
i:=N; {i:=N+1;}
while (i>=1) and (A[i]<>X) do i:=i-1;
{repeat i:=i-1; until (i<1) or (A[i]=X);}
if i>=1 then write(‘ A массивiне ‘, i,’ орында’, X ,’ санының соңғы кiруi ‘)
else write(‘тапқан жоқпыз’);
3.1.2. Тосқауылы бар iздеу
Тосқауылы бар iздеу әрбiр рет массив шекарасымен байланысқан циклдегi шартты iздей бермеу идеясынан тұрады. Бұны массивке тосқауыл орнату: iздеу шартын қанағаттандыратын кез-келген элемент орнату арқылы жүзеге асыруға болады. Бұл жағдайда индекстiң өзгеруiне шек қойылады.
Ендi тек iздеу шарты ғана қалып, табылған элементте немесе тосқауылда циклдан шығуға болады. Мұндай жағдайда циклдан шыққаннан кейiн бiз тосқауылды тапқан жоқ па екендiгi тексерiледi. Тосқауылы бар iздеудi есептеу қиындығы сызықтыға қарағанда төмен, бiрақ сондай тiзбектi өлшемiдi, N – массив элемент саны бар.
Тосқауылды орнатудың екi тәсiлi бар: қосымша элемент немесе массивтiң ең шеткi элементiнiң орнына.
Мысалы: Тосқауылы бар iздеу
program Poisk2a;
var A:array[1..101] of integer;
N,X,i:integer;
begin
read(N); {N<=100}
for i:=1 to N do
writeln(‘Массивтi енгiзiңiз’);
read(A[i]);
writeln(‘Iзделiнетiн санды енгiзiңiз’);
read(X);
A[N+1]:=X; {қосымша элемент арқылы тосқауыл қою}
i:=1; {i:=0;}
while A[i]<>X do i:=i+1;
{repeat i:=i+1; until A[i]=X;}
if i<=N then write(‘ A массивiне ‘, i,’ орында’, X ,’ санының бiрiншi кiруi ‘)
else write(‘тапқан жоқпыз’);
end.
program Poisk2b;
var A:array[1..100] of integer;
N,X,i,y:integer;
begin
read(N); {N<=100}
for i:=1 to N do read(A[i]);
read(X);
y:=A[N]; {соңғы элементтi сақтау}
A[N]:=X; {тосқауылды массивтiң соңғы орнына орнату}
i:=1; {i:=0;}
while A[i]<>X do i:=i+1;
{repeat i:=i+1; until A[i]=X;}
if (i<N) or (y=X) then
write(‘ A массивiне ‘, i,’ орында’, X ,’ санының бiрiншi кiруi ‘)
else write(‘тапқан жоқпыз’);
A[N]:=y; {массивтiң оңғы элементiн қалпына келтiру}
end.
3.2. Сорттау алгоритмдерi
Сорттаудың ең қарапайым есебi массив элементтерiнiң өсу не кему ретiмен орналастыру болып табылады. Басқа есеп болып, берiлген белгiлер бойынша массив элементтерiн реттеу. Әдетте мұндай белгi ретiнде аргументi массив элементтерi болып табылатын белгiлi функция мәнi болып табылады. Бұл функцияны реттеушi функция деп атау қабылданған.
Сорттаудың әр түрлi тәсiлдерi бар. Әрбiр тәсiлдi N бүтiн сандардан өспелi массивтi сорттау мысалында көрсетемiз.
3.2.1. Таңдау арқылы сорттау
Тәсiл идеясы массивтiң максималды элементiн тауып, оны соңғы элемент (N номерлi) орнымен ауыстырылады. Содан кейiн максималды элемент N-1 орынға дейiн iзделiп, сол N-1 орынға қойылады және т.с.с. Максимум емес, минимум элемент iзделiп, оны бiрiншi, екiншi және т.с.с. орынға қоюға болады. Сонымен қатар бұл әдiстiң модификацияланған түрi – бiр мезетте максимум және минимум элементтердi iздеу қолданылады. Бұл жағдайда сыртқы циклдың қадамдар саны N div 2.
Таңдау арқылы сорттаудың есептеу қиындығы — N*N шамасының өлшемi, әдетте оны O(N*N) деп жазады. Бұл салыстырулар саны бiрiншi максимумды iздегенде N-1-ге тең, содан кейiн N-2, N-3 және т.с.с. 1-ге дейiн, соымен N*(N-1)/2 болумен түсiндiрiледi.
Мысалы: А массивiнiң N бүтiн сандарының өсуi бойынша таңдау арқылы сорттау.
program Sort_Vybor1;
var A:array[1..100] of integer;
N,i,m,k,x : integer;
begin
write(‘Массив элементтерiнiң саны’);
read(N);
for i:=1 to n do
writeln(‘Массивтi енгiзiңiз’);
read(A[i]);
for k:=n downto 2 do { k – max-ты iздеуге қажеттi элементтер саны }
begin
m:=1; { m — max орны}
for i:=2 to k do if A[i]>A[m] then m:=i;
{ m және k номерлi элементтердi орындарымен ауыстырамыз}
x:=A[m]; A[m]:=A[k]; A[k]:=x;
end;
for i:=1 to n do write(A[i],’ ‘); {реттелген массив}
end.
Мысалы: Жоғарыдағы есеп, бiрақ бiр мезеттегi max пен min таңдау арқылы.
program Sort_Vybor2;
var A:array[1..100] of integer;
N,i,m,k,x,p : integer;
begin
write(‘Массив элементтерiнiң саны’);
read(N);
for i:=1 to n do
writeln(‘Массивтi енгiзiңiз’);
read(A[i]);
for k:=1 to n div 2 do { k — max және min жұбының орны }
begin
m:=k; { m — max орны }
p:=k; { p – min орны }
{max және min k-дан n-k+1 элементтер арасында iзделедi }
for i:=k+1 to n-k+1 do
if A[i]>A[m] then m:=i
else if A[i]<A[p] then p:=i;
{ p және k номерлi элементтердi орындарымен ауыстырамыз }
x:=A[p]; A[p]:=A[k]; A[k]:=x;
if m=k then m:=p;
{егер max k орында тұрса, ендi ол p орында тұр }
{ m және n-k+1 номерлi элементтердi орындарымен ауыстырамыз }
x:=A[m]; A[m]:=A[n-k+1]; A[n-k+1]:=x;
end;
for i:=1 to n do write(A[i],’ ‘); {реттелген массив}
end.
3.2.2. Айырбаспен сорттау (“көбiкше” тәсiлiмен)
Тәлiл идеясы рет бойынша массивтiң көршiлес жұптары тексерiлуiнде құрылған. Егер олар олар керектi реттiлiкте болмаса, онда көршiлес элементтер жұбын орындарымен ауыстырамыз. Мұндай бiр өтуден кейiн N номерi орынында максимал элемент орналасады (бiрiншi көбiкше “қалқып” шықты). Келесi өту N-1 элементке дейiн қарастыру керек және т.с.с. Барлығы N-1 өту қажет болады. Айырбаспен сорттаудың есептеу қиындығы O(N*N).
Мысалы: А массивiнiң N бүтiн сандарының өсуi бойынша айырбаспен сорттау. (Негiзгi вариант)
program Sort_Obmen1;
var A:array[1..100] of integer;
N,i,k,x : integer;
begin
write(‘Массив элементтерiнiң саны’);
read(N);
for i:=1 to n do
writeln(‘Массивтi енгiзiңiз’);
read(A[i]);
for k:=n-1 downto 1 do { k – салыстырылатын жұптар саны }
for i:=1 to k do
if A[i]>A[i+1] then
{көршiлес элементтердi орындарымен ауыстырамыз}
begin x:=A[i]; A[i]:=A[i+1]; A[i+1]:=x; end;
for i:=1 to n do write(A[i],’ ‘); {реттелген массив}
end.
- Алгоритмнiң негiзгi ойын баяндау
Бұл бағдарлама негiзiнен бiрнеше функция мен процедура, шартты операторлардан,графиктік функция мен процедураларданқұралған. Әрқайсысын бөлек-бөлек қарастырайық.
Қайталану командалары
Программаның белгілі бір бөлігінің орындалуын бірнеше рет қайталану үшін қолданылатын командаларды қайталану командалары деп атайды. Көптеген есептеулерде айнымалылардың әртүрлі мәндері үшін кейбір операторлар бірнеше рет қайталанып орындауды қажет етеді.Программалық текстер қықа әрі оқуға ыңғайлы болуы үшін қайталану процесін циклдік операторлар қолданып ұйымдастырады.
Түрлері:
- For – параметрлі циклдік оператор;
- While – алдын – ала циклдің орындалу шартын тексеретін оператор;
- Repeat – соңында циклдің тоқтау шартын тексеретін оператор;
For циклдік операторы (Үшін циклі).
Параметрлі циклдік операторлар цикл денесінің қайталануы алдын – ала белгілі болғанда қолданылады. Жалпы жазылу түрі төмендегідей:
For K:=M to N do
Цикл денесі;
Бұндағы: К – циклдік айнымалы (есептеуіш), әр цикл орындалғанда K – ға 1 қосылыптұрады. M – K айнымалысының алғашқы мәні. N – K айнымалысының соңғы мәні.
Мысалы: Экранға X – тің барлық 1-ден 100-ге дейінгі бүтін мәндері үшін Y=(x*x)-50*x-30 — өрнегінің шығару программмасы.
Program Tend;
Var x:byte; y:longint;
Begin for x:=1 to 100 do
Begin y:=SQR(x)+50*x-30;
Writeln(‘y=’,y); end;
Readln
End.
Repeat…Until циклдік операторы (Дуйін циклі).
Бұл оператор да While операторы сияқты қайталану саны алдын – ала белгісіз болған жағдайлара қолданылады. Оның While-дан айырмашылығы циклді орындау шарты цикл денесінен кейін тексеріледі. Цикл денесі жай немесе құрама операторы болцы мүмкін. Ондағы операторлар repeat және while қызметші сөздерінің арасында орналасқандықтан, цикл денесі операторлық жақшаларға алынбай жазылады.Жазылу түрі:
Repeat
Цикл денесі;
Until шарт;
Until операторында жазылған шарт орындалмағанға дейін цикл денесінің орындалуы қайталанып тұрады. Егер ондағы шарт орындалса, онда қайталану процесі тоқтап, басқару цикл денесінен кейін тұрған операторға беріледі. Шарттағы есептеуіш параметр мәні циклде дейін беріліп, оның жаңа мәнінің өсімі цикл денесінде беріледі.
Мысалы: s=1+2+3+4+5 қатарын есептеу программасын құру.
Program Summa;
Var s,k:intrger;
Begin s:=0; k:=1;
Repeat
S:=s+k;
K:=k+1;
Until K>5;
Writeln (‘s=’,s);
Readln
End.
Графиктік режиммен жұмыс істеу
Компьютердің мониторы нүктелердің (пиксельдардың) жиынтығынан тұрады. Ал символдарды нүктелердің жиынтығы құрайтыны алдыңғы тарауда қарастырылды. Егер тиісті режимде тек символдармен ғана жұмыс жасалса, графиктік режимде әрбір нүктелермен жұмыс жасауға болады. Мысалы текстік режимде символдар түсін өзгертуге болатын болса, графиктік режимде әрбір нүктенің түсін немесе нүктелерден құралған әртүрлі фигуралар мен текстердің түстерін әртүрлі қылып шығаруға болады. Компьютердің графиктік режимдегі жұмысы монитор мен оның видеоадаптерімен тығыз байланысты. Монитор кәдімгі телевизор секілді жұмыс істейді. Экрандағы бейнелер секундына 25 рет жоқ болып кетіп қайта құралады. Адамның көзі мұндай кадрлардың тез ауыстырылып жатқанын сезбейтіндіктен, оған экрандағы бейне бір орында тұрғандай болып әсер етеді.
Графиктік режимде экранға бейнелер шығару үшін координаталр жүйесі қолданылады. Бейнелерді құрайтын нүктелер экранда қатарлар бойынша реттеліп орналасатындықтан, бір қатардағы нүктелер Х осі бойынша солдан оңға қарай өзгереді деп, ал қатарлар — Y осі бойынша жоғарыдан төмен қарай өзгереді деп алынады. Нүктелердің басы ретінде экранның сол жақ жоғарғы бұрышынан x=0 және y=0 деп алынады. Ал барлық қатарлар (MaxY) мен ондағы орналасқан нүктелер саны (MaxX) видеоадаптердің типі мен оның жұмыс режиміне байланысты болады.
Turbo Pascal – да графиктік режимде жұмыс істеуге арналған арнаулы функциялар мен процедуралар GRAPH модулі 80-ге жуық графиктік функциялар мен процедуралардан және оншақты стандартты тұрақтылардын тұрады. Оларды текстік режимде пайдалану үшін программаның басында келесі амалдар орындау қажет:
- USES қызметші сөзінде GRAPH модулі жазылады; USES GRAPH
- Графиктік режим орнатылады:
Var d1, d2 : integer;
Begin d1:=Detect; InitGraph(d1, d2, ‘C:\Turbo\Graph’);
Мұндағы: InitGraph – графикалық режимді орнату процедурасы, d1- графиктік режим драйверінің типін, d2 – видеоадаптердің жұмыс режимінің нөмірін анықтайтын тұрақтылар. Бұл шамалар монитор мен видеоадаптер типтеріне байланысты болады. Егер программада графиктік режим драйверінің типіне Detect стандартты тұрақты шамасы берілсе, онда InitGraph процедурасы автоматты түрде өзіне керекті графиктік драйвердің типін және монитор мен видеоадаптердің типтеріне сәйкес келетін графиктік жұмыс режимін анықтап алады. Апострофтардың ішінде орналасқын үшінші параметр Graph.tpu файлының дискіде орналасқан жолын көрсетеді. Егер ол Turbo Pascal терезесін ашқан Turbo.exe файылымен бірге каталогта орналасатын болса, жол орнына іші бос екі апостроф қойылып кетеді.
Экранды басқаратын процедуралар мен функциялар
Экранның фоны Setbkcolor процедурасының көмегімен орнатылады, жазылуы:
Setbkcolor (C);
Мұндағы: C – түс коды 0-ден 15-ке дейін өзгереді (түс кодтарының шкаласы алдыңғы тарауда берілген)
Процедураның орныдалу нәтижесінде экран C нөмірлі түске боялып шығады. Бұл процедурамен орнатылған түс кодының мәнін Getbkcolor процедурасының көмегімен анықтауға болады.
Экрандағы барлық салынған графиктік обьектілерді өшіріп тастау үшін параметрсіз ClearDevice процедурасы қолданылады. Бұл процедураның орындалу нәтижесінде графиктік режимде орнатылған барлық параметрлер (фон түсі, курсор орны, терезелер т.б.) күшін жойып, экран тазарып курсор қайтадан координаталары (0,0) болатын экранның сол жақ жоғарғы бұрышындағы нүктеге апарылады.
Графикалық режимнің көзге көрінбейтін сілтеме – көрсеткіш курсоры болады. Курсорды басқару үшін Moveto және Moverel процедуралары қолданылады. Moveto процедурасы курсорды координаттары өзінде көрсетілген орынға апарып қояды, мысалы:
Moveto(x,y); //курсорды A(x,y) нүктесіне апарып қояды.
Графикалық режимнен шығу үшін параметсіз CloseGraph процедурасы қолданылады. Бұл процедураның орындалу нәтижесінде компьютердің жадынан орнатылған графиктік режим драйверлері тазаланып , экранның графиктік режим орнатылар алдындағы жұмыс режимі орнайды, мысалы:
………………………….; CloseGraph End
- Random – функциясы. Бұл функцияның негiзгi атқаратын қызметi – ол компьютердiң белгілі бір позицияны сұрайды. Функция шахматты тақтада белгілі бір шартпен бір позицияны жасырады. Ол позиция бойынша сол тақтада бес ферзіні бір ферзі жейтіндей орналастыратын программа құрып оны экранға шығару, сонымен осы тапсырманы орындау барысында бiрнеше шарт қойылады және тексерiледi:
а) бұлар міндетті түрде ферздер болу керек;
ә) олар тақтада орналасқанда олардың біреуі қалғандарын міндетті түрде ұру керек;
б) және де бұл программаның дұрысы нәтижесінде оны графикалық режим арқылы экранға шығарып дұрыс көрсету керек.
- PrintText – процедурасы. Процедураның негiзiнен атқаратын қызметi – келесi процедурада келтiрiлетiн көмек, ескертулердi экранның төменгi жағындағы қызыл жолақшада мәтiн түрiнде келтiру.
- Zastavka – процедурасы. Бұл роцедура программаның бет-келбетiн, яғни заставкасын келтiредi, ойынды безендiредi. Процедура негiзiнен CRT, GRAPH модульдерiнiң (кiтапханаларының) мүмкiншiлiктерiне негiзделген. Экранның қақ ортасында ойынның аты берiлген және ол қалған сөздерден айрықша үлкен қарптермен берiлген және оның түсi белгiлi уақыт аралығында өзгерiп отырады. Әрине жоғарғы және төменгi жағында кiшi қарiптермен, әр түрлi түстi қосымша ойынға байланысы сөйлемдер келтiрiлген. Берiлген сөйлемдер қара экран бетiнде әр жерiнен түрлi-түстi жұлдыздар өшiп-жанған фонында және экранның шетттерi арнайы көгiлдiр түстi оюы бар шекарамен қоршалған. Мұның барлығы компьютердiң жүйелiк динамигiнен шыққан дыбысымен бiрге берiледi.
- ReadPlayerDigits –процедурасы. Бұл процедураның негiзгi атқаратын қызметi – мән енгiзу мүмкiндiгiн беру және осы сандарды тексеру. Ойыншы сан енгiген кезде процедура PrintText процедурасының көмегiмен ойыншыға нұсқаулар берiп отырады. Нұсқаудың шығуының бiрнеше шарты бар. Олар:
а) шахматтана координаталарын беру арқылы көріністі алуға шақырады;
ә) егер енгiзiлген координаталары дұрыс болса, ойыншы бұл жайында хабар алады;
б) егер енгiзiлген координаталр дұрыс емес болса, ойыншыға бұл координаталары дұрыс емес екендiгi жайында хабар берiледi.
Сонымен қатар бұл процедура келесi жұмысты атқара алады:
а) егер ойыншы ойыннан шыққысы келсе, “end” сөзiн терсе жеткiлiктi;
- Бағдарламаның негiзгi денесi. Бағдарлама ойынның негiзгi шарттарын ойыншыға жеткiзедi, жоғарыдағы аталған функция мен процедураларды қолданады. Сонымен қатар ойыншының атын енгiзуге мүмкiндiк бередi, оған ойынның барысында координаталарының енгізуінде қанша позициясы дұрыс болғанын жайында мәлімет береді . Егер ойыншы жеңген болса, оны құттықтап, қайтадан бастағысы келетiндiгi жайында сұрайды.
6.Setcolor – графиктік фигуралардың тісн орнату үшін қолданылатын процедура,жалпы түрі:
Setcolor (C); C – палитрадағы түс коды 0-ден 15-не дейін өзгереді.
7.Line – түзу салу үшін қолданылады. Сондай – ақ түзу салу үшін Lineto және Linerel процедуралары қолданылады. Жазылуы:
Line (x1,y1,x2,y2);
8.Bar – экранда боялған тік төртбұрыш салу үшін қолданылады. Жазылуы:
Bar (x1,y1,x2,y2);
Процедураның орындалу нәтижесінде экранда сол жақ жоғарғы бұрышының координаттары x1,y1 болатын, алдына орнатылған фигураны бояумен толтыру стиліндегі параметрелерімен боялған тік төртбұрыш шығады.
- Setlinestyle – түзулерді әртүрлі стильдерде шығару үшін қолданылады. Жазылуы:
Setlinestyle (L,T,p);
Мұндағы:
L – Түзу стильдері;
P – Түзу үлгісі , егер түзі стильдері стандартты болса, P=0, түзу стилін пайдаланушының өзі берсе, P=4 деп қабылданады.
T – Түзудің қалыңдығы, егер түзу қалыңдығы қалыпты болса, онда T=1, ал түзу қалыңдығы жуан болса T=3 деп қабылданады.
- Блок-схема
|
||||||||||||||||||||||||||||||||
- Қолданылған техникалық жабдықтар
Процессор – Intel Celeron 333 Mhz
Монитор – Samsung SyncMaster 450b
ЖЕСҚ – 320 Mb
Бейнеадаптер – 128Mb
Принтер – HP DeskJet 930 C
- 7. Программаны шақыру мен жүктеу
- Жұмысқа кiрiспес бұрын, компьютердi ток көзiне қосып жүктеймiз. Содан кейiн Windows операциялық жүйесiнен бiзге қажет Turbo Pascal 7.x Borland Pascal 7.x интегралды бағдарламалау ортасына енемiз.
F3 пернесiн басып, бiзге қажеттi файлды ашамыз. Егер ешқандай қате болмаса, онда Ctrl+F9 пернелерiн басып, бағдарламаны жүктеймiз. Ойнап болған соң Alt+X пернелерiн басып, бағдарламадан шығамыз. Ойынды қосудың басқа жолы ол [ойын файлының аты].exe файлын жүктеу арқылы да жүзеге асыруға болады.
- Жұмысқа кiрiспес бұрын, компьютердi ток көзiне қосып жүктеймiз. Содан кейiн Windows операциялық жүйесiнен бiзге қажет Turbo C++ 3.0 интегралды бағдарламалау ортасына енемiз.
F3 пернесiн басып, бiзге қажеттi файлды ашамыз. Егер ешқандай қате болмаса, онда Ctrl+F9 пернелерiн басып, бағдарламаны жүктеймiз. Ойнап болған соң Alt+X пернелерiн басып, бағдарламадан шығамыз. Ойынды қосудың басқа жолы ол [ойын файлының аты].exe файлын жүктеу арқылы да жүзеге асыруға болады.
8. Есептi шығару алгоритмнiң программалық жазбасы (Паскаль тiлiнде)
- Uses Crt,Graph;
- Var
- X : Array[1..8,1..8]Of Integer;
- A,B,C,D,Gs,Gm,Z,i: Integer;
- S : String;
- Test : Boolean;
- Ch : Char;
- Procedure konez;
- begin
- Setfillstyle(solidfill,0);
- Bar(0, 0, 640, 480);
- Setcolor(yellow);
- SetTextStyle(DefaultFont, HorizDir, 2);
- Outtextxy(40,50,’Орындаған: КазНТУ университетінің, Впб-04-5к тобы студенті Аширбаев Ж.П’);
- Outtextxy(40,150,’ойларыңызды Shokhan@mail.ru – ге жіберіңіз’);
- Outtextxy(40,250,’Қабылдаған:Кенжалиева’);
- Outtextxy(180,350,’Алматы 2004′);
- SetTextStyle(2, HorizDir, 2);
- Outtextxy(180,450,’Шығу үшін <ENTER>-ді басыңыз’);
- Readln;
- end;
- Function KOR( Y : Integer):Integer;
- Var W,I,J,a,b,c,k : Integer;
- Begin
- If Y=0 Then
- Begin
- KOR:=0;
- Test:=True;
- For I:=1 To 8 Do
- For J:=1 To 8 Do
- If X[I,J]=0 Then Test:=False;
- End;
- Else
- For I:=1 To 8 Do
- For J:=1 To 8 Do
- If X[I,J]<6 Then
- Begin
- X[I,J]:=X[I,J]+6;
- For W:=1 To 8 Do
- Begin
- X[W,J]:=X[W,J]+1;
- X[I,W]:=X[I,W]+1;
- End;
- {bas}
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]+1;
- a:=A-1;B:=B-1;
- Until (A<1)or(B<1);
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]+1;
- a:=A+1;B:=B+1;
- Until (A>8)or(B>8);
- {kos}
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]+1;
- a:=A-1;B:=B+1;
- Until (A<1)or(B>8);
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]+1;
- a:=A+1;B:=B-1;
- Until (A>8)or(B<1);
- TT:=TT(Y-1);
- If Not Test Then
- Begin
- X[I,J]:=X[I,J]-6;
- For W:=1 To 8 Do
- Begin
- X[W,J]:=X[W,J]-1;
- X[I,W]:=X[I,W]-1;
- End;
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]-1;
- a:=A-1;B:=B-1;
- Until (A<1)or(B<1);
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]-1;
- a:=A+1;B:=B+1;
- Until (A>8)or(B>8);
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]-1;
- a:=A-1;B:=B+1;
- Until (A<1)or(B>8);
- a:=i;b:=j;
- Repeat
- X[a,b]:=X[A,B]-1;
- a:=A+1;B:=B-1;
- Until (A>8)or(B<1);
- End
- Else
- Begin
- For a:=1 To 8 Do
- For b:=1 To 8 Do
- Begin
- SetColor(2);
- SetTextStyle(1,0,2);
- D:=0;Z:=0;
- For Ch:=’A’ To ‘H’ Do
- Begin
- D:=D+30;
- OutTextXy(55+D,50,Ch);
- Inc(Z);
- Str(Z,S);
- OutTextXy(60,50+D,S);
- End;
- If odd(a-b) Then
- SetFillStyle(1,15)
- Else
- SetFillstyle(1,1);
- Bar(b*30+50,a*30+50,b*30+80,a*30+80);
- SetColor(2);SetTextStyle(1,0,2);
- If X[a,b]>=10 Then
- OutTextXy(b*30+60,a*30+55,’F’);
- End;
- I:=8;J:=8;
- End;
- End;
- End;
- Begin
- Gs:=Detect;InitGraph(Gs,Gm,’A:\Bgi’);
- KOR(5);
- i:=1;
- repeat begin
- Setcolor(i);
- SetTextStyle(DefaultFont, HorizDir, 2);
- outtextxy(400,50,’5 ферзі’);
- SetTextStyle(2, HorizDir, 2);
- outtextxy(200,400,’Шығу үшін кез-келген пернені басыңыз’);
- i:=i+1;
- end;
- until keypressed;
- konez;
- ReadLn;
- CloseGraph;
- 9. Енгізілген мәліметтер
Ойынның барысында берілген фигуралардың координаталары беріліп, осының нәтижесін экранда көруге болады.
10.Шығарылған мәліметтер
Енгізілген мәліметтердің арқасында компютер программа бойынша сол фигураларды шахмат тақтасында берілген координаталары бойынша орналастырады да осы көріністі экранға шығарады.
- 11. Қорытынды
Осы курстық жобада жазылған программаның негізгі мақсаты ыңғайлы және интерактивті анықтама құру. Программаны жазу үшін теориялық тұрғыдан сұрыптау мен іздеудің бірнеше түрлерін қарастырып, сонымен қатар қазіргі соңғы жаңалықтарды біліп, графиканың мүмкіндіктерімен танысып өттім. Мысалы: Хоар тәсілі,пузырёк тәсілі және бинарлық іздеу тәсілі және кез-келген көріністі экранда бейнелеу. Құрылған анықтамадан сіз қажет программаларды жаза аласыз және оны графикалық режим арқылы оны экранға шығарып нәтижесін көре аласыз.. Анықтама көрнекті болу үшін оған заставка жасалған. Ал, программаның өзіне келетін болсақ, программа Turbo Pascal және Turbo C программалау тілдерінде жазылған. Программа жазу барысында Turbo Pascal программалау тілінің файл типін тағы бір қайталап өттім, яғни 1 курстағы тақырыптарды қайта саралап шықтым деуге болады. Turbo Pascal тілінде программаны жазу кішкене қиынырақ болды деп айталамын, себебі бұл тілде жазылған программа операторлары біршама көп шамемен 140 оператордай болды. Ал есептің қойылымына оралатын болсақ, бұл мағынасы жағынан өте тиімді және қажетті екенін ұмытпағанымыз жөн, себебі осы есепке жазылған программаны одан әрі дамытуға болады. Және оны көптеген жағдайларда қолдануға болады. Жалпы осы курстық жобадан алған тәжірибемнің орасан зор екендігін атап өткім келеді.
- Пайдаланылған әдебиеттер тiзiмi
- Шелест В. Программирование. – Санкт-Петербург, BHV, 2001.
- Роджерс Д. Алгоритмические основы машинной графики. – Москва, “Мир”, 1989.
- Вирт Н. Алгоритмы + структуры данных = программы. – Москва, “Мир”, 1985.
- Вирт Н. Алгоритмы и структуры данных. – Москва, “Мир”, 1989.
- Лахтин А.С., Искакова Л.Ю. Языки и технология программирования. Начальный курс. Учеб. пособие. Екатеринбург, 1998.
- Бондарев В.М., Гублинский В.И., Качко Е.Г. Основа програмирования – Ростов Н/Д: Феникс,
- Турбо Паскаль 7.0 – К.: торгово – издательское бюро BHV, 1996 – 448с.: ил. Т. Рюттяна.
- Фаронов В.В. Turbo Pascal 7.0. Начальный курс. – Москва, “Нолидж”, 2001.
- Н.Ы. Омарова, К.У. Тұрмағамбетова, К.Н. Нүриденова. Паскаль тiлiнде программалау негiздерi. Алматы, “Бiлiм”, 1996.
- Шаметов Ералы Бақтайұлы. Паскаль тiлiн үйренейiк. Шымкент, 1993.
- Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль.
М.: Наука, 1988.
- Х.М. Дейтел, П.Дж. Дейтел. Как программировать на С++. Москва,
“Бином”, 2000.
- Программирование на С и С++ для Windows 95. Киев, BHV, 1996.
- «Язык программирования для персонального компьютера Си»,
© С.О. Бочков, Д.М. Субботин, М.: Диалог-МИФИ, 1990.
- Turbo C++ (Version0). Руководство для программиста.