Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД_ПЭВМ_2ИКО_Урдабаева+++.docx
Скачиваний:
134
Добавлен:
01.03.2016
Размер:
833.23 Кб
Скачать

№1.4 Практикалық сабақ

Тақырыбы: Массивтерді қолданып бағдарламалау.

Мақсаты: TStringGrid компонетінің қасиеттерін оқып үйрену. Массивтерді қолданып бағдарлама құру.

Қажетті құралдар мен материалдар: ДК, Delphi ортасы.

Мазмұны мен жұмысты орындау реті

1. Теориялық материалды қайталау.

4.1. Массивтермен жұмыс

Массив бұл бір атаумен аталатын бірдей типті элементтердің реттелген жиыны. Массивтің әрбір элементі атауымен және одан кейін квадрат жақшада көрсетілетін бір немесе үтірмен бөлінген бірнеше индекстермен белгіленеді, мысалы: a[1], bb[I], c12[I,j*2], q[1,1,I*j-1].. Индекс ретінде LongInt типінен басқа кез келген реттік типтер қолданылуы мүмкін.

Массив типі немесе массивтің өзі сәйкесінше типтерді сипаттау бөлімінде (Type) немесе айнымалыларды сипаттау бөлімінде (Var) Array қызметші сөзінің кмегімен келесі түрде сипатталады:

Array [индекстердің сипатталуы] of <массив элементінің типі>

Массивтерді сипаттау мысалдары:

Const N=20; // Индекстің максимал мәнін сипаттау;

Type TVector=array[1..N] of real; // Бір өлшемді массив типін сипаттау;

Var a:TVector; // А –Tvector типті массив;

Ss:array[1..10] of integer; // Ss – он бүтін саннан тұратын массив;

Y:array[1..5,1..10] of char; // Y – символдық типті екі өлшемді массив.

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

F:=2*a[3]+a[ss[I]+1]*3;

A[n]:=1+sqrt(abs(a[n-1]));

4.2. TStringGrid компоненті

Массивтермен жұмыс жасағанда экраннан ақпаратты енгізу немесе шығару кезінде кестелерді пайдаланған ыңғайлы. TStringGrid компоненті әрбір ұяшығы біржолдық мәтіндік редакторды (Tedit терезесіне ұқсас) бейнелейтін, ақпаратты екі өлшемді кесте түрінде бейнелеуге арналған. Ақпаратқа ену Cells[ACol, ARow: Integer]: string қасиеті арқылы жүзеге асырылады, мұндағы ACol, Arow – екі өлшемді массив элементінің индексі. ColCount және RowCount қасиеттері кестедегі бағандар саны мен жолдар санын тағайындайды, ал FixedCols және FixedRows қасиеттері тұрақты аймақтың бағандар мен жолдар санын тағайындайды. Тұрақты аймақ басқа түспен ерекшеленген және оған пернетақтадан ақпарат енгізуге болмайды.

4.3. Тапсырманы оырндау реті

Тапсырма: векторын анықтайтын бағдарлама құрыңыз, мұндағы А – NxN өлшемді квадрат матрица, ал Y, B – N өлшемді бір өлшемді массивтер. Y векторының элементтері мына формуламен анықталады. N мәндерін TEdit компонентіне, ал А және B – TstringGrid компонентіне енгізіңіз. Нәтижені TButton типті батырманы басқан кезде, TStringGrid компонентіне шығарыңыз.

Сұхбаттасу панелі 4.1-суретте көрсетілген.

4.4. TStringGrid компонетін баптау

TStringGrid компонентін формаға орналастыру үшін компоненттері мәзірінің Additional бетінен белгісін таңдау керек. Сосын тышқанмен форманың қажетті жеріне шертіңіз. Компонент жақтауларынан ұстап оның өлшемін реттеңіз. Объектілер инспекторының терезесінде ColCount және RowCount қасиеттеріне 2 мәнін (екі баған және екі жол), ал FixedCols және FixedRows қасиеттеріне 1 мәнін (тұрақты аймағы бір баған мен бір жол) тағайындаңыз. StringGrid2 және StringGrid3 компоненттері бір бағаннан тұратындықтан: ColCount= 1, RowCount=2, FixedCols=0 және FixedRows=1. Үнсіз жағдайда TStringGrid компонентіне енгізуге болмайды, сондықтан StringGrid1 және StringGrid2 компоненттері үшін Options goEditing қасиетіне True мәнін тағайындаңыз.

Бағдарлама мәтіні төменде келтірілген.

unit tem4;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Grids;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

const

Nmax=10; // Массивтің максимал мәні

Type

Mas2 = array[1..Nmax,1..Nmax] of extended; // Nmax өлшемді екі өлшемді массив типін сипаттау

Mas1 = array[1..Nmax] of extended; // Nmax өлшемді бір өлшемді массив типін сипаттау

var

Form1: TForm1;

A: Mas2; // Екі өлшемді массивті сипаттау

B,Y: Mas1; // Бір өлшемді массивті сипаттау

N,i,j: integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

N:=3; // Массвитің өлшемі

Edit1.Text:=FloatToStr(N);

{Кестелердегі бағандар саны мен жолдар санын тағайындау}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{Кестенің жоғары сол жақ ұяшығына массив атын енгізу}

StringGrid1.Cells[0,0]:='Массив A:';

StringGrid2.Cells[0,0]:='Массив B:';

StringGrid3.Cells[0,0]:='Массив Y:';

{Жоғарғы және сол жақ бағандарын түсіндірме жазбалармен толтыру}

for i:=1 to N do begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

N:=StrToInt(Edit1.Text);

{Задание числа строк и столбцов в таблицах}

StringGrid1.ColCount:=N+1;

StringGrid1.RowCount:=N+1;

StringGrid2.RowCount:=N+1;

StringGrid3.RowCount:=N+1;

{ Жоғарғы және сол жақ бағандарын түсіндірме жазбалармен толтыру}

for i:=1 to N do begin

StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);

StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);

end; end;

procedure TForm1.Button2Click(Sender: TObject);

var s: extended;

begin

{ А массивін StringGrid1 кестесінің элементтерімен толтыру}

for i:=1 to N do

for j:=1 to N do

A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);

{ B массивін StringGrid2 кестесінің элементтерімен толтыру}

for i:=1 to N do

B[i]:=StrToFloat(StringGrid2.Cells[0,i]);

{А массивін В масивіне көбейту}

for i:=1 to N do begin

s:=0;

for j:=1 to N do s:=s+A[i,j]*B[j];

Y[i]:=s;

{StringGrid3 кестесіне нәтижені шығару}

StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);

end;

end; end.

Студенттердің өз бетінше орындауға арналған тапсырмалар:

«Массивтер» тақырыбындағы барлық тапсырмаларда скаляр айнымалыларды TEdit көмегімен енгізілетін және TLabel компонентісінің көмегімен түсініктеме берілетін болсын. Скаляр нәтиже TLabel компонентіне шығарылсын. Формада массивтер TStringGrid компонентімен бейнеленсін, және кестенің 0-ші бағаны мен 0-ші жолында массив индекстері көрсетілсін. Есептеулер TВutton компоненті басылғанда орындалсын.

1. NxM өлшемді матрица берілген. Егер матрицаның k-шы бағанының барлық элементтері нольге тең болса, k-шы элементіне 0 мәнін, әйтпесе 1 мәнін меншіктеп B массивін алыңыз.

2. NxM өлшемді матрица берілген. Егер матрицаның k-шы жолының элементтері кему ретімен реттелген болса, k-шы элементіне 1 мәнін, әйтпесе 0 мәнін меншіктеп B массивін алыңыз.

3. NxM өлшемді матрица берілген. Егер матрицаның k-шы жолы симметриялы болса, k-шы элементіне 1 мәнін, әйтпесе 0 мәнін меншіктеп B массивін алыңыз.

4. NxM өлшемді матрица берілген. Матрицаныі «ерекеше» элементтерінің санын анықтаңыз. Элемент «ерекше» деп есептеңіз, егер ол өзінің бағанындағы қалған элементтерінің қосындысынан үлкен болса.

5. NxM өлшемді матрица берілген. Матрицаныі «ерекеше» элементтерінің санын анықтаңыз. Элемент «ерекше» деп есептеңіз, егер оның жолында сол жағында одан кіші элементтер, ал оң жағында одан үлкен элементтер орналасатын болса.

6. NxM өлшемді символдық матрица берілген. Матрицаның k – әртүрлі элементтер санын есептеңіз (яғни қайталанатын элементтерді бір реттен есптеңіз).

7. NxM өлшемді матрица берілген. Оның жолдарын бірінші элементтерінің өсу ретімен реттеңіз.

8. NxM өлшемді матрица берілген. Оның жолдарын элементтері қосындысының өсу ретімен реттеңіз.

9. NxM өлшемді матрица берілген. Оның жолдарын ең үлкен элементтерінің өсу ретімен реттеңіз.

10. Берілген n-шы ретті квадрат матрица қосалқы диагоналға порядка қатысты симметриялы болатынын тексеріңіз.

11. NxM өлшемді матрица үшін оның барлық ерше нүктелерін табыңыз. Матрицаның элементі ерше нүкте деп аталады, егер ол өз жолында ең кішісі және өз бағанында ең үлкені, немесе керісінше болса.

12. Берілген n-шы ретті матрицаның бас диагоналында абсолют шамасы бойынша ең үлкен элементтер орналасатындай жолдарының орындарын ауыстырңыз

13. Берілген n-шы ретті матрицасында қосалқы диагоналдың төменгі бөлігіндегі ең үлкен элементті және бас диагоналдың жоғарғы бөлігіндегі ең кіші элементті табыңыз.

14.NxMөлшемді матрицаның ең үлкен элементі орналасқан жолды ең кіші элемент орналасқан жолмен орын ауыстырыңыз.

15. n-шы ретті матрицасынан модулі бойынша ең үлкен элемент орналасқан жол мен бағанды жойып, n-1-ші ретті матрицаны алыңыз.

16. k символдан тұратын массив берілген. Экрнаға алдымен барлық цифрларды, сосын қалған символдарды шығарыңыз. Әрбір екі топтағы символдар реті сақталсын.

17. Соңына нүкте қойылған 1менkсимволдан тұратын массив берілген. Осы мәтінді кері ретпен шығарыңыз.

18. Цифрлардан тұратын бос емес массив берілген. Экранға осы массивте жиі кездесетін цифрды шығарыңыз.

19. X массивінің элементтерін өсу ретімен сұрыптаңыз.

20. X масивінің элементтерін кері ретпен орналастырыңыз.

21. X массивінің элементтерін солға қарай k позицияға ығыстырыңыз.

22.Xмассивінің элементтерін оңға қарай n позицияға ығыстырыңыз.

23. Xмассивін келесі ереже бойынша түрлендіріңіз: массивтің барлық теріс элементтерін басына, ал қалғандарын – аяғына орналастырыңыз.Теріс элементтер мен қалған элементтердің реті сақталсын.

24. X және Y массивтерінің әрқайсысының элементтері өсу реті бойынша реттелген. Осы екі массивтің элементтерін өсу реті бойынша орналасатындай Z массивіне біріктіріңіз.

25.k символдан тұратын массив берілген. Симметриялы болатынын тексеріңіз, яғни солдан оңға және оңнан солға бірдей оқылатынын тексеріңіз.

26. Екі массив берілген. Екінші массивке кірмейтін бірінші массив элементтері арасынан ең кіші элементті табыңыз.

27.X массивіндегі инверсиялар санын анықтаңыз(яғни үлкен сан кіші санның сол жағында орналасатын элементтер жұбы:i<j болғанда xi>xj).

28. Кіші латын әріптерінен тұратын массив берілген. Осы мәтінде бір реттен кездесетін әріптерді алфавит бойынша экранға шығарыңыз.

29. Қайталанып кездесетін символдарды жойып, k символдан тұратын массивті қайта экранға шығарыңыз.

30. Соңында нүкте қойылған k символдан аспайтын мәтінде неше әртүрлі символ бар екенін анықтаңыз.

Бақылау сұрақтары:

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

  2. Массив қалай сипатталады?

  3. Массивті енгізу және шығару үшін Delphi ортасында қандай компонент қолданылады?

  4. TStringGrid компонентінің жолдар және бағандар санын қандай қасиеті көрсетеді?

Блиц-тест:

  1. Кестені бейнелейтін компонент:

  1. StringGrid.

  2. String.

  3. Columns.

  4. Statusbar.

  5. Chart.

  1. TStringGrid кестесінің қандай мәні арқылы бағандарының санын өзгертуге болады?

  1. ColCount.

  2. TopRow.

  3. LeftCol.

  4. VisibleColCount.

  5. RowCount.

  1. Standard парақшасына кірмейтін компонентті көрсетіңіз:

  1. Bitbtn.

  2. Frame

  3. Button

  4. Timer

  5. Combobox

  1. Форма модулі файлының кеңеймесін атаңыз?

  1. PAS.

  2. EXE.

  3. DPR.

  4. DCU.

  5. RES.

  1. Қандай команда программаны компиляциялайды және оның орындалуын жүзеге асырады:

  1. Run.

  2. Edit.

  3. Transe into.

  4. Run to cursor.

  5. Step over.

Глоссарий

Массив бұл бір атаумен аталатын бірдей типті элементтердің реттелген жиыны.

TStringGrid компоненті әрбір ұяшығы біржолдық мәтіндік редакторды (Tedit терезесіне ұқсас) бейнелейтін, ақпаратты екі өлшемді кесте түрінде бейнелеуге арналған.

Ақпаратқа ену Cells[ACol, ARow: Integer]: string қасиеті арқылы жүзеге асырылады,

Әдебиеттер: [1], [4], [10], [11], [13]