Delphi және PASCAL тілдерінде массив ұғымын түсіндіру және массивтерді өңдеу



Кіріспе

I . тарау. Массивтер туралы жалпы түсінік

1.1. Бір өлшемді массивтер. Массивті енгізу және шығару
1.2. Динамикалық массивтер. Массивтерге іздеу амалдарын қолдану
1.3. Көп өлшемді массивтер
1.4. Тікелей қосу, таңдау, алмастыру көмегімен сұрыптау
1.5. Бағдарлама мен алгоритмдердегі тапсырмаларды шешу жолдары


II . тарау. Flash көмегімен Delphi программалау ортасындағы электрондық құралды орындау
2.1.Delphi және Flash тілдерінің мүмкіндіктері
2.2. Электрондық құралдың сценарийі және Delphi ортасындағы оны орындалуы
2.3.Тапсырмалар мен сауалнама жүргізу

Қорытынды

Қолданылған әдебиеттер тізімі
Информатика-компьютердің көмегімен информацияны іздеу, сақтау, жинау, өлшеу мен өңдеудің әдісі, тәсілдері мен заңдылықтарын қарастыратын математикалық ғылым. Қазіргі информация ағымын адамзат тек ЭЕМ-нің көмегі арқылы ғана қабылдайды. Компьютер информацияны автоматты түрде өңдеуді жүзеге асырады. Сондықтан компьютер программалау информатиканың негізгі ядросы болып табылады, ал қазіргі есептегіш техникалар - оның материалдық базасы.
Информатика – компьютермен дами отырып, уақыт өте жалпы ғылымға -информацияны өңдеу туралы ғылымға айнала бастады. Мектепте көп программалау тілдерін оқытады: BASIC, PASCAL, DELPHI, HTML т.б.
Программалау тілдерін оқыту Информатика және есептеуіш техника негіздері курсының негізгі бір бөлігі болып табылады. Компьютерді адам қызметінің әртүрлі салаларында пайдалану үшін, программалау тілдерін меңгеру және сол тілдерде жазылған программаларды қолдана білу қажет. Қазіргі кезде программалау тілдерінің түрлері өте көп.Солардың ішіндегі мектеп информатикасында негізінен оқытылатыны –Паскаль тілі. Өйткені, компьютерлік сауаттылық пен программалауды алғашқы кезеңде үйретуге ең қолайлы тіл. Сонымен қатар, соңғы жылдары информатика курсы бойынша өтетін халықаралық олимпиадаларда программалауға таңдалынып жүрген тілдердің бірі - Паскаль тілі.
Оның ішінде массив ұғымы ең керегі, неге десеңіз, оны түсінген оқушы кез-келген программалау тілді меңгере алады, қайталау амалдарға арналған алгоритмдерді орындай алады. Массивтерге арналған амалдарға көп есептер негізделеді.
Осы дипломдық жұмыс орта мектептегі массивтерді өңдеу тақырыбын оқыту мектептің жоғары сынып оқушыларына және төменгі курс студенттерге арналады.
1.Прищепов М. А. Программирование на языках Basic, Pascal и Object Pascal в среде Delphi / Е. В. Севернева, А. И. Шакирин – Мн.: Тетра Системс, 2006. - 320 с.
2.Халыкова Г. З. Паскаль тілінде программалау. – Алматы : Абай атындағы ҚазҰПУ, 2002. – 202 б.
3. Фаронов В. В. Учебный курс./ Издатель С.В Молчаева.-Москва 2001. – 672 с.
4. Сыдықов Б. Д. Delphi ортасында бағдарламалау практикумы / Ш. Т. Шекербекова – Алматы : Абай атындағы ҚазҰПУ, 2005. – 135 б.
5.Вирт Н. Алгоритмы и структуры данных. Перевод с англ. 2 - е изд., испр – сп б : Невский Диалект, 2001. 352 с.
6.Сыдықов Б.Д. Алгоритмдеу және программалау негіздерін оқыту : Оқу құралы. – Алматы: Абай атындағы АлМу. 2003. – 133 б.
7.Фаронов В. В. Delphi 5. Учебный курс. – М..Нолидж, 2001
8.Культин Н. И. Программирование на Object Pascal в Delphi / - СПб. : БХВ – Санкт – Петербург, 1999. - 384 с
9.Глушаков С. В, Программирование в среде Delphi 7.0. / Клецов А. Л. - Харьков ФОЛИО, 2003. Архангельский А. Я. Программрование в Delphi 7.
10.Архангельский А. Я. Программрование в Delphi . М.: ООО Бином Пресс, 2003 . – 1152 с.
11.Культин Н. И. Delphi в задачах и примерах. СПб. : БХВ – Санкт – Петербург, 1999. - 235 с
12. Культин Н. Б. Основы программирование Delphi 7. Санкт – Петербург. БхВ – Петербург 2003.

Мазмұны

Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..3

I – тарау. Массивтер туралы жалпы түсінік ... ... ... ... ... ... ... ... ... ... .5

1.1. Бір өлшемді массивтер. Массивті енгізу және шығару ... ... ... ... ...10
1.2. Динамикалық массивтер. Массивтерге іздеу амалдарын қолдану ... ..19
1.3. Көп өлшемді массивтер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..28
1.4. Тікелей қосу, таңдау, алмастыру көмегімен сұрыптау ... ... ... ... ... 35
1.5. Бағдарлама мен алгоритмдердегі тапсырмаларды шешу жолдары ... ..53

II – тарау. Flash көмегімен Delphi программалау ортасындағы
электрондық құралды
орындау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... 60
2.1.Delphi және Flash тілдерінің
мүмкіндіктері ... ... ... ... ... .. ... ... ... ... ... ... 61
2.2. Электрондық құралдың сценарийі және Delphi ортасындағы оны
орындалуы ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... .62
2.3.Тапсырмалар мен сауалнама
жүргізу ... ... ... ... ... ... ... ... ... ... ... ... ... ..67

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

Қолданылған әдебиеттер тізімі ... ... ... ... ... ... ... ... ... ... ... ... ... .70

КІРІСПЕ
Информатика-компьютердің көмегімен информацияны іздеу, сақтау, жинау,
өлшеу мен өңдеудің әдісі, тәсілдері мен заңдылықтарын қарастыратын
математикалық ғылым. Қазіргі информация ағымын адамзат тек ЭЕМ-нің көмегі
арқылы ғана қабылдайды. Компьютер информацияны автоматты түрде өңдеуді
жүзеге асырады. Сондықтан компьютер программалау информатиканың негізгі
ядросы болып табылады, ал қазіргі есептегіш техникалар - оның материалдық
базасы.
Информатика – компьютермен дами отырып, уақыт өте жалпы ғылымға
-информацияны өңдеу туралы ғылымға айнала бастады. Мектепте көп
программалау тілдерін оқытады: BASIC, PASCAL, DELPHI, HTML т.б.
Программалау тілдерін оқыту Информатика және есептеуіш техника негіздері
курсының негізгі бір бөлігі болып табылады. Компьютерді адам қызметінің
әртүрлі салаларында пайдалану үшін, программалау тілдерін меңгеру және сол
тілдерде жазылған программаларды қолдана білу қажет. Қазіргі кезде
программалау тілдерінің түрлері өте көп.Солардың ішіндегі мектеп
информатикасында негізінен оқытылатыны –Паскаль тілі. Өйткені, компьютерлік
сауаттылық пен программалауды алғашқы кезеңде үйретуге ең қолайлы тіл.
Сонымен қатар, соңғы жылдары информатика курсы бойынша өтетін халықаралық
олимпиадаларда программалауға таңдалынып жүрген тілдердің бірі - Паскаль
тілі.
Оның ішінде массив ұғымы ең керегі, неге десеңіз, оны түсінген оқушы
кез-келген программалау тілді меңгере алады, қайталау амалдарға арналған
алгоритмдерді орындай алады. Массивтерге арналған амалдарға көп есептер
негізделеді.
Осы дипломдық жұмыс орта мектептегі массивтерді өңдеу тақырыбын оқыту
мектептің жоғары сынып оқушыларына және төменгі курс студенттерге
арналады.
Дипломдық жұмыстың мақсаты : Delphi және PASCAL тілдерінде массив
ұғымын түсіндіру және массивтерді өңдеу есептерін шығару жолдарын мектеп
оқушыларына уйрету.
Дипломдық жұмыстың мақсатына сай төмендегідей міндеттер қойылды:
• Delphi және PASCAL бағдарламасы туралы әдебиеттердегі массив,
массивті сұрыптау мен танысып, талдау жасау;
• бұл бағдарламаны студенттерге өздігінен меңгеру үшін массивтерді өңдеу
туралы теориялық материалдар беріп, оны мысалдармен жасақтау;
• HTML гипермәтінді бағдарламалау ортасында қазіргі әр түрлі құралдарды
пайдалана отырып, электрондық көмекші құрал жасау.

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

1. МАССИВТЕР ТУРАЛЫ ЖАЛПЫ ТҮСІНІК
Массив бағдарламада қолданылатын ең қажетті түсінік. Массивте бірдей
типке жататын шамалар, ақпараттар сақталып өңделеді. Арнайы бірдей типті
шамаларды сақтау тәсілін массивтер деп атайды. Бір өлшемді массив (сызықты
таблица - вектор), ал екі өлшемді массив (төрт бұрышты таблица - матрица)
деп аталады. Айнымалылардың – массив элементтерінің типтері бірдей болады.
Массив бір ғана атпен беріледі. Мысалы, нақты сандардан құрылған тізбектегі
R атаулы массив деуге болады. Массивтің әр элементі массивтің атымен
белгіленеді де, оның индексі қойылады. Яғни массив элементтері индекстері
бойынша реттеліп жазылады.
Индекс типті массивті бейнелегенде пайдаланылса, индекс массив
элементтерін белгілеу үшін операторлық бөлікте пайдаланылады. Индексті
бейнелегенде қандай тип берілсе, индекс те сол типте болуы қажет. Индекс
өрнек, айнымалы немесе тұрақты болып берілуі мүмкін. Сондықтан массивтерді
кей жағдайларда индексті айнымалылар деп те атайды. Егер бағдарламалауда
массив пайдаланылатын болса, онда ол айнымалы (Var) бөлігінде немесе тип
(Type) бөлігінде сипатталуы қажет.
Массив программаның кез – келген басқа айнымалылары сияқты алдын –
ала айнымалыларды сипаттау бөлімінде сипатталуы тиіс. Массивті сипаттау
құрылымының жалпы түрі:
Аты: array [ төмендегі_индекс..жоғарғы_индекс] of типі;
Массивтің жоғарғы индексін тұрақтылар бөлімінде анықтау:
const
N=18; фамилялар саны
S=25 фамаляның ұзындығы
var
t: array [1..N of string [S];
Массив элементтерін программмада қолдану үшін массив атын және тік жақша
ішінде номерін (индексін) көрсету керек.
t[1]:=’Томанов’;
Әдетте массивтермен жұмыс істегенде мынандай амалдар орындалады:
1) Массивті шығару;
2) Массивті енгізу;
3) Массивтің ең кіші немесе ең үлкен элементіе іздеу;
4) Массивті сорттау.
Есептеуді талап етпейтін алгоритмнің ең негізгі кластарының бірі
ақпараттық массивтерді өңдеу. Массивті өңдеу алгоритмі қазіргі ЭВМ
жұмысында маңызды орын алады. Мысалы банкте айдың соңында банктік
декларацияларды даярлау үшін барлық чектерді чек нөмері бойынша
сұрыптайды. Телефон компаниялары телефон нөмерлерін іздеуді оңай болу
үшін өз есептерін фамилия бойынша, фамилияларды аттары бойынша
сұрыптайды.

1.1. Массивті енгізу
Массивті енгізу деп программаны орындау кезінде пайдаланушыдан
массивтің элементтерінің мәнін алу процесін айтамыз.
1. StringGrid компонентін пайдаланып массивті енгізу
Ол компонент Additional бетінде (жапсырмасында) орналасқан.
StringGrid компоненттерінің қасиеттері:
Name – Компонент аты. Программа компонентінің қасиеттері мүмкіндік алу
(доступ) үшін қолданылады.
ColCount – Кесте бағандарының саны
RowCount – Кесте жолдарының саны
Cells – Сәйкес кестедегі екі өлшемді массив. Col бағаны мен row жол
номерінің қиылысуында орналасқан кесте ұяшығында элемент былай анықталады:
Cells[col,rov]
FixedСols – Кестенің арнайы Ерекшеленген сол жақ бағандар саны
FixedRows – Кестенің арнайы ерекшеленген жоғарғы жолдар саны
Options.goEditing – Кесте ұяшықтарындағы мәліметтерді редакциялауға TRUE –
рұқсат, False – рұқсат жоқ.
Options.goTab – Курсорды кестенің келесі ұяшығына жылжыту үшін Tab пернесін
(True) қолдану мемесе (False) қолданбау.
Options.GoAlWayShowEditor – Редакциялау режимінде компонентті табу белгісі.
Егер қасиеттің мәні False онда ұяшықта курсор пайда болу үшін тексті тере
бастау керек, F2 пернесін басу керек немесе тышқанмен шерту керек.
DefaultColWidth – Кесте бағандарының ені.
DefaultRowHeight – Кесте жолдарының биіктігі.
GridLineWidth – Кесте ұяшықтарын жиектейтін сызық ені.
Left – Кесте алаңының сол жақ жиегінен форманың жоғарғы жиегіне дейінгі
қашықтық
Top – Кесте алаңының жоғарғы жиегінен форманың жоғарғы жиегіне дейінгі
қашықтық.
Height – Кесте алаңының биіктігі.
Width – Кесте алаңының ені.
Font –Кесте ұяшығындағы мәліметті бейнелеу үшін қолданылатын қаріп
ParentFont – Форма шрифтінің сипаттамаларыны белгісі.

2-мысал. Массив элементінің арифметикалық орташасын есептейтін программаны
қарастырайық.

StringGrid компонентінің қасиеттерінің мәндері
ColCount =5
FixedCols = 0
RowCount = 1
DefaultRowHeight = 24
Height = 24
DefaultColWidth = 64
Width = 328
Options.goEditing = True
Options.AlwaysShowEditing = True
[Options.AlwaysShowEditing = True]
Options.goTabs = True

Procedure TForm1.Button1CLick(Sender: Tobject);
var
a: array [1..5] of integer; массив
Summ: integer; элементтер қосындысы
Sr: real; арифметикалық орташа
i: integer; индекс
begin
массивті енгізу
for i: 1 to 5 do егер ұяшық бос болса, ондағы массив
элементі нөл болса
if Length (StringGrid1.Cells[i – 1,0]0
then a[i]=StrToInt(StringGrid1.Cells[i-1 ,0])
else a[i]:=0;
Массивті өңдеу
Summ: =0;
for i:= 1 to 5 do
Summ: = Summ + a[i];
Sr: = Summ 5;
нәтижені шығару
Label2.Caption: = ‘Элементтер қосындысы:’ + InttoStr(Summ) + # 13 +
‘Арифметикалық орташа:’ + FloattoStr(Sr);
end;

Ескерту. Enter пернесін басқанда курсор кестенің келесі ұяшығына
өтетіндей ету үшін оны OnKeyPress оқиғаны өңдеу процедурасының көмегімен
жасаймыз. Осы процедураға кесте ұяшығына енгізілетін мәліметтерді
фильтрация сүзгілеуді тапсыруға болады. Ұяшықа тек сандар енгізуді
қарастырамыз.
Мұнда кездесетін Col қасиеті программаның орындалуы кезінде кестенің
курсор тұрған колонкасының номерін көрсетеді.Осы қасиетті курсорды кестенің
қажетті ұяшығына жылжыту үшін пайдалануға болады. Дегенмен, кестенің
колонкалары оның жолдары сияқты нөлден бастап номерленетіндігін есте сақтау
керек.
Procedure TForm1. StringGrid1.KeyPress(Sender: Tobject; var Key: Char );
begin
case key of
#8,’0’..’9’: ; цифрлар мен Backspase пернесі
# 13 : Enter пернесі
if StringGrid1.Col StringGrid1.ColCount – 1
then StringGrid1.Col:= StringGrid1.Col + 1
else Key:=chr(0): басқа символдар кіргізілмейді
end;
end;

Ескерту. Егер бөлшек сандардан тұратын массивті енгізу қажет болса, яғни
(a:array [1..5] of real), онда OnKeyPress оқиғаны өңдеу процедурасы басқаша
қиынырақ түрге енеді.

3-Мысал.Бөлшек сандар массивін енгізу және өңдеу.

Procedure PForm1.Button1Click (Sender; Tobject);
var
a: array [1,.5] of real; массив
Summ: real; элементтер қосындысы
Sr: reаl; арифметикалық орташа
i: integer; индекс
bеgin
массивті енгізу
егер ұяшық бос болса, ондағы оған сәйкер келетін
массив элементі нөл болады деп санаймыз
for i: 1 to 5 do
if Length (StringGrid1.Cells[i – 1,0] 0
then a[i]:=StrToInt(StringGrid1.Cells[I- 1,0])
else a[i]:=0;
Массивті өңдеу
Summ: =0;
for i:= 1 to 5 do
Summ: = Summ + a[i];
Sr: = Summ 5;
нәтижені шығару
Label2.Caption: = ‘Элементтер қосындысы:’ + InttoStr(Summ) + # 13 +
‘Арифметикалық орташа:’ + FloattoStr(Sr);
end;

Бұл функция ұяшыққа тек мүмкін болған символдарды енгізуді қамтамассыз
етеді.
Procedure TForm1. StringGrid1.Key Press(Sender: Tobject; var Key:Char );
begin
case key of
#8,’0’..’9’: ; цифрлар мен Backspase
# 13 : Enter пернесі
if StringGrid1.Col StringGrid1.ColCount – 1
then StringGrid1.Col:= StringGrid1.Col + 1;
‘.’,’,’: санның бүтін және бөлшек бөлігін ажыратушы
begin
if Key 0 then Key: = Chr(0) екінші ажыратқышты
болдырмау
end;
‘ – ‘ : минусты ұяшық бос кезде тек бірінші символ
ретінде енгізуге болады
if Legth(StringGrid1.Cells[StringGrid1 .Col,0]) 0
else Key:=chr(0): басқа символдар тоқауыл
end;

Массивті шығару
Егер программада массивтің барлық элементтерінің мәнін шығару
қажет болса, онда ол үшін for инструкциясын пайдаланған қолайлы болады.
4- мысал. Келесі программада номерленген фамилялар тізімін жауапқа
шығарады.
Қасиеттерге Label1.AutoSize = (Label1.AutoSize = True) деп мән беру арқылы
бақылаңдар.
implementation
{$R*.dfm}
const N = 5;
var
t: array[1..n] of string[10] = (‘Салиев’,’Садыков’,’Манапов’,’Асан ов’);
Prоcedure TBorm1.Button1Click (Sender: Tobject);
var
S:string: фамилялар тізімі
i: integer: массив элементінің номері, индекс
begin
формаға шығару үшін тізімді қалыптастыру
for i: =1 to N do
s: = Inttostr(i) + ‘ ‘+t[i] +# 13;
тізімді шығару
Label1.Caption: = S;
end;

5-мысал. Кездейсоқ бүтін сандардан тұратын массив элементтерін енгізіп, оны
Label1 өрісіне шығару программасы.

procedure TForm1.Button1Click(Sender: Tobject);
var
a:array[1..5] of integer;
st:string;
i:integer;
begin
randomize;
for i:=1 to 5 do
a[i]:=random(10);
for i:=1 to 5 do
st:=st+inttostr(a[i])+#13;
label1.caption:=st;
end;

1 сурет – нәтижені экранға шығарады.

Memo компонентін пайдаланып массивті енгізу

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

Memo компонентінің қасиеттері:

Name – компонент аты. Программада компоненттің қасиеттеріне “доступ” болу
үшін қолданылады.
Text – Memo алаңында тұратын мәтін. Бір бүтін ретінде қарастырылады.
Lines – Memo алаңындағы мәтін. Жолдардың (қосындысы) жиынтығы ретінде
қарастырылады. Жолға оның номері бойынша хабарласады
Lines.Count – Memo алаңындағы мәтіннің жолдарының саны.
Left – алаңның сол жақ жиегінен форманың сол жақ жиегіне дейінгі қашықтық.
Top – алаңның жоғарғы жиегінене дейінгі қашықтық.
Height – алаңның биіктігі.
Width – алаң ені.
Font – енгізілетін мәтіннің қаріпі.
ParentFont – форма шрифті қасиетінің белгісі.

6-мысал. Memo компонентін пайдаланып, символдық массивті енгізу.
Procedure TForm1.Button1Click (Sender: Tobject);
var
Size = 5; массив өлшемі
var
a: array[1..SIZE] of String[30]; массив
n: integer: Memo алаңындағы жолдарының саны
i: integer: Массив элементінің индексі
st: string;
begin
n := Memo1.Lines.Count;
if n =0 then begin
ShowMessage (‘ Бастапқы мәліметтер
енгізілмеген!‘);

Exit;
end;

if n SIZE then begin
ShowMessage(‘ Жолдар саны массив өлшемінен
артық!’);
n:= SIZE;
end;
for i: = 1 to n do
a[i]: = Form1. Memo1. Lines[i -1]; Memo жолдары нөлден

басталады

Массивті шығару
if n 0 then begin
st: = ‘ Енгізілген массив: ’+ # 13;
for i: =1 to n do
st: = st + IntToStr (i) +
‘ ‘ + a[i] + #13;
ShowMessage(st);
end;
end;
Бұл программа бойынша негізгі жұмысты TForm.Button1Click процедурасы
орындайды. Ол Memo алаңында текст бар ма, соны тексереді. Егер текст бар
болса, (бұл кезде Lines. Count қасиетінің мәні нөлден үлкен), онда
процедура енгізілген жолдардың саны мен ассивтің өлшемін салыстырады. Егер
бұл сан массивтің өлшемінен артық болса, онда программа n - ның мәнін
өзгертеді, сонымен бірге алғашқы SIZE жолды енгізуге дайындайды.

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

StringGrid1 компонентінің қасиеттерінің мәндері:
ColCount =005
FixedCols = 000
RowCount = 001
DefaultRowHeight =024
Height =024
DefaultColWidth = 064
Width = 328
Options.goEditing = True
Options.AlwaysShowEditing = True
Options.goTabs = True

7- мысал. Массивтің ең кіші элементін іздеу бағдарламасы
Procedure TForm1.Button1Click (Sender: Tobject);
Const
Size = 5;
var
a: array[1..SIZE] of integer; бүтін сандар массиві
min: integer: Массив ең кіші элементінің саны
i: integer: ең кішімен салыстырылатын элемент нөмері
begin
for i: = 1 to SIZE do
a[i]: = StrToInt(StringGrid1.Cells[I – 1,0]);
ең кіші элементін іздеу
min: = 1; бірінші элемент ең кіші болсын
for i: = 2 to SIZE do
if a[i] a[min] then min: = I;
жауапты шығару
label2.caption: = ‘ Массивтің ең кіші элементі:’ ‘+
IntToStr(a[min]) + # 13+
‘ элемент номері: ‘ + IntToStr(min);
end;

Диалогтық (нәтижелік) терезенің жалпы түрі

Ең кіші элементті іздеу

5 бүтін сан енгіз және іздеуге басындар

Массивтің ең кіші элементі: 15
Элемент номері: 2

1-кесте:ең кіші элементті экранға шығарады.

Массивтен берілген элементті іздеу
Көптеген есептерді шешуде массивте бізге қажет ақпарат бар ма? Соны
анықтау қажет болады. Мысалы, студенттер тізімін Асанов деген фамиляны
іздеу керек. Мұндай типтегі есептерді массивтегі іздеу деп атайды.
Массивте іздеуді ұйымдастыру үшін әртүрлі алгоритмдерді қолдануға
болады. Оның ішіндегі қарапайымы – жай (сорттау) теру алгоритмі. Іздеу –
массив элементтерін үлгімен рет бойынша салыстыру арқылы жүзеге асырады.
Үлгіге тең болатын элемент табылғанмен немесе барлық элементтер тексеріліп
болғанша бұл процесс жалғасады. Жай теру алгоритмі массив элементтері
реттелмеген жағдайда қолданылады.

Жай теру алгоритмі
Мысал ретінде сандар массивіндегі іздеу программасының текстін алайық.
Массив элементтерін теру repeat құрылымымен жүзеге асырылады.Оның
денесіндегі if құрылымы массивтің әрбір элементін үлгімен тексереді және
егер элементпен үлгі тең болса found айнымалыға true мәнін меншіктейді.
Егер массивте үлгіге тең элемент табылса немесе массивтің барлық
элементтері тексеріліп болса ғана цикл жұмысын аяқтайды. Цикл аяқталғанда
found айнымалының мәніне байланысты іздеудің нәтижесі немесе керісінше
болғандығын нәтиже бермегендігі туралы анықтауға болады.
Іздеу (Button1) командалық тетігіне шерткенде TForm1.Button1Click
процедурасы іске қосылады. Бұл поцедура StringGrid1 компонентінен массивті,
ал Edit1 (компонентіне) редакциялау алаңына (үлгіні) санды енгізеді. Сонан
соң массивте енгізілген сан бар ма соны тексеру орындалады. Тексеру
барысында процедурасы іздеу нәтижесі туралы мәлімет шығарады.

8-мысал. Бүтін сандар массивіндегі іздеу программасы.
Procedure TForm1.Button1Click(Sender:Tоbject) ;
Const S = 5;
var a :array[1..S] of integer; массив
obr : integer; іздеу үшін үлгі
found : Boolean; TRUE – үлгінің элементпен сәйкес келуі
i : integer; массив элементінің индексі
begin
массивті енгізу
for i: = StrToInt (StringGrid1.Cells [I – 1,0]);
іздеу үшін үлгіні енгізу
orb: = StrToInt(edit1.text);
іздеу
found: = FALSE; қажетті элемент массивте жоқ болсын
i:=1;
repeat
if a[i] = orb then found: = TRUE
else i:= i+ 1
until (i s) or (found = TRUE);
if found then ShowMessage (‘Іздеу нәтижелі болды:‘ + IntToStr(i))
else ShowMessage(‘Үлгімен сәйкес келетіні жоқ‘)
end;

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

1.2. Динамикалық массивтер
Delphi-дің 4-нұсқасынан бастап динамикалық массивтер енгізілген.
Программада мұндай массивтерді бейнелегенде индекстің шекараларын
көрсетудің қажеті жоқ:
Var
A: array of integer;
B: array of array of char;
C: array of array of array of real;
Бұл мысалдағы динамикалық А массивінің бір, В массивінің екі, С
массивінің үш өлшемі бар. Жадыны бөлу мен динамикалық массивтердің әрбір
өлшемі бойынша индекстердің шекарасын көрсету программаның орындалуы
барысында SetLength функциясының көмегімен массивті тағайындау жолымен
жүзеге асырылады. Мұндай оператордың орындалуы барысында:
SetLength(A,3);
Бір өлшемді А динамикалық массивті тағайындалады, яғни үш бүтін санды
орналастыруға жететін жадыдан орын бөлінеді.Динамикалық массивің кез келген
өлшемі бойынша индекстің жоғарғы шекарасы 2-ге тең болады.
Динамикалық массивтің идентификаторы жадының алғашқы байтының адресінен
тұратын көрсеткішке сілтеме жасап, бөлінген орынға массивті орналастырады.
Сондықтан осы жадыны босату үшін идентификаторға Nil мәнін меншіктеу
жеткілікті (Басқа тәсілмен Finanalize процедурасын пайдалану болып
табылады):
Var
A,B: array of integer:
Begin Жадыны үлестіреміз:
SetLength(A,10);
SetLength(A,20);Массивтерді пайдаланамыз:
A:=Nil;
Finanalize(B);
End;
Орнатылған динамикалық массивтің ұзындығын өзгертуге алдымен жаңа
массивті орналастыруға қажетті жады даярланады, одан кейін екі массивтің
элементтері жаңа орынға тасымалданады да, бұрынғы массивке бөлінген жады
босатылады. Үлкен динамикалық массивтің шекараларын өзгертуге байланысты
қосымша уақытты қысқарту үшін бірден ұзындығы үлкен массив құру қажет.
Көп өлшемді массивтерде алдымен оның алғашқы өлшемінің ұзындығы
тағайындалады, одан кейін екінші, үшінші тағы сол сияқты мысалы,
Var
A: of array of integer; Екі өлшемді динамикалық массив;
Begin Бірінші өлшемнің ұзындығын тағайындаймыз (бағандар мөлшері);
SetLelgth(A,3);
Әрбір бағанның ұзындығън береміз;
SetLength(A,[0],3);
SetLength(A,[10],3);
SetLength(A,[2],3);
...
end;
Динамикалық массивтің әдеттегі массивтен айырмашылығы оның екінші,
үшінші өлшемінде ұзындықтары әртүрлі болуы мүмкін. Алдынғы мысалда өлшемі
3x3 квадрат масссив анықталған.Үшбұрыш массив құрып көрейік:
SetLength(A,3);
Әрбір бағанның ұзындығын береміз;
SetLength(A,[0],3):
SetLength(A,[10],4);
SetLength(A,[2],5);
Көп өлшемді динамикалық массивтерде N, 1 өлшемінің әрбір элементі
динамикалық массив болуы мүмкін, сондай-ақ, ол тағайындауды талап етеді.
Мысалы, 3x3x3 өлшемді нақты куб массивті тағайындау қажет болсын:
Var
A:array of array of array of real;
I,j:integer;
Begin
SetLength(A,3);
For i:=0 to 2 do
Begin
SetLength(A,[i],3);
For j:=0 to 2 do
SetLength(A[i,j],3);
end;
...
end;

Енді Delphi ортасында массив элементтерімен жұмыс істеуге қажетті
компоненттерді қарастырайық. Delphi ортасында экранға массив элементтерін
енгізу және шығаруды компоненттер Additional бетінде орналасқан StringGrid
компонентінің көмегімен ұйымдастырылған ыңғайлы. Бұл компонент ақпаратты
ақпаратты кесте түрінде бейнелеу үшін пайдаланылады. Кесте белгіленген және
жұмыс аймағынан тұрады. Белгіленген аймақ жұмыс аймағының жол және баған
атауларын шығару және тышқанның көмегімен олардың өлшемін басқару қызметін
атқарады. Белгіленген аймақ басқа түспен ерекшеленген және оған
клавиатурадан ақпарат енгізуге болмайды. Белгіленген аймақтың жолдары мен
бағандар саны FixedRows және FixedCols қасиетінде көрсетіледі. Ал, жұмыс
аймағы RowCount – жол және ColCount баған ақпараттарынан тұрады, оны
программалық жолмен де, тышқанның немесе клавиатураның көмегімен өзгертуге
болады. Программадағы ақпаратпен қатынас Cells[Acol, AROW : integer]:
string қасиетінің көмегімен жүзеге асырылады. Мұндағы, Acol – кестенің
баған номері, ал AROW – жол номері, ал номерлеу нолден басталады. Сонымен
қатар, қосымша батырмаларсыз кестенің өлшемін басқару үшін компоненттер
политрасының Samples бетінде орналасқан SpinEdit редактор өрісін
пайдалануға болады. Енді осы компоненттердің қызметін пайдаланылатын мысал
қарастырайық.
1 – мысал. a={ai,j} (Xj=apj, j=1,2,...,m) матрицасының p жолына тең болатын
X={X1X2 ...Xm} векторын A={aij} (Yi=aiq, i=1,2,...,n) матрицасының q
бағанына тең болатын Y={Y1,Y2,...Yn} векторын есептейтін және A={aij}
матрицасының ең үлкен және ең кіші элементтерін экранға шығаратын программа
құрайық (n6,m8).
Шешуі.
Алдымен формаға Additional бетінен: StringGrid1, StringGrid2 және
StringGrid3 компоненттерін, ал Samples бетінен, SpinEdit1, SpinEdit2 және
есептеу процесін орындау үшін Button1 компоненттерін орналастырамыз. Бұл
мысалда барлық StringGrid компонентері үшін белгіленген аймақ
пайдаланылмайды. Обьектілер Инспекторы терезесіндегі FixedRows және
FixedCols қасиеттерінің мәніне 0 мәнін меншіктейміз. Есеп шартына сәйкес
StringGrid компоненттері үшін n жол мен m бағанның ең жоғарғы шектік
мәндерін тағайындаймыз:

StringGrid1 RowCount=6;
ColCount=8.
StringGrid2 RowCount=8;
ColCount=1.
RowCount=6;
StringGrid3 ColCount=1

2 кесте - StringGrid1 кестесі

StringGrid1 компонентіне ескертусіз клавиатурадан мән енгізбес үшін
осы компонент үшін обьектілер инспекторы терезесіндегі Options
қасиетіндегі + белгісін тышқанмен жылдам екі рет басқанда ашылған GoEditing
командасына True мәнін тағайындаймыз. Ал, SpinEdit1,SpinEdit2
компоненттері үшін төмендегідей қасиеттерге мән береміз:

SpinEdit1 MaxValue=1
MinValue=6
MaxValue=1
SpinEdit2 MinValue=6

3 кесте - StringGrid1 компонентінің кестесі.

Енді SpinEdit1 және SpinEdit2 компоненттдрі үшін осы оқиғаларды өңдеу
процедураларын құрайық. Ол үшін курсорды SpinEdit1 және SpinEdit2
компоненттеріне келтіріп тышқанның батырмасын жылдам екі рет басамыз.
Нәтижесінде программалар коды терезесінде:
procedure SpinEdit1Change(Sender: Tobject):
procedure SpinEdit2Change(Sender: Tobject);
оқиға өңдеуші процедураларын аламыз.
Программа мәтіні төмендегідей:

Unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, Spin, Grids;
type
TForm1 = class(TForm)
StringGrid1: TstringGrid;
StringGrid2: TstringGrid;
StringGrid3: TstringGrid;
SpinEdit1: TspinEdit;
SpinEdit2: TspinEdit;
SpinEdit3: TspinEdit;
SpinEdit4: TspinEdit;
Button1: Tbutton;
Button2: Tbutton;
Label1: TL`bel;
Label2: TLabel;
La`el3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
procedure SpinEdit1Change(Sender: Tobject);
procedure SpinEdit2Change(Sender: Tobject);
procedure FormCreate(Sender: Tobject);
procedure Button1Click(Sender: Tobject);
procedure Button2Click(Sender: Tobjdct);
private {Private declarations }
public {Public declarations }
end;
var
Form1: TForm1;
Implementation {$R *.dfm}
var
A:array[1..6,1..8] of extended;
X:array[1..8] of extended;
Y:array[1..6] of extended;
m,n,p,q: integer; max,min: extented;
procedure TForm1.FormCreate(Sender: Tobject);
begin
SpinEdit1.Text:=’4’;
SpinEdit2.Text:=’6’;
SpinEdit3.Text:=’2’;
SpinEdit1.Text:=’3’;
StringGrid1.RowCount:=4;
StringGrid1.ColCount:=6;
StringGrid2.RowCount:=6;
StringGrid3.RowCount:=4;
end;

procedure TForm1.SpinEdit1Change(Sender:TObje ct);
begin
n:=StrToint(SpinEdit1.Text);
StringGrid1.RowCount:=n;
StringGrid3.RowCount:=n;
end;

procedure TForm1.SpinEdit2Change(Sender:TObje ct);
begin
n:=StrToint(SpinEdit2.Text);
StringGrid1.RowCount:=m;
StringGrid2.RowCount:=m;
end;

procedure TForm1.Button1Click (Sender:TObject);
var i,j:integer;
begin
m:=StrToint(SpanEdit1.Text);
StringGrid1.RowCount:=n;
StringGrid3.RowCount:=n;
m:=StrToint(SpinEdit2.Text);
StringGrid1.colCount:=m;
StringGrid3.RowCount:=m;
p:=StrToint(SpinEdit3.Text);
q:=StrToint(SpinEdit4.Text);
for i:=1 to n do
for j:=1 to m do
A[i,j]:=StrToFioat(StringGrid1.Cell s[j-1,i-1]);
Max:=A[1,1]; Ең үлкен және ең кіші элементті табу
for i:=1 to n do
for j:=1 to m do
if A[i,j]max then max:=A[i,j]
else if A[i,j]min then min:=A[i,j];
label9.Caption:=floattostr(max);
label12.Caption:=floattostr(min);
for j:=1 to m do массивін шығару
begin
X[j]:=A[p,j];
StringGrid2.Cells[0,i-1]:=FloatToSt rF(X[j],ffFixed,3,1);
end;
for i:=1 to n do Y[i] массивін шығару
begin
Y[i]:=A[i,q];
StringGrid3.Cells[0,i-1]:=FloatToSt rF(Y[j],ffFixed,3,1);
end;
end;

procedure TForm1.Button2Click (Sender:TObject);
begin
close;
end;
end.

1.3. Көп өлшемді массивтер
Күнделікті өмірде кестелік түрдегі ақпараттармен жұмыс істеу күннен –
күнге жиі кездесетін болып алады.
1-мысал. Мысалы, автомобиль сататын қандай-да бір фирманың іс - әрекетінің
бір қырын бейнелейтін кестені қарастырайық.

Қаңтар Ақпан Наурыз ... Қараша Желтоқсан
ВАЗ 2106
ВАЗ 2107
ВАЗ 2108
ВАЗ 2109
ВАЗ 2110
ВАЗ 2110

4 кесте - Автомобиль сататын фирманың іс-әрекетін бейнелейді.

Мұндағы бағандар мен жолдар біртекті ақпараттан тұрады. Сондықтан
кестелік мәліметтерді өңдейтін программада кестелерді өңдеу және сақтау
үшін массивтерді пайдалануға болады. Осы кестені бір өлшемді массивтер
арқылы былай жазуға болады:
VAZ 2106:array [1..12] of integer;
VAZ 2107:array [1..12] of integer;
VAZ 2108:array [1..12] of integer;
VAZ 2109:array [1..12] of integer;
VAZ 2110:array [1..12] of integer;
VAZ 2111:array [1..12] of integer;
Бұл келтірілген массивтердің әрқайсысында бір маркадағы автомобильдің
(ай сайын) қанша сатылатындығы туралы ақпарат сақталады. Яғни массив
элементтерінің мәні сол айдағы сатылған машиналардың санын береді. Бұл
кестені былай сипаттауға болады:
jan: array[1..6] of integer;
feb: array[1..6] of integer;
mar: array[1..6] of integer;
... ... ...
dec: array[1..6] of integer;
Бұл жағдайда әрбір массив бір айда сатылған автомобильдер саны туралы
ақпарат сақтауға арналған. Мұндағы массив элементінің мәні бір маркадағы
сатылған автомобильдер санын бейнелейді.
Егер бүкіл кесте біртекті ақпараттардан тұрса, мысалы тек бүтін
сандар, онда мұндай кестені екі өлшемді массив түрінде сипаттауға болады.
Екі өлшемді массивті сипаттау құрылымы жалпы түрде былай беріледі:
Amay: array[1-төменгі шекара...1-жоғарғы шекара,2- төменгі шекара...2-
жоғарғы шекара] of Типі
Мұндағы: Amay - массив аты;
Array - сипатталған массив екендігін көрсететін Delphi тілінің сөзі;1 – ТШ,
1 –ЖШ, 2- ТШ, 2-ЖШ- индекстердің өзгеру диапазонын анықтайтын бүтін
тұрақтылар, яғни массив элементінің саны;
Tипі - массив элементтерінің типі;
Жоғарғы мысалдағы кестені екі өлшемді массив ретінде былай сипаттауға
болады:
itog: array[1..12,1..6]
Екі өлшемді массив элементтерінің санын мына формуламен анықтауға болады;
(1ЖШ – 1ТШ + 1) * (2ЖШ – 2ТШ + 1)
Сонымен itog массиві 72 типіндегі элементтен тұрады.
Мысалы, массивтің itog [2,3]элементі ВАЗ 2107 маркалы автомобильдердің
наурыз айында сатылғандардың санын береді.
Мысалы, S: = 0
for j: = 1 to 12 do S:=S + itog[2,j];
Бұл ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Спортлото ойыны
Turbo Pascal жүйесінде массивтерді ұйымдастыру технологиясы
Жаңа ақпараттық технологиялар, оны білім беру жүйесінде пайдаланудың маңыздылығы
Delphi программалау тілін оқыту әдістемесі
Delphi программалау ортасының графикалық мүмкіндіктері
Массивтерде компоненттер құру
Массивтер. Деректердің стандартты типтері
Жеке тұлғалардың мүліктеріне салынатын салық төлемдерін есепке алудың ақпараттық жүйесі
Delphi бағдарламасындағы массивтер
Delphi программалау тілінде массивтермен жұмыс
Пәндер