Ойын құрастыру
Мазмұны
- Кiрiспе……………………………………………………………………………………………..3
- Есептiң математикалық қойылымы…………………………………………………..5
- Есептi шығарудың тәсiлдерiн баяндау………………………………..………….…6
3.1. Iздеу алгоритмдерi………………………………………………..………………6
3.1.1. Сызықты iздеу…………………………………………..………………6
3.1.2. Тосқауылы бар iздеу…………………………………………………6
3.1.3. Екiлiк (бинарлы) iздеу……………………………………………….8
3.2. Сорттау алгоритмдерi…………………………………………………………….9
3.2.1. Таңдау арқылы сорттау………………………………………………9
3.2.2. Айырбаспен сорттау (“көбiкше” тәсiлiмен)..…………….10
3.2.3. Шейкерлi сорттау…………………………………………………………11
3.2.4. Қосу арқылы сорттау…………………………………………………….11
3.2.5. Хоар сорттауы………………………………………………………………13
- Алгоритмнiң негiзгi ойын баяндау…………………………………………………………14
- Логикалық құрылымның баяндалуы (Паскаль тiлiндегi программа үшiн).16
- Блок-схема…………………………………………………………………………………………….20
- Қолданылған техникалық жабдықтар……………………………………………………..26
- Бағдарламаны шақыру және жүктеу……………………………………………………….26
- Есептi шығару алгоритмнiң программалық жазбасы (Паскаль тiлiнде)……27
- 10. Пайдаланылған әдебиеттер т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 ой – дұрыс ұйымдастырушылық, жылдам ойлау.
Симуляторлар – компьютер көмегiмен автокөлiк, ұшақ, тiкұшақ, танк, мотоцикл және т.б. көлiк түрiн айдауға негiзделген.
Басауыртпа ойындары (головоломки). Оларға «Тетрис» ойынын жатқызуға болады. Бұл ойының мақсаты — түскен денелерді тығызырақ орналастыру және толған қатарлардан құтылу. Ойын барысында денелер күрделірек бола бастайды және олардың түсу жылдамдықтары артады. Ойын мақсаты – логика көмегiмен ойынды жеңiп шығу. Негiзiнен бұл ойындар типiне әртүрлi пазлдар, кросвордтар, логикалық және т.б. жатады.
. Есепт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.1.3. Ек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н сол қалған элементт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ң есептеу қиындығы 2 негiзi бар N логарифмдi дәрежеге тең, мұндағы N – массив элементтерiнiң саны.
Мысалы: Х санының өсу ретiмен орналасқан массивке енуiн iздеу
program Poisk3a;
var A:array[1..100] of integer;
N,X,left,right,i,c:integer;
Begin
Writeln(‘массивтiң өлшемiн енгiз’);
read(N); {N<=100}
writeln(‘өсу ретiмен массив енгiзiңiз’);
for i:=1 to N do read(A[i]);
writeln(‘өз элементiңдi енгiз’);
read(X);
left:=1; right:=N;
{iздеуге арналған сол және оң шекара фрагменттерi}
while left<right do
begin
c:=(left + right) div 2;
{кiшi жаққа қарай дөңгелектелiнген орта}
if X>A[c] then
{егер массив кему ретiмен енгiзiлсе, онда if X<A[c]}
left:=c+1
{left ауыстыра отырып ортасыз оң жағын аламыз}
else right:=c;
{right ауыстыра отырып ортасыз сол жағын аламыз }
end;
if X=A[left] then {мұндағы left = right, бiрақ әрқашан емес = c}
writeln(‘ A массивiне ‘, left,’ орында’, X ,’ санының соңғы кiруi ‘)
else writeln(‘тапқан жоқпыз’);
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 сорттауда айырбас фактi мен айырбастың соңғы орнын анықтауға болады. Негiзгi алгоритмде екiлiк өтулер саны N div 2-ге теi. Шейкерлi сорттаудың есептеу қиындығы O(N*N).
Мысалы: N бүтiн сандардан құралған А массивiн Шейкерлi сорттау арқылы өсу ретiмен орналастыру.
program Shaker;
var A:array[1..100] of integer;
N,i,k,x,j,d : integer;
begin
write(‘Массив элементтерiнiң саны’);
read(N);
for i:=1 to n do
writeln(‘Массивтi енгiзiңiз’);
read(A[i]);
d:=1; i:=0;
for k:=n-1 downto 1 do { k – салыстырылатын жұптар саны }
begin
i:=i+d;
for j:=1 to k do
begin
if (A[i]-A[i+d])*d>0 then
{көршiлес элементтердi орындарымен ауыстыру}
begin x:=A[i]; A[i]:=A[i+d]; A[i+d]:=x; end;
i:=i+d;
end;
d:=-d;
{қозғалыс бағытын қарама-қарсыға өзгертемiз}
end;
for i:=1 to n do write(A[i],’ ‘); {реттелген массив}
3.2.4. Қосу арқылы сорттау
Бер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 есептеу қиындығы O(N*N), ал екiлiк iздеу кезiнде — O(N*LogN) (негiзi 2 болатын логарифм) болады.
Мысалы: N бүтiн сандардан құралған А массивiн сызықты iздеуi бар қосу арқылы сорттау арқылы өсу ретiмен орналастыру.
program Sort_Include1;
var A:array[1..100] of integer;
N,i,k,x : integer;
begin
write(‘Массив элементтерiнiң саны ‘);
read(N);
writeln(‘Массивтi енгiзiңiз’);
read(A[1]); {for i:=1 to n do read(A[i]);}
{k – массивтiң реттелген бөлiгiндегi элементтер саны}
for k:=1 to n-1 do
begin
read(x); {x:=A[k+1];}
i:=k;
while (i>0)and(A[i]>x) do
begin
A[i+1]:=A[i];
i:=i-1;
end;
A[i+1]:=x;
end;
for i:=1 to n do write(A[i],’ ‘); {реттелген массив}
end.
Мысалы: N бүтiн сандардан құралған А массивiн екiлiк iздеуi бар қосу арқылы сорттау арқылы өсу ретiмен орналастыру.
program Sort_Include2;
var A:array[1..100] of integer;
N,i,k,x,c,left,right : integer;
begin
write(‘Массив элементтерiнiң саны’);
read(N);
writeln(‘Массивтi енгiзiңiз’);
read(A[1]); {for i:=1 to n do read(A[i]);}
{k — массивтiң реттелген бөлiгiндегi элементтер саны }
for k:=1 to n-1 do
begin
read(x); {x:=A[k+1];}
left:=1; right:=k;
{iздеуге керектi фрагменттiң оң және сол шекарасы}
while left<right do
{соңғы кiрудiң екiлiк iздеуi}
begin
c:=(left+right+1) div 2;
{ үлкен жаққа дөңгелектенген ортасы }
if x>=A[c] then left:=c
{ортасы мен оң жағын аламыз}
else right:=c-1; {ортасыз сол жағын аламыз}
end;
if x>=A[left] then left:=left+1;
{х қосылуға орын босата отырып, массивтi 1 орынға оңға жылжытамыз}
for i:=k downto left do A[i+1]:=A[i];
A[left]:=x;
end;
for i:=1 to n do write(A[i],’ ‘); {реттелген массив}
end.
3.2.5. Хоар сорттауы
Бұл сорттауды жылдам сорттау деп те атайды. Әдiстi 1962 жылы Оксфорд университетiнiң профессоры К.Хоар жасаған болатын. N бүт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ктерге бөлу қақ ортасынан болады, сондықтан жылдам сорттаудың бүкiл алгоритмiнiң есептеу қиындығы N*LogN (негiзi 2 болатын логарифм) өлшемдi болады. Есептеу қиындығы орташа сол мәндi.
Мысалы: N бүтiн сандардан құралған А массивiн жылдам сорттау арқылы өсу ретiмен орналастыру.
program Quick_Sort;
var A:array[1..100] of integer;
N,i : integer;
{Процедураға сортталатын үзiндiнiң оң және сол шекаралары берiледi}
procedure QSort(L,R:integer);
var X,y,i,j:integer;
begin
X:=A[(L+R) div 2];
i:=L; j:=R;
while i<=j do
begin
while A[i]<X do i:=i+1;
while A[j]>X do j:=j-1;
if i<=j then
begin
y:=A[i]; A[i]:=A[j]; A[j]:=y;
i:=i+1; j:=j-1;
end;
end;
if L<j then QSort(L,j);
if i<R then QSort(i,R);
end;
begin
write(‘Массив элементтерiнiң саны’);
read(N);
for i:=1 to n do
writeln(‘Массивтi енгiзiңiз’);
read(A[i]);
QSort(1,n); {бiрiншiден n-шiге дейiнгi элементтердi реттеу}
for i:=1 to n do write(A[i],’ ‘); {реттелген массив}
end.
- Алгоритмнiң негiзгi ойын баяндау
Бұл бағдарлама негiзiнен бiр функция, үш процедура және өзiнiң негiзгi денесiнен құрылған. Әрқайсысын бөлек-бөлек қарастырайық.
- Random_ функциясы. Бұл функцияның негiзгi атқаратын қызметi – ол компьютердiң төрт таңбалы сан жасыруында болып табылады. Функция санның төрт цифрларын бөлек-бөлек кездейсоқ алады және осы бөлек цифрлар бiр таңбалы болады. Осы сандарды бiрiнен кейiн бiрiн жолдық өрнекке айналдырып отырады. Соның нәтижесiнде компьютер жасырған төрт таңбалы сан шығады. Санды жасыру барысында бiрнеше шарт қойылады және тексерiледi:
а) сан мiндеттi түрде төрт таңбалы болуы керек;
ә) компьютер жасырған санның бiрiншi цифрi 0-ге тең болмауы қажет;
б) жасырылған санның цифрларының арасында б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ледi.
Сонымен қатар бұл процедура келесi екi жұмысты атқара алады:
а) егер ойыншы ойыннан шыққысы келсе, “end” сөзiн терсе жеткiлiктi;
ә) егер ойыншы компьютер жасырған санды таба алмаса, онда ол “lose” сөзiн терсе, компьютер жасырған санын хабарлап, ойыннан шығады.
- Бағдарламаның негiзгi денесi. Бағдарлама ойынның негiзгi шарттарын ойыншыға жеткiзедi, жоғарыдағы аталған функция мен процедураларды қолданады. Сонымен қатар ойыншының атын енгiзуге мүмкiндiк бередi, оған санның қанша цифрiн тапқанын “Бұқа”, қаншасы өз орнын тапқанын “Сиыр” деп көмек ретiнде астарлап жеткiзiп отырады. Егер ойыншы жеңген болса, оны құттықтап, қайтадан бастағысы келетiндiгi жайында сұрайды. Ойынның ең соңында берiлген ойынды жазған автор жайында қысқаша мәлiмет келтiрiледi.
- Логикалық құрылымның баяндалуы
1, 2. Программаны жүктеу алдында RKKAZ.COM файлын жүктеу керектiгi
жайындағы ескерту.
- Программаның аты.
- CRT,GRAPH модульдерiн (кiтапханаларын) қосу.
5-16. Программа жайында қысқаша баяндау.
- Цифрлары әртүрлi кездейсоқ төрт таңбалы сандар.
- Random_ функциясы — компьютер жасырған сан.
- Таңба (метка) қою.
- Тұрақтыларды баяндау бөлiмi.
- SetDigit: set of byte=[1,2,3,4,5,6,7,8,9,0]; — 0-9 сандар жиыны.
- Айнымалыларды баяндау бөлiмi.
- i — төрт таңбалы сандар iшiндегi әрбiр цифр, k – төрт цифр.
- Random_Str, S – төрт таңбалы санды жолға жазуға көмектесетiн жолдық өрнектер.
- Функцияның басталуы.
- Randomize процедурасы – кездейсоқ сандарды таңдау генераторы.
- k:=0 – 4 цифр, әзiрше олардың саны 0.
- Random_Str – 4-таңбалы сандардың жолдық өрнегi, әзiрше ол бос.
29-39. 4-цифрлы санды таңдайтын цикл.
- 1: — таңба, i := Random(10) – i-кез-келген 0 мен 9 арасындағы сан.
- Егер i Î SetDigit онда келесi жолға көшу.
32-38. Циклдың басы.
- Str(i,S) – S жолға i санын жазу.
- Егер k=0 және i=0 болса, онда 1:, яғни 30.-ға бару.
- Random_Str жолдық өрнекке толық төрт цифрдi жазу.
- SetDigit сандар жиынынан i элементiн алып тастау.
- k-ны 1-ге арттыру.
- 32 — циклдың соңы.
- 29 – цикл k=4 болғанша жүредi.
- Random_ функциясын Random_Str жолдық өрнек ретiнде бейнелеу.
- Random_ функциясының соңы.
42-58. PrintText процедурасы – экранның төменгi жағында көмек берiп тұрады.
- Айнымалыларды баяндау бөлiмi.
- х, у – курсор координаттары.
- Процедураның басталуы.
- Курсордың Х координатын анықтау.
- Курсордың Ү координатын анықтау.
- Экранда мәтiн орналасқан терезе (1,25,80,25) координатын анықтау.
- Фон түсiн анықтау (қызыл).
- Мәтiн түсiн анықтау (ақ).
- Активтi терезенi тазарту.
- Берiлген координат бойынша (WhereX+40-length(Text) div 2,WhereY)
курсорды жылжыту.
- Берiлген мәтiндi (Text) экранға шығару.
- Экранда мәтiн орналасқан терезе (1,1,80,24) координатын анықтау.
- Мәтiн түсiн анықтау (сары).
- Фон түсiн анықтау (қара).
- Курсорды (x,y) координатқа орналастыру.
- PrintText процедурасының аяқталуы.
59-96. Zastavka процедурасы – ойынның заставкасы.
- n=20 тұрақтысы – түстердiң саны.
- Айнымалыларды баяндау бөлiмi.
- grDriver,grMode,ErrorCode — графиканы инициализациялауға қажеттi
айнымалылар.
- Процедураның басы.
64-72. Графиканы қосып, тексеру.
73-94. Жалпы графиканың циклi.
- Нұсқа мен түстi толтыратын жиын (6 – нұсқаның түрi, 9 – нұсқасның түсi,
көгiлдiр).
- Жоғарғы шекара (рамка қою), координаталары (1-сол жақ шекарасы, 1-
жоғарғы жағы, 640-оң жағы, 15-төменгiсi).
- Оң жақ шекара (рамка қою), координаталары (640-сол жақ шекарасы, 1-
жоғарғы жағы, 610-оң жағы, 480-төменгiсi).
- Төменгi шекара (рамка қою), координаталары (640-сол жақ шекарасы, 480-
жоғарғы жағы, 1-оң жағы, 465-төменгiсi).
- Сол шекара (рамка қою), координаталары (15-сол жақ шекарасы, 480-
жоғарғы жағы, 1-оң жағы, 1-төменгiсi).
- Мәтiн түсi жасыл.
- Х осiндегi координаты — 200, Ү осiндегi координаты – 30 болатын
“AttilaSoftGames Present” сөйлемiн шығару.
- Мәтiн түсiн көкшiлге қою.
- Х осiндегi координаты — 45, Ү осiндегi координаты – 50 болатын “ҚазҰТУ,
АжАТИ, Техникалық кибернетика кафедрасының тапсыруы бойынша”
сөйлемiн шығару.
83-89. Цикл i 1-ден 500-ге дейiнгi жұлдыздар саны.
- Циклдiң басталуы.
- Түрлi-түстi жұлдыздар салу, (random(640) – Х бойынша координаты,
random(480) – Ү бойынша координаты, random(16) – жұлдыздардың түсi).
- Компьютердiң iшкi динамигiнiң дыбысын жиiлiгi i бойынша Герцпен
өзгерiп отыратындай етiп қосу.
- Жоғарыдағы берiлген әрекеттердi 50 мс-қа тоқтатады.
- Компьютердiң iшкi динамигiнiң дыбысын өшiру.
- Цикл соңы.
- Графикалық режимде мәтiннiң стилiн орнату.
91-95. Цикл i 1-ден 20-ға дейiн мәтiн түсiн өзгертiп тұрады.
- Циклдiң басталуы.
- Мәтiн түсi i-ға байланысты өзгерiп тұрады.
- Х осiндегi координаты — 210, Ү осiндегi координаты – 220 болатын
“БҰҚАЛАР мен СИЫРЛАР ойыны” сөйлемiн шығару.
- Цикл соңы.
- Графикалық режимде мәтiннiң стилiн орнату.
- Х осiндегi координаты — 145, Ү осiндегi координаты – 400 болатын
“Ойынды бастау үшiн Enter пернесiн басыңыз” сөйлемiн шығару.
- 73 басталған цикл кез-келген перне басталғанға дейiн жүредi.
- Графиканы жабу.
- Zastavka процедурасының аяқталуы.
101-103. Негiзгi программа басталуы жайындағы хабар.
- Айнымалыларды баяндау бөлiмi.
- 105. CompDigitSet — цифрлар жиыны.
- CompDigitStr — компьютер жасырған сан.
- PlayerDigitStr — ойыншы енгiзген сан.
- PlayerName — ойыншының атын енгiзуге мүмкiндiк беру.
- PlayerDigitSet_ — ойыншының енгiзген саны.
- S – кездейсоқ таңдалатын i санын жолға айналдыруға керектi айнымалы.
- i – сандар жиынын қарастырғандағы цикл да керек болатын параметр, Digit
— енгiзген санның цифрларының арасында бiрдей болу-болмауын
тексеруде керектi параметр.
- a – бұқа саны, b – сиыр саны, Code –
- Ch – ойыншыға меню мүмкiндiгiнiң пернелерiн басуға мүмкiндiк беру.
- One – таңба.
- Тұрақтыларды баяндау бөлiмi.
- PlayerDigitSet – ойыншының мүмкiн енгiзетiн сандар жиыны 0-ден 9-ға
дейiн.
- ReadPlayerDigits процедурасы – ойыншыға сандар енгiзу мүмкiндiгiн беру.
- 1 – таңба.
- Айнымалыларды баяндау бөлiмi.
- PlayerSet — ойыншының енгiзетiн сандарының жиыны.
- Процедураның басталуы.
- 1-таңба, ойыншының енгiзетiн сандарын оның мүмкiн енгiзетiн сандарына
теңестiру.
- Ойыншыға сан енгiзу мүмкiндiгiн беру.
124-134. Егер ойыншы “end” сөзiн енгiзсе, онда ойыннан шығу-шықпауы
жайында хабар алу.
135-150. Егер ойыншы “lose” сөзiн енгiзсе, онда компьютер жасырған санын
экранға шығарып, ойыншының жеңiлгендiгi туралы хабар жеткiзiп,
ойыннан шығып кетедi.
152-156. Ойыншының енгiзген санын тексеру, егер ойыншы сан орнына
символдар енгiзсе, компьютер оған бұл жайлы экранның төменгi
жағындағы кестеде хабар ретiнде жеткiзедi.
157-161. Енгiзiлген санның ұзындығын тексеру, егер сан төрт таңбалы болмаса,
бұл жайында компьютер экранның төменгi жағындағы кестеде хабар
ретiнде жеткiзедi.
162-166. Енгiзген санның бiрiншi цифрi 0-ге тең болмау қажеттiгiн тексеру, егер
бiрiншi цифрi 0-ге тең болса, онда компьютер ол жайында экранның
төменгi жағындағы кестеде хабар ретiнде жеткiзедi.
- PlayerDigitSet_ — ойыншының енгiзген цифрлары алдымен болмайды.
168-179. i 1-ден ойыншының мүмкiн енгiзетiн PlayerDigitStr сандар жиынының
ұзындығына дейiн
- Циклдың басталуы.
- i бойынша PlayerDigitStr-ды Digit санына айналдыру.
171-175. Ойыншы енгiзген санның цифрларының әртүрлiлiгiн тексеру, егер
санның цифрларының арасында бiрдейлерi болса, онда компьютер ол
жайында экранның төменгi жағындағы кестеде хабар ретiнде жеткiзедi.
- ReadPlayerDigits процедурасының соңы.
- Негiзгi программаның басталуы.
182-200. Ойынның басына кiрiсп – егер ойыншы кейбiр сөздер не әрiптердi оқи
алмайтын жағдайда болса, онда ойыннан шығып, RKKAZ.COM
драйверiн жүктеу керектiгi жайында хабарлау. Егер барлығы дұрыс
оқылатын болса, онда ойынды жалғастыруға болады.
- Zastavka процедурасын iске қосу.
- Ойынды бастау үшiн Enter басу керек.
203-225. Ойын шарты, ойын барысында керек болатын мағұлматтар беру.
226-230. Ойыншыға өз атын енгiзуге мүмкiндiк беру.
- One – таңба, экранды тазарту.
- Компьютер ойлаған санды Random_ функциясы арқылы бейнелеу.
- Керек болған жағдайда компьютердiң жасырған санын көрсетуге болады.
234-237. Компьютер ойлаған санның әрбiр цифрын жиынға жазу.
238-252. Ойыншы компьютер жасырған санын тапқанға дейiн жүре беретiн
цикл.
- Алдымен бұқалар және сиырлар саны 0-ге тең.
- PrintText процедурасы арқылы “*** Компьютердiң ойлаған санын табыңыз
***” сөйлемiн экранға шығару.
- ReadPlayerDigits процедурасын iске қосу.
242, 243. Бұқалар санын табу.
244, 245. Сиырлар санын табу.
246-248. Ойыншыға көмек деп, Бұқалар мен Сиырлар санын экранға шығару.
- 238 цикл ойыншының енгiзген саны компьютер жасырған санына тең
болмағанша жүру шарты.
250-263. Ойыншы компьютер жасырған санды тапқан жағдайда компьютер
ойыншыны мәтiн және музыка арқылы құттықтап, менюге шығуға
шақырады.
264-274. Бұл жерде компьютер ойыншыға ойынды басынан бастап ойнағысы
келетiндiгi жайлы сұрап, егер ойыншы тағы ойнағысы келсе ойынды
басынан бастайды, ал керi жағдайда ойын соңғы деңгейiне жетедi.
275-282. Ойынды жазған автор жайында қысқаша мәлiметтер келтiрiледi.
- Программаның соңы.
- Блок-схема
- Қолданылған техникалық жабдықтар
Процессор – Intel Celeron 333 Mhz
Монитор – Samsung SyncMaster 450b
ЖЕСҚ – 320 Mb
Бейнеадаптер – 32 Mb
Принтер – HP DeskJet 930 C
- Программаны шақыру мен жүктеу
- Жұмысқа к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 файлын жүктеу арқылы да жүзеге асыруға болады.
9. Есептi шығару алгоритмнiң программалық жазбасы (Паскаль тiлiнде)
- { Before load that program, start RKKAZ.COM.
- Перед загрузкой данной программы, запустите RKKAZ.COM. }
- Program BikiIKorovi;
- Uses CRT,GRAPH;
- { «Бұқалар мен сиырлар». Программа кездейсоқ сандар датчигінің
- көмегімен цифрлары әртүрлі төрт таңбалы оң санды таңдап алады.
- Сол санды табу қажет.
- Ойыншы алғаш рет санды енгізісімен — программаның жасырған
- санын таба алмайтындығы анық. Сондықтан ойыншыға ол санды
- табу үшiн бірнеше мүмкіндік беріледі. Әрбір мүмкіндік кезінде
- ойыншы цифрлары әртүрлі төрт орынды оң аңбалы санды енгізіп
- отырады. Ал программа, оған жауап ретінде енгізілген санның
- қанша цифрының бар болуын «бұқа» деп, ал өз орнын дұрыс тапқан
- цифрлардың санын «сиыр» деп астарлап жеткізіп отырады. Мысалы,
- программаның жасырған саны 1294, ал ойыншының енгізген саны
- 1423 болса — «бір сиыр және үш бұқа» деген жауап қайтарылады. }
- { Цифрлары әртүрлi кездейсоқ төрт таңбалы сандар }
- Function Random_:string;
- Label 1;
- Const
- SetDigit: set of byte=[1,2,3,4,5,6,7,8,9,0]; { Бiр орынды цифрлар }
- Var
- i,k:byte;
- Random_Str,S: string;
- Begin
- Randomize;
- k:=0;
- Random_Str := ‘ ‘;
- Repeat
- 1: i := Random(10); {0..9}
- If i in SetDigit then
- Begin
- Str(i,S);
- If (k=0)and(i=0) then goto 1; { Бiрiншi цифр 0-ге тең емес }
- Random_Str:= Random_Str+S;
- Exclude(SetDigit,i);
- Inc(k);
- End;
- Until (k=4);
- Random_ := Random_Str;
- End;
- Procedure PrintText(Text:string);
- Var
- x,y:byte;
- Begin
- x := whereX;
- y := whereY;
- Window(1,25,80,25);
- Textbackground(Red);
- Textcolor(White);
- Сlrscr;
- GotoXY(WhereX+40-length(Text) div 2,WhereY);
- Write(Text);
- Window(1,1,80,24);
- TextColor(Yellow);
- TextBackground(0);
- GotoXY(x,y);
- End;
- Procedure Zastavka(i:integer);
- Const n=20;
- Var
- grDriver,grMode,ErrorCode:Integer;
- Begin
- grDriver :=Detect;
- InitGraph(grDriver,grMode,’ ‘);
- ErrorCode :=GraphResult;
- If ErrorCode<> grOk then {Егер қате болса}
- Begin
- Writeln(‘Графиканы инициализациялау қатесi:’,GraphErrorMsg(ErrorCode));
- Halt(0); {Программадан шығу}
- end
- else
- Repeat
- SetFillStyle(6,9);
- Bar(1,1,640,15); {Жоғарғы шекара}
- Bar(640,1,610,480); {Оң жақ шекара}
- Bar(640,480,1,465); {Төменгi шекара}
- Bar(15,480,1,1); {Сол жақ шекара}
- SetColor(2);
- OutText(200,30, ‘AttilaSoftGames Present’);
- SetColor(5);
- OutTextXY(45,50,’ҚазҰТУ, АжАТИ, Техникалық кибернетика
кафедрасының тапсыруы бойынша’);
- For i:=1 to 500 do
- Begin
- PutPixel(random(640),random(480),random(16));{Түстi жұлдыздар салу}
- Sound(i);
- Delay(50);
- Nosound;
- End;
- SetTextStyle(DefaultFont, HorizDir, 2);
- For i:=1 to n do
- Begin
- SetColor(i);
- OutTextXY(210,220,’БҰҚАЛАР мен СИЫРЛАР ойыны’);
- End;
- SetTextStyle(DefaultFont, HorizDir, 1);
- OutTextXY(145,400,’Ойынды бастау үшiн Enter пернесiн басыңыз’);
- Until KeyPressed;
- CloseGraph;
- end;
- {*************************************************************}
- { Негiзгi программа }
- {*************************************************************}
- VAR
- CompDigitSet: set of char; { Цифрлар жиыны }
- CompDigitStr: string; { Компьютер жасырған сан }
- PlayerDigitStr: string; { Ойыншы енгiзген сан }
- PlayerName: string; {Ойыншының атын енгiзуге мүмкiндiк беру }
- PlayerDigitSet_: set of byte;
- s:string;
- i,Digit:byte;
- Code, a, b:integer;
- Ch: char;
- LABEL 1;
- CONST
- PlayerDigitSet: set of char =[‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’];
- Procedure ReadPlayerDigits;
- Label 1;
- Var
- PlayerSet: set of char;
- Begin
- 1: PlayerSet:=PlayerDigitSet;
- ReadLn(PlayerDigitStr); { Ойыншыға сан енгiзу мүмкiндiгiн беру }
- If PlayerDigitStr=’end’ then
- Begin
- TextColor(2);
- ClrScr;
- WriteLn(‘ Сiзiдiң шынымен ойыннан шыққыңыз келе ме?’);
- WriteLn(‘Егер шыққыңыз келсе, “Ү” немесе “у” терiп Enter басыңыз’);
- WriteLn(‘ Шыққыңыз келмесе кез-келген басқа перненi басыңыз’);
- ReadLn(PlayerDigitStr);
- If (PlayerDigitStr=’Y’) or (If PlayerDigitStr=’y’) then
- Halt;
- End;
- If PlayerDigitStr=’lose’ then
- Begin
- TextColor(3);
- ClrScr;
- Window(25,10,70,15);
- WriteLn(‘ Компьютердiң ойлаған саны:’);
- WriteLn(CompDigitStr:15);
- ReadLn;
- ClrScr;
- TextColor(5);
- Window(20,10,70,15);
- WriteLn(‘ Сiз бұл ойынды жеңе алмадыңыз!!!’);
- WriteLn(‘Ренжiмеңiз, мүмкiн келесi рет жеңе аларсыз…’);
- ReadLn;
- Halt;
- End;
{ Санның дұрыстығын тексеру }
- Val(PlayerDigitStr,Digit,Code);
- If Code<>0 then
- Begin
- PrintText(Енгiзгенiңiз сан емес ‘+ ‘»‘+PlayerDigitStr+'»‘);
- Goto 1;
- End;
{ Енгiзiлген санның ұзындығын тексеру }
- If Length(PlayerDigitStr)<>4 then
- Begin
- PrintText(‘ Енгiзген саныңыз төрт таңбалы емес ‘);
- Goto 1;
- End;
{ Енгiзiлген санның бiрiншi цифрi 0-ге тең болатын-болмайтындығын
тексеру }
- If PlayerDigitStr[1]=’0′ then
- Begin
- PrintText(‘Бiрiншi цифр 0-ге тең болмауы қажет’);
- Goto 1;
- End;
- PlayerDigitSet_ := [];
- For i:=1 to length(PlayerDigitStr) do
- Begin
- Val(PlayerDigitStr[i],Digit,Code);
{ Санның цифрларының әртүрлiлiгiн тексеру }
- If PlayerDigitStr[i] in PlayerSet then
- Exclude(PlayerSet,PlayerDigitStr[i])
- else
- Begin
- PrintText(‘Есептiң шарты бойынша цифрлар әртүрлi болуы қажет’);
- Goto 1;
- End;
- Include(PlayerDigitSet_,Digit);
- End;
- End;
- BEGIN
- TextBackground(0);
- ClrScr;
- TextColor(white);
- WriteLn(‘******************************************************’);
- WriteLn(‘ENG: If you can”t read some words, then’);
- WriteLn(‘ before load that game, start RKKAZ.COM’);
- WriteLn(‘RUS: Если вы не можете прочитать некоторые буквы,’);
- WriteLn(‘ тогда перед загрузкой этой игры, запустите RKKAZ.COM’);
- WriteLn(‘******************************************************’);
- WriteLn;
- WriteLn(‘БҰҚАЛАР мен СИЫРЛАР. әiңғүұқ’);
- WriteLn;
- WriteLn(‘For continuation press Enter or for exit press «N» or «n»‘);
- WriteLn;
- WriteLn(‘Для продолжения нажмите Enter или для выхода «N» или «n»‘);
- ReadLn(Ch);
- If (Ch=’N’) or (Ch=’n’) then
- Halt
- else
- Zastavka(1);
- ReadLn;
- TextColor(11);
- WriteLn(‘ «Бұқалар мен сиырлар». Программа кездейсоқ сандар’);
- WriteLn(‘датчигінің көмегімен цифрлары әртүрлі төрт таңбалы ‘);
- WriteLn(‘оң санды таңдап алады. Сол санды табу қажет.’);
- WriteLn(‘ Ойыншы алғаш рет санды енгізісімен – программаның’);
- WriteLn(‘жасырған санын таба алмайтындығы анық. Сондықтан’);
- WriteLn(‘ойыншыға ол санды табу үшiн бірнеше мүмкіндік ‘);
- WriteLn(‘беріледі. Әрбір мүмкіндік кезінде ойыншы цифрлары ‘):
- WriteLn(‘әртүрлі төрт орынды оң аңбалы санды енгізіп отырады. ‘);
- WriteLn(‘Ал программа оған жауап ретінде енгізілген санның ‘);
- WriteLn(‘қанша цифрының бар болуын «бұқа» деп, ал өз орнын ‘);
- WriteLn(‘дұрыс тапқан цифрлардың саннын «сиыр» деп астарлап ‘);
- WriteLn(‘жеткізіп отырады. Мысалы, программаның жасырған ‘);
- WriteLn(‘саны 1294, ал ойыншының енгізген саны 1423 болса —’);
- WriteLn(‘«бір сиыр және үш бұқа» деген жауап қайтарылады.’);
- WriteLn;
- TextColor(4);
- WriteLn(‘ Егер сiз компьютер жасырған санды таба алмасаңыз, онда’);
- WriteLn (‘“lose” терiңiз, ал егер ойыннан шыққыңыз келсе, “end” терiңiз’);
- TextColor(9);
- WriteLn;
- WriteLn(‘Ойынды бастау үшiн Enter басыңыз’);
- ReadLn;
- ClrScr;
- TextColor(white);
- Window(25,10,65,12);
- WriteLn(‘Өз атыңызды енгiзiңiз’);
- ReadLn(PlayerName);
- One: ClrScr;
- CompDigitStr := Random_;
- {WriteLn(CompDigitStr);} { Компьютердiң жасырған санын көрсетуге
мүмкiндiк}
{ Компьютер ойлаған санның әрбiр цифрын жиынға жазу }
- For i:=1 to length(CompDigitStr) do
- Begin
- Include(CompDigitSet,CompDigitStr[i]);
- End;
- Repeat
- a:=0; b:=0;
- PrintText(‘ *** Компьютердiң ойлаған санын табыңыз ***’);
- ReadPlayerDigits;
{ Бұқалар }
- For i:=1 to length(PlayerDigitStr) do
- If PlayerDigitStr[i] in CompDigitSet then Inc(a);
{ Сиырлар }
- For i:=1 to length(PlayerDigitStr) do
- If PlayerDigitStr[i]=CompDigitStr[i] then Inc(b);
- TextColor(11);
- WriteLn(PlayerName:20,’ сiзге көмек -‘);
- WriteLn(‘Бұқа саны: ‘:40,a, ‘, ‘Сиыр саны: ‘,b);
- Until (CompDigitStr=PlayerDigitStr);
- ClrScr;
- TextColor(9);
- Window(25,10,65,12);
- WriteLn(PlayerName,’ сiз осы ойынның жеңiмпазысыз!!!‘);
- PrintText(‘ Неткен тапқыр адам едiңiз …’);
- Repeat
- For i:=255 downto 1 do
- Begin
- Sound(220); Delay(200); NoSound;
- End;
- Until keypressed;
- WriteLn;
- WriteLn(‘Менюге шығу үшiн Enter басыңыз’:54);
- ReadLn;
- ClrScr;
- WriteLn(‘Қайта бастағыңыз келе ме?’:45);
- WriteLn;
- WriteLn;
- WriteLn(‘Егер ия болса, онда ”Y” немесе “y” терiп, Enter басыңыз’:30);
- WriteLn;
- WriteLn(‘Керi жағдайда кез-келген символ терiп, Enter басыңыз’:30);
- ReadLn(Ch);
- If (Ch=’Y’) or (Ch=’y’) then
- Goto One
- else
- ClrSCr;
- WriteLn(‘Copyright (C) 2002 by StudentSoft (ҚазҰТУ—ЗБИ-01-2Қ)’);
- WriteLn;
- WriteLn(‘ Программаны жазған: Батырғалиев А.Б.’);
- WriteLn(‘ Қабылдаған: Ибрагимова Г.А.’);
- WriteLn(‘ Тiлектерiңiз бен ескертулерiңiздi attilanem@e-mail.ru’);
- WriteLn(‘ адресiне жiберуiңiзге болады.’);
- Repeat Until KeyPressed;
- Есептi шығару алгоритмнiң программалық жазбасы (Си тiлiнде)
- #include <math.h>
- #include <string.h>
- #include <iostream.h>
- #include <stdio.h>
- #include <conio.h>
- #include <graphics.h>
- #include <stdlib.h>
- #include <dos.h>
- #define m 20
/* «Бұқалар мен сиырлар». Программа кездейсоқ сандар датчигінің
көмегімен цифрлары әртүрлі төрт таңбалы оң санды таңдап алады.
Сол санды табу қажет.
Ойыншы алғаш рет санды енгізісімен — программаның жасырған
санын таба алмайтындығы анық. Сондықтан ойыншыға ол санды
табу үшiн бірнеше мүмкіндік беріледі. Әрбір мүмкіндік кезінде
ойыншы цифрлары әртүрлі төрт орынды оң аңбалы санды енгізіп
отырады. Ал программа, оған жауап ретінде енгізілген санның
қанша цифрының бар болуын «бұқа» деп, ал өз орнын дұрыс тапқан
цифрлардың санын «сиыр» деп астарлап жеткізіп отырады. Мысалы,
программаның жасырған саны 1294, ал ойыншының енгізген саны
1423 болса — «бір сиыр және үш бұқа» деген жауап қайтарылады. */
- void Zastavka(int i)
- { int gdriver=DETECT,gmode,errorcode;
- initgraph(&gdriver,&gmode,» «);
- errorcode = graphresult();
- if (errorcode != grOk)
- { printf(«Графиканы инициализациялау қатесi: %s\n»,
grapherrormsg(errorcode));
- printf(«Программадан шығу үшiн кез-келген перненi басыңыз:»);
- getch();
- exit(1); }
- do
- { setfillstyle(6,9);
- bar (1,1,640,15);
- bar (640,1,610,480);
- bar (640,480,1,465);
- bar (15,480,1,1);
- setcolor(2);
- outtextxy(210,30,»AttilaSoftGames Present»);
- setcolor(5);
- outtextxy(45,50,»ҚазҰТУ, АжАТИ, Техникалық кибернетика
кафедрасының тапсыруы бойынша»);
- for(i=1;i<=1500;i++)
- { putpixel(random(640),random(480),random(16));
- sound(i);
- delay(2);
- nosound(); }
- for(i=1;i<=m;i++)
- { setcolor(i);
- settextstyle(0,0,2);
- outtextxy(120,220,»БҰҚАЛАР мен СИЫРЛАР ойыны»); }
- setcolor(11);
- settextstyle(0,0,1);
- outtextxy(145,400,»Ойынды бастау үшiн Enter пернесiн басыңыз»); }
- while (!kbhit());
- losegraph(); }
- void PrintText(char Text[20])
- { int x,y;
- x=wherex();
- y=wherey();
- window(1,25,80,25);
- textbackground(4);
- textcolor(15);
- clrscr();
- gotoxy(wherex()+28-strlen(Text) % 2,wherey());
- printf(«%s»,Text);
- window(1,1,80,24);
- textcolor(13);
- textbackground(0);
- gotoxy(x,y); }
- void main()
- { int i,j;
- int a[4],b[4];
- int si,bu;
- char ch,PlayerName[20];
- clrscr();
- textcolor(15);
- cprintf(«**************************************************\n\a\r»);
- cprintf(«ENG: If you can’t read some words, then\n\a\r»);
- cprintf(» before load that game, start RKKAZ.COM\n\a\r»);
- cprintf(«RUS: Если вы не можете прочитать некоторые буквы,n\a\r»);
- cprintf(«тогда перед загрузкой этой игры, запустите RKKAZ.COM \n\a\r»);
- cprintf(«**************************************************\n\a\r»);
- printf(«\n»);
- cprintf(«‘БҰҚАЛАР мен СИЫРЛАР. әiңғүұқ\n\a»);
- printf(«\n»);
- cprintf(» For exit press ‘N’ or ‘n’ or for continuation\n\a\r»);
- cprintf(«press any other key and then Enter\n\a\r»);
- cprintf(«Для продолжения нажмите Enter или для выхода ‘N’ или ‘n’\n\a\r»);
- printf(«\n»);
- ch=getch();
- if ((ch==’N’) || (ch==’n’))
- exit(1);
- else
- Zastavka(1);
- getch();
- textcolor(11);
- cprintf(«‘Бұқалар мен сиырлар’. Программа кездейсоқ сандар\n\a\r»);
- cprintf(«датчигінің көмегімен цифрлары әртүрлі төрт таңбалы \n\a\r»);
- cprintf(«оң санды таңдап алады. Сол санды табу қажет.\n\a\r»);
- cprintf(» Ойыншы алғаш рет санды енгізісімен – программаның\n\a\r»);
- cprintf(«жасырған санын таба алмайтындығы анық. Сондықтан\n\a\r»);
- cprintf(«ойыншыға ол санды табу үшiн бірнеше мүмкіндік \n\a\r»);
- cprintf(«беріледі. Әрбір мүмкіндік кезінде ойыншы цифрлары \n\a\r»);
- cprintf(«әртүрлі төрт орынды оң аңбалы санды енгізіп отырады.\n\a\r»);
- cprintf(«Ал программа оған жауап ретінде енгізілген санның \n\a\r»);
- cprintf(«қанша цифрының бар болуын «бұқа» деп, ал өз орнын \n\a\r»);
- cprintf(«дұрыс тапқан цифрлардың саннын «сиыр» деп астарлап\n\a\r»);
- cprintf(«жеткізіп отырады. Мысалы, программаның жасырған \n\a\r»);
- cprintf(«саны 1294, ал ойыншының енгізген саны 1423 болса -\n\a\r»);
- cprintf(«‘бір сиыр және үш бұқа’ деген жауап қайтарылады.\n\a\r»);
- printf(«\n»);
- textcolor(9);
- cprintf(«Ойынды бастау үшiн кез-келген перненi басыңыз
басыңыз.\n\a\r»);
- getch();
- clrscr();
- textcolor(15);
- window(20,10,70,12);
- cprintf(«Өз атыңызды енгiзiңiз: \a»);
- scanf(«%s»,&PlayerName);
- One:clrscr();
- randomize();
- for (j=0;j<4;j++)
- a[j]=rand()%10;
- if (a[0]==0)
- goto One;
- if (a[0]==a[1])
- goto One;
- if (a[0]==a[2])
- goto One;
- if (a[0]==a[3])
- goto One;
- if (a[1]==a[2])
- goto One;
- if (a[1]==a[3])
- goto One;
- if (a[2]==a[3])
- goto One;
- // for(j=0;j<4;j++)
- // printf(«%d»,a[j]);
- // printf(«\n»);
- Two: si=0; bu=0;
- PrintText(«Компьютердiң ойлаған санын табыңыз»);
- textcolor(14);
- for(i=0;i<4;i++)
- scanf(«%d»,&b[i]);
- for(i=0;i<4;i++)
- {if(b[i]==a[i]) si+=1;}
- for(i=0;i<4;i++)
- { for(j=0;j<4;j++)
- { if(b[j]==a[i]) bu+=1;}}
- textcolor(11);
- { cprintf(«\r %s, сiзге көмек — «,PlayerName);
- cprintf(«Бұқа саны: %d, Сиыр саны: %d\n\r»,bu-si,si); }
- for(i=0;i<4;i++)
- if (b[i]!=a[i])
- goto Two;
- clrscr();
- textcolor(9);
- window(20,10,65,12);
- cprintf(«%s сiз осы ойынның жеңiмпазысыз!!!»,PlayerName);
- PrintText(«Неткен тапқыр адам едiңiз…»);
- do
- { for (i=1500;i>0;i—)
- { sound(i); delay(3); nosound(); } }
- while (!kbhit());
- clrscr();
- textcolor(3);
- getch();
- printf(«\n»);
- cprintf(» Менюге шығу үшiн Enter пернесiн басыңыз\n\a\r»);
- getch();
- clrscr();
- printf(«\n»);
- cprintf(» Қайта бастағыңыз келе ме?\n\a\r»);
- printf(«\n»);
- cprintf(«Егер бастағыңыз келсе, онда ’Y ’ немесе ’y’ басыңыз.\n\a\r»);
- printf(«\n»);
- cprintf(«Керi жағдайда кез-келген перненi басыңыз.\n\a\r»);
- ch=getch();
- if ((ch==’Y’) || (ch==’y’))
- goto One;
- else
- clrscr();
- textcolor(14);
- cprintf(«Copyright (C) 2002 by StudentSoft (ҚазҰТУ—ЗБИ-01-2Қ)\n\a\r»);
- printf(«\n»);
- cprintf(» Программаны жазған: Батырғалиев А.Б.\n\a\r»);
- cprintf(» Қабылдаған: Ибрагимова Г.А.\n\a\r»);
- cprintf(«Тiлектерiңiз бен ескертулерiңiздi attilanem@e-mail.ru \n\a\r»);
- cprintf(» адресiне жiберуiңiзге болады.\n\a\r»);
- while (!kbhit());
- }
Пайдаланылған әдебиеттер т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). Руководство для программиста.