Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмдеу жане багдарламалау негиздери 4 г.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

Тақырыбы: Ағаш. Ағашты қалыптастыру. Қалыпты ағашты құру.

Тапсырмалар:

Екі ағаштың теңдігін тексеретін рекурсивті және рекурсивті емес логикалық функцияны сипаттау.

Бос емес ағашта кем дегенде екі бірдей элемент барын анықтайтын логикалық функция құру.

Функцияны сипаттау:

Т ағашының максимал элементін табатын

• ағаш элементтерінің қосындысын табатын;

• ағаштағы элементтер санын табатын;

• берілген х санының ағашта неше рет кездесетінін.

Әдістемелік нұсқау:

Дұрыс ұйымдастырылған ағаш деп қалыпты ағаш, яғни оң және сол жағында тек бір бұтағы бар ағаш есептеледі.

Мысал. Элементтері пернетақтадан енгізілетін N сан болатын қалыпты ағаш құру.

Шешуі. Қалыпты ағаш құру керек болғандықтан оның бұтақтары бірқалыпты таралу керек. Саны белгілі бұтақтардың бірқалыпты таралу ережесін құрайық:

• бір бұтақты тамыр ретінде аламыз;

п1 = N div 2 бұтақ саны бар сол жақ кіші ағашты осы әдіспен құрамыз;

п2 = N— п1 — 1 бұтақ саны бар сол жақ кіші ағашты осы әдіспен құрамыз.

Program Example;

Uses Crt; Type Pt=^Node;

Node=Record

Data:Integer;

Left, Right: Pt;

End;

Var n:Integer;

kd:Pt;

f:text;

Function Tree (n:Integer) :pt;

Var newnode:pt;

x,nl,n2:Integer;

Begin

If n=0 Then Tree:=nil Else

Begin

nl:=n Div 2; n2:=n-nl-l; Read(f,x); New(newnode);

With newnode^ Do

Begin

Data:=x; Left:=Tree(nl); Right:=Tree (n2);

End;

Tree:=newnode;

End;

End;

Procedure PrintTree(t:pt; h:Integer);

Var i:Integer;

Begin

If t<> Nil Then With t^ Do

Begin

PrintTree(left,h+l);

For i:= 1 To h Do Write (' ');

Writeln(Data:6); PrintTree(Right,h+1);

End;

End;

Begin

Clrscr; Assign(f,'c:\f.pas');

Reset (f); Write(‘n=’);

Readln(n); kd:=tree(n); printtree (kd,)0; Readln;

End.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

14 жұмыс

Тақырыбы: Кестеден іздеу. Жолды жою, біріктіру, алмастыру.

Тапсырмалар:

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

Пернетақтадан енгізілген жолдың басындағы бос орындарды жоятын программа құру.

n натурал саны және s1, s2, …, sn символдары берілген. Әр s1, s2, …, sn тізбегіндегі child әріптер тобын children әріптер тобына алмастыру керек.

n натурал саны, s1, s2, …, sn символдары берілген. s1, s2, …, sn тізбегін * символын жойып, -дан басқа символдарды қайталап жазу керек.

n натурал саны, арасында кем дегенде бір нүктесі бар s1, s2, …, sn символдары берілген. s1, s2, …, sn тізбегін нүктенің алдында тұрған үтірлерды жойып, алғашқы нүктеден кейінгі 3 сандарын + символымен алмастыратын программа құру.

Әдістемелік нұсқау:

Мысал: №1 тапсырма

Program Pr_l;

var

st: string[80];. {мәтін}

len: integer; {жол ұзындығы }

i: integer; {өңделетін символ нөмірі}

begin

writeln('Жол мәтінін енгіэіп <Enter> пернесін бас ');

write('->');

readln (sto­len :=Length(st) ;

for i:=i to len do

case st[i] of

'a' . .'n' : st [i] :=chr(ord(st[i])-32);

'р' .. 'я' : st [i] :=chr(ord(st[i])-80);

end;

writeln ('Жоғары тіркелімге өзгертілген жол:');

writeln (st);

readln;

end.

Мысал: №2 тапсырма

program Рг_2; {Жолдың басындағы бос орындарды жою}

var

st:stting[80]; {жол}

begin

writeln(Жолдың басындағы бос орындарды жою.');

write('Жолды енгіз:');

readln(st);

while (pos(' ',st)=1) and (length(st)>0) do delete (st,1,1) ;

write('Бастапқы пробелсіз жол: ',st);

readln;

end.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

15 жұмыс

Тақырыбы: Тікелей таңдау көмегімен сұрыптау алгоритмінің программасын құру.

Тапсырмалар:

Массивтерді реттеумен байланысты негізгі түсініктерді жазу.

Массивті өсі ретімен реттеу кезінде а1, …, ап элементтерін салыстыру және алмастыру санын зерттеу. Реттеу алгоритміндегі алмастыру саны сызықтық функциямен шектелгенін көрсету қажет. Сонымен қатар кейбір жағдайда (мысалы а1 > а2 > . . . >ап массивінде) таңдау арқылы реттеу алгоритмінде салыстырулар саны квадраттық функция болады.

п х т өлшемді матрица берілген; матрица жолдарын жолдың алғашқы элементтерінің кемімеуі бойынша реттеу.

п х т өлшемді матрица берілген; матрица жолдарын жол элементтерінің қосындысы өспеуі бойынша реттеу.

п х т өлшемді матрица берілген; матрица жолдарын жолдағы ең кіші элементтердің кемімеуі бойынша реттеу.

п х т өлшемді матрица берілген; жолдарын жол элементтерінің ең үлкенінің өспеуі бойынша реттеу.

Әдістемелік нұсқау:

Бұл әдіспен жұмыс сол 1-кестедегі сегіз кілтпен жүзеге асады. Алгоритм келесідей құрылады:

FOR i := 1 ТО n-1 DO

k-ға a[i] . . . а[п] кішісінің индексін беру

a[i] және a [k]орындарын алмастыру

END;

1-кесте. Тура таңдау әдісімен реттеу

Б астапқы кілттер 44 55 12 42 94 18 06 67

i = 2 06 55 12 42 94 18 44 67

i = 3 06 12 55 42 94 18 44 67

i = 4 06 12 18 42 94 55 44 67

i = 5 06 12 18 42 94 55 44 67

i = 6 06 12 18 42 44 55 94 67

i = 7 06 12 18 42 44 55 94 67

i = 8 06 12 18 42 44 55 67 94

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

Листинг. Тура таңдау арқылы реттеу

PROCEDURE StraightSelection;

VAR i, j, k: index; x: item;

BEGIN

FOR i := 1 TO n-1 DO BEGIN

k := i; x := a[i];

FOR j:=i+1 TO n DO

IF a[j] < x THEN BEGIN

k := j; x := a[k] END;

a[k] := a[i]; a[i] := x

END

END; {StraightSelection}

№2 есебі бойынша таңдап реттеу алгоритмі алмастыру немесе қосу арқылы реттеуден элементті көшіру оны салыстырудан күрделірек болған жағдайда ыңғайлы екендігі шығады. 3-6 тапсырмаларды орындағанда қолданылады.

№4, 5, 6 Тапсырмаларда қосымша а1, …, ап сандық массивін қолдануға болады.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

16 жұмыс

Тақырыбы: Тікелей алмасу көмегімен сұрыптау.

Тапсырмалар:

1. а1, ..., аn , р, нақты сандары, k натурал саны (a1 <a2<.. .<аn, k<n) берілген. а1,..., ап –дан k нөмірлі элементті жою (яғни ak) және р элементін реттілік бұзылмайтындай орналастыру.

2. Қарапайым қою арқылы реттеу алгоритмін келесідей өзгертуге болады. Реттелген а1, ..., аn-1 жиынына аi қою үшін жартылай бөлу алгоритмі қолданылады. Реттеудің жаңа алгоритмі пайда болады, ол бинарлы қойылымдар арқылы реттеу алгоритмі деп аталады( «бинарлық қойылым» мәнін «жартылай бөлу» мәнімен қарастыру керек). Бұл алгоритм п log2 п салыстырауларды қажет етеді. Осы алгоритм программасын жазу.

3. а1, ..., аn бүтін сандары берілген. Осы аралықтағы сандарды өсу ретімен орналастыру.

Әдістемелік нұсқау:

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

Аталған тура таңдау әдісіндегідей, массивтегі қалған тізбектің ең кіші элементін массив соңына ығыстыру арқылы жүреміз. Массивтерді горизонталь емес, вертикаль деп қарастырсақ, суы бар ыдыстың көпіршігін мысалға алуға болады, әрқайсысының салмағы оның кілтіне байланысты. Бұл жағдайда әр қадам сайын әр көпіршік өз салмағына сәйкес дәрежеге көтеріледі (кестеде).

i=

1

2

3

4

5

6

7

8

44

06

06

06

06

06

06

06

55

44

12

12

12

12

12

12

12

55

44

18

18

18

18

18

42

12

55

44

42

42

42

42

94

42

18

55

44

44

44

44

18

94

42

42

55

55

55

55

06

18

94

67

67

67

67

67

67

67

67

94

94

94

94

94

Кесте. Көпіршікті реттеу мысалы.

Бұндай әдіс көпіршікті реттеу атымен танымал. Жалпы жағдайы листингте келтірілген.

Листинг. Көпіршікті реттеу

PROCEDURE BubbleSort;

VAR i, y. index; x: item;

BEGIN

FOR i := 2 TO n DO

FOR j:= n DOWNTO i DO

IF a[j-1] > a[j] THEN BEGIN

x := a[j-1];

a[j-1]:=a[j];

a[j]:=x

END

END; {BubbleSort}

Алгоритмнің толықтырулары өзі шығады. Кесте бойынша соңғы үш элемент ретке қатыса алмайды, себебі ол реттелген. Алгоритмді толықтыру – бір жүріс кезінде орын ауыстыру болған не болмағанын есте сақтау керек. Егер соңғы жүрісте алмастыру болмаса, алгоритмді тоқтатуға болады. Сонымен қатар соңғы алмастырудың орнын (индексін) есте сақтаған дұрыс. Бұл k индексінен жоғар элементтер жұптары реттеліп тұрғаны белгілі. Сондықтан z үшін анықталған соңғы шекке бармай-ақ, осы индексте аяқтауға болады. Бұл жерде өзінідік ассиметрия бар. Массивтің ауыр соңындағы элемент қажетті орнына бір жүрісте ауысса, жеңіл соңғы элементі қадамдап ауысады. Мысалы 12 18 42 44 55 67 94 06 массивін жетілдірілген көпіршікті реттеу арқылы бір жүрісте реттеуге болады, ал 94 06 12 18 42 44 55 67 массивін реттеу үшін жеті жүріс қажет. Бұндай ассиметрия үшіні толықтыруға жетелейді: тізбекті жүрістердің бағытын кезектестіру.

№3 тапсырмада қою арқылы реттеу алгоритмін қолданған ыңғайлы (егер п үлкен болса, бинарлы қою, п < 50 болса қарапайм қою). Реттеу барысында бір рет кездескен элементтерді қалдырып отырады. Егер at орнын іздеу нәтижесінде а1, ..., аk реттелген жиынында a1, .... ak аралығында аi элементі кездесетін болса, онда ai+1 элементін ai ,..., ak тізбегін өзгертпей қарастырамыз.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

17 жұмыс

Тақырыбы: Деректердің файлдық типі. Файлды ашу, оқу және жазу.

Тапсырмалар:

Берілген тақырыптың жоспарын құрыңыз (файлдармен жұмыстың негізгі операторларын негізгі түсініктерді көрсетіңіз)

Бүтін сандар файлын оқып, экранға шығарыңыз.

Danl.dat атты бүтін сандар файлын құрамыз, мұнда сандар 0-ге тең емес.

Danl.dat файлында бүтін сандар жазылған, олардың қосындысын тауып, нәтижені бастапқы деректермен қосып Dan2.dat файлына жазу.

Компоненттері бүтін сан болатын F файлы берілген. Табу керек:

а) Элементтер санын;

б) ең үлкен элементін, олра бірнешеу болса, олрадың санын;

в) элементтердің арифметикалық ортасын.

Әдістемелік нұсқау:

№2 тапсырмалар шешуін қарастырайық:

Assign (Fl, 'a:int.dat ' ) ; { файлмен байланыстырамыз}

Reset (F1); {оқуға ашамыз}

While Not EOF (F1) Do { F1 файлының соңына дейін}

Begin

Read(Fl,n); {келесі санды оқимыз}

Write(n,' '}; {экранға шығарамыз}

End;

Close(Fl); { файлды жабамыз}

№3 тапсырмалар үшін файлдық айнымалыны сыртқы файлмен Assign процедурасы арқылы «жалғаймыз». Файлды жазуға Rewrite арқылы ашамыз. Сандарды енгізудің соңы – нөл саны.

Program Example;

Var F: File Of Integer;

n: Integer;

Begin

Assign(F, 'a:danl.dat'); {сыртқы файлмен жалғаймыз}

Rewrite(F); {жазуға ашамыз}

Writeln('сандарды енгізу соңы - 0');

Repeat { 0 болғанға дейін}

Writeln(санды енгізіңіз);

Readln(n); {санды енгізу}

{егер енгізілген сан 0-ден өзге болса, F1 файлының қатарына жазамыз}

If n<>0 Then Write(F, n);

Until n=0; {егер 0 енгізілсе, файлды жазу тоқтатылады}

Close(F); { файл жабылады}

End.

№4 тапсырмаларды шешу мысалы

Program Example;

Var Fl, F2: File Of Integer; {файлдық айнымалылар}

S, N: Integer;

Begin

{Fl файл атымен дискетадағы сыртқы файл жалғанады}

Assign(Fl, 'Danl.dat' ) ;

Reset(Fl); { Fl файлын оқуға ашу}

{ F2 файлымен дискетадағы сыртқы файл жалғанады} Assign(F2, 'Dan2 . dat1);

Rewrite(F2); { F2 файлын жазуға ашу}

S:=0;

While Not EOf(Fl) Do { Fl файлының соңын тексеру}

Begin

Read(Fl,N); { Fl файлынан оқу }

Write(F2,N); { F2 файл ына жазу}

S:=S+N; {қосындысын есептеу}

End; {элементтер қосындысын F2 файлының соңына жазу}

Write(F2,S);

Write('Нәтиже Dan2.dat файлында')

Close(F1); { F1 оқу файлын жабу}

Close(F2); { F2 жазу файлын жабу}

Readln;

End.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

18 жұмыс

Тақырыбы: Тексттік файлдар.

Тапсырмалар:

1. F и G символдық файлдар берілген. Н файлына

а) F және G файлдарының барлық компоненттерін;

б) F файлының барлық латын әріптерін жазу.

2. А бүтінсанды файлы берілген. В файлына жұп сандарды, С файлына тақ сандарды жазу.

3. Бүтінсанды мәтіндік файл берілген, әр қатарда бос орынмен ажыратылған бірнеше сан болуы мүмкін. әр қатардағы элементтер санын есептеп, барлық сандарды экранға шығару.

4. Паскаль тіліндегі программа жазылған мәтіндік файл берілген. Осы программаны ашылған және жабылған жақшалардың сәйкессіздігіне тексеру керек. Программаның әр операторы бір жолдан артық болмайды.

Әдістемелік нұсқау:

№3 тапсырмалардың шешуін қарастырайық:

Файлда келесі ақпарат болсын:

-32

16

0

8

7

4

5

9

13

11

-5

-8

6

-8

0

-12

5

4

3

2

1

12

1

2

-1

-2

-4

-1

-2

4

Бұл файлды Turbo Pascal –да келесідей жазуға болады:

• жаңа файл құру (New командасы, File мәзірі)',

• сандарды бос орындармен бөліп жазу;

• сақтау, мысалы: «а: intl.dat».

Осы файлды программада қолданамыз:

Program Example_3;

Var F: Text;

x, k: Integer;

Begin

Assign(F, 'a: intl.dan'); {сыртқы файлмен жалғау}

Reset(F); {оқуға ашамыз}

While Not Eof(F) Do { файл соңына дейін}

Begin

k:=0; {қатар элементтерінің бастапқы саны}

While Not Eoln(F) Do {қатар соңына дейін)

Begin

Read(F, x); {келесі санды оқу}

Write(х,' '); {экранға шығару}

Inc(k); {есептегішті қосу}

End;

Writeln (' жолда1, k, 'элементтер');

Readln(F); {файлдың келесі қатарына өту}

End;

Close (F); {файлды жабу}

Readln;

End.

№4 есеп шарты бойынша әр оператор бір қатарда тұратындықтан, бір қатардағы ашылатын және жабылатын жақшалар санын есептейміз. Жақшалар қойылымын тексергенде жабылатын жақшалар саны ашылған жақшалар санынан аспауы керектігі ескеріледі. Сонымен қатар бұл файл алдын ала жазылуы тиіс.

Program Example_4;

Var F: Text;

kl, k2, n: Integer;

Ch: Char;

Logic,Pp: Boolean;

Begin

{ F файл атымен сыртқы файл жалғанады}

Assign(F, 'a: ...');

Reset (F); { F файлын оқуға ашу}

n:=0; {қатар санын есептеу}

Logic:=True; {қате болмағанша True мәні}

While Not Eof(F) Do { файла соңына дейін}

Begin

Inc(n); {қатар санын көтереміз}

K1:=0; {ашылатын жақшалар саны}

K2:=0; { жабылатын жақшалар саны }

Pp:=False; {Рр қатардағы жақша қойылымының қателігін анықтайды, қазір болмағандықтан, бастапқы мәні False }

While Not EOLN (F) Do {қатар соңы болмағанша}

Begin

Read (F, Ch); {қатардың кезекті символы}

{ ашылған жақша кездессе, есептегіш ұлғаяды}

IF CH=’(‘ Then INC (K1);

{ашлыған жақшадан бұрын орналаспаған жабылған жақша кездессе, k1<k2 болады, сондықтан есептегіш өседі, немесе Рр мәні True болады}

If (Ch=’)’) Then IF (k1<k2) Then Inc(k2) Else Pp:=True;

End;

{егер барлық жабылатын жақша қойылмаса, не ол ашылған жақшадан кейін орналасса (k1<>k2), қате табылады}

If (k1<>k2) or Pp then

Begin

Writeln(‘‘,N,’жолында қате ‘);

{қатардағы қате}

Logic:=False;

End;

Readln (F); {келесі қатарға өтеміз}

End; {мәні ақиқат болса, қате болмайды}

If Logic Then Writeln (‘Жақша дұрыс қойылған’);

Close (F); {файл соңы}

Readln;

End.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

19 жұмыс

Тақырыбы: Типтік және типтік емес файлдар.

Тапсырмалар:

Компоненттері бүтін сан болатын файл берілген. Табу керек:

а) компоненттердің ең үлкен (ең кіші) мәнін;

б) компоненттердің арифметикалық ортасын;

в) барлық жұп компоненттерді (үшке бөлінетін компоненттерді);

г) файлдың соңғы компонентін;

д) нақты квадрат болатын компоненттерді.

Компоненттері нақты сан болатын файл берілген. Табу керек:

а) компоненттер модульдерінің үлкенін;

б) алғашқы және соңғы компоненттердің айырымын;

в) теріс мәнді компоненттерді;

г) жұп нөмірлі компоненттердің қосындысын.

f символдық файлы берілген :

а) f файлының компоненттерін g файлына кері тәртіппен жазу;

б) f файлының бас әріптерін кіші әріптермен алмастырып, g файлына жазу;

в) соңына e, n, d символдарын қосу;

г) ең ұзақ сөзді табу (сөз ретінде бос орынсыз жазылған симолдар тізбегі алынады)

1-3 тапсырмаларын типтік және типтік емес файлдар арқылы орындау.

F символдық файлы берілген. f файлының элементтерін G файлына аударып жазу.

Әдістемелік нұсқау:

Типтік (типтік емес) файлдарды пернетақтадан енгізу мүмкін болмағандықтан, екі мүмкіндік бар: программа мәндерді есептеп, файлға жазады немесе дайын мәтіндік файлдағы мәндер типтік (типтік емес) файлға жазылады.

Барлық тапсырмаларда файл деректерін өңдеу кезінде массив қажет емес, скаляр айнымалы жеткілікті.

1(г), 2(б), 3(в) тапсырмаларында файл элементтерін тізбектік оқымауға бола ма?

1(д) тапсырмасында Trunc орнына Round функциясын қолдану керек, тексерілетін шар келесідей болады: Sqr(Round(Sqrt(A))) = A, бұнда A - файл компоненті.

2(а) тапсырмасын шешу мысалы:

program Labor091;

var

F: Text;

G: file of Double;

Max, A: Double;

begin

Assign(F, 'labor091.in'); Reset(F);

Assign(G, 'labor091.out'); Rewrite(G);

{ типтік файла құру}

while not SeekEof(F) do

begin

Read(F, A); Write(G, A)

end;

Close(G); Reset(G);

Max := 0;

{ типтік файлды өңдеу}

while not Eof(G) do

begin

Read(G, A); A := Abs(A);

if Max < A then Max := A

end;

WriteLn('Модуль бойынша ең жоғары мән =', Max)

end.

2(а) тапсырмсын шешу мысалы:

program Labor092;

const N = 10000; NumBuf = 100;

var

F: file;

Buf: array[1..NumBuf] of Double;

K, L: 1..N;

Max, A: Double;

begin

{файл жазбасының ұзындығы буфер массивіне тең}

Assign(F, 'labor092.bin'); Rewrite(F, 8 * NumBuf);

{файл мәндерін есептеп, Buf буфері тоуына қарай шығарамыз }

L := 1;

for K := 1 to N do

begin

Buf[L] := Sin(K);

L := L + 1;

if L > NumBuf then

begin

L := 1; BlockWrite(F, Buf, 1)

end

end;

{файл жазбасының ұзындығы A элементінің өлшеміне тең}

Close(F); Reset(F, 8);

Max := 0;

{типтік емес файлды өңдеу}

while not Eof(F) do

begin

BlockRead(F, A, 1); A := Abs(A);

if Max < A then Max := A

end;

WriteLn('Модуль бойынша ең жоғары мән =', Max)

end.

әдебиет:

1.Негізгі – 3, 5, 9-12

Қосымша – 4

20 жұмыс

Тақырыбы: Кіру және шығу файлдарымен жұмыс.

Тапсырмалар:

1. компоненттерінақты сан болатын f файлы берілген. Табу керек:

а) f файл компоненттерінің қосындысын;

б) f файл компоненттерінің көбейтіндісін;

в) f файл компоненттерінің квадраттарының қосындысын;

г) f файл компоненттерінің қосындысының модулін және көбейтіндісінің квалратын ;

д) файлдың компонентін.

2. компоненттері нақты сан болатын f файлы берілген. Таабу керек:

а) компоненттерінің ең үлкенін;

б) жұп нөмірлі компоненттерінің ең кішісін;

в) теріс нөмірлі компоненттерінің модулінің ең үлкенін;

г) компоненттерінің ең үлкенінің және ең кішісінің қосындысын;

д) файлдың алғашқы және соңғы компоненттерінің қосындысын.

3. Компоненттері бүтін сан болатын файл берілген. Табу керек:

а) жұп компоненттерінің санын;

б) екі еселенген тақ сандардың санын;

в) тақ сандардың квадраттарының санын.

4. x1, х2, ... тізбегі Xi = (i = 1, 2, … ) заңымен құрылған. g > 0 берілген. h файлына x1, х2, ... тізбегінің |xi|< е орындалатын мүшелерін жазу керек.

5. f символдық файлы берілген. Файл көшірмесін g файлына жазу.

Әдістемелік нұсқаулар:

№5 есеп. Компоненттері символ болатын файл символдық деп аталады.

Мысал: файл құрып, әр компонентінің элементтерінің қосындысын табу.

PROGRAM FL_MAS;

type mas=array[1..10] of integer; fil=file of mas;

var a:mas;

f:fil;

i,j:integer;

s:integer;

BEGIN

assign(f,'mas.dat');

reset(f);

j:=i;

while not eof(f) do

begin read(f,a); s:=0;

for i:=l to 10 do

s:=s+a[i];

writeln(' ' j нөсірлі компоненттердің сомасы 'тең ',s);

j:=j+l

end;

close(f)

END.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

21 жұмыс

Тақырыбы:Тізбекті және файлды сұрыптау

Тапсырмалар:

1. g файлын сұрыптауға келесі алгоритм қолданылады: h, a, b—қосымша файлдар болсын. g файлының компененттері алдымен а, b файлдарына: жұп нөмірлі компоненттер а файлына, тақ нөмірлі компоненттер b файлына жазылады. Бұл компоненттер реттелген болып қарастырылады. a, b – 1-реттелген. Алдынға есептегі алгоритм бойынша g и h файлдары 2-реттелген, т.с.с болады.

Алгоритмді программа ретінде құру.

2. Компоненттері бүтін сан болатын а және b файлдары кемімейтіндей реттелген. С файлына осы екі файл сандарын қайталамай жазу. С файлы өсуі бойынша реттелуі керек.

3. Компоненттер бүтін сан болаты f файлы берілген. F файлының тақ сандарын g файлына жазу. g файлындағы сандар

а) өспейтін;

б) қайталанбай кемитін болуы керек.

4. Компоненттері кіші латын әріптері және бос орындар болатын f символдық ыайл берілген. f файл сөздері 16 әріптен аспайды, осы сөздерді g файлына лексикографикалық ретпен жазу.

Әдістемелік нұсқау:

№1 тапсырма бойынша нұсқаулары қажет. Реттелген топтар саны №21 СРС, №3 тапсырмадағы алгоритм бойынша кемитіндіктен, барлық компоненттер бір файлда реттелген топ болып жинақталады.

Бұл алгоритм Фон Нейманның масситерге алгоритміне ұқсас, және қосып реттеу алгоритміне жатады.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

22 жұмыс

Тақырыбы: Кнут-Морис-Пратт алгоритмін қолдану.

Тапсырмалар:

1. КМП алгоритмін А сөзі В сөзінің ішкі сөзі болатыны анқытауға қалай қолданады?

2. l[1]. . . l[n] кестесін толтыру алгоритмін құру.

Әдістемелік нұсқау:

№1 тапсырмада КМП алгоритмін А#В сөзіне қолданамыз, бұндағы # - А сөзінде де, В сөзінде де кездеспейтін арнайы символ. А сөзі В сөзінің ішкі сөзі болады тек, егер 1 массиві сандарының ішінде А ұзындығына сәйкес сан табылса.

№2 тапсырмада l[1]..l[i] –ң алғашқы і мәндері табылған дейік. Сөздің кезекті әрпін (яғни x[i +1]) оқып, l [li +1] есептеуіміз керек.

Басқаша айтқанда х[1]..х[i+1] сөзінің басы және аяғы болатын Z қажет. Олардың әрқайсысы қандайда бір Z сөзіне x[i+1] әрпін қосу арқылы алынады. Z сөзі х [1].. x[I] сөзінің басы және аяғы болады.

Бірақ x[l]..x[i] сөзінің басы және аяғы болатын кез келген сөз қажет емес, одан кейін x[i+l] әрпі болуы шарт.

Z сөзін іздеу әдісін алдық. х [1]..х [i] сөзінің бір мезгілде аяғы да болатын барлық бастарын қарайық. Олардан қажеттісін аламыз. Қажеттілердің арасынан ең ұзағы таңдалады. Оның соңына х [i + 1] қосып жазып, Z

Ізделінді сөзін аламыз.

Алдынғы дайындықтарды қолданып, бір мезгілде басы және аяғы болатын сөздерді п функциясын қайталап қолдану арқылы алуға болады:

i:=l; 1[1] :=0; { l[l]..l[i] кестесі дұрыс толтырылған}

while i<>n do begin

len:=l[I];

{leri - x[l]..x[i] сөзінің аяғы да болатын басының ұзындығы}

while (x[len+l]<>x [i + 1] ) and (len>0) do

begin

{басы сәйкес болмады, n қолданамыз}

len:=l [len] ;

end;

{сәйкесі табылды немесе жоқ екндігі дәләлденді}

if x[len+l]=x[i+l] do begin

(x [1 ] . .x [len] ең ұзын сәйкес басы}

1 [i+l] :=len+l;

end else begin {сәйкесі жоқ}

l[I+1]:=0;

end;

I:=I+1;

end;

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

23 жұмыс

Тақырыбы: Іздеу алгоритмдерінің таралымы.

Тапсырмалар:

pos массиві қалай толтырылады?

Мысал сөзге кірмейді, бірақ алгоритмнің mn әрекетінен кейін ол орындалады.

Әдістемелік нұсқау:

Бұл алгоритмнің барлық жағдайда тез нәтиже бермейтін ең қарапайым вариантын келтіреміз. x[1]...х[n] – ізделінді мысал болсын. Әрбір s символына X сөзіне алғашқы енуін, яғни х[k]=s болатын ең үлкен k іздейміз.бұл мәліметтерді pos[s] массивіне сақтаймыз; егер s символы кездеспесе, pos[s]=0 қойған ыңғайлы.

  №1 тапсырмалар шешуі:

Барлық pos[s] 0-ге тең

for i:=1 to n do begin

pos[x[i]]:=i;

end;

Іздеу барысында last айнымалысына сөздегі мысалдың соңғы әрпіне қарсы тұрған әріптің нөмірін жазамыз. Бастапқы last=n (мысал ұзындығы), содан last біртіндей көбейеді.

last:=n;

{мысалдың алдынғы жағдайлары тексерілген}

while last<= m do begin {сөз аяқталған жоқ}

if x[m]<>y[last] then begin {соңғы әріптер әр түрлы}

last:=last+(n-pos[y[last]]);

{n - pos[y[last]] – бұл мысалдың y[last] –қа қарама қарсы осындай әріп тұратын минимал жылжуы. Бұндай әріп болмаса, мысалдың бүкіл ұзындығына жылжытамыз}

end else begin

бұл жағдай сәйкес болса, яғни

x[i]..х[n]=y[last-n+1]..y[last],

сәйкестік туралы хабарлау;

last:=last+1;

end;

end;

Сәйкестікті оңнан солға қарай, яғни соңынан басына қарай тексерген дұрыс. Сонымен қатар айырманы алдын ала орындаып, pos[s] емес, n-pos[s]-та сақтап, үнемдеуге болады. Бұл алгоритмнің әр түрі мүмкін болады. Мысалы

last:=last+i қатарын

last:=last+(n-u) қатарына алмастыруға болады,

бұнда u - x[n] әрпінің мысалдағы екінші орны.

 

Бұны программада қалай қамтуға болады

Шешуі. pos кестесін құрғанда

for i:=1 to n-1 do...

(ары қарай алдынғыдай), ал негізгі программмада

last:=last+1 орнына

last:=last+n-pos[y[last]] жазылады;

Бойера – Мура алгоритмінің келтірілген қарапайым түрі кейбір жағдайларда Кнут-Моррис-Пратт алгоритмінен жеңіле отырып біраз n әрекетті қажет етеді (әрекеттер саны mn).

№2 тапсырмалар шешуі.

Мысал baaa... aa түрінде болсын, ал сөздің өзі тек а әріптерінен тұрады. Онда әр қадамда сәйкессіздік тек соңғы қадамда табылады.

Жеңілдетілмеген Бойер-Мур алгоритмі әрекеттер саны C(m+n) аспайтынына кепілдік береді. Ол Кнут-Моррис-Пратт алгоритміне ұқсас орындалады. Мысалды сөзбен оңнан солға қарай салыстырдық делік. Сонда мысалдың соңы болатын қандайда бір Z бөлігі сәкестенді де, одан кейін сәкессіздік табылды: мысалда Z алдында сөздегідей емес элемент тұр. Сөз туралы не айтуға болады? Бұл ақпарат мысалды бірнеше орынға оңға жылжытуға мүмкіндік береді. Жылжытуларды мысалдың әрбір Z соңына алдын ала есептеу қажет. Бұлардың барлығын (жылжыту кестесін есептеп, қолдану) C(m+ n) әрекетте жасауға болады.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

24 жұмыс

Тақырыбы: Іздеу алгоритмдерінің таралымы.

Тапсырмалар:

х [1]..х[n] симводар тізбегі берілген. Осында тізбектескен 'abcd' символдары кездесетінідігін анықтау керек (х[1]...х[n] сөзінде 'abcd' ішкі сөзі бар ма).

Сәйкес автоматты және ауысу кестесінің жағдайын көрсеті.

Мысалдаға қайталанулар проблемелар туғызады. 'abcd' сөзін кез келген сөзбен алмастыруға бола ма?

Әдістемелік нұсқау:

№1 тапсырма. Бастапқы сөзде ізделінді ішкі сөз болуы мүмкін п (п — 3) орын бар. Әр орынды төрт символды салыстыру арқылы тексеруге болады. Бірақ одан тәуір әдіс бар. х [1]..х [n] сөзін солдан оңға қарай оқи отырып 'а' әрпін іздейміз, ол пайда болғанда 'b', содан 'с' және 'd' әріптерінің кездесуін күтеміз. Егер күтім ақталса, 'abсd' сөзі анықталған. Егер бір әріп кездеспей қалса, тексеруді жаңадан бастаймыз.

Осы қарапайым алгоритмді әртүрлі терминмен сипаттауға болады. Шекті автоматтар терминологиясын қолдана отырып, х сөзін солдан оңға қарай оқығанда біз келесі жағдайлардың бірінде боламыз: «бастапқы» (0), «'а' кейін» (1), «'ab' кейін» (2), «'abc' кейін» (3)және «'abсd' кейін» (4). Кезекті әріпті оқи отырып келесі жағдайға мына ережемен өтеміз:

Ағымдық

жағдай

Кезекті әріп

Жаңа

жағдай

0

а

1

0

а –дан басқа

0

1

b

2

1

b

1

1

a, b-дан басқа

0

2

с

3

2

а

1

2

а, с-дан басқа

0

3

d

4

3

а

1

3

a, d-дан басқа

0

4 жағдайға келгенде жұмыс тоқтайды.

Программасы:

i:=l; state:=0;

{i – алғашқы әріп, state - жағдай}

while (i <> n+1) and (state <> 4) do begin

if state=0 then begin if x[i]=a then begin state:=1; end

else begin state:=0; end;

end

else if state=l then begin

if x[i]=b then begin state:=2; end

else if x[i]=a then begin state:=1; end

else begin state:=0; end;

end

else if state=2 then begin if x[i]=c then begin state:=3; end

else if x[i]=a then begin state:=1; end

else begin state:=0; end;

end

else if state=3 then begin

if x[i]=d then begin state:=4; end

else if x[i]=a then begin state:=1; end

else begin state:=0; end;

end;

end;

answer: = (state = 4);

Басқаша айтқанда, әр уақытта 'abсd' мысалының максимал басы оқылған бөліктің соңы болатыны туралы ақпаратты сақтаймыз.

№2 тапсырма бойынша.

Оқылған бөліктің соңы болатын мысалдың ең үлкен басы пайдаланады. Олар алтау: 0, 1 ('а'), 2 ('ab'), 3 ('aba'), 4 ('abab'), 5 ('ababc').

Ағымдық жағдай

Кезекті әріп

Жаңа жағдай

0

a

l(a)

0

а –дан басқа

0

1(а)

b

2 (ab)

На)

a

l(a)

1 (а)

a, b-дан басқа

0

2 (ab)

a

3 (aba)

2(ab)

а –дан басқа

0

3 (aba)

b

4 (abab)

3 (aba)

a

l(a)

3 (aba)

a, b –дан басқа

0

4 (abab)

с

5 (ababc)

4 (abab)

a

3 (aba)

4 (abab)

а, с-дан басқа

0

Салыстыру үшін екінші қатарды қарайық. Егер оқылған бөлік 'abab' деп аяқталып, одан кейін 'а' әрпі кездессе, ендігі оқылған бөлік 'ababa' болады. Соңы болатын мысалдың ең үлкені - 'aba'.

Мысалдың әрқайсысы ақиқат болатын бірнеше жағдайы бар дедік. Оларға берілген сөздің аяғы болатын мысалдың бірнеше басы сәйкес келеді. Бірақ автомат тек олардың ең ұзынын біледі, ал басқалары қайда?

Ең ұзыны қалғандарын анықтайды, олар оның соңдары болады.

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

X сөзінің басы да, аяғы да болатын бөлігін қарастырып, ұзынын таңдаймыз. Ол п(Х) а белгіленеді.

Мысалы: n(aba) = а, n(аbаb) = ab, n(ababa) = aba, n(abc) = бос сөз.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

25 жұмыс

Тақырыбы: Рекурсивті алгоритмдерді құрастыру. Шахмат атына арналған есеп.

Тапсырмалар:

Шахмат аты есебі. Шахмат тақтасын атпен әр алаңда бір рет болып айналып өтуге болады. Тақтаны айналудың мүмкін әдістерін шығаратын программа құру.

Аттилы ат есебі («Атымның аяғы басқан жерде шөп өспейді!»). шахмат тақтасында ақ ат пен қара хан тұрады. Тақтаның кейбір алаңдарында «өрт бар». Ат қарсы ханға барып ұтып, орнына келуі керек. Сонымен қатар «өрт бар» және бір бер басқан алаңға баруға болмайды.

Магараджа — ат пен ферзь жүрістерін біріктіретін фигура. 10 х 10 тақтасына 10 тыныш магараджа қойылымын табу керек.

Әдістемелік нұсқау:

№1 тапсырма

Деректер құрылымы. Аттаң өткендігі туралы ақпаратты білуіміз керек: [i, j] алаңында болды ма?

[i, j] алаңынан ат максимал варианттан сегіз алаңға өте алады. di[1..8], dj[1..8] массивтерінде аттың келесі жүруін есептейтін i, j қосымшаларын сақтаймыз.

Суретте ** арқылы ат орны, 1, 2,..., 8 сандарымен [3, 5] алаңынан басталатын жүріс нөмірлері берілген.

Кезекті жүрістен кейін:

• тақтадан шығып кету;

• бос емес алаңға өту;

• әзірге бос алаңға өту мүмкін.

Осыны ескере отырып, т горизонтал және п вертикалы бар массив енгізіледі

r: Array[-1.. m+2,-1.. n+2] Of Integer;,

бұнда

0, егер [i, j] алаңында ат жүрмесе;

r[I, j]= -1, егер [i, j] алаңы тақтадан тыс болса;

t, егер [i, j] алаңын t жүрісінде басып өтсе.

Жұмыстың негізгі логикасы қарапайым:

Begin

If <алаң бос емес> Or <алаң тақтадан тыс> Then exit

Else Begin

<жүріс>; <келесі жүріс>;

End;

End;

Жүріс сол жақ жоғары алаңнан, яғни r[1, 1] басталады. Жүріс тек алаң бос болса және баратын алаң тақтадан тыс болмаса мүмкін болады. Атпен жүру дегеніміз массивтің r элементінің мәнін t— r[i, j] = t өзгеру. Егер алаң бос емес не тақтадан тыс болса, сол орынна басқа алаңға өту мүмкіндігін қарастыру керек - п және rj массивтерінің келесі мәні. Егер барлық 8 вариант та қаралып, мүмкін жүріс табылмаса, ат жүре алмайтын жағдай болады. Бұл жағдайда бір немесе бірнеше жүрісті қайтарып, жаңа нұсқа іздеу керек. Ол үшін п және rj массивтерінен келесі қосымшалар алынады. Бірақ қайтарым жасау үшін жүріс «тарихын» білу керек. Жүріс барлық алаңдарды өткенде, яғни t мәні т х п болғанда аяқталады (массивті экранға шығару керек), немесе ат келесі жүре алмайтын болса экранға мүмкіндік жоқ туралы хаба шығу керек.

Бұны рекурсия арқылы жүргізуге болады.

Program Example;

Const n=4; m=5; {тақта өлшемі}

q: Boolean=false; {жүріс мүмкін бе}

di: Array [1..8] Of Integer=(-2,-1,1,2,2,1,-1,-2);

dj: Array[1..8] Of Integer» (1, 2, 2,1,-1,-2,-2,-1) ;

Var a: Array[-1..n+2,-1..m+2] Of Integer; i, j, l: Integer;

Procedure Print; {екіөлшемді массивті шығару}

Begin

For i:=l To n Do Begin

For j:=l To m Do Write(a[i,j]:3);

Writeln

End;

End;

Procedure rec (i,j,t:Integer); {жүріс іздеу процедурасы}

Var k:Integer;

Begin

If (a[i,j]<>0) Then exit {алаң не тақтадан шығып кету}

Else Begin

a[i,j]:=t; {жүріс}

If t=n*m Then{түгел жүріс орындалған}Begin print;q:=true End

Else For k:=l To 8 Do rec(i+di[k],j+dj[k],t+1);

{жаңа жүріс таңдау}

a[i,j]:=0; {бір қадам қайтару}

End;

End;

Begin {массив толтыру}

For i:=-l To n+2 Do

For j:=-1 To m+2 Do

If (i<l) Or (i>n) Or (j<l) Or (j>m) Then a[i,j]:=-1;

For i:=l To n Do

For j:=l To m Do rec(i,j,l); {бірінші аттың орны}

If not q Then Writeln('Невозможно выполнить обход');

Readln;

End.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

26 жұмыс

Тақырыбы: Рекурсивті алгоритмдерді құрастыру. Шахмат ферзіне арналған есеп.

Тапсырмалар:

Барлық бос алаңдарды қауiпте ұстау үшін неше ең аз ферзь қажет? Есеп түрі. Біруақытта 9*9, 10*10, 11*11 тақталарының есебін шешетін ферздердің орнын табу.

N*N (N<12) тақтасында N ферзді алаңдардың көбі қауіпсіз болатындай орналастыру.

Тақтада мүмкіндігінше көп ферзді олардың біреуін алғанда бір қауіпсіз алаң қалатындай орналастыру.

Ферзь неше ең аз жүрісте барлық 8*8 тақтасын жүріп өтеді?

8 х 8 тақтасында ферздерді әрқайсысы р (р<2) ферзге қауіпті болатындай қалай ең көп орналастыруға болады?

Әдістемелік нұсқау:

№5 тапсырмада р=1 болғанда 10, р=2 болғанда 14.

Мысал. Ферздер есебі. 8*8 өлшемді тақтада 8 ферзді бір-біріне қауіпсіз орналастыруға болады. Барлыұ мүмкін әдістерді табатын программа құру.

Шешуі. Деректер құрылымы. Шахмат бойынша, [i,j] алаңындағы ферзь j вертикалындағы, i горизонталындағы және (i + j) диагоналындағы алаңдарға қауіпті екені белгілі. Суретте 2-16 өсетін және -7-7 кемитін диагонал индекстерінің қосындылары мен айырмалары көрсетілген.

Оыс есепті 4*4 тақтасына қарастырайық. Ыерзь қоюға 1 горизонталынан [i,j]алаңын іздейміз. Ферзь[1,1]алаңына қойылса, * алаңы бос емес (қауіпті) деп есептеледі. Екінші горизонтальға өтеміз. Ферзді [2,3] алаңына қойсақ, «#» алаңдары қарастырылмайды. Үшінші горизогталда барлық алаңдар қауіпті, сондықтан екінші горизонталға қайтып, ондағы ферзді басқаша орналастыру керек) иб суреті). Келесі алаң [2,4]. Үшінші горизонталға қайта барамыз, [3,2] алаңы бос. Ферзді орнатып, төртінші горизонталға өтеміз. Онда ферзь қоюға болмайды, үшіншіге қайтамы, онда мүмкін алаң жоқ, екіншісінде де жоқ боғандықтан бірінші горизонталға қайтамыз.

Ферзді екінші алаңға [1,2] қоямыз. «*» өрістері қауіпті, в суреті, екінші ферзь [2,4] алаңында, «#» — қауіпті, үшінші ферзь [3,1] алаңында, «@» — қауіпті. Және төртінші ферзді [4,3] алаңына қоюға болады.

Программаның негізгі бөлігі келесідей болады:

Program Example;

Const n=8;

k: Integer=0; {алаң қауіпсіздігін тексеру}

Var x:Array [l..n] Of Integer; {шешу}

a:Array [l..n] Of Boolean; {вертикаль}

b:Array [2..2*n] Of Boolean; {өсу диагоналы (/)}

c:Array [-n+l..n-l] Of Boolean; {кему диагоналы (\) }

Procedure Init; {бастапқы мәндер}

Var i:Integer;

Begin

FillChar(a,SizeOf(a),True);

FillChar(b,SizeOf(b),True); FillChar(c,SizeOf(c),True);

End;

Procedure Move(i,j:Integer); {жүрісті жазу процедурасы}

Begin

x[i]:=j; a[j] :=False; b[i+j] :=False; с [i-j] :=False;

End;

Procedure Back_Move(i,j:Integer); {жүрісті болдырмау процедурасы}

Begin

a[j]:=true; b[i+j]:=true; с[i-j]:=true;

End;

Function D_Hod(i,j:Integer):Boolean; {жүріс мүмкін бе функциясы}

Begin

D_Hod:=a[j] And b[i+j] And с [i-j]

End;

Procedure Print; {шешім шығару}

Var i,j :Integer;

Begin

For i:=l to n Do Begin

For j:=1 To N Do

If j=x[i] Then Write('i':2) Else Write('*':2);

Writeln(x[i]:3);

End;

WriteLn(k);

End;

Procedure Solve(i:Integer);{шешім табу} :

Var j:Integer;

Begin

If i=n+l Then Begin Inc(k); Print End

Else For j:=1 To n do

If D_Hod(i,j) Then Begin Move(i,j); Solve(i+1); Back_Move(i,j); End;

End;

Begin {негізгі программа}

Init; Solve(1); ReadLn

End.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша - 4

27 жұмыс

Тақырыбы: Программалаудың фундаментальді әдістері. Программаны құрастырудың технологиясы және таралуы.

Тапсырмалар:

Сәйкес әдебиеттермен танысып, келесі сұрақтаға жауап беріңдер:

1. CRT модулінің мәні қандай? Бұл модульді программаға қалай қосады?

2. Мәтіндік режимді қандай стандарт процедуралар арқылы орнатуға болады?

3. ClrScr, ClrEol, DelLine және InsLine процедураларының ұқсастығы және айырмашылығы.

4. GoToXY процедурасының, WhereX және WhereY функцияларының мақсаты.

5. Мәтіннің түс режимдеріне түс атрибуты байтының құрылымы қандай?

6. TextAttr айнымалысының мақсаты қандай? Оған TextColor және TextBackGround процедураларының мәні қалай әсер етеді?

7. Шығыру символдарның «жылтырауы» қалай шығарылады?

Экранды 0..9 аралығындағы 1600 кез келген сандармен толтырыңыз, мұнда қызыл фонда ашық жасыл әріптер болуы тиіс. Жасыл фонға тағы 1600 сары түспен кез келген сан шығарыңыз.

Экранның мүмкін сегіз фонын 30 секунд аралықпен көрсетіңіз.

Қара экранға 16 санды 16 түрлі түспен шығарыңыз.

Таза экранға 'ЯРКИЙ И ТУСКЛЫЙ' сөзін алғашқысын ашық, соңғысын күлгін қылып шығарыңыз.

Таза экранға 'Для продолжения работы нажмите клавишу Enter' хабарын соңғы сөзі басқаларына қарағанда ерекшеленетіндей етіп шығарыңыз.

'*' символын кез келген түспен 200 рет, экранның кез келген нүктелеріне шығарыңыз

LightRed түсті терезе құрыңыз, оған 'БАЗА ДАННЫХ' және 'СРЕДНЕЙ ШКОЛЫ' жолдарын қарамен жазыңыз. 3 секундтан кейін қара экранды тазартыңыз.

Әдістемелік нұсқау:

CRT модулін қосуды ұмытпаңыз, себебі экрандық процедура қажет болады. Ол келесідей жүзеге асады: uses CRT;

№5-тапсырмада: мәтіндік режимдерді қою TextMode (Mode:integer) арқылы жүргізіледі; ClrScr – экранды толық тазартып, курсорды сол жақ жоғары шетіне қояды; ClrEol – қатардағы символдарды жояды; DelLine – курсор орналасқан қатарды жояды; InsLine – курсор орналасқан орынға бос жол қояды.

№8-тапсырмаға назар аударыңыз:терезеден толық экранға өту үшін міндетті түрде Window(l,1,80,25) операторы орындалуы керек. Бұл программа – деректерді экранның әртүрлі орындарына шығару мен программаның тақырыбы мен мақсатын жазатын заставкалар құрудың алғашқы қадамы.

1-мысал: Әртүрлі мәтін режимдерінде мәтінді диагоналымен қозғап, мәтін жолын қоятын, екі жолды жоятын, сосын әр жолда курсордан кейінгі бөлікті қиып тастайтын программа құру.

Program Demo_CRTl ;

Uses CRT;

Var Row, Col, N : byte;

Begin

Write('Текстілік режим нөмірін енгізіңіз 0,1,2,3,5,7 > ');

Readln(N);

TextMode (N) ;

ClrScr;

Writeln(' № текстілік режим қосылған ' ,N) ;

Col := 1;

for Row := 2 to 25 do begin

GoToXY(Col,Row) ;

Write ('Тексті көлденеңінен шығару');

Col := Col+2;

Delay (100) ;

end;

Delay(200) ; {Күту}

GoToXY(8,10) ;

InsLine ;

Writeln ('Текстің қойылған жолы');

Readln;

GoToXY(8,8) ;

DelLine; {жолды жою)

DelLine; {жолды жою}

Col: =6;

for Row := 2 to 25 do begin

GoToXY(Col,Row);

ClrEol; {жол бөлігін қию ClrEol}

Write('Тексті бөлу')

Col:=Col+2,

Delay (100) ;

end;

Writeln;

GoToXY(10,25);

Writeln ('Жұмысты аяқтау үшін<Enter> клавишін басыңыз');

Readln ;

End.

әдебиет:

1.Негізгі – 3, 5, 9-12

2. Қосымша – 4

28 жұмыс

Тақырыбы: Графиканы программалау.

Тапсырмалар:

1. Циклге бүтін сандарды енгізетін және егер сан 100 артық болса, Веер қолданбалы процедурасы арқылы дыбыстық сигнал беретіндей бағадарлама жазыңыз. Циклден шығу — 99.

2. 1...300 диапазонында 100 бүтін кез келген сандарды генерациялайтын бағадарлама жазыңыз. Егер кез келген сан 60...100 диапазонына тиісті болса, Веер қолданбалы процедурасы арқылы дыбыстық сигнал беріп сол санды экранға шығарыңыз.

3. Турбо Паскаль жүйесінің кез келген сандар санағышын зерттеңіз. Ол үшін 5000 кез келген сандарды генерациялап, жұп және тақ сандарды есептеңіз. Егер жұп сандар 2500 артық болса, дыбыстық сигнал беріңіз, егер тақ сандар 2500 артық болса, үш сигнал береңіз.

4. Температураның санағыш-аналазиторы үшін бағдарлама –модельін құрастырыңыз. Температураның бастамасы ретінде кез келген санды алыңыз, Random(300) бойынша алынған, 100 рет. 0...100, 101...200, 201...300 диапазондарына анализ жасаңыз. Бірінші жағдайда 'Норма' деген хабарлама шығарыңыз, екінші жағдайда — 'нормадан асып кету', үшінші де — 'Дабыл' хабарламасы және бір дыбыстық сигнал. (Бұл жұмыстың қағидасында барлық өрт сөндіру, химилиялық және басқа да санағыштардың қауіпті жағдайлары құрастырылған).

Әдістемелік нұсқау:

Турбо Паскалда дыбыстық эффектілерді жасау үшін Sound, NoSound және Delay стандартты процедуралары модулді CRT қолданылады.

Sound(I: word) — персоналды компьютердің дыбыстық құралдарды екпінділеуге арнаған. Целочисленное значение I бүтінсанды мәні дыбыстың ойналуын герц жиілігінде көрсетеді. Көрсетілген дыбыс жиілігі NoSound процедурасын алып тастағанша дейін генерацияланады.

NoSound — дыбысты алып тастау. Sound процедурасымен берілген дыбыстық тәртіпті алып тастайды. Sound, NoSound, Delay процедураларының көмегімен және цикл операторлары арқылы көптеген әртүрлі дыбыстық эффектілерді жасауға болады: сиренаның дыбысталуы, метрономның, будильниктің, құстардың ән салуы, музыка шығармаларының фрагменттері және т.б. Ол үшін жиілік жиымы немесе массив элементтері қолданылады,олар әртүрлі ноталарға «октав» сәйкес болады. (табл. 1).