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

65387 Санында – 5 цифр !

n

m

k

65387

65387

0

65387

6538

1

65387

653

2

65387

65

3

65387

6

4

65387

0

5

2-мысал. Соңғышартты цикл. Дүкеннен жалпы сомасы берілгеннен аспайтын бағада тауар сатып алу пограммасы.

Шешуі. х, k арқылы сәйкесінше тауардың бағасы мен көлемін белгілейміз. р —берілген жалпы сома, s —тауардың жалпы сомасы. Ол бастапқыда нөлге тең. Берілген жалпы сома пернетақтадан оқылады. Таңдалған тауардың бағасы мен көлемін сұрап, оларды есептеп, жалпы сомағы қосып, берілген жалпы сомадан аспағанша экранға шығарып отыру керек. Бұл жағдайда экранға соманың артықтығы туралы хабарлама шығару қажет.

Program Example;

Var x, k, p, s: Integer;

Begin

Writeln('Шекті сома - '); Readln(p);

S:=0;

Repeat

Whiteln(‘Тауардың бағасы мен санын енгізіңіз’);

Readln(x,k);

s:=s+x*k;

Writeln('Сатып алу құны ' , s тең);

Until s>p;

Writeln ( Сатып алудың сомалық құны шекті сомадан асып кетті);

End.

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

Соңғы шартты циклды сипаттағанда келесілерді есепке алу керек:

• циклдың алғашқы орындалуында нәтижесі (немесе жалғасы) анықталған болуы мүмкін;

• цикл денесінде аяқталу (жалғасу) шартына әсер етеін кем дегенде бір оператор болуы керек, әйтпесе цикл шексіз болады;

• цикл аяқталу шарты нәтижесінде орындалуы керек.

әдебиет:

1. Негізгі –5, 6, 8, 9, 10

2. Қосымша - 2

5 жұмыс

Тақырыбы: Символдық айнымалылармен жұмыс.

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

№5 дәріспен танысу.

Символдық тип пен жол арасында параллель жүргізу.

Символдар тізбегін экранға шығару программасын жазу керек:

а) ZYYXXX...AA...AA;

б) ABC...ZZBC...ZZZC...ZZ...ZZ.

Мәтінде А әрпі В әрпінен жиі кездесетін болса true, кері жағдайда false шығаратын программа құру.

Берілген мәтінде жақшалар дұрыс қойылғандығын тексеру (ашылған жақшаның оң жағында жабылған жақша, жабылған жақшаның сол жағында ашылған жақша барын тексеру).

d1 ± d2 ± ... ± d п (d1 -цифрлар, п > 1) түріндегі литер тізбегі берліген. Алгебралық қосындысын есептеу.

Шахмат тақтасында ферзь координаталарын сұрайтын және «соққыда» тұрған ұяшықты көрсететін программа құру.

Деректердің символдық типін пайдаланып, Паскаль тілінің ережесі бойынша жазылған санды енгізіп, оны х айнымалысына алмастырыңыз.

1-мысал. А АВ ABC ... AB..YZ символдар тізбегін экранға шығаратын программа құру.

Шешуі. Символдар тізбегі келесі ереже бойынша құрылады: латын алфавитінің 1 символынан, соысн екі символынан, т.с.с. тұратын бөліктері тұтас алфавит шыққанға дейін шығарылады. Бұндай бөліктер алфавиттегі әріптер санына тең. Деректердің символдық типі есептік тип болғандықтан параметрлі цикл қолдануға болады. Program Example;

Var i,j:Char;

Begin

For i:='a' To 'z' Do {алфавиттің бастапқы бөліктерінің саны}

For j:='a' To i Do {берілген бөліктегі символдар саны}

Write (j) ;

Readln;

End.

Программа жұмысының нәтижесі:

а a b a b c a b c d . . .x y z

Программаны символдар бөліктері пирамида түрінде шығатындай өзгертіңіз. :

а

a b

a b с

. . .

а b с ... х у z

2-мысал. Берілген мәтіндегі цифрлар санын есептейтін программа құрыңыз. Мәтән – енгізілуі <Enter> пернесімен аяқталатын символдар тізбегі.

Шешуі. Тізбекті енгізудің соңы <Enter> пернесін басу болғандықтан, (белгіленуі — #10), кезекті символ мәні #10 дейін симводар енгіземіз. Әр символды талдай отырып, символ цифр болса, есептегішті ұлғайтып отырамыз. Program Example;

Var ch:Char;

k:Integer;

Begin

Read(ch);

k:=0;

While ch<>#10 Do { <Enter> пернесі басылғанға дейін}

Begin

If (ch>='0') And (ch<='9') Then Inc(k);

Read(ch);

End;

Writeln(^G,'Число цифр равно ' , k) ;

End.

Программаны келесі есептерді шығаратындай өзгертіңіз:

• енгізілген қатар бүтін сан болатынын тексеру;

• енгізілген санның цифрларының қосындысын есептеу.

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

CHAR типі бір символмен жұмыс жасауға мүмкіндік береді, сондықтан есепті шешуге циклдық алгоритмдер қолданған дұрыс.

4-тапсырмада нәтижесі «true»-ақиқат немесе «false»-жалған болатын Boolean типін қолдану қажет.

Әдебиет:

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

Қосымша - 4

6 жұмыс

Тақырыбы: Бірөлшемді массив элементтерімен жұмыс жасау тәсілдері.

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

1. Бірөлшемді массивтің жұп элементтерінің санын алдын ала берілген а саны кездескенге дейін есептеу.

2. Бірөлшемді массивтің алғашқы максимал элементінен кейін орналасқан элементтерінің арифметикалық ортасын табу.

3. Бірөлшемді массивтің -2 – 10 аралығындағы элементтерінің арифметикалық ортасын табу.

4. Бірөлшемді массивте кем дегенде бір теріс жұп сан болса, t айнымалысына ақиқат мәнін беру.

5. Бірөлшемді массив элементтерінің алғашқы нөл кездескенге дейінгі қосындысын табу.

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

7. Бірөлшемді массивтің қатар үш элементі бірдей болса, t айнымалысына ақиқат мәнін беру.

8. Бірөлшемді массивтің i*i<aj<i! Теңсіздігі орындалатын элементтер санын есептеу.

1-мысал. Бірөлшемді массивтің максимал элементін табу program max_l;

type

mas=array[1..10] of integer;

var

a: mas;

i:byte;

max: integer;

begin

{блок заполнения}

for i:=l to 10 do readln(a[i]);

{максимал элементті іздеу}

max:=a[l];

for i:=2 to10 do if a[i]>max then max:=a[i];

writeln ('максимальный элемент=',mах)

end.

2-мысал. Массивте 1-курс студенттері туралы ақпарат бар. Группа номері массивтегі сан номеріне сәйкес келеді деп, ең көп студенті бар группаны табу.

Яғни, максимал элемент пен оның нөмерін табу керек.

program max_num;

type mas=array[1..10] of byte;

var

a: mas;

num, i: byte;

max: byte;

begin

{толтыру блогы}

for i:=l to 7 do readin(a[i]);

{поиск максимального и его номера}

max:=0; {массивтің ең кіші элементіе енгіземіз}

for i:=l to n do if a[i]>max then begin

num:=i;

max:=a[i]

end;

writeln ('Студенттердің ең көп саны=',mах);

writeln('топ нөмірі=',mит)

end.

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

Бірөлшемді массивтерді өңдеу тапсырмасын негізгі алгоритмдерді қолданып есептеуге болады:

1. Бірөлшемді массивті мәндермен толтыру;

2. Бірөлшемді массив элементтерін экранға шығару;

3. Бірөлшемді массив элементтерінің қосындысын есептеу.

4. берліген шартты қанағаттандыратын элементтер санын есептеу ;

5. Бірөлшемді массивтің максимал (минимал) элементін және оның ноимерін табу.

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

Макси­мал (минимал) элементті іздеу алгоритмі сандар жұбын бірнеше рет салыстыру арқылы жүргізіледі.

әдебиет:

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

2. Қосымша - 4

7 жұмыс

Тақырыбы: Процедурамен жұмыс. Санның дәрежесін табу. Екі санның орындарын ауыстыру.

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

1. 25-мысалды пайдалана отырып y=a1x4+a2x3+a3x23+a4x+a5 мәнін есептеу, мұндағы a1,a2,a3,a4,a5 коэффициенттері және х – пернетақтадан енгізілетін сандар.

2. 26-мысалды пайдаланып a, b және с айнымалыларының мәндерін өсу ретімен орналастыру.

3. Үшбұрыштың төбелерінің координаталары берілген, қабырғаларының ұзындықтарын табу керек.

4. Натурал сан берілген. Оның бөлгіштерін және олар нешеу екенін табу керек.

5. Екі натурал сан берілген. Бірінші сан екіншісінің аудараламы (перевертыш) екендігін анықтау.

6. ABC үшбұрышының төбелерінің және D нүктесінің координаталар берілген. Бұл нүкте үшбүрыштың ішкі нүктесі болатынын анықтау.

1-мысал:

аn есептейтін программа құру, бұндағы а және n – пернетақтадан енгізілетін бүтін оң сандар

Program Example;

Var a,n: Integer;

S:Longint;

Procedure Degtee (x,y:Integer; Var st:Longint_;

Var I:Integer;

Begin

St:=1;

For I:=1 to y do st:=st*x;

End;

Begin

Writeln(‘введите два числа’); {мәндерді енгізу}

Readln(a,n);

Degree (a,n,s); {процедураны шақыру}

Writeln('Результат',s); { аn мәнін шығару}

Readln;

End.

2-мысал. Екі бүтін сан берілген. Олардың орындарын алмастыру қажет.

Шешуі. Екі санның орындарын екі әдіспен алмастыруға болады: аралық айнымалы арқылы және оны қолданбай. Алғашқы әдіспен процедураны жазайық.

Program Example_2;

Var a, b: Integer;

Procedure Swap (Var x, y:Integer);

Var z: Integer;

Begin

z:=x; x:=y; y:=z;

End;

Begin

Writeln ('екі сан енгізіңіз'); {мәндерді енгізу}

Readln(a, b) ;

Swap(a, b) { процедураға қатынау}

Writeln('а=',а,' b=',b); {жаңа мәндерді шығару}

Readln;

End.

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

Процедура атынан кейін жақшамен жазылатын параметрлер формальды. Мақсатымыз – процедураға ақпарат берілетін айнымалылардың саны мен типін көрсету.

Процедураны шақырған кезде параметрлер мәндері нақты болуы керек, мәндер тізімі процедура тақырыбындағы тізім бойынша беріледі.

Процедураны шақырған кезде мәндер жақшадағы немесе айнымалылар тізімі нақты параметрлер тізімі болып табылады.

Егер параметрлер мәндік болса, қандай да бір өрнек арқылы мән беруге болады, бірақ бұнда айнымалылар белгілі болуы керек.

әдебиет:

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

2. Қосымша - 4

8 жұмыс

Тақырыбы: Функциямен жұмыс. Фиббоначчи санын есептеу.

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

Бірнеше санның ең үлкен ортақ бөлгішін екі санның ЕҮОБ табу арқылы есептеу.

Пернетақтадан енгізілген төрт санның ең кіші ортақ еселіген табу (алдынғы мысалдағы функцияны қолдану).

Төрт сан берліген. Алғашқы сандардың ең үлкен цифрын шығару. Мысалы, а = 25, b = 730, с = 127, d = 1995 болғанда экранға 7 шығуы керек.

п натурал саны берілген. п, п + 1,..-, 2 сандарының арасында айырмасы 2-ге тең болатын сандар барын анықтау.

Фибоначчи сандарын есептеу программасын құру.

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

Процедура-функ­ция – мән-нәтиже байланысатын процедура.

Шешімін қарастырайық:

Тапсырма 5. Фибоначчи сандары рекурсивтік қатынас арқылы анықталады.

; п>0 и

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

FUNCTION Fib(n: INTEGER): INTEGER;

BEGIN

IF n = 0 THEN Fib := 0

ELSE IF n = 1 THEN Fib := 1

ELSE Fib := Fib(n-1)+Fib(n-2)

END; {Fib}

мәнін Fib( n) арқылы есептеу бұл процедура-функцияның рекурсивтілігіне келеді. Қаншалықты жиі қайталанады? Әрбір п > 1 шақыруы тағы екі шақыруды тудырады, яғни шақырулар саны экспоненциалды өседі. (1-сурет).

Рис. 1. Fib(5)-ке 15 шақыру

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

Бірақ Фибоначчи сандарын х = fibi және у = fibi-1 қосымша айнымалылар арқылы, бір мәнді бірнеше рет есептемей табуға болады.

i := 1; х := 1; у := 0;

WHILE i < n DO BEGIN

z:= x; x:= x+y; у:= z; i:= i+1

END;

x, у, z мәндерін енгізуді айнымалы қолданбай-ақ, екі оператор көмегімен жазуға болады z: х ; = х + у; у : = х - у.

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

әдебиет:

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

2. Қосымша - 4

9 жұмыс

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

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

1. Баған элементтерінің саны мен қосындысын берілген шартпен табу (мәндерін массивие сақтау):

а) k1 немесе k2 –ге бөлінетін элементтерді табу

б) А В аралығындағы элементтерді табу

в) жай сан болатын элементтерді табу;

г) бас диагональдан жоғары жатқан оң элементтерді табу.

2. k1- К2 жолдарындағы элементтердің қосындысын табу.

3. Нөмірлерін табу:

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

б) әр жолдың (қатардың) алғашқы теріс элементінің орнын табу;

в) әр жолдың (қатардың) соңғы теріс элементінің орнын табу;

4. Әр жол элементтерінің санын, үлкенін, кішісін, арифметикалық ортасын табу.

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

Бірнеше мысал қарастырайық:

1-мысал. 10 х 15 екіөлшемді А массивін енгігу және шығару программасын құру.

Шешуі. Массивтерді құру мен шығару бір программадан шақырылатын екі процедурамен келтірілген. Екіөлшемді массивті бірөлшемді массивті құрудың үш әдісімен де құруға болады. Мысалда кез келген элементтер алынады. Program Example;

Const n=10; m=15;

Type dmyarray = Array[1..n,1..m] Of Integer;

Var A: dmyarray;

Procedure Init(Var x: dmyarray); {массивтің құрылу процедурасы)

Var i, j: Integer;

Begin

For i:=1 To n Do

For j:= 1 To m Do x[i,j]:=-25+Random (51);

End;

Procedure Print(x: dmyarray); {массивті экранға шығару процедурасы)

Var i, j: Integer;

Begin

For i:=l To n Do

Begin {массивтің 1-ші жолын шығару)

For j:=1 To m Do Write (x[i,j] :5);

Writeln; {келесі жолға көшу)

End;

End;

Begin (негізгі программа)

Init(A); (массив құрылу процедурасын)

Writeln('Массив А:'); Print(A); {шығару процедурасын шақыру)

Readln;

End.

2-мысал. Әр элементі берілген бүтінсандық массивтің сол қатарындағы теріс элементтердің қосындысына тең бірөлшемді массив құру.

Шешуі. өлшемі екіөлшемді массивтегі жолдар санына тең бірөлшемді массив құрайық.

Const n=10;m=15;

Type omyarray=Array [l..n] Of Integer;

dmyarray=Array[1..n,1..m] Of Integer;

Var B: omyarray;

A: dmyarray;

Procedure Sum(x: dmyarray; Var y: omyarray);

Var i, j: Integer;

Begin

For i:=l To n Do Begin

y[i]:=0;

{массив элементтерінің бастапқы мәні}

For j:=l To m Do {теріс элементтерінің қосындысы}

If x[i,j]<0 Then y[i]:=y[i]+x[i,j];

End;

End.

Негізгі программада Sum(A,B) процедурасын шақырамыз, экранға әр жолдың теріс элементтерінің қосындысы жазылған В бірөлшемді массивін шығару керек.

3-мысал. 5*5 өлшемді А және В матрицаларының көбейтіндісін табу программасы. Шығатын 5х 5өлшемді С матрицасының элементтері келесі формуламен анықталады:

бұндағы n—А және В матрицаларының өлшемі.

Шешімі. Матрицаларды кез келген саннан құраймыз. С матрицасының элементтерін ішкі циклдармен есептейміз.

Program Example;

Const n=5;

Type dmyarray=Array[1..n,1..n] Of Integer;

Var А, В, С: dmyarray;

Procedure Init(Var x: dmyarray);

Procedure Print (x: dmyarray);

Procedure Mult(x,y: dmyarray; Var z: dmyarray);

Var k, i, j: Integer;

Begin

For i:=l To n Do

For j:=1 To n Do Begin

z[i,j]:=0;

For k:=l To n Do z[i,j]:=z[i,j]+x[i, k]*y[k,j] ;

End;

End;

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

Writeln('массив А:'); Init (A); Print(A);

Writeln('массив В:'); Init (В); Print(В);

Mult(А,В,С);

Writeln('массив С:');Print (с);

Readln;

End.

әдебиет:

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

2. Қосымша - 4

10 жұмыс

Тақырыбы: Массивпен жұмыс. Массив элементтерін қою, жою, орнын алмастыру.

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

1. Алғашқы қатарды бірінші максимал элементі бар қатардан кейін орналастыру.

2. Екінші бағанда барлық элементтері оң алғашқы бағаннан кейін орналастыру. Ондай баған болмаса, хабар беру.

3. Алғашқы минимал элементі бар баған мен жолдың алдына нөлдік баған мен нөлдік жолды қою.

4. Берілген А саны бар барлық жолдан кейін соңғы жолды қою.

5. Теріс элементі жоқ бағандардың алдына екінші бағанды қою.

6. Алғашқы максимал және соңғы минимал элементтердің орындарын алмастыру.

7. Әр жолдың бірінші элементі мен модулі максимал элементінің орындарын алмастыру.

8. Әр жолда алғашқы теріс және соңғы оң элементтерлің орындарын алмастыру, ондай элементтер болмаса, хабар беру.

9. Екінші соңғының алдындағы жолдарды алмастыру.

10. Бірінші жолды алғашқы нөл кездесетін жолман алмастыру.

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

1-мысал. k нөмірлі жолдан кейін нөлдерден ұратын жолды қою.

Шешуі. Бұл есепті шешу үшін:

1) алғашқы k жолды өзгеріссіз қалдыру;

2) k –кейінгі жолдарды артқа ығыстыру, соңғы жолдан k +1-ге дейін жүрген дұрыс.

3) k+ 1 жолының элементтеріне берілген мәнді беру.

Сонымен қатар массив өлшемін өзгерту қажет. Біз жол қосатындықтан, жолдар саны 1-ге артық болады.

Const n=5; m=7;

Type dmyarray=Array[1..п+1,1. .т] Of Integer;

Var A: dmyarray;

Қою процедурасын сипаттау:

Procedure Insert(kl: Integer; Var x: dmyarray);

Var i, j: Integer;

Begin

For i:=n Downto kl+1 Do

For j:=l To m Do x[i+1,j]:=x[i,j];

{j бағанының элементіне алдынғы жолдың осы бағанының элементін қоямыз}

For j:=l То m Do x[kl+1,j]:=0;

End;

Жолдар саны өзгеретіндіктен, Print процедурасын өзгерту керек, ол жолдар санын шығарады.

Procedure Printl(nl: Integer; x: dmyarray);

Var i, j: Integer;

Begin

For i:=l To nl Do

Begin

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

Writeln;

End;

End;

Негізгі программа бөлігі:

Begin

Init(A);

Print(n,A);

Writeln('Одан кейін' қойылатын жолдың нөмірін енгізіңіз');

Readln(k);

Insert(k,A);

Print(n+l,A);

Readln;

End.

2-мысал. k нөмірлі жолды жою.

Шешуі. k нөмірлі жолды жою үшін:

• берліген жолдан бастап барлығын жоғарыға жылжыту;

• соңғы жолды «нөлдеу», яғни 0 мәнін беру.

Массивтерді алдынғыдай сипаттаймыз. Сондай-ақ Printl шығару процедурасы қолданылады. Алдымен барлық жолдарды, сосын бір жолы жойылған матрицаны шығарамыз.

Procedure Delete(kl: Integer;Var x: dmyarray);

Var i, j: Integer;

Begin

For i:=kl To n-1 Do

For j:=1 To m Do x[i,j]:=x [i+1,j ] ;

For j:=l To m Do x[n,j]:=0;

End;

3-мысал. А массивінің аталған элементтерінің орыныдарын алмастыру.

Шешуі. Бұл есепті бірнеше әдіспен шешуге болады.

Бірінші әдіс — бірөлшемді массивке сәйкес, элементтердің индекстері алмастыратын массив беріледі.

procedure Swapl(kl, 11, k2, 12: Integer; Var x: dmyarray);

Var c: Integer;

Begin

c:=x[kl,llj; x[kl,11]:=x[k2,12];x[k2,12]:=x;

End;

Екінші әдіс. Swap процедурасы бойынша екі бүтін айнымалылардың орындарын алмастырады.

Procedure Swap(Var x, y: Integer);

Var z: Integer;

Begin

z:=x; x:=y; y:=z;

End;

4-мысал. 11 және12 номерлі бағандардың орындарын алмастыру.

Procedure Swap2(ll, 12: Integer; Var x: dmyarray);

Var i: Integer;

Begin

If ((1K1) Or (ll>m) ) Or ((12<1) Or (12>m))

Then Writeln('Ввод неправильный')

Else For i:=l To m Do Swap (x [i,11], x[i,12]);

End;

әдебиет:

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

2. Қосымша - 4

11 жұмыс

Тақырыбы: Рекурсивті программалаудың екі мысалы: Гильберт және Серпин қисығы.

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

1. 1-суреттегі өрнек бес қисықтың суперпозициясынан құралады. Бұл қисықтар тұрақты бейнеленеді деп есептеледі жне оларды есептеуіш машинаның басқаруымен экранда немесе графтұрғызғышта сызуға болады деп есептеледі. Мақсатымыз – осы өрнекті сызатын рекурсивті схеманы табу.

1-сурет. Н1…Н5 Гильберт қисықтары

2. 2-суретте бейнеленген Серпинский қисығының рекурсивті схемасын құрыңыз.

2-сурет. S1…S4 Серпинский қисығы

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

1-суретті қарай отырып, бір-біріне қойылған қисықтар 3-суреттегідей болатынын көреміз. Олрады Н1, Н2 және Н3 деп белгілейік. Нi+1 элементі Hi элементінің екі есе кіші төртеуінің қосылып, үш түзу сызықпен жалғанғанынан шығады. Н1 элементі түзулермен төрт бос H0 элементтерінен тұрады. Hi- қисығы i-дәржелі Гильберт қисығы деп аталады. (1891 ж.).

3-сурет. бірінші, екінші және үшініші дәрежелі Гиьберт қисықтары

Әрбір Hi төрт екі есе кіші Hi-1 –ден тұратындықтан, Hi суретін салу процедурасы Hi-1 төрт рет шақырудан құралады. Бұларды А, В, С және D деп, қосуші түзулерді салатын процедураларды бағыттауыш арқылы. Сонда келесі схема алынады: (4-сурет):

Түзудің бір бөлігін салу үшін қарындашты берілген бағытта берілген қашықтыққа қозғайтын line процедурасы бар. Ыңғайлылық үшін i - 45 * i деп алынады.

PROCEDURE A(i: INTEGER);

BEGIN

IF i > 0 THEN BEGIN

D(i-1); line(4,u);

A(i-1); line(6,u);

A(i-1); line(0,u);

B(i-1)

END

END; {A}

Б ұл процедура 3-суреттегі өрнекті құрайтын Гильберт қисығының әрқайсысына негізгі программа болады. Бас программа қисықтың бастапқы нүктесін, яғни қарындаштың бастапқы координаталарын (Рх және Ру) анықтайды. Қисық сызылытан квадрат парақ ортанысан орналасады, ho шамасы ho = 2k теңдінгін қанағаттандырады. Бұл параметрлер түзу сызудың процедурасы секілді LineDrawing модулінде орналасқан. Процедура п Гильберт қисығын сызады (листинг және 3-сурет).

PROGRAM Hilbert;

USES LineDrawing {width, height, Px, Py, .clear, line};

CONST SquareSize = 512;

VAR i, x0, y0, u; WORD; ch: CHAR;

PROCEDURE B(i: WORD); forward;

PROCEDURE C(i: WORD); forward;

PROCEDURE D(i: WORD); forward;

PROCEDURE A(i: WORD);

BEGIN

IF i > 0 THEN BEGIN

D(i-1); line(4,u); A(i-1); line(6,u);

A(i-1); line(0,u); B(i-1)

END

END; {A}

PROCEDURE B(i: WORD);

BEGIN

IF i > 0 THEN BEGIN

C(i-1); line(2,u); B(i-1); line(0,u);

B(i-1); line(6,u); A(i-1)

END

END; {B}

PROCEDURE C(i: WORD);

BEGIN

IF i > 0 THEN BEGIN

B(i-1); line(0,u); C(i-1); line(2,u);

C(i-1); line(4,u); D(i-1)

END

END; {C}

PROCEDURE D(i: WORD);

BEGIN

IF i > 0 THEN BEGIN

A(i-1); line(6,u); D(i-1); line(4,u);

D(i-1); line(2,u); C(i-1)

END

END; {D}

BEGIN clear;

Х0 := width DIV 2; у0 := height DIV 2; u := SquareSize; i := 0;

REPEAT i := i+1; u := u DIV 2;

X0 := x + (u DIV 2); y0 := y0 + (u DIV 2);

Px := x0; Py := y0; A(i); Read(ch)

UNTIL (ch = #27) OR (i = 6);

clear

END. {Hilbert}

әдебиет:

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

2. Қосымша - 4

12 жұмыс

Тақырыбы: Жиын. «Эратосфен торы».

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

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

Берілген қатардағы цифрлар санын есептеп, шығаратын программа құру.

Берілген мәтіндегі орыс алфавитінің дауысты дыбыстарын алфавит бойынша шығару программасын құру.

Берілген мәтіндегі әріптерді алфавит бойынша шығару:

а) екі реттен кем кездеспейтін;

б) екіден артық кездеспейтін;

в) екіден артық кездесетін.

Берілген ондық санның ондық жазбасына кіретін сандарды өсу ретімен орналастыратын программа.

Берілген мәтінде бір рет кездесетін символдарды шығару программасын құру.

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

Жиындарды келесідей белгілейге болады:

Type <Имя>=set of <элементтен типі>. Мысалы:

Type t=set of byte;

Var a:t;

немесе

var code: set of 0..7;

digits: set of ‘0’..’9’;

Жиындарға қосу, көбейту және толықтыру операциялары қолданылады, олар сәйкесінше +, * және – деп белгіленеді, сонымен қатар жиындар теңдігі(А=В), теңсіздігі(A<>B), енуі (A<=B, A>=B) қолданылады. x in A логикалық ену операциясы true мәнін қабылдайды, егер x элементі А жиынына енсе, ал кері жағдайда false болады.

Мысал: «Эратосфен торы». [1...n] сандар аралығында жай сандарды табатын программа құру. N саны қолдан енгізіледі.

Шешуі. Жай сан деп бір және өзінен басқа бөлгіші жоқ сан аталады. Бұл есепті шешу үшін «Эратосфен торы» әдісін қолданамыз. Ол келесіге негізделген: берілген аралықтағы барлық саны бар жиын құрамыз. Одан біртіндеп өзінен басқа 2, 3, 4-ке, т.с.с [n/2] (санның бүтін бөлігі) бөлінетін элементтерді алып отырамыз. Бұндай теруден кейін жиында тек жай сандар ғана қалады.

Program Example;

Var m: Set Of Byte; i,k,n: Integer;

Begin

Writeln (' введите размер промежутка (до 255) ');

Readln (n);

m:=[2..n]; {бастапқы мән}

For k:=2 To n Div 2 Do {бөлгіштерді тексереміз }

For i:=2 To n Do

If (i Mod k=0) And (i<>k) Then m:=m-[i];

{егер сан бөлінетін болса, оны алып тастаймыз}

For i:=l To n Do If i In m Then Write (i:3);

{қалған элементтерді шығарамыз }

Readln;

End.

әдебиет:

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

2. Қосымша - 4

13 жұмыс