Сұрыптау және іздеу тәсілдері


Мазмұны

Кіріспе . . .

1. Сұрыптау тәсілдері . . .

1. 1 Хоар тәсілі . . .

1. 2 Пузырек тәсілі . . .

2. Іздеу тәсілі . . .

2. 1 Бинарлық іздеу . . .

3. Теориялық мағлұматтар . . .

3. 1 Паскаль тіліндегі файл типінің баяндалуы . . .

4. Есептің алгоритімі . . .

5. Программаның Паскаль тілінде баяндалуы . . .

6. Жалпы мағлұматтар . . .

7. Функционалдық қолдану . . .

8. Логикалық құрылымның баяндалуы . . .

9. Қорытынды . . .

Пайдаланған әдебиеттер . . .

КІРІСПЕ

Жаңа реттеулер енгізуден қиын, сәттілігі жағынан күдікті, жүзеге

асыруы жағынан қауіпті жұмыс жоқ .

Никколо Макьявелли (1513)

«Біз барлық автомобильдердің нөмірін қарастырып үлгермейміз», - деді Дрейк. «Ал бізге оны істеп қажеті жоқ, Пол. Біз тек ғана оларды реті бойынша қойып, олардың бірдейлерін іздейміз».

“The Case of Angry Mourner” (1951)

Бұл айтылған пікірлердің барлығы программалаудың ең бір қажетті мүмкіндіктері сұрыптау мен іздеуге арналған. Сұрыптау мен іздеуді кез-келген программада қолдануға болады. олардың мүмкіндіктері шексіз. Осы мүмкіндіктерді пайдалана отырып, программа алгоритімін қарапайым жолмен жеңілдетуге болады. Негізінен сұрыптау мен іздеудің түрлері өте көп.

Кез-келген күнделікті жағдайда біз сұрыптау және іздеу үрдістерімен жұмыс жасаймыз. Әр адамда неліктен деген сұрақ туады. Жауап өте қарапайым. Себебі бұл үрдістермен жұмыс жасау өте ыңғайлы. Тіпті өзіміздің күнделікті қолданып жүрген персоналды компьютерімізде сол принциппен жұмыс істейді. Олар сіз енгізген мәліметтерді сұрыптап қояды да сіз оларды іздегенде лезде тауып бере қояды. Сұрыптау мен іздеу тәсілдерін кеңінен қолданады. Бұл тәсілдерді қарапайым студентте кәсіпқой программистте қолдана алады. Жалпы алғанда кез-келген программа сұрыптаудан басталады. Ал тез сұрыптап қажет элементті табу үшін сұрыптау және іздеу тәсілдерін жетік білген жөн. Сондықтан сұрыптау мен іздеу тәсілдерін қарастырып көрейік.

1. Сұрыптау тәсілдері

Практикалық тұрғыдан алғандағы сұрыптаудың қиындықтары:

Төрт түрлі сұрыптау тәсілдерінің жетістіктері мен жетіспеушіліктері.

Сұрыптау тәсілдері программалаудың барлық саласында қолданылады. Ол математикалық программаларда және де база құруда да қолдарылады.

Сұрыптау алгоритімін практикалық тұрғыдан үш бөлікке бөліп қарастыруға болады.

− салыстыру, элементтің жұбының ретін анықтайды;

− алмастыру, элемент жұптарының орнын ауыстырады;

− өздігінен сұрыпталатын алгоритм, ол жиынның барлық элементі реттелгенше салыстыру мен алмастыруды жалғастыра береді;

Төменде қарастырылған сұрыптаудың төрт түрі де сондай қасиеттерге ие. Бұл сұрыптау тәсілдерін жалпы түрде атап өтейік. Бұл тәсілдерді басқалардан бөліп алған себебіміз, олар біріншіден-өте жиі қолданылады, екіншіден- басқа алгоритмдер осы жерде қарастырылатын тәсілдердің модификациясы болып табылады.

1. 1 Хоар тәсілі

Бұл тәсіл «лездік сұрыптау» деп аталады. Ол 1962 жылы құрастырылған. Оның қрастырушысы Charles Antony Richard Hoare.

Бұл тәсілдің басты мақсаты жиынның сұрыптауға келетін элементін табу керек және осы элемент жиынды екі кіші элементке бөледі.

Жалпы алғанда сұрыптаудың түрлері өте көп. Оларды түгел қарастырып шығу мүмкін емес. Сонда да мен осы курстық жобамда маңызды деген бірнеше түрлерін қарастырып өтуді жөн көрдім. Яғни, жоғарыда аталып өткен сұрыптау тәсілдерін толығырақ қарастырып өтейік.

Лездік сұрыптау немесе Хоар тәсілі. Сұрыптау алгоритімінің ең тамаша бірі болып лездік сұрыптау (quicksort) болып табылады. Оның құрастырушысы Чарльз Хоар, осы сұрыптау тәсілін 1962 жылы жарыққа шығарды. Лездік сұрыптау арқылы қажет емес немесе артық есептеулерден арылуға болады. сұрыптаудың осы түрімен жұмыс істегенде массивті екіге бөлуге болады. Яғни, үлкен элементтерін бөлек, кіші элементтерін бөлек. Содан кейін екі топты рекурсивті түрде сұрыптайды. Ал осы үрдіс аяқталған кезде массив сұрыпталып бітеді. Хоар тәсілінің алгоритімі өте қарапайым және өте тиімді. Оның бірнеше түрлері бар. Төменде қарастырылатын түрі қолдануы жағынан өте жеңіл.

Біздің quicksort функциясы бүтін санды массивті сұрыптайды:

/ * quicksort : сұрыптайды v[ ] . . v[n-1]

өсу бойынша */ void quicksortClrrt

v[ ], int n)

  • {

int i, last;

if (n<=1) /* ешнәрсе жасамау */

return;

swap (v, 0, rand() % n) ;

last=0;

for (i=1; i<n; i++) /* бөліктегіш */

if (v[i] < v[0] )

swap (v, ++last, i) ;

swap ( v, 0, last ) ; /* бөліктегішті сақтау */

quicksort ( v, last ) ; /* рекурсивті

түрде сұрыптау*/quicksort (v+last+ 1, n-last-1) ;

/* барлық бөлігін */ }

swap операциясы quicksort функциясында үш рет кездеседі, сондықтан оны бөлек функция ретінде жазамыз.

/* swap:

v[i] and v[j] * орындарын алмастырамыз */

void swap(int v[ ], int i, int j)

{ int temp;

temp =v[i] ; v[i] =v[j] ; v[j] =temp;

Массивті екіге бөлгенде біріншіден, оны бөлетін элемент таңдалады. Ол уақытша массивтің басына қойылады да, массивтің қалған элементтері қарастырылады. Массивті бөлетін элементтен кіші элементтер (яғни, кішкентай элементтер ) массив басына қарай жылжытылады (last позициясына) . Ал үлкен элементтер массив соңына қарай жылжытылады (і позицияға) . Үрдістің басында бөлетін элемент орнын ауыстырғанан кейін last=0 және i=1 ден n-1 ге дейінгі элементтер әлі қарастырылмаған болады. Басында 1 ден last қа дейінгі элементтер бөлетін элементтер қатаң түрде кіші, ал last+1 ден i-1 ге дейінгі элементтер оған тең немесе үлкен. Ал і ден n-1 ге дейінгілер әлі қарастырылмаған. V[i] >=' V[0] шарты бірінші рет орындалғанша, алгоритм [i] элементін өз-өзіне ауыстыра береді.

Барлық элементтер қарастырылып болған соң бөлетін элемент өзінің соңғы позициясына жету үшін, о элемент last позиясына қойылады. ЕНді массив мына түрде болады:

Осы үрдіс массивтің оң жағына да сол жағына да қолданылады. Үрдіс аяқталғанда массив толық сұрыпталған болады. Бұл «лездік сұрыптау» қаншалықты тез жұмыс атқарады десек, оған келесі түрде жауап беруге болады. Әдетте n элементтен тұратын массив n/2 элементтен тұратындай етіп 2 ге бөлінеді, одан әрі n/2 элементтен тұратын 2 топ әрқайсысы n/4 элемент болатындай етіліп 4 топқа бөледі, содан соң әр біреуінде n/8 элемент болатындай етіп 8 топқа бөлінеді, т. с. с. Үрдіс шамамен log2 n рет қайталанады.

1. 2 Пузырёк тәсілі

Бұл тәсілдің басты мақсаты оның атауында. Яғни, массивтің ең “жеңіл” элементтері көтеріледі, ал ең “ауыр” элементтері төмен түседі. Алгоритмдік түрде оны келесі жағдайда көрсетуге болады:

Ол үшін массивті астынан үстіне қарай түгел қарастырамыз. Егер қарастыру барысында “астынғы” элемент “үстінгі” элементке қарағанда кіші болса, онда оларды ауыстырамыз. Осындай әдіспен массивтің ең ”кіші” элементін жоғарыға шығарамыз. Содан кейін барлық үрдісті массивтің қалған сұрыпталмаған N-1 элементтері үшін қайталаймыз (яғни, бірінші элементтен төменгі элементтер үшін) . Бұл сұрыптау тәсілінің алгоритімі өте қарапайым болғандықтан өте тиімді. .

Пузырек тәсілі. Сұрыптаудың пузырек тәсілінің алгоритімінде екі шектес элемент салыстырылады. Егер олар кері ретпен орналосқан болса, онда олардың орындары ауыстырылады. Осылай барлық шектес элементтер салыстырылып шығып, қажет болса алмастырылады. Бұл үрдіс барлық элементтер реттелгенше жалғаса береді. Сұрыптау алгоритімі келесі қадамдардан тұрады: олардың мәндерін ауыстыру.

  1. Бірінші және екінші элементтерді салыстыру. Қажет жағдайда элементтердің мәндерін ауыстыру.
  2. Екінші және үшінші элементтерді салыстыру. Қажет жағдайда элементтердің мәндерін ауыстыру.
  3. Осы үрдіст басқа да элементтер жұбы үшін қайталанады.
  4. 1-3 қадамдарды басқа элементтер реттеліп біткенше қайталау.

Сұрыптау барысында мәні кіші элементтер судағы ауа тәрізді жоғарыға көтеріледі. Егер тізім N элементтен тұратын болса, толық сұрыпталу үшін N-1 рет қайталануы қажет . ал өсу ретімен сұрыпталу келесі түрде болады:

Repeat

Sorted:=true;

For i :=1 to n-1 do begin

If data [i] > data[i+1] then begin

Temp:=data[i] ;

Data[i] :=data[i+1] ;

Data[i+1] :=temp;

Sorted:= жалған.

End;

End;

Until sorted;

2 Іздеу

Бинарлық іздеу . Енді біз іздеудің 2 түрлі алгоритімін қарастырамыз. Олар: тізбектік іздеу және бинарлық іздеу. Тізбектік іздеудің алгоритімінде атының айтуы бойынша іздеу берілген элементтердің біріншісінен басталады, және де ол бүтін элемент табылғанша жалғаса береді. Осындай іздеу түрін мысалы телефондық анықтамаларда кеңінен қолдануға болады.

Пузырек тәсілімен сұрыптау тәрізді тәрізді тізбекті іздеуді үлкен мәліметтер үшін қолдану тиімді емес. Мысалы телефондық анықтамадан «Оналбаева » деген фамилияны табу керек болса іздеу барысында программаға бүкіл анықтаманы қарастырып шығуға тура келеді. Улкен мәліметтер үшін тізбектей іздеуге қарағанда, бинарлық іздеу тиімді болып келеді. Бірақ бинарлық іздеу алгоритімі жұмыс істеу үшін мәліметтер алдын - ала сұрыпталу қажет. Ал тізбектей іздеу сұрыптауды қажет етпейді. Бинарлық іздеу принципін толық түсіну үшін «санды тап» ойынын елестетейік. Мысалы сіздің қарсыласыңыз 1 мен 100 арасында бір санды ойлайды. Сіз табу үшін бірнеше сандарды айтасыз, ал сіздің қарсыласыңыз өзі ойлаған саннан үлкен немесе кіші екендігін айтады. Сол арқылы сіз сандар диапазонын қысқартасыз. Міне, осы үрдісті бинарлық іздеу деп аталады.

Өсу реті бойынша сұрыпталған, N элементтен тұратын Data массивіндегі бинарлық іздеудің псевдокодын келесі түрде көруге болады:

Бинарлық іздеу псевдакоды:

Target:= бүтін сан;

First:=1;

Last:=N;

Found:=false:

While (first <=last ) and not (found) to begin

Middle:= (first+last) div 2;

If target < data[middle] then begin

Last:=middle-1;

End;

Else if target > data[middle] then begin

First:=middle+1;

End;

Else begin

Found:=true;

End;

End;

If found then begin

{бүтін элемент middle индексті позициядан табылды}

Else begin

{бүтін элемент табылған жоқ}

End;

3. Теориялық мағлұматтар

Курстық жұмысты жүзеге асыру үшін программа барысында файл типі кеңінен қолданылады. Сондықтан Паскаль тіліндегі файл типінің баяндалуы, файл типінің түрлері және Си тіліндегі файл типінің баяндалуын қарастырып өтеміз.

3. 1 Паскаль тіліндегі-file типінің баяндалуы

Кез-келген типті деректер тобын файл деп атауға болады. Программаға қажетті деректерді де файл деп атауға болады. есептелген нәтиже және программаның өзінде файл болып табылады. Паскаль тілінде бірдей типті (қарапайым немесе күрделі) тізбектерді де атайтын болғандықтан файл «массивке» ұқсас болады. Файлдың массивтен айыриашылығы:

а) мұнда жазылатын ақпарат саны көрсетілмейді.

б) әр элементтің өз индексі бойынша анықталмайды, сондықтан қажетті элементті оның алдындағы элементті алып болғаннан кейін ғана алынады.

Программаның type бөлімінде файл типі келесі жалпы түрде баяндалады: TYPE NTYPE = FILE OF TC

Мұнда ntype файл типінің идентификаторы, type of tc -ол базалық тип, файлдық базаның типі ретінде кез-келген қарапайым немесе күрделі тип баяндалады (type типінен басқа) . Файлдың типі немесе файлдың типті айнымалысы келесі үш әдістің біреуі арқылы анықталады:

NTYPE=FILE OF TC;

NTYPE=TEXT ;

NTYPE=FILE;

Мұнда Text тексттік файлдың стандартты типінің аты. Текст типі type бөліміне жазылиаса да болады.

Баяндау әдісіне байланысты Pascal 7. 0 де файлдың үш түрі бар:

1) типтелген

2) текстік

3) типтелмеген

Паскальда мәліметтің типінің бірі болып сыртқы жады құрылғысында орналасқан бірдей типті компоненттер тізбек құрастыратын файлдық айнымалылар ақпаратты енгізу-шығару үшін қолданылады. Енгізу-шығару әрекетін орындамас бұрын файлдық айнымалысы Assign стандартты процедура көмегімен нақты қандай да бір сыртқы файлмен байланысуы керек. Файлдармен жұмыс жасау үшін келесі жалпы стандартты функциялар мен процедураларды қолдануға болады:

1) ASSIGN (f, name)

2) RESET (f)

3) REWRITE(f)

4) APPEND(f)

5) EOF(f)

6) CLOSE(f)

Типтелген файлдар. Типтелген файлдың кез-келген ұзындығы тұрақты болады. Сондықтан типтелген файлдың компоненттері олардың реттік нөмірі бойынша өңдеуге болады. Енгізу-шығару процедураларына бірінші рет қатынас жасағанда файлдың көрсеткіші файлдың басында тұрады және ол файлдың бірінші компонентіне сілтейді. Енгізу-шығару процедураларына қатынас жасағанда файлдың көрсеткіші файлдың келесі компонентіне жылжиды. Енгізу-шығару стандартты процедуралары енгізу-шығару тізіміндегі айнымалының типтері файл компоненттерінің типтерімен бірдей болуы керек. Келесі стандартты функциялар мен процедуралар типтелген файлдармен жұмыс істеуге көмектеседі:

1) READ

2) WRITE

3) SEEK

4) FILESIZE

5) FILEPOS

Текстік файл. Текстік файл текстік ақпарат сақтау үшін қолданылады және осындай файлдың компоненттік ұзындығы айнымалы болуы мүмкін. Текстік файл жолға бөлінген символдар жиынын құрастырады әр жол соңында белгісі тұрады. Текстік файлмен жұмыс істеу үшін келесі стандартты процедуралар мен функциялар қолданылады:

1) READ

2) READLN

3) WRITE

4) WR3TELN

5) EOLN

6) SEEKEOLN

7) SEEKEOF

Типтелмеген файлдар. Типтелмеген файлдарды баяндағанда файл компоненттерінің типтері көрсетілмейді. Сондықтан типтелмеген файлдар кез-келген файлдармен үйлесімді болады және дискі мен жады арасындағы мәліметтер ауысуының жылдамдығының артуына көмектеседі. Типтелмеген файлдармен жұмыс жасау үшін типтелген файлдарға пайдаланатын стандартты процедуралар мен функциялар қолдануға болады. Ал типтелмеген файлға арналған функциялар BLOCKREAD, BLOCKWRITE.

4. Есептің алгоритімі

  1. Анықтаманы құру.
  2. Анықтама үшін динамикалық база құру.
  3. Анықтама үшін функционалды меню құру.
  4. Меню бойынша сұрыптау түрлерін жүргізу.
  5. Меню бойынша іздеу түрлерін жүргізу.
  6. Экспорт және импорт функцияларын қарастыру.
  7. Жаңа енгізілген ақпаратты сақтау.
  8. Меню функциясының алгоритімін жобалау.
  9. Динамикалық база мәліметтерімен жұмыс істеу үшін жобаланған алгоритмді қолдану
  10. Динамикалық базамен жұмыс істеу үшін файлдарды қолдануды ескеру.
  11. Файлдарды қолдану базаның динамикалық болуына мүмкіндік беруін пайдалану.
  12. Заставка үшін графика қолдану.
  13. Негізгі мақсат оны бүкіл анықтама жүйесі үшін қолдану.
  14. Осы анықтама жүйесін барлық қолданушылар үшін ыңғайлы және интерактивті түрде жасау.

PROGRAM max;

USES CRT, GRAPH;

LABEL

0, 1, 2, 3;

VAR

DETECT, MODE, X, Y, XY, XFIRE, YFIRE, C, MOVE, WIN, AIRXY:INTEGER;

I, J, LIFE:BYTE;

KEY:CHAR;

N, PL, NUM, R:WORD;

NAME, CH:STRING;

MENU:ARRAY[1. . 4] OF STRING;

BEGIN

INITGRAPH(DETECT, MODE, ' ') ;

IF GRAPHRESULT<>GROK THEN HALT(1) ;

CLEARDEVICE;

SETBKCOLOR(0) ;

SETCOLOR(15) ;

TEXTCOLOR(2) ;

N:=10;

RECTANGLE(0, 0, 639, 479) ;

RECTANGLE(0, 451, 639, 453) ;

FOR I:=1 TO 200 DO

BEGIN

X:=RANDOM(638) +1;

Y:=RANDOM(380) +1;

PUTPIXEL(X, Y, 15) ;

END;

SETFILLSTYLE(SOLIDFILL, 0) ;

MOVE:=50;

REPEAT

BAR(304, 400, 336, 450) ;

FOR I:=1 TO 3 DO

RECTANGLE(313+I*3, 400+MOVE, 315+I*3, 430+MOVE) ;

ELLIPSE(320, 408+MOVE, 225, 320, 9, 6) ;

ELLIPSE(320, 420+MOVE, 225, 315, 12, 10) ;

LINE(312, 427+MOVE, 304, 435+MOVE) ;

LINE(304, 435+MOVE, 304, 450+MOVE) ;

LINE(328, 427+MOVE, 336, 435+MOVE) ;

LINE(336, 435+MOVE, 336, 450+MOVE) ;

BAR(304, 454, 336, 478) ;

BAR(304, 452, 336, 452) ;

DELAY(5000) ;

MOVE:=MOVE-1;

UNTIL MOVE=0;

C:=250;

REPEAT

BAR(1, 45, 638, 70) ;

LINE(205-C+MOVE, 50, 210-C+MOVE, 50) ;

LINE(210-C+MOVE, 50, 235-C+MOVE, 70) ;

LINE(205-C+MOVE, 50, 215-C+MOVE, 65) ;

LINE(235-C+MOVE, 70, 215-C+MOVE, 65) ;

LINE(240-C+MOVE, 65, 205-C+MOVE, 65) ;

ELLIPSE(240-C+MOVE, 62, 270, 90, 8, 3) ;

ELLIPSE(232-C+MOVE, 58, 0, 90, 8, 2) ;

LINE(235-C+MOVE, 58, 239-C+MOVE, 58) ;

LINE(232-C+MOVE, 56, 219-C+MOVE, 56) ;

LINE(209-C+MOVE, 56, 200-C+MOVE, 56) ;

LINE(200-C+MOVE, 56, 190-C+MOVE, 50) ;

LINE(190-C+MOVE, 50, 185-C+MOVE, 50) ;

LINE(185-C+MOVE, 50, 193-C+MOVE, 60) ;

LINE(205-C+MOVE, 65, 193-C+MOVE, 60) ;

LINE(192-C+MOVE, 60, 200-C+MOVE, 60) ;

LINE(200-C+MOVE, 60, 192-C+MOVE, 57) ;

ELLIPSE(214-C+MOVE, 60, 0, 360, 5, 2) ;

FOR WIN:=1 TO 10 DO

PUTPIXEL(202+WIN*3-C+MOVE, 58, 15) ;

{DELAY(600) ; }

MOVE:=MOVE+1;

UNTIL MOVE=340;

FOR I:=1 TO 50 DO

FOR J:=1 TO 50 DO

BEGIN

RANDOMIZE;

XFIRE:=RANDOM(9) +316;

YFIRE:=RANDOM(10) ;

SETCOLOR(14) ;

LINE(XFIRE+XY, 399, XFIRE+XY, 399-YFIRE) ;

{DELAY(10) ; }

END;

SETFILLSTYLE(SOLIDFILL, 0) ;

BAR(1, 385, 638, 399) ;

{END; }

SETCOLOR(15) ;

FOR C:=1 TO 600 DO

BEGIN

ELLIPSE(315, 60, 0, 360, C, C) ;

IF C<40 THEN DELAY(100) ;

END;

DELAY(500) ;

CLEARDEVICE;

FOR C:=1 TO 450 DO

BEGIN

PUTPIXEL(320, C, 10) ;

PUTPIXEL(80+C, 240, 10) ;

PUTPIXEL(560-C, 240, 10) ;

PUTPIXEL(320, 480-C, 10) ;

DELAY(900) ;

PUTPIXEL(320, C, 2) ;

PUTPIXEL(80+C, 240, 2) ;

PUTPIXEL(560-C, 240, 2) ;

PUTPIXEL(320, 480-C, 2) ;

END;

R:=200;

FOR C:=0 TO 90 DO

BEGIN

SETCOLOR(10) ;

ELLIPSE(320, 240, C, C, R, R) ;

ELLIPSE(320, 240, 90+C, 90+C, R, R) ;

ELLIPSE(320, 240, 180+C, 180+C, R, R) ;

ELLIPSE(320, 240, 270+C, 270+C, R, R) ;

END;

1:CLEARDEVICE;

SETCOLOR(2) ;

LINE(80, 240, 560, 240) ;

LINE(320, 0, 320, 640) ;

CIRCLE(320, 240, 200) ;

SETTEXTSTYLE(0, 0, 2) ;

SETCOLOR(10) ;

OUTTEXTXY(250, 220, '‘…‰') ;

OUTTEXTXY(330, 250, '‘€ŒŽ‹…’') ;

STR(N, CH) ;

MENU[1] :='ˆƒ€';

MENU[2] :='-ˆ‘‹Ž ‘€ŒŽ‹…’Ž‚ [] ';

MENU[3] :='ŽŒŽ™œ';

MENU[4] :='‚›•Ž„';

GOTOXY(59, 21) ;

SETTEXTSTYLE(0, 0, 1) ;

FOR I:=1 TO 4 DO

BEGIN

SETCOLOR(2) ;

OUTTEXTXY(328, 295+I*15, MENU[I] ) ;

SETCOLOR(10) ;

OUTTEXTXY(328, 295+I*15, COPY(MENU[I], 1, 1) ) ;

END;

SETCOLOR(2) ;

OUTTEXTXY(465, 325, CH) ;

REPEAT

KEY:=READKEY;

IF (KEY='B') OR(KEY='ˆ') THEN GOTO 0;

IF (KEY='X') OR(KEY='-') THEN

BEGIN

GOTOXY(59, 21) ;

READ(N) ;

IF (N>99) OR(N<1) THEN N:=10;

GOTO 1;

END;

IF (KEY='G') OR(KEY='') THEN

BEGIN

CLEARDEVICE;

RECTANGLE(100, 50, 540, 390) ;

RECTANGLE(104, 54, 536, 386) ;

OUTTEXTXY(250, 80, 'Š‹€‚ˆ˜› “€‚‹…ˆŸ') ;

OUTTEXTXY(200, 120, 'ˆ - ˆƒ€') ;

OUTTEXTXY(200, 135, '- -ˆ‘‹Ž ‘€ŒŽ‹…’Ž‚ Ž’ 1 „Ž 99') ;

OUTTEXTXY(200, 150, ' - ŽŒŽ™œ') ;

OUTTEXTXY(200, 165, '‚ - ‚›•Ž„') ;

OUTTEXTXY(200, 180, '‘’…‹Š€ ‚ ‹…‚Ž - € ‹…‚Ž') ;

OUTTEXTXY(200, 195, '‘’…‹Š€ ‚ €‚Ž - € €‚Ž') ;

OUTTEXTXY(200, 210, 'Ž…‹ - ŽƒŽœ') ;

OUTTEXTXY(200, 225, 'ESC - ‚›•Ž„ ‚ Œ…ž') ;

REPEAT

UNTIL READKEY=CHR(27) ;

CLEARDEVICE;

GOTO 1;

END;

IF (KEY='D') OR(KEY='‚') THEN GOTO 2;

UNTIL KEYPRESSED;

GOTO 1;

0:CLEARDEVICE;

C:=250;

MOVE:=0;

XY:=0;

PL:=0;

NUM:=0;

LIFE:=0;

SETCOLOR(15) ;

FOR I:=1 TO 3 DO

RECTANGLE(315+I*3, 400, 315+I*3, 430) ;

ELLIPSE(320, 408, 225, 320, 9, 6) ;

ELLIPSE(320, 420, 225, 315, 12, 10) ;

LINE(312, 420, 304, 435) ;

LINE(304, 435, 304, 450) ;

LINE(328, 427, 336, 435) ;

LINE(336, 435, 336, 450) ;

FOR I:=1 TO 200 DO

BEGIN

X:=RANDOM(638) +1;

Y:=RANDOM(300) +1;

PUTPIXEL(X, Y, 15) ;

END;

REPEAT

SETCOLOR(15) ;

RECTANGLE(0, 0, 639, 479) ;

RECTANGLE(0, 451, 639, 453) ;

OUTTEXTXY(545, 465, 'ESC-‚›•Ž„') ;

OUTTEXTXY(5, 465, '‘€ŒŽ‹…’Ž‚ ‘ˆ’Ž:') ;

STR(NUM, CH) ;

SETFILLSTYLE(SOLIDFILL, 0) ;

BAR(140, 465, 150, 475) ;

OUTTEXTXY(140, 465, CH) ;

OUTTEXTXY(200, 465, '‘Ž‘’ŽŸˆ… ‘€ŒŽ‹…’€:') ;

SETFILLSTYLE(SOLIDFILL, 4) ;

BAR(360, 465, 493, 470) ;

SETFILLSTYLE(SOLIDFILL, 0) ;

BAR(493, 465, 493-LIFE*7, 470) ;

REPEAT

SETFILLSTYLE(SOLIDFILL, 0) ;

BAR(1, 45, 638, 70) ;

LINE(205-C+MOVE, 50, 210-C+MOVE, 50) ;

LINE(210-C+MOVE, 50, 235-C+MOVE, 70) ;

LINE(205-C+MOVE, 50, 215-C+MOVE, 65) ;

LINE(235-C+MOVE, 70, 215-C+MOVE, 65) ;

LINE(240-C+MOVE, 65, 205-C+MOVE, 65) ;

ELLIPSE(240-C+MOVE, 62, 270, 90, 8, 3) ;

ELLIPSE(232-C+MOVE, 58, 0, 90, 8, 2) ;

LINE(235-C+MOVE, 58, 239-C+MOVE, 58) ;

LINE(232-C+MOVE, 56, 219-C+MOVE, 56) ;

LINE(209-C+MOVE, 56, 200-C+MOVE, 56) ;

LINE(200-C+MOVE, 56, 190-C+MOVE, 50) ;

LINE(190-C+MOVE, 50, 185-C+MOVE, 50) ;

LINE(185-C+MOVE, 50, 193-C+MOVE, 60) ;

LINE(205-C+MOVE, 65, 193-C+MOVE, 60) ;

LINE(192-C+MOVE, 60, 200-C+MOVE, 60) ;

LINE(200-C+MOVE, 60, 192-C+MOVE, 57) ;

ELLIPSE(214-C+MOVE, 60, 0, 360, 5, 2) ;

FOR WIN:=1 TO 10 DO

PUTPIXEL(202+WIN*3-C+MOVE, 58, 15) ;

DELAY(600) ;

IF MOVE=700 THEN

BEGIN

MOVE:=0;

PL:=PL+1;

LIFE:=0;

END;

IF MOVE<700 THEN INC(MOVE) ;

IF PL=N THEN GOTO 3;

UNTIL KEYPRESSED;

KEY:=READKEY;

IF KEY=CHR(075) THEN

BEGIN

SETCOLOR(0) ;

FOR I:=1 TO 3 DO

RECTANGLE((313+I*3) +XY, 400, (315+I*3) +XY, 430) ;

ELLIPSE(320+XY, 408, 225, 320, 9, 6) ;

ELLIPSE(320+XY, 420, 225, 330, 12, 10) ;

LINE(312+XY, 427, 304+XY, 435) ;

LINE(304+XY, 435, 304+XY, 450) ;

LINE(328+XY, 427, 336+XY, 435) ;

LINE(336+XY, 435, 336+XY, 450) ;

SETCOLOR(15) ;

IF XY>-300 THEN XY:=XY-5;

FOR I:=1 TO 3 DO

RECTANGLE((313+I*3) +XY, 400, (315+I*3) +XY, 430) ;

ELLIPSE(320+XY, 408, 225, 320, 9, 6) ;

ELLIPSE(320+XY, 420, 225, 330, 12, 10) ;

LINE(312+XY, 427, 304+XY, 435) ;

LINE(304+XY, 435, 304+XY, 450) ;

LINE(328+XY, 427, 336+XY, 435) ;

LINE(336+XY, 435, 336+XY, 450) ;

END;

IF KEY=CHR(077) THEN

BEGIN

SETCOLOR(0) ;

FOR I:=1 TO 3 DO

RECTANGLE((313+I*3) +XY, 400, (315+I*3) +XY, 430) ;

ELLIPSE(320+XY, 408, 225, 320, 9, 6) ;

ELLIPSE(320+XY, 420, 225, 330, 12, 10) ;

LINE(312+XY, 427, 304+XY, 435) ;

LINE(304+XY, 435, 304+XY, 450) ;

LINE(328+XY, 427, 336+XY, 435) ;

LINE(336+XY, 435, 336+XY, 450) ;

SETCOLOR(WHITE) ;

IF XY<300 THEN XY:=XY+5;

FOR I:=1 TO 3 DO

RECTANGLE((313+I*3) +XY, 400, (315+I*3) +XY, 430) ;

ELLIPSE(320+XY, 408, 225, 320, 9, 6) ;

ELLIPSE(320+XY, 420, 225, 330, 12, 10) ;

LINE(312+XY, 427, 304+XY, 435) ;

LINE(304+XY, 435, 304+XY, 450) ;

LINE(328+XY, 427, 336+XY, 435) ;

LINE(336+XY, 435, 336+XY, 450) ;

END;

IF KEY=CHR(32) THEN

BEGIN

FOR I:=1 TO 3 DO

BEGIN

FOR J:=1 TO 50 DO

BEGIN

RANDOMIZE;

XFIRE:=RANDOM(9) +316;

YFIRE:=RANDOM(10) ;

SETCOLOR(14) ;

LINE(XFIRE+XY, 399, XFIRE+XY, 399-YFIRE) ;

DELAY(10) ;

END;

SETFILLSTYLE(SOLIDFILL, 0) ;

BAR(1, 385, 638, 399) ;

END;

FOR AIRXY:=MOVE-55 TO MOVE-15 DO

IF AIRXY=XY+320 THEN INC(LIFE) ;

IF LIFE=20 THEN

BEGIN

MOVE:=0;

LIFE:=0;

INC(PL) ;

INC(NUM) ;

SETCOLOR(15) ;

FOR I:=0 TO 40 DO

BEGIN

ELLIPSE(320+XY, 60, 0, 360, I, I) ;

DELAY(100) ;

END;

SETCOLOR(0) ;

... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Информатика пәнінен лекциялық сабақтардың тезистері
Сұрыптау тәсілдері
“Ат жүрісі”
8 ферзь
Жоғары деңгейлі тілдерінде программалау
Ханой мұнарасы
Паскаль тілі туралы мәлімет
Дүкен чегі
Информатика пәнінен дәрістер кешені
Сұрыптау әдіс тәсілдері
Пәндер



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz