Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

edit1.Clear;end;

Ал келесі үрдіс Button3 компонентіне форманы жабу мүмкіндегін береді.

procedure TForm1.Button3Click (Sender: TObject);

Begin

Form1.Close;

End;end. -

9. 20-шы суретте көрсетілгендей s функциясының есептелген шамасы x-тің [0;7] диапазонында келтірілген.

Екінші әдіс: Осы есепті қойылымына байланысты қайталау операторының бір түрі: Алдын ала шартталған whіle do цикл операторы (цикл-әзір) –де қарастырамыз

Бұл операторда қайталау саны белгісіз жағдайда қоланылады. Оператордың жазылуы

whіle <логикалық өрнек А> do <цикл денесі>;

Оператордың орындалуы А логикалық өрнектің есептелуінен басталады, демек x<=xk. А ақиқат болса, програманың циклдык бөлім операторлары орындалады, жалған болғанда циклдан шығады және келесі операторға көшеді. Мысалы циклдық программаны келесі үзіндіден көруге болады: әзір x<=xk шарты орындалса (иә) цикл нұсқаулары орындалады, ал шарт орындалмаған жағдайда (жоқ) цикл денесінен шығады (сурет-21).

Бағдарлама мәтінінен үзінді:

dx:=strtofloat(edit5.Text);

x:=xn; / x-тің бастапқы мәніне меншіктеу

while x<=xk do / цикл шартын (логикалық өрнекті) тексеру

begin if x<2.8 then

begin i:=1; s:=(a+b)/(exp(x)+cos(x)); end;

if (x>=2.8) and (x<=6) then

begin i:=2; s:=(a+b)/(x+1); end;

if x>=6 then

begin i:=3; s:=exp(x)+sin(x); end;

memo1.Lines.Add('при x='+floattostr(x)+': '+ 's='+ floattostr(s)+chr(13));

x:=x+dx; / x- тің ағымдағы шамасын өсу адымына арттыру

End; end;

Циклды құрылымды операциялар for, while, repeat нұсқаулары арқылы жүзеге асады. Қайталау операторларының үшінші түрі параметрлі цикл:

For…to…do цикл операторы

1. Бұл оператор қайталау саны белгілі циклдерді жасау үшін арналған..

Жазылу форматы:

For <параметр:=бастапқы мәні> to <параметрдің соңғы мәні> do

Санағыш i айнымалысы алғашқы шамасынан соңғы шамасына 1-ге тең адыммен өзгереді де, осы бүтін айнымалының мағынасы экранға шығып отырады (сурет-22). Студенттерге параметрлі циклды қолданып өздігінен есеп шығару қалауы бойынша ұсынылады.

 

Зертханалық жұмыс № 5

Жұмыстың тақырыбы: Массив элементтерін өңдеу.

Жұмыс мақсаты: Delphi ортасында массив (сілемдер) элеметтерін анықтау, енгізу, шығару және оларды өңдеу әдістерін меңгеріп, StringGrid, RadioButton, Listbox компоненттерiн қолданып бағдарлама құрастыру.

Орындалу уақыты: 4 сағат.

1 Зертханалық жұмыстың жүру тәртібі:

1.7 Зертхана жұмысының тақырыбына сәйкес теориялық материалдарды меңгеру

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

1. Массив деген не?

2. Массив елементтерін сипаттау үшін қандай операторлар қолданылады?.

3. Бірөлшемді массив деген не?

4. Массив элементтерін өңдеуге қолданылған қайталау операторы және оның ерекшелігі.

5. Массив элементтерін енгізу ерекшеліктері және амалдары.

6. Массив элементтерін шығару ерекшеліктері және амалдары.

7. Қабатталған цикл деген не?

8. Ішкі цикл деген не?

9. Параметрлі циклдің дұрыс жазылған құрылымын анықта:

a) FOR I:=1 TO 20 DO <оператор>;

b) FOR I=1..15 DO < оператор>;

c) FOR I:=10 TO 1 DO <оператор>;

d) FOR I:=’d’ TO ‘a’ <оператор>;

e) FOR I:=1 TO 0 DO <оператор>;

10. Меншіктеу операторының дұрыс құрылымын анықта:

Var a, x:array [1..8, 1..10] of real;

a) a:=x;

b) x:=a[1,1];

c) a:=a[4,5];

d) x[1,1]:=a[10,7];

e) a[5,3]:=x[8][10];

11. Бағдарлама үзіндісінің қатесін анықта

a) Y:=1; FOR X:=0.5 TO 0.19 DO Y:=X+SIN(X);

b) K:=5; FOR X:=1 TO K DO K:=K*3;

c) K:=4; FOR X:=1 TO 16 DO K:=K*3;

d) K:=4; FOR X:=16 DOWNTO 1 DO K:=K*3;

e) K:=4; FOR X:=-5 TO 5 DO BEGIN K:=K*3; Y:=SIN(X) END;

12. Дұрыс құрастырылған бағдарлама үзіндісін анықта:

a) K:=9; FOR X:=1 TO K DO K:=I*3;

b) Y:=0; FOR X:=0.1 TO 1.9 DO Y:=X+SIN(X);

c) K:=4; FOR X:=5 DOWNTO 16 DO K:=K*3;

d) K:=0; FOR I:=1 TO K DO BEGIN I:=2*I; K:=K*I END;

e) K:=4; FOR I:=1 TO K; K+1 DO K:=K*3; A:=K+I;

13. Массив элементтерін сипаттауға арналған сөзтіркестері:

a) array.. of

b) array.. char

c) array.. in

d) integer

e) matr.. of

14. Дұрыс сипатталған массивті анықта:

a) Var mass: array [1..20] of byte;

b) Var mass= [1..10] of byte;

c) Var mass:array[10] of byte;

d) Var mass:array[1,10] of byte;

e) Var mass: array [10..-3] of byte;

Тапсырма

А тобының есебі: кестеде келтірілген есептік формуланы ескеріп, төменде келтірілген тапсырмаларды ретіне сәйкес (кесте-8) орында:

1. Берілген өрнекке байланысты сандық тізбектің элементтерінің санын, шамасын анықта;

2. Сандық тізбектің ең кіші элементін және оның реттік нөмірін анықта;

3. Сандық тізбектің ең үлкен элементін және оның реттік нөмірін анықта;

4. Сандық тізбектің барлық элементтерінің қосындысын есепте;

5. Сандық тізбектің барлық көбейтіндісін қосындысын есепте;

6. Сандық тізбектің элементтерін кему ретімен орналастыр;

7. Сандық тізбектің элементтерін өсу ретімен орналастыр.

А тобы Кесте 8

Вариант Есептің орындалу реті Математикалық өрнек Берілгені
  1,7,4,2,3,5,6 x1=0,53; x2=0,69; i=3,4,…,30
  1,2,3,4,5,6,7 a1=9,385; a2=5,03; k=3,4,…,25
  1,7,6,2,3,4,5 b1=2,75; b2=3,01; b3=1,56; j=4,5,…,25
  1,3,5,6,4,7,2 z1=0,05; z2=0,17; m=3,4,…,25
  1,5,3,2,7,4,6 fi=3,33; f2=0,56; i=3,4,…,15
  1,3,5,7,2,4,6 c1=1,17; c2=-0,85; n=3,4,…,15
  1,3,5,6,2,4,7 d1=0,35; i=1,2,…,15
  1,2,6,4,3,5,7 q1=-0,75; q2=0,05; k=2,3,…,15
  1,4,7,2,3,4,5 s1=1,05; s2=1,4; i=3,4,…,15
  1,7,2,5,3,4,6 x1=0,20; x2=0,97; i=3,4,…,15
  1,6,2,5,4,7,3 z1=1,35; z2=2,56; k=3,4,5,…,15
  1,7,2,3,4,5,6 s1=1,07; s2=1,6; i=3,4,…,15
  1,4,6,2,3,5,7 x1=3,02; x2=3,42; i=3,4,5,…,15
  1,7,6,4,3,2,5 y1=0,21; y2=0,71; i=3,4,5,…,15
  1,4,5,7,3,6,2 x1=2,15; x2=3,75; n=2,3,…,15
  1,7,4,6,2,3,5 x1=1,05; x2=1,75; k=3,4,5,…,14
  1,6,3,5,7,4,2 q1=1,08; q2=2,05; k=2,3,4,…,15
  1,7,5,6,4,2,3 b1=2,85; b2=3,25; j=3,4,5,…,15
  1,6,3,5,7,2,4 z1 =2,17; z2=3,02; z3=1,58; k=4,5,…,15  
  1,7,2,3,5,4,6 m1=1,75; m2=1,4; k=2,3,…,12

 

В тобы Кесте 9

  А(12) және В(12) массивтері берілген. С112 + А1211 + А2;...; С121 + А12 ережелеріне сәйкес С(12) массивін анықтап, осы массив элементтерінің қосындысын S-ті есепте.
  С(15) массиві берілген. Осы массивтің ең соңғы элементінен кіші элементтерінің номерін, оның шамасын анықта.
  Берілген А(15) массиві элементтерін кері бағытта орналастырып, пайда болған S массивін шығарып, ондағы оң және теріс элементтерін анықта.
  Берілген С(12) массивіндегі оң және теріс элементтерінің қосындысын, санын жеке есептеп, оларды баспаға ұсыну керек.
  Берілген А(20) масив элементтерінің қосындысын есептеу, егер ол шама 50-ден кіші болса массив элементтерін 10-ға көбейту қажет.
  Д(25) массивінің тақ элементтерін анықтап, соның негізінде жаңа массив құрастырып, олардың қосындысын есептеу.
  В(15) массивтегі жұп элементтердің шамасын екі еселеп, тақ элементтерін нөл санымен алмастырып, пайда болған жаңа массивті шығару.
  тақ элементтердің шамасын 10-ға көбейтіп, жұп элементтерін нөл санымен алмастырып, пайда болған жаңа массивті шығару.
  С(27) массивтегі ең бірінші орналасқан теріс элементінің алдындағы санды анықтап, қалған элементтерінің қосындысын есептеу.
  Берілген В(20) массивтің теріс элементтерін нөлмен алмастырып, оң элементтерінің қосындысын анықтап, пайда болған жаңа массивті шығар.
  Берілген Р(18) массивтің теріс элементтерінің санын анықтап, оларды нөлмен алмастырып, оң элементтерінің көбейтіндісін есептеу.
  А(20) массиві берілген, осы массивтің оң элементтерінің қосындысын S есептеп, теріс элементтерін екі еселеп, жаңа массивті шығару.
  А(16) және У(16) массивтері берілген. Осы массив элементтерінің қосындысын S =а1у162у15+...+а16у1 есептеп, егер S< 24-тен кем болса енгізілген массив элементтерін шығар.
  С(17) массивінің тақ элементтерінің қосындысын S есептеп, егер S>26-дан болса енгізілген массив элементтерін шығар
  А(16) массиві берілген, жұп элементтерінің квадратын есептеп, тақ элементтерін нөлмен алмастырып, пайда болған массивті шығар.
  А(10) және В(10) массивтері берілген. с111, с2= а2 + в2, с3= а3 - в3,... ережелеріне тәуелді С массивін шығар.
  Р(13) массиві берілген, осы массивтегі ең бірінші нөлге тең және теріс элементтерінің шамасын, олардың нөмірін анықтап, оң элементерінің қосындысын есепте.
  Р(23) массиві берілген, осы массивтегі барлық теріс шамасы бар элементтерді алып тастап, пайда болған жаңа массивті шығарып, олардың элементтерінің квадраттарын есепте.
  А(24) массиві берілген, осы массивтегі әрбір үшінші элементін анықтап солардың негізінде жаңа массив шығар. Пайда болған массив элементтерінің көбейтіндісін есепте.
  С(30) массивтің алдымен оң элементтерін, содан кейін теріс элементтерін орналастырып, жаңа массив шығар.

 

Мысалдар

Мысал 2.1 Label компонентін қолданып, ай аттарын шығаруды қарастырайық (сурет-23 а-форманы даярлау барысы; сурет-23 б-массив элементтерін шығару нәтижесі).

Массив элементтерін шығару мақсатында for параметрлі қайталау операторын қолдану өте ыңғайлы, бұл жағдайда параметрдің санағышы массив элементтерінің индексін бейнелеуге оңтайлы болады.

Есепті шешу: 1. Бір жылда он екі ай бар екенін ескеріп, ай санын тұрақты шама түрінде қабылдаймыз, яғни

const n=12;

2. Ай атаулары бір текті, реттелген жолдық типтер, сондықтан оны жариялау:

var month: array [1..n] of string[15]=('январь', 'февраль', 'март', 'апрель',

'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');

3. Button1 батырмасының үрдісі:

procedure TForm1.Button1Click(Sender: TObject);

var s:string;// ай аттары

i:integer; //индекс, массив элементінің нөмірі

begin

for i:=1 to n do //параметрлі қайталау операторы

s:=s+inttostr(i) + ' ' + month[i]+#13;

label1.Caption:=s; // тізімді шығару

...

 

Мысал 2.2 StringGrid компонентiн қолданып, массив элементтерінің қосындысын және арифметикалық орта шамасын анықтау қажет. Есептің шешуі: 1. StringGrid компонентi, кесте ұяшығында қандайда-бiр мәтiндiк жолдары бар кестенi құру үшiн арналған. Кесте екi бөлiкке бөлiнедi: 1)Фиксацияланған (нақтыланған) және 2)Жұмыс алаңы. Бірінші бөлiгi бағандардың тақырыптарын көрсету үшiн және де олардың өлшемiн қолмен басқару үшiн арналған. Көп жағдайларда бұл бөлiк сол жақ шеткi бағанды және кестенiң ең жоғарғы бөлiгiн алады. Бiрақ FixedCols және FixedRows қасиеттерi арқылы фиксирленген жолдардың, бағандардың басқа да санын беруге болады. Егер бұл қасиет нолге тең болса, кестеде тағайындалған (фиксирленген) аудан болмайды (сурет-24а). Компоненттiң ең басты қасиетiCellsболып табылады. Cells массивiнiң екi өлшемдi ұяшығының әрқайсысында қандайда-бiр мәтiн болады. Нақты ұяшық екi санмен анықталады, ол баған және жол номерi. Cells қасиетi String типтес, сондықтан программа кез-келген ұяшықтың мәлiметiн оқи немесе жаза алады. Мысалға: Cells [1,1]:=′Жұмыс аймағының сол жақ жоғарғы ұяшығы′;

Ұяшықтар саны ColCount (бағандар саны) және RowCount (жолдар саны) деген екi қасиетiне ие. Бұл қасиеттердiң мәнi және де жұмыс барысында өзгертiлiп отырады. Бiрақ бұл мәндер минималды FixedCols және FixedRows қасиеттерiнiң мәндерiнен 1-ге (бiрге) үлкен болуы қажет. Бұл қасиеттер фиксирленген (нақтыланған) ауданның қасиеттерiн анықтайды.

 

 

Сонымен компонентті формаға орналастырып, оның қасиеттерін тағайындау керек:

Кесте 10

Компонент қасиеттері Қасиеттерінің шамалары
ColCount 5 (кестедегі баған саны)
FixedCols 0 (фиксирленген (белгіленген) ауданның баған санын анықтайды – сурет-24а назар аударыңыз)
RowCount 1 (кестедегi жол саны)
DefaultRowHeight 24 (жолдың келісім бойынша қабылданған ұзындығы)
Height  
DefaultColWidth 64 (баған енiнiң келісім бойынша қабылданған мәнi)
Width  
Options.goEditing True (ұяшққа мәлiмет енгізуге рұқсат берілген)
Options.AlwaysShowEditing True (енгізу фокусы берілген ұяшыққа әрқашанда мәлiмет жазуға рұқсат етiлген)
Options.goTabs True (ұяшықтарды Tab клавишасы арқылы өтуге болады)

 

2. Формаға BitBtn1 компонентін орналастырып, оның Kind қасиетін bkOK- деп тағайындау қажет, бұл да StringGrid тәрізді компоненттер палитрасының Additional парағында орналасқан және Button сияқты командалық батырма ретінде қолданылады.

3. BitBtn1- ның OnClik оқиғасын өңдейтін үрдіс арқылы есептеуді іске асырамыз, ол үшін алдымен барлық кіріс деректерін және нәтижені сипаттаушы айнамалаларды жариялау керек: a: array [1..5] of real; - енгізілетен массив, summa-массив элементтерінің суммасы, sred - массив элементтерінің арифметикалық ортасы, i – индекс.

procedure TForm1.BitBtn1Click(Sender: TObject);

var a: array [1..5] of real; summa:real; sred:real; i:integer;

4. Массив элементтерін енгізу: егер ұя бос болса, осы ұя элементінің шамасы нөлге тең болғаны.

Begin for i:=1 to 5 do

if Length(stringGrid1.Cells[i-1,0])<>0 then a[i]:=strtofloat(stringGrid1.Cells[i-1,0])

else a[i]:=0;

5. Массив элементтерінің қосындысын және арифметикалық орта шамасы

summa:=0; //есеп басында сумматор немесе қосынды жинағы нөлге тең, себебі санағышта ешқандай дерек жоқ

for i:=1 to 5 do // параметрлі қайталау операторы 1-ден 5- ке дейінгі элементтерді қарастырады

summa:=summa+a[i]; // санағыштағы деректер a[i]-ші шамаға өсіп отырады

sred:=summa/5; //бес санның арифметикалық орта шамасын есептеу

5. Нәтижені Label компонентінде бейнелеу

Label2.Caption:= 'сумма элементов:' + Floattostr(summa)+#13+

'арифметическое среднее:' + Floattostr(sred);

end;

6. Есептің нәтижесі 24 б-көрсетілген.

Мысал 2.3. Edit компонентінің көмегімен массив элементтерін енгізіп, оларды ListBox –та бейнелеп, массивтің ең үлкен және ең кіші элементін Memo- да көрсету қажет (сурет-26).

Есепті қарастыру кезеңінде (26а-суреті) RadioButton компонетін қолданып, оны максимум немесе минимум-ды анықтауды тағайындау үшін қолданамыз. Массив элементтерін Edit- ке енгізіп, Button1 компонентін басып, оның нәтижесін Listbox – та көруге болады. Массив элементтерінің ең үлкен шамасын және оның номерін (26б-сурет), сол сияқты ең кіші шамасын және оның номерін анықталған және (26в-сурет) нәтижесі келтірілген.

Қорытынды: Біртекті деректерді кесте немесе тізімдерді бейнелеу үшін сілемдер арқылы көрсету өте қолайлы. Ортақ атауы бар, біртекті деректер жиынын сілемдер немесе массив дейміз. Егер оның индексі бір индекстік өрнектен түрса, онда массив бірөлшемді деп аталады

Массивтермен орындалатын операциялар:

1. массив элементтерін көрсету (шығару);

2. массив элементтерін енгізу;

3. массив элементтерінің ең үлкен және ең кіші элементін анықтау;

4. белгілі бір шаманы массив элементтерінен іздеу;

5. массив элементтерін сұрыптау

65. Массив элементтерін сұрыптау

Массив элементтерін белгілі бір ретпен орналастыру мақсатында орындалатын үрдісті сұрыптау деп атаймыз. Мысалы: бүтін сандардан құрастырылған а массив элементтерін өсу ретімен сұрыптау қажет болса a[1]<=a[2]<=…<=a[n] шарты орындалуы керек. n-массив элементтерінің индексі.

Массив элементтерін сұрыптаудың бірнеше әдісі бар, соның ең жиі қолданыстағы екі түрін қарасытамыз:

1. тікелей таңдау әдісі;

2. тікелей алмастыру әдісі.

1. Таңдау әдісімен сұрыптау

Таңдау әдісімен сұрыптау алгоритмі:

1.массивтің бірінші элементінен бастап қарап, осылардан ең кіші элементін тауып алып оны біоінші элементтің орнына орналастырып, ал оның орнына бірінші орындағы элементті қою қажет;

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

3. Осы әдіспен соңғының алдына дейін орындап шығу керек.

2.

3. Мысал: 2.4 Бүтін сандардан құрастырылған массивтің он элементін өсу және кему ретімен сұрыптау қажет.

Бағдарлама мәтінінен үзінді:

...

var a:array[1..n] of integer; // массивті жариялау

min:integer; // ең кіші елементтің номері

j:integer; // кіші элементпен салыстырылатын элементтің номері

buf:integer; // массив элементін алмастыру барысында қолданылатын буфер

i,k:integer;

...

a[i]:=strtoint(stringGrid1.cells[i-1,0]); // массив элементтерін енгізу

label2.caption:='';

for i:=1 to n-1 do

begin min:=i; // a[1] – ден a[n] -ғадейін ең кіші элементті іздеу

for j:=i+1 to n do if a[j]<a[min] then min:=j;

// a[i] мен a[min] элементтерінің орнын буферді қолданып ауыстыру

buf:=a[i];

a[i]:=a[min]; a[min]:=buf;

// сұрыпталған массив

for k:=1 to n do

label2.caption:=label2.Caption+' '+inttostr(a[k]);

label2.caption:=label2.Caption+#13; end;

label2.Caption:=label2.Caption+#13+'массив отсортирован';end;end.

Зертханалық жұмыс № 6

Жұмыстың тақырыбы: Екі өлшемді массив элементтерін өңдеу.

Жұмыс мақсаты: Delphi ортасында матрица (екі өлшемді массив) элеметтерін анықтау, енгізу, шығару әдістерін меңгеріп, бағдарлама құрастыру.

Орындалу уақыты: 4 сағат.

1 Зертханалық жұмыстың жүру тәртібі:

1.8 Зертхана жұмысының тақырыбына сәйкес теориялық материалдарды меңгеру

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

1. Бағдарламаның келесі үзіндісінде s[i] айнымалысында қандай шама анықталады:

for i:=1 to 10 do begin

for j:=1 to 10 do s[i]:=s[i]+a[i,j]; s[i]:=0; end;

a) S массиві нөлге теңеседі;

b) А матрицасының баған элементтерінің қосындысы есептеледі;

c) А матрицасының элементтерінің қосындысы есептеледі;

d) А матрицасының басты диагональ элементтерінің қосындысы есептеледі;

e) S массивінің элементтер саны анықталады.

2. S айнымаласының қайсы шамасы анықталады: s:=0; for j:=1 to 10 do s:=s+a[i,j];

a) А матрицасының i –ші жол элементтерінің қосындысы есептеледі;

b) А матрицасының j –ші баған элементтерінің қосындысы есептеледі;

c) А матрицасының басты диагональ элементтерінің қосындысы есептеледі;

d) А матрицасының элементтерінің саны анықталады;

e) А матрицасының әрбір жол элементтерінің қосындысы есептеледі

4. 3. Массив элементі 5 символдық типті жолдан құрастырылған, әрбір жолда 10 таңба бар. Массивтің дұрыс сипатын анықта.

a) a:array[1..5,1..10] of char

b) a:div(1..10,1..5) of real

c) a:array[1..5] of char

d) a:real(1..5) of real

e) a:div{1..5,1..10} of integer

4. Ішкі циклді ұйымдастырудың негізгі ережелерін түсіндір.

5. Матрица элементтерін шығару тәсілдерін түсіндір.

6. Матрицаның төменгі үшбұрыштағы элементтерін шығару амалдары.

7. N*M өлшемді матрица элементтерін енгізу тәсілдері.

8. Дұрыс жазылған бағдарлама фрагментін анықта

a) Y:=0; FOR X:=0.1 TO 0.9 DO Y:=Y+SIN(X);

b) K:=9; FOR X:=1 TO SQRT(K) DO K:=K*3;

c) K:=4; FOR X:=16 DOWNTO 1 DO K:=K*3;

d) K:=0; FOR I:=1 TO 9 DO BEGIN I:=2*I; K:=K*I END;

e) K:=4; FOR I:=SQR(K) TO 1 DO K:=K*3; A:=K+I;

 

Тапсырма

А тобы Кесте 11

Вар. № Тапсырма
  А квадрат матрицасының элементтерін басты диагоналіне қатысты симметриялы орналастыр.
  А квадрат матрицасының элементтерін вертикаль осіне қатысты симметриялы орналастыр.
  Квадрат матрицаның басты диагоналінінен жоғары орналасқан жұп элементтерінің санын анықта.
  Квадрат матрица элементтерінің қосындысын анықтап оны бір өлшемді массив түрінде бейнеле.
  Квадрат матрицаның басты диагоналінінен төмен орналасқан жұп элементтерінің санын анықта.
  Квадрат матрицаның нөлге тең емес элементтерін анықтап, солардың негізінде жаңа матрица элементтерін шығар.
  Берілген А матрицасындағы ең кіші теріс санын анықтап, оны нөлмен алмастырып, жаңа матрицаны шығар.
  Берілген А матрицасындағы ең үлкен оң санын анықтап, оны бір санымен алмастырып, жаңа матрицаны шығар.
  Берілген В матрицасында ең кемінде бір теріс элементі бар жолдар санын анықта.
  Берілген В матрицасында ең үлкен элементті, оның орнын анықта.
  Берілген В матрицасында ең кіші элементті, оның орнын анықта.
  Егер матрицаның ең үлкен элементі басты диагональда орналасқан болса, матрица элементтерін 10-ға, ал басқа жағдайда 0,5-ке көбейту қажет.
  А және В матрицалары берілген. С=А+В анықтап, пайда болған жаңа С матрицасын шығар.
  Берілген А матрицасының барлық элементтерін 3-ке көбейтіп, жаңа матрицаны шығар.
  Берілген А матрицасының барлық элементтерін 5-ке бөліп, жаңа матрицаны шығар.
  Берілген А матрицасындағы теріс шамасы бар элементтерді анықтап, оларды нөль санымен алмастыру керек.
  Берілген А матрицасындағы оң шамасы бар элементтерді анықтап, оларды бір санымен алмастыру керек.
  Берілген А матрицасының басты диагоналінен төмен орналасқан теріс мәні бар элементтерін С шамасымен алмастыру керек.
  А матрицасының басты диагоналінде теріс мәні бар элемент болса, онда басты диагональ элементтерін екіге көбейту қажет.
  В матрицасындағы ең кіші мәні бар баған элементін анықтап, оын екі еселеу қажет.

Втобы Кесте.12

Вар. Матрица Орындалатын әрекеттер Шектеулер мен қойылған шарттар
  А(10, 15) Матрицаның бағанындағы және қатарындағы оң мәні бар элементтерін анықтап, олардың қосындысы мен санын екі жолға шығару керек. аij>0
  А(N, M) Матрица бағанындағы және қатарындағы элементтердің қосындысын анықтап, олардың нәтижесі мен санын екі жолға шығару керек. N<=20 M<=15
  В(N, N) Матрицаның басты диагоналіндегі элементтер саны мен олардың қосындысын анықтау керек. N<=12
  C(N, N) Матрицаның басты диагоналінен жоғары орналасқан оң мәні бар элементтерін анықтап, олардың қосындысын және санын екі жолға шығару керек.   сij>0 N<=12
  D(K, K) Матрицаның теріс шамалы элементтерінің орнына ноль санын қойып, жаңа матрицаны шығар. K<=10
  D(10, 10) Матрицаның теріс шамалы элементтерінің орнына ноль санын, ал оң шамалы элементтерінің орнына бір санын қойып, жаңа матрицаны шығар.  
  F(N, M) Матрицаынң әрбір бағаны мен қатарындағы ең үлкен және ең кіші элементін анықтап, оларды сәйкесінше бірінші және соңғы орынға орналастырып жаңа матрица шығар. N<=20 M<=10
  F(10, 8) Берілген матрицаны транспонендеп, басты диагональдағы және одан төмен орналасқан эдементтерін шығар.  
  N(10, 10) Матрица элементтері бүтін типті, олардың беске еселі шамалары бар элементтерінің ішінен оның ең үлкенін анықтау қажет. nij/5*5 = nij
  N(10, 10) N матрицасындағы оң шамалы элементтерінен M (10, KMAX) матрицасын шығару керек. KMAX-матрицаның қатарындағы ең үлкен мәні бар элемент, ал теріс мәні бар элементтер орнына ноль санын орналастыру қажет  
  P(N, N) Берілген матрицаның әрбір жолындағы ең үлкен элементті анықтап, оны сәйкесінше басты диагональ элементтерімен орнын ауыстыру қажет. N<=15
  R(K, N) Матрицадығы ең кіші және ең үлкен элементтерді анықтап, олардың орнын өзара алмастырып жаңа матрица шығар. K<=20 N<=10
  S(25, 8) Матрицаның әрбір қатар және баған элементтерінің мәндерінің арифметикалық орта шамасын есептеп, екі жолға шығар.  
  T(N, M) Ең кіші және ең үлкен мәні бар матрицаынң қатарын анықта, сол қатардың қосындысын шығар. N<=20 M<=15
  V(15, 10) Матрицаның әрбір қатар шамаларын кемуіне қарай сұрыптап орналастыр.  
  F(8, 8) Матрицаны транспонендеп, пайда болған матрицаның басты диагоналінде және одан төмен орналасқан элементтерді шығар.  
  V(10, 10) Матрицаның әрбір баған элементтерін мәндеріне қарай өсуі бойынша орналастыр.  
  А(N, M) Матрицаның әрбір қатар элементтерінің санын және олардың қосындысын есептеп шығар. N<=15 M<=15
  C(N, N) Матрицаның басты диагоналінде орналасқан элементтердің қосындысын және көбейтіндісін анықта. сij>0 N<=10
  C(N, N) Матрицаның басты диагоналінде орналасқан теріс мәні бар элементтердің қосындысын анықта. сij>0 N<=12

Мысалдар

Мысал 2.1 4 жол 3 бағаннан құрастырылған матрицаның бірінші және соңғы жол элементтерінің орындарын өзара алмастыру қажет.

Бағдарлама мәтінінен үзінді:

...

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

begin

for i:=0 to 3 do

begin

stringGrid2.Cells[i,0]:=stringGrid1.Cells[i,3];

stringGrid2.Cells[i,3]:=stringGrid1.Cells[i,0];

stringGrid2.Cells[i,1]:=stringGrid1.Cells[i,1];

stringGrid2.Cells[i,2]:=stringGrid1.Cells[i,2];

end end;

procedure TForm1.Button2Click(Sender: TObject);

begin

stringGrid2.rows[0]:=stringGrid1.rows[3];

stringGrid2.rows[1]:=stringGrid1.rows[1];

stringGrid2.rows[2]:=stringGrid1.rows[2];

stringGrid2.rows[3]:=stringGrid1.rows[0];

end;

procedure TForm1.Button3Click(Sender: TObject);

var i,j:integer;

begin

for i:=0 to 3 do

for j:=0 to 3 do

stringGrid2.cells[i,j]:='' end; end.

Екі өлшемді массивтер

 

a11 a12 … a1n

a21 a22 … a2n

am1 am2 … amn

Матрицаның әрбір amn элементінің екі индекс болады, i - жол нөмірі j -баған нөмірі.

Оператордағы екі өлшемдік массивтің жазылуы:

var массив аты: array[1..m,1..n] of м ассивтің элементтер типі.
Мысалы:

var a: array[1..3,1..4] of integer; айнымалы a -3 жолдан, 4 бағаннан құрастырылған екі өлшемді массив, элементтерінің типі – бүтін сандар.

Екі өлшемді массивті өңдеу үрдісінде мүмкін болатын жағдайлар:

Массив элементтерін толтыру.

Массив элементтерін таблица түрінде шығару.

Элементтер санын есептеп шығару.

Массив элементтерін іздеу.

 

Екі өлшемді массив элементтерін толтыру

Екі өлшемді массив элементтерін енгізу үшін Stringgrid компонентін қолдану қолайлы. Төменде келтірілген бағдарламаның үзіндісіне назар аударыңыз:

var a:array[1..3,1..4] of integer; i,j:integer;

begin for i:=1 to 3 do

for j:=1 to 4 do

if stringGrid1.cells[i-1,j-1]< >’ ‘ then a[i,j:=strtoint(stringgrid1.cells[i-1,j-1]))]

 

Екі өлшемді массив элементіне нөлдік мән қосылғанда орындалатын программа фрагменті

for i:=1 to n do

for j:=1 to m do

a[i,j]:=0;

Массив элементтерінің қосындысы мен көбейтіндісін есептеу

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

sum:=0; pr:=1;

for j:=1 to n do begin

sum:=sum+a[j]; pr:=pr*a[j];

End;

Сол сияқты жол элементтерінің суммасын есептеуге қолданылады және ішкі циклде жол санына байланысты қайталанады.

sum:=0; pr:=1;

for i:=1 to m do

for j:=1 to n do begin

sum:=sum+a[i,j]; pr:=pr*a[i,j];

End;

Екі өлшемді массив элементін іздеу

Массивтің үлкен немесе к іші элементін іздеу келесі программа фрагменті арқылы орындалады.

for i:=1 to m do

for j:=1 to n do

if a[i,j]>amax then amax:=a[i,j];

немесе

if a[i,j]<amin then amin:=a[i,j];

сәйкесінше.

Екі өлшемді массивтің максимальді элементін және осы элемент индексін іздеу үшін:

for i:=1 to n do

for j:=1 to m do

if a[i,j]>amax then begin

amax:=a[i,j]; nmax:=i; mmax:=j; end;

...

Зертханалық жұмыс № 6

Жұмыстың тақырыбы: Delphi –дің графикалық мімкіндіктері

Жұмыс мақсаты: Delphi ортасының графикалық мүмкіндіктерін қолданып қосымша даярлау.

Орындалу уақыты: 4 сағат.

1 Зертханалық жұмыстың жүру тәртібі:

2.1 Зертхана жұмысының тақырыбына сәйкес теориялық материалдарды меңгеру

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

  1. Графикалық элементтер қасиеттерін атап көрсетіңіз.
  2. Графикалық элементтердің әдістері.
  3. Бағдарламаның даярлаған графигі үшін болатын «жазықтық»?
  4. TСanvas типінің әдістері.
  5. Мәтінді кенепке шығару әдістері?
  6. экранның белгілі бір нүктесіне қалай жетуге болады?
  7. Қарапайым графикалық бейнелерді салу әрекеттері?
  8. «Қарындаш» сайманы қандый қызмет атқарады?
  9. Сызықтардың қандай түрлері бар?
  10. Дайын мәтіннің қарпінің түрін қалай өзгертуге болады?

 

Delphi графикасымен байланысқан кез келген объект үшін: Property OnChange: TnotifyEvent; оқиғасы міндетті болып табылады.

TFont класы - Windows шрифтін инкапсуляциялайды. Delphi – де тек көлденең орналасқан шрифтілерге ғана рұқсат беріледі.

TPen класы - GDI Windows (перо) қаламының қасиеттерін инкапсуляциялайды. TBrush класы - кисть (бояу жаққыш) – аймақтарды бояу құралының қасиетін инкапсуляциялайды. Алғашында ақ тұтас бояу жаққыш шығады.

Tcanvas класы -Delphi графикалық ішкі жүйесінің ортасы. Ол өзінде (холст) кенепті, “жұмыс істеу құралдарын” да, “ішкі шеберлерді” де жинақтайды. Оны канва деп атайтын боламыз. Канва компонент болып табылмайды, бірақ қандай-да бір компонентті бейнелей алатын басқа да көптеген компоненттер қасиеті ретінде қатыса алады, сондықтан оны арқау ретінде түсіну қажет.

Procedure Refresh үрдісі ағымдағы шрифт, перо және кистіні жаңартады, ауыстырады..

TGraphic класы. Канва, перо, кисть және шрифтті қолданып бейне салу үшін қажет. TGraphic класы бейнелердің төрт түріне аналық болып табылады:

1)белгі (Ticon компоненті);

2)метафайл (Tmetafile компоненті);

3)растрлі картинка (Tbitmap компоненті);

4)Jpeg форматтағы сығылған растрлі картинка(Tjpegimage компоненті).

Procedure Assing (Source;Tpersistent); Үрдісі графикалық объектілерге полиморфты меншіктеуді рұқсат ете отырып, біртекті аналық әдісін қайта анықтайды. TPecture класы - TGraphic-ті баптайды.Ол TBipmap,Ticon,TMetafibe және TjpEGimege класстарының объектілерінен тұратын Graphic өрісінен тұрады. Графикалық объектіге жету:

Property Graphic: TGraphic; қасиетімен жұргізіледі;

TМetafile класы. - Windows метафайлының қасиетін инкапсуляциялайды.

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

Tbitmap класы - растрлік графиканың негізгі болып табылады. DIB және DDB- биттік картаның форматына: type tbitmapHandle Type = (bmDIB, bmDDB);

Property handle Type: tbitmapHandle Type; Қасиеттері жауап береді

Үнсіз келісім бойынша bmDIB режимі тағайындалынады

Image компоненті - ТPICTURE класын баптау үшін қолданылады және VCL обьектісінің барлық иерархиялрын тұйықтайды.

5. y=f(x) функциясының графигін мониторға шығару сызылға графигі бар масштабталған төртбұрыш парақ бетін (рис.18) экран бетінде бейнелеу болып табылады (рис.19).

ОХ және OY өсьтерінде масштабтау сызықтық байланыстар арөылы жүзеге асады (рис.19).

,

OX осі бойындағы мастаб:

 
 

 

 

Тапсырма

Кестеде келтірілген вариантқа сәйкес функция графигін салу қажет

Кесте 1

вариант Функция Аргументтің сол жақ шекарасы Аргументтің оң жақ шекарасы Графиктің нүктелер саны
  Y=Sin(x) -π/2 +π/2  
  Y=Cos(x)   +3π/2  
  Y=    
  Y=    
  Y=2 Sin(x)+3cos(x)  
  Y=Sinx+cos2x  
  Y=2-cosx   +3π/2  
  Y=Sin()+cosx   +2π  
  Y=2sin(2x)+1 -π/2 +π/2  
  Y=Sinx+cosx  
  Y= -3    
  Y=10/(1+x2) -3    
  Y=(x-3)/(x2+2) -1    
  Y=Xcos(2x)  
  Y=X2+2x -1    
  Y=2Sinx+cos2x -π/2 +π/2  
  Y=tgx+5 -π/2 +π/2  
  Y= -6 -4 +4  
  Y=Sin()-3cosx -π/2 +3π/2  
  Y=5X2-2x -5 +5  

 

Мысал 2.1. Y=cosx/2-sinx 2 функция графигін сызу қажет.

Бағдарлама листингісінен үзінді:

unit func_graf;

....

type

TForm1 = class(TForm)

procedure FormPaint(Sender: TObject);

procedure FormResize(Sender: TObject);

....

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

Function f(x:real):real; //графигі сызылуы тиісті функция

begin

F:=(cos(x))/2-(sin(x)*sin(x));

end;

procedure GrofFunc; //функция графигін сызушы үрдіс

var

x1,x2:real; //функция аргументінің анықталу аймағы

y1,y2:real; //функция шамасының анықталу аймағы

x:real; //функция аргументі

y:real; //х нүктесіндегі функция шамасы

dx:real; //аргументтің өсімі

l,b:integer; //графиктің сол жақ төменгі бұрышы

w,h:integer; //графиктің сызылу аймағының ені мен биіктігі

mx,my:real; //X және Yосьтері бойындағы масштаб

x0,y0:integer; //координаттар бас нүктесі

begin

//графикті шығару аймағы

l:=10; //Х координатасы -жоғарғы сол жақ бұрышы

b:=Form1.ClientHeight-20; //Y координатасы-жоғарғы сол жақ бұрышы

h:=form1.ClientHeight-40; //биіктік

w:=form1.Width-40; //ені

x1:=0; //аргументтің анықталу аймағының төменгі шегі

x2:=25; // аргументтің анықталу аймағының жоғарғы шегі

dx:=0.01; //аргумент адымы

// функцияның x1, x2 аралығындағы максимум және минимум шамасы

y1:=f(x1); //минимум

y2:=f(x1); //максимум

x:=x1;

repeat

y:=f(x); if y<y1 then y1:=y; if y>y2 then y2:=y;

x:=x+dx; until (x>=x2);

my:=h/abs(y2-y1); //Y осі бойынша масштаб

mx:=w/abs(x2-x1);// X осі бойынша масштаб

//осьтер

x0:=1; y0:=b-abs(round(y1*my));

with form1.Canvas do

begin moveto(l,b); lineto(l,b-h);

moveto(x0,y0); lineto(x0+w,y0);

textout(1+5, b-h, floattostrF(y2,ffGeneral,6,3));

textout(1+5, b, floattostrF(y1,ffGeneral,6,3));

x:=x1; repeat y:=f(x);

pixels[x0+round(x*mx), y0-round(y*my)]:=clRed;

x:=x+dx; until (x>=x2); end; end;

procedure TForm1.FormPaint(Sender: TObject);

begin GrofFunc; end;

procedure TForm1.FormResize(Sender: TObject);//бағдарлама терезесі өлшемдерінің өзгеруі

begin //форманы тазарту

form1.Canvas.FillRect(rect(0,0,ClientWidth,ClientHeight));

GrofFunc; //графикті сызып шығару

end; end.

 

Зертханалық жұмыс № 7

Жұмыстың тақырыбы: Мәтіндік файлдармен жұмыс

Жұмыс мақсаты: Delphi ортасында мәтіндік файлдармен жұмыс орындау

Орындалу уақыты: 4 сағат.

1 Зертханалық жұмыстың жүру тәртібі:

1.1 Зертхана жұмысының тақырыбына сәйкес теориялық материалдарды меңгеру

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

1. Object Pascal деректер файлының неше типін қолдайды?

2. Бір ізді, ретті файлдарды құрастыру әдістері.

3. Бақарушы символдар деген не?

4. Файл нұсқаушысы деген не?

5. MyData.txt файлымен келесі әрекеттерді орындауға Object Pascal кодын жаз:

a) енгізу режимінде файлды ашу;

б) шығару режимінде ескі деректерді өшіріп файлды ашу;

с) шығару режимінде ескі деректерді өшірмей файлды ашу;

6. Келесі фрагменттердің арасындағы айырмашылықты түсіндір:

а) Read(inFile, intVar1); Read(inFile, intVar2); және

б) Read(inFile, intVar1, intVar2);

7. CloseFile() үрдісі қандай әрекет орындайды?

8. Eof()және Eoln() операцияларының әрекеттерін түсіндір.

9. Read() және Readln() үрдістерін, олардың айырмашылықтарын түсіндір?

10. AssignFile() үрдісі қандай әрекет орындайды?

11. Append() үрдісі қандай әрекет орындайды?

 

Тапсырма

 

Мысалдар

Мысал 2.1. d дискісінде орналасқан exam1.txt -мәтіндік файлды оқып, оны TtfrmTextIO формадағы Memo1 компонентіне шығарып жаңадан names.txt файлына exam1.txt файлындағы деректерден фамилиялар тізімін жазу керек.

Бағдарламадан үзінді:

...

procedure TTfrmTextIO.Button1Click(Sender: TObject);

var

infile:TextFile; /түбіргі каталогтағы мәтіндік файл

outFile:textfile; /бағдарлама нәтижесінде шығатын мәтіндік файл

lastname:String[10];

examscore:integer; /

begin

assignFile(inFile, 'd:\exam1.txt'); /түбіргі каталогтағы мәтіндік файлмен байланысу

assignfile(outfile, 'd:\names.txt'); /нәтижедегі файлмен байланыстыру

Reset(inFile); /тіүбіргі каталогатағы файлды оқу үшін аші

rewrite(outfile); /жаңа файл жасап оны ашу

Writeln(outFile, 'Фамилия');

Writeln(outFile, '-------'); /

Memo1.Clear;

Memo1.Lines.Add('студент экзамен');

Memo1.Lines.Add('------- -------');

while not (eof(infile)) do begin

readln(inFile, lastname, examscore);

writeln(outFile, Trim(lastname));

memo1.Lines.Add(lastName+intToStr(examScore));

end;

memo1.Lines.Add('');

memo1.Lines.Add('создан файл d:\names.txt');

memo1.Lines.Add('программа завершена');

closefile(inFile); /түбіргі каталогтағы файлды жабу

closefile(outFile); /нәтижеде пайда болған файлды жабу

end; end.

 

 

Әдебиеттер

Мазмұны

Зертханалық жұмыс № 1 4

Зертханалық жұмыс № 2 7

Зертханалық жұмыс № 3 10

Зертханалық жұмыс № 4 16

Зертханалық жұмыс № 5 19

Зертханалық жұмыс № 6 27

Әдебиеттер 32

 


Дата добавления: 2015-11-14; просмотров: 108 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Case listbox1.ItemIndex of| При открытии файла желательно использовать функцию

mybiblioteka.su - 2015-2024 год. (0.156 сек.)