ПОӘК 042-18-12 5/03-2013 №1 басылым 18. 09. 2013ж


-сурет 3. Параметрлі цикл операторына мысалдар



бет6/8
Дата16.06.2016
өлшемі0.84 Mb.
#138809
1   2   3   4   5   6   7   8

1.8-сурет

3. Параметрлі цикл операторына мысалдар:

Мысал 1. 1-ден 100-ге дейінгі натурал сандардың қосындысын табу керек, яғни мынадай қосындыны анықтау қажет:

S=1+2+…100=i.

Бұл есептің орындалу схемасын 1.9-суретте көрсетілген, оған сәйкес программа мәтіні

Program cymma;

Var i, s: integer;

Begin

s:=0; for i:=0 to 100 do {цикл басы}

s:=s+i; {қайталау операторы}

writeln(‘қосынды=’ s:6)

end.


1.9-сурет

Мысал 2. k функциясының мәндерін оның аргументі х -4-тен +4-ке дейін қадамы 0,2 болып өзгерген кезде табу қажет, мұндағы


y=(x2-2x+2)/(x2+1).

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

n=[(xk-x0)/x]+1;

n=(4-(-4))/0,2+1=41рет.

Цикл операторының параметрін 1-ден 41-ге дейін өсіре отырып, алгоритмді 1.10-суреттегідей, ал программаны төмендегіше құруға болады:

Program funksia;

Var k: integer; x, y: real;

Begin


x:=-4; for k:=1 to 41 do

begin


y:=(x*x-2*x+2)/(x*x+1);

writeln('x=', x:5:2, 'y=', y:8:3);

x:=x+0.2

end


end.

FOR операторындағы цикл параметрінің бүтін мәндері қабылдайтынын ескере отырып,

х айнымалысының өзгеру қадамын 0,1 етіп, бұл программаны басқаша жолмен де жасауға болады.

Var k: integer; x, y: real;

Begin 1.10-сурет

for k:=-40 to 40 do

begin

x:=k/10;

y:=(x*x+2*x+2)/(x+1);

writeln('x=', x:5:2, 'y=', y:8:3);

end


end.

Мысал 3. Бүтін сандардың көбейтіндісін өрнектейтін n! мәнін, яғни n!=1*2…n табу қажет. Бұл алгоритмді құру барысында FOR операторының кері қарай есептейтін мүмкіндігін пайдаланайық (1.11-сурет).

Program faktorial;

Var i, n: integer; p:longint;

Begin


Write(‘бүтін n енгізіңіз:’); readln(n);

p:=1; for i:=n downto 2 do p:=p*i;

writeln(n:2, ‘!=’, p:7);

end. 1.11-сурет


V. Енгізілген циклдер құрылымымен алгоритмдерді программалау

Бірінің ішіне бірі кірістірілген циклдер бар болады. Оларды күрделі циклдер деп аталады. Кірістірілген циклдерді қолданған программалар құрғанда ішкі цикл толығымен сыртқы циклдің ішіне орындалатындай болуы керек. Ішкі цикл өз кезегінде өзінің ішіне ішкі цикл орналастыра алады.

Мысалы 1: Nжәне K айнымалыларының барлық мәндеріндегі у айнымалысының мәндерін есептеу керек. N-сыртқы цикл параметрі, K-ішкі цикл параметрі, N, K, y-бүтін типті айнымалылар.

N айнымалысының әрбір мәнінде K айнымалысы 2, 4, 6, 8 мәндерін қабылдасын. Бұл 3 рет қайталанады, себебі N айнымалысының қабылдайтын мәндері үшеу. N=1, 2, 3, K=2, 4, 6, 8, y=2K+N. Сыртқы цикл – for арқылы, ал ішкі цикл while арқылы орындалады.

Program M1 (input, output);

Var

M, K, y: integer;

Begin

For N:=1 to 3 do

Begin

While K<8 do

Begin

y:=2*K+N;

Writeln(N:4, K:4, y:4);

K:=K+2;

End;

End;

End.

Мысалы 2: F, J, K айнымалыларының барлық мәндеріндегі z айнымалысының мәндерін есептеу керек. F=1, 2, 3, 4, 5, J=2, 4, 6, 8, 10, 12, K=7, 9, 11, z=2F+2J+K.

F, J - сыртқы цикл параметрі;

K – ішкі цикл параметрі.

Program M2 (input, output);

Var

F, J, K, z: integer;

Begin

For F:=1 to 5 do

For J:=2 to 12 do

Begin

While K<11 do

Begin

Z:=2*F+2*J+K;

Writeln(‘F=’, F, ‘J=’, J, ‘K=’, K, ‘z=’, z);

K:=K+1;

End; End; End.



Өзін тексеру сұрақтар

  1. Циклдық алгоритм дегеніміз не?

  2. Каково назначение и формат записи оператора цикла с предусловием? Как представить в виде блок-схемы работу оператора цикла с предусловием?

  3. Каково назначение и формат записи оператора цикла с постусловием? Как представить в виде блок-схемы работу оператора цикла с постусловием?

  4. Каково назначение и формат записи оператора цикла с параметром? Как представить в виде блок-схемы работу оператора цикла с параметром?


Әдебиет: (1) бет. 71-80

Дәріс №8. Ішкіпрограммалар
Дәріс жоспары

  1. Ішкі программа ұғымы.

  2. Процедура және Функциялар.

  3. Процедура құрылымы, оның сипаты және шақыру операторы.

  4. Формальды және нақтылы параметрлер, олардың сәйкестік ережелері.

  5. Амалдарды өзгерту - параметрлер – мәндер.

  6. Нәтиже алу - параметрлер - айнымалылар.

  7. Функцияның құрылымы.

  8. Функцияны шақыру.

  9. Процедура және функция арасындағы айырмашылық (бір ғана шешім алу).

  10. Айнымалылар сатысы.

Программада қолданылатын стандартты функциялар мен процедуралар бар, мысалы, процедуралар:


Writeln(…)
Write(…)
Readln(…)
Read(…)
функциялар:
Sin(…)
Cos(…)
Odd(…)
Sqr(…)
Sqrt(…)
Программист өз есептерін шешу үшін өз процедурасы мен функциясын құра алады. Процедура және функциялар құрылымы негізгі программанікі сияқты.
Процедура құрылымы, оның сипатталуы және шақыру операторы
. Процедуралар
Процедура мәтіні procedure бөлімінде орналасқан.
Процедура сипаты мынадай түрде болады:
procedure <аты>(< формальды параметрлер тізімі>);
uses
label
const
type
var
procedure
function
begin
<операторлар>;
end;
Формальды және фактылы параметрлер, олардың сәйкестік ережесі. Функциялар
Формальды параметрлер типі көрсетілген, бір бірінен «;» арқылы бөлінген айнымалылар тізімінен тұрады. Процедура параметрі 3 түрлі:

  1. Параметрлер-мәндер (енгізу параметрлер).

  2. Параметрлер-айнымалылар(шығару параметрлер).

  3. Параметрлер-процедуралар.

Параметрлер-мәндер былайша сиптатталады:
<айнымалылар тізімі_1>:<тип_1>; <айнымалылар тізімі_2>:<тип_2>;…
Параметрлер-айнымалылар былайша сипатталады:
var < айнымалылар тізімі _1>:<тип_1>; < айнымалылар тізімі _2>:<тип_2>;…
Процедураны шақыру негізгі программада былай іске асырылады:
<процедура аты>(<фактілі параметрлер>);
Фактілі параметрлер үтір арқылы типін көрсетпей-ақ тізіліп жазылады.
Формальды және фактілі параметрлер арасында саны бойынша, мәліметтер типі бойынша сәйкестік болу керек. Сәйкес параметрлерінің аты әртүрлі немесе бірдей болу керек.
Процедураға жіберілетін фактілі параметрлер константа, айнымалы, өрнек болуы мүмкін.
Процедурадан мән алатын фактілі параметрлер тек қана айнымалы болады.
Параметр-мәндер арқылы ақпаратты программадан процедураға жіберуге болады, бірақ кері қайтарылмайды. Ал параметр-айнымалы арқылы ақпаратты программадан процедураға жіберуге болады, жәнеде кері де жіберуге болады.
Функциялар

Функция мәтіні мына бөлімде орналасқан: function.



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

function <аты>(<формальды параметрлер тізімі>):<тип>;


uses

label


const

type


var

procedure

function

begin


<операторлар>;

<имя>:= <нәтиже>;

end;
Өзін-өзі тексеру сұрақтары немесе тестер


{Өзін-өзі тексеру сұрақтар тізімі немесе тестер}

  1. Процедураның құрылымы қандай? Процедура қандай бөлімде сипатталады?

  2. Негізгі программада процедураны қалай шақыруға болады?

  3. Формальды және фактілік параметрлер деген не?

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

Дәріс №9. Деректердің құрылымданған типі: массивтер.

Массивтер

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



  1. Бір өлшемді массивтер

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

Массив сипаттамалары:



  • Типі – массив элементтерінің жалпы типі;

  • Көлемі – массив индексінің саны;

  • Шектелімі - әрбір индекстардің шектеу бойынша сәйкестігі;

  • Пішімі – көлем және шектеулер жиындары.

Массивтер элементтерімен жұмыс жасау барысында, массив атауынан кейін міндетті түрде тік жақшаға алынған индекс көрсетіледі. Индекс ретінде сандар қолданылады.
Массивтерді қолдану үшін оларды типтер (type) немесе айнымалыларды сипаттау (var) бөлімінде хабарлану қажет.

Жалпы жазылу түрі:


Type

Массив типінің атауы = array [индекс типі] of элемент типі;



Var

Массив атауы: массив типінің атауы;

Мысалы:

Type

GRUP = array [1…8] of integer;


Var
A:GRUP; {А – массивіне жады бөлу }
Мұндағы:
Массив типінің атауы – массив элементтерінің жиынын сипаттайды;
Индекс типі - тізбектелген немесе шектелген типтерді көрсету;
Элемент типі – массив элементтерінің типін көрсету.
Берілген мысалдағы массивтің әрбір элементімен жұмыс істеу үшін, массив атауы және индексі берілуі тиіс. Массив индексі тік жақшаға алынып жазылады, сол себепті массивтің кез келген элементіне қатынас алуға болады.
Яғни берілген массивиің бірінші элементіне қатынас алу үшін массив атауынан кейін бірінші индексті көрсету қажет: A[1]; массивтің екінші элементіне қатынас алу үшін; A[2]; ал А массивінің сегізінші элементіне: A[8] көрсетіледі
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

12

11

5

-2

405

-3

9

-7

Массив- тің бірінші элементі

Массив-тің екінші элементі

Массив-тің үшінші элементі

Массив-тің төртінші элементі

Массив-тің бесінші элементі

Массив-тің алтыншы элементі

Массив-тің жетінші элементі

Массив-тің сегізінші элементі

Берілген массивтің кез келген элементтеріне арифметикалық операцияларды, салыстыру және меншіктеу операторларын қолдануға болады. Сонымен қатар, массивтерге Turbo Pascal программалау тіліндегі айнымалы типіне сәйкес келетін барлық стандартты процедуралар және функциялар қолданылады.
Массивтің кез-келген бір элементіне элементіне нәтиже беру үшін, меншіктеу операторы қолданылады:
Массив атауы[индексі]:=нәтиже
Мысалы:
а) А массивінің бірінші элементіне- 12 санын меншіктеу үшін: А[1]:=12;
ә) А массивінің бесінші элементіне- 405 санын меншіктеу үшін: А[5]:=1405;
б) А массивінің екінші элемент нәтижесін экранға- шығару үшін: writeln (A[2]); (экранға 11 шығады.)
в) А массивінің бесінші элементіне нәтижені пернелер тақтасы көмегімен енгізу үшін: readln(A[1]);
г) А массивінің бірінші және үшінші элементтерін қосындысын Sum айнымалысына меншіктеу үшін: Sum:=A[1]+A[3];(нәтижесінде Sum айнымалысына 17 саны меншіктеледі).
Бірөлшемді массивтер элементтерімен жұмыс.
Массивтің кез-келген элементерімен жұмыс істегенде программалау барысында олардың индекісінің мәні сипатталған шектеуден аспауы тиіс.
Егер массив индексінің мәні сипатталған шектеуден асып кетсе онда, синтаксистік қате тіркеліп, экранда “Index type is not compatible with declaration” деген сөз тіркестері шығарылады.
Массивтер қолдпанылатын программаларда “{R+}” директивасын жазу арқылы массивтің шектеулерін тексеруге болады. Егер прогаммада“{R+}” директивасы беріліп, массив индексі шектеуден асып кетсе, онда экранға “Range check error” сөз тіркесі шығарылады.
Массивтерді программада қолдану үшін Turbo Pascal програмаллау тілінде оларды бірден var бөлімінде сипаттау жолы қарастырылған.
Жалпы жазылу түрі:
Var
Массив атауы : array (индекс типі) of элемент типі;
Мысалы, бөлшек сандарға арналған он сегіз элементтен тұратын GR массивін сипаттау:
Var
GR: array [1...18] of real;
Берілген тоғыз элементтен тұратын А масчсивіне бөлшек сандар енгізіп, оларды дисплей бетіне ретімен шығару программасын қарастырайық:
{$ R+}
PROGRAM MASSIV; {Программа атауы}
Type { Типтерді сипаттау бөлімі }
Mas = array [1..9] of real; { Шарт бойынша массив типі }
Var {айнымалыларды сипаттау бөлімі}
A: Mas; {Mas типті А - массиві}
I: integer; {циклді басқару айнымалысы}
BEGIN {негізгі программа басы}
WRITELN (‘A – массивінің 9 элементін енгізіңіз:’);
` FOR I:= 1TO 9 DO {I- бойынша цикл}
READ (A[i]); {A[i] массивіне нақты сандарды енгізу операторы}
FOR I:=1 to 9 do {I- бойынша цикл}
WRITE(‘A[‘,I,’]=’,A[I]); {A[I] массивінің элементін дисплейге шығару операторы}
END. {Негізгі программа соңы}

Өзін-өзі тексеру сұрақтары

  1. Шектелген типті айнымалылар қалай сипатталады?

  2. Диапазондық типті айнымалылар қалай сипатталады?

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

  4. Массивтің өлшемділігі деген не?

  5. Программада бірөлшемді, екіөлшемді массивтер қалай сипатталады?

  6. Массив элементіне қалай қарасады?

  7. Массивті қалай толтыру керек?

Дәріс №10. Деректердің құрылымданған типі: массивтер.Бірөлшемді және көпөлшемді массивтер.

Массивті экранға шығару

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

  1. Бір өлшемді массивтер

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

Массив сипаттамалары:



  • Типі – массив элементтерінің жалпы типі;

  • Көлемі – массив индексінің саны;

  • Шектелімі - әрбір индекстардің шектеу бойынша сәйкестігі;

  • Пішімі – көлем және шектеулер жиындары.

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

Массивтерді қолдану үшін оларды типтер (type) немесе айнымалыларды сипаттау (var) бөлімінде хабарлану қажет.

Жалпы жазылу түрі:
Type
Массив типінің атауы = array [индекс типі] of элемент типі;
Var
Массив атауы: массив типінің атауы;
Мысалы:
Type
GRUP = array [1…8] of integer;
Var
A:GRUP; {А – массивіне жады бөлу }
Мұндағы:
Массив типінің атауы – массив элементтерінің жиынын сипаттайды;
Индекс типі - тізбектелген немесе шектелген типтерді көрсету;
Элемент типі – массив элементтерінің типін көрсету.
Берілген мысалдағы массивтің әрбір элементімен жұмыс істеу үшін, массив атауы және индексі берілуі тиіс. Массив индексі тік жақшаға алынып жазылады, сол себепті массивтің кез келген элементіне қатынас алуға болады.
Яғни берілген массивиің бірінші элементіне қатынас алу үшін массив атауынан кейін бірінші индексті көрсету қажет: A[1]; массивтің екінші элементіне қатынас алу үшін; A[2]; ал А массивінің сегізінші элементіне: A[8] көрсетіледі

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]



12

11

5

-2

405

-3

9

-7

Массив- тің бірінші элементі

Массив-тің екінші элементі

Массив-тің үшінші элементі

Массив-тің төртінші элементі

Массив-тің бесінші элементі

Массив-тің алтыншы элементі

Массив-тің жетінші элементі

Массив-тің сегізінші элементі

Берілген массивтің кез келген элементтеріне арифметикалық операцияларды, салыстыру және меншіктеу операторларын қолдануға болады. Сонымен қатар, массивтерге Turbo Pascal программалау тіліндегі айнымалы типіне сәйкес келетін барлық стандартты процедуралар және функциялар қолданылады.
Массивтің кез-келген бір элементіне элементіне нәтиже беру үшін, меншіктеу операторы қолданылады:
Массив атауы[индексі]:=нәтиже
Мысалы:
а) А массивінің бірінші элементіне- 12 санын меншіктеу үшін: А[1]:=12;
ә) А массивінің бесінші элементіне- 405 санын меншіктеу үшін: А[5]:=1405;
б) А массивінің екінші элемент нәтижесін экранға- шығару үшін: writeln (A[2]); (экранға 11 шығады.)
в) А массивінің бесінші элементіне нәтижені пернелер тақтасы көмегімен енгізу үшін: readln(A[1]);
г) А массивінің бірінші және үшінші элементтерін қосындысын Sum айнымалысына меншіктеу үшін: Sum:=A[1]+A[3];(нәтижесінде Sum айнымалысына 17 саны меншіктеледі).
Бірөлшемді массивтер элементтерімен жұмыс.
Массивтің кез-келген элементерімен жұмыс істегенде программалау барысында олардың индекісінің мәні сипатталған шектеуден аспауы тиіс.
Егер массив индексінің мәні сипатталған шектеуден асып кетсе онда, синтаксистік қате тіркеліп, экранда “Index type is not compatible with declaration” деген сөз тіркестері шығарылады.
Массивтер қолдпанылатын программаларда “{R+}” директивасын жазу арқылы массивтің шектеулерін тексеруге болады. Егер прогаммада“{R+}” директивасы беріліп, массив индексі шектеуден асып кетсе, онда экранға “Range check error” сөз тіркесі шығарылады.

Массивтерді программада қолдану үшін Turbo Pascal програмаллау тілінде оларды бірден var бөлімінде сипаттау жолы қарастырылған.

Жалпы жазылу түрі:

Var


Массив атауы : array (индекс типі) of элемент типі;

Мысалы, бөлшек сандарға арналған он сегіз элементтен тұратын GR массивін сипаттау:

Var

GR: array [1...18] of real;



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

{$ R+}

PROGRAM MASSIV; {Программа атауы}

Type { Типтерді сипаттау бөлімі }
Mas = array [1..9] of real; { Шарт бойынша массив типі }
Var {айнымалыларды сипаттау бөлімі}
A: Mas; {Mas типті А - массиві}
I: integer; {циклді басқару айнымалысы}
BEGIN {негізгі программа басы}
WRITELN (‘A – массивінің 9 элементін енгізіңіз:’);
` FOR I:= 1TO 9 DO {I- бойынша цикл}
READ (A[i]); {A[i] массивіне нақты сандарды енгізу операторы}
FOR I:=1 to 9 do {I- бойынша цикл}
WRITE(‘A[‘,I,’]=’,A[I]); {A[I] массивінің элементін дисплейге шығару операторы}
END. {Негізгі программа соңы}

Өзін тексеру сұрақтары

  1. Екі өлшемді массивті сипаттау?

  2. Екіөлшемді массив элементіне қатысу?

  3. Екі өлшемді массивті толтыру?

  4. Екіөлшемді массивті экранға шығару?


Әдебиет: (1) бет. 140-153

Дәріс №11. Деректерді сұрыптау әдістері

Массивтің минималды және максималды элементтерін анықтау

Ең алдымен массивтің ең кіші немесе ең үлкен элементі деп жорамалмен 1-ші элементі алынады. Ары қарай массивтің ең кіші немесе ең үлкен элементін табу үшін цикл орындалады, яғни сол элемент басқа элементтермен салыстырылады. Егер ағымды элемент басқаларға қарағанда ең үлкен болса, онда сол элемент ізделінді элемент болғаны, басқа жағдайда ең үлкен элемент өзгеріссіз қалады. Оны математикалық формула түрінде былай жазуға болады



Сәйкесінше ең кішіні табу:






Сұрыптау. Қарапайым таңдау әдісімен сұрыптау. Қарапайым ауыстыру әдісімен сұрыптау. Тікелей қосу әдісімен сұрыптау. Араласу әдісімен сұрыптау. Бөлу әдісімен сұрыптау. (Хоар сұрыптауы).

Сұрыптау – бұл қандай да бір жиынның элементтерін кему немесе өсу ретімен ауыстыру процесі.

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

Қарапайым:


  • Қарапайым қосумен сұрыптау;

  • Тікелей таңдаумен сұрыптау;

  • Қарапайым ауыстырумен сұрыптау

Жақсартылған әдіс

  • Шелл сұрыптауы;

  • Бұтақ көмегімен сұрыптау;

  • Жылдам сұрыптау.

Тікелей таңдаулы сұрыптау

a1, a2, …, an сандар берілген, соларды азаюы бойынша орналасатындай етіп орналастыру керек. Ол үшін массивтегі элементтен ең үлкен элемент алынып, ол бірінші орынға қойылады, ал бірінші элемент жанағы ең үлкен элементтең орнына қойылады. Сонан соң. Екіншіден басталыр әлгі процедура қайталанады.



Қарапайым айырбастау сұрыптауы

a1, a2, …, an сандар берілген, соларды өсуі бойынша орналасатындай етіп орналастыру керек. Ол үшін массивтегі 2 көрші элемент салыстырылып, егер ai> ai+1 болса, ауыстыру орындалады. Осылайша, барлық элементтер өсу ретімен орналасқанша орындала береді.


.Өзін-өзі тексеру сұрақтары

  1. Массивтің максималды (минималды) элементін табу алгоритмі?

  2. Массивті сорттау деген не?

  3. Тікелей таңдау әдісі бойынша массивті сұрыптау алгоритмі?

  4. Қарапайым айырбастау әдісі бойынша массивті сұрыптау алгоритмі?

Әдебиет: (1) бет. 140-153
12 апта

Дәріс №12. Деректер типі – Жазбалар.

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


Мәліметтерді сақтау үшін оған екі массмвке орын бөлуімізге болатын еді. Бірінші массив (snring типті) оқушылардың аты жөнін сақтауға, екіншісі сақтауға арналған. Егер бізге қосымша мәліметтер (мысалы: сыныбы, ұлты, т.б.) енгізу керек болса, онда енгізуге тура келеді. Бір мезгілде бірнеше массивпен жұмыс істеу және оларды смпаттамалары бойынша сұрыптауға, әрине болады, бірақ үлкен жұмысты талап етеді. Сонымен қатар бұл мәліметтерді файлда сақтау керек болса не істейміз?
Файлдар туралы сұрақтарды талдағанда айтылғандай, файл элементтері тек бір типті элементтер болып келеді. Олай болса әр түрлі типтегі элементтерді әрбір типке – жолдық типке айналдырып, мәтіндік файлдармен жұмыс істеуіміз керек.
Мәліметтерді сақтай аламыз, бірақ болашақта бұл мәліметтермен жұмыс істеу жеткілікті қиындық туғызады.
Бұл қиындықтан шығу үшін мәліметтердің құрама типі қолданады. Мәліметтердің бұл типі жазба деп аталады. Жазбалар әр түрлі типтегі элементтер жиынтығынан тұрады. Жазба элелменттерін құраушыларды өріс деп атайды да, әрбір өрістің өзіндік атауы болады. Әрбір жазбаның бірегей атауы болады.

  • атауы;

  • саны;

  • бағасы;

  • сертификаттың болуы

және т.б.

Бұл мысалдағы шамалар типі мынадай:



  • атауы – string,

  • саны – integer,

  • бағасы – real,

  • сертификаттың болуы – boolean.

Осындай объектілерді сипаттауда Паскальда –жазбалар қолданылады.
Жазба типті айнымалыны сипаттау
Жазбалар әр түрлі типтегі элементтер жиынтығынан тұрады. Жазба элелменттерін құраушыларды өріс деп атайды да, әрбір өрістің өзіндік атауы болады. Әрбір жазбаның бірегей атауы болады.

  • Жазба атауы Тізім

  • Өрістің атауы Фамилия Аты Туған жылы

  • Өрістер мәні Ахметов Алдияр 1980

Жазбаны өңдеу элементар объектә түрінде шығады. Мұндай объект типі – record (жазба) деп аталады. Олай болса, мәліметтердің типтеріне байланысты шектеулер алынып тасталады. Жазбаларды сипаттау үшін, оның атауы, берілген өрісте сақталатын мәліметтердің атауы және типі көрсетілуі керек. Жазбалардың жалпы түрде сипатталуы келесідегідей:

Type<жазба атауы>=Record


<1 өріс>:<1 тип>;

<2 өріс>:<2 тип>;

;
end;




Жазбаны сипаттау
Берілген мәліметтерді сипаттау



Атауы

саны

бағасы

Шыққан жылы

1


Орындық

110

4502,5

2009

Егер өрістерді былай берсек:

№ - N

Атауы – Name

Саны – K

Бағасы – C

Шыққан жылы – G

Онда сипатталу мынадай болады:

type T1=record

N,K,G:integer;

Name:string;

C:real;

end;


var X:T1;

Өзін тексеру сұрақтары

  1. Жол деген не?

  2. Программада жолдық айнымалыларды қалай сипаттайды?

  3. Жолдық өрнек деген не?

  4. Жолдық деректермен қандай амалдар жасауға болады?

  5. Жолдың жеке символына қалай қарасуға болады?

  6. Жолдармен жұмыстың қандай процедуралары мен функциялары бар?

Әдебиет: (1) бет. 130-140

Дәріс №13. Деректердің типтері - файлдар.
File (ағылшын тілінен аударылғанда) бума, іс қағаздар жинағы, сонымен қатар ақпаратты сақтау деген мағынаны білдіреді.

Borland Pascal-да файлдарды екі негізгі белгісі бойынша топтастыруға болады:

файлдың типі бойынша (оның логикалық құрылымына ) файл элементтеріне қатынау тәсілі бойынша Типтері бойынша файлдар шартты тұрде үш түрге бөлінеді: мәтіндік файл;

типтік файл;

типтік емес файл.

Біз көбінесе мәтіндік және типтік файлдармен жұмыс істейміз.

Қатынау тәсілі бойынша файлдар келесідей бөлінеді:

Тікелей қатынау файлдары

Кезекпен қатынау файлдары

Олардың айырмашылығы тікелей қатынау файлдарында арнайы процедуралар және функцияларды пайдалана отырып, мәліметтерді, олардың файлдағы орнына тәуелсіз, оқуға немесе жазуға болады, ал кезекпен қатынау файлында оның ортасында немесе соңында тұрған мәліметті оқу үшін, оның алдындағы мәліметтердің барлығын оқуға тура келеді. Мәтіндік файлдар кезекпен қатынау файлдарына жатады, ал типтік файлдар тікелей қатынау файлдарыа жатады.



Мәтіндік файлға мәліметтер жазу

Ең қарапайым файл типі мәтіндік файл болып табылады. Бұл файлдағы мәліметтер типтік және типтік емес файлдардағыдай машиналық кодта емес, сан, әріп және басқа пернетақта символдары түрінде (ASCII кодында) беріледі. Сондықтан мұндай файлдар мазмұны оңай қаралады, оңай өзгереді және оларды кез келген мәтіндік редактордың, соның ішінде Borland Pascal ортасының да көмегімен өзгертуге болады. Өздеріңіз білетіндей 2.1.2.-ні қара, мәтінді теру кезінде жаңа жолды енгізу үшін "Enter” пернесін басу керек, осы кезде арнайы код гинерацияланады—ол жол соңы коды, ал файлды сыртқы сақтау құрылғысына жазған кезде де арнайы код гинерацияланады—ол файл соңы коды. Мәтіндік файлды оқығанда бұл кодтар көрінбейді.

Келесі есепті шешіп көрейік: Пернетақтадан бірнеше сандар енгізіп, оларды "mayFile.in” атты мәтіндік типтегі файлға жазу керек.

Есепті кезеңдерге бөлейік:

пернетақтадан мәліметтерді енгізу

оларды "mayFile.in” атты файлға жазу керек.

Бірінші кезеңді орындау үшін:

пернетақтадан енгізілетін сандардың мөлшерін (массив өлшемін) көрсету керек

Сан мөлшерін білген соң, параметрлі циклді қолдану арқылы массив элементтеріне осы сандардың нақты мәндерін меншіктейміз

Осы әрекеттерді орындау үшін қолданылатын айнымалыларды сипаттаймыз. Айталық, санымыз 100-ден көп емес және олар басқа да процедураларда қолданылатындықтан, оларды ауқымды айнымалыларды баяндау блогында сипаттаймыз.

рrogram Misal_F1;

var
San: array [1..100] of integer;

i, SanMolcher: integer;
Мәліметтерді енгізу процедурасы келесі түрде болады:

procedure init; begin readln (SanMolcheri);

for i:=1 to SanMolcheri do

begin
write ("San[",i,”]=’);

readln(San[i]);
end;
Мәліметтерді өңдеу процедурасы әзірге бізге қажет емес, сондықтан ол қызмет атқармай-ақ қойсын.

procedure work ;

begin
end;
Енді екіншісі кезеңді қарастырайық, яғни мәліметтерді «mayFile.in» атты мәтіндік типтегі файлға жазу керек. Алдымен өз файлмызды байланыстыратын, айналымның атауын беру керек.Айталық, ол айналымның атауы FileOut болсын, содан кейін біз оны мәтіндік файл ретінде сипаттаумыз керек. Бұл айнымалыны шығару процедурасында пайдаланатын болғандықтан, оны жергілікті айнымалы ретінде сипаттаймыз:

var
FileOut: text;

Одан кейін біз программаға, "мәтіндік” типтегі FileOut атты айнымалының, біздің "mayFile. in” атты нақты файлмызды белгілейтінін көрсетуіміз керек. Ол үшін assign(Name Var, Name File)процедурасы қолданылады. Name Var—бұл файлды белгілеу үшін берілген айнымалы аты, біздің жағдайда Name Var—дың орнына File Out сөзін жазасыз. NameFile—бұл біз жұмыс істейтін файлдың аты, біздің жағдайда”mayFile.in”.

Файл аты мен оның кеңейтілуінен басқа орналасқан орнына қарай сипатталатыны да белгілі. Мысалы,”c,\bp\bin\MyFile.in”. Ал егер толық аты берілмеген жағдайда, үнсіз келісім бойынша сіздің программаңыз орналасқан ағымдағы каталог қолданылады. Енді сіз берілген файлды ашып, оған мәліметтер жазылатындығын көрсетуіңіз керек. Ол үшін rewrite (Name Var)процедурасы қолданылады. Мұндағы, Name Var-бұл файлды белгілеу үшін берілген айнымалы аты, біздің жағдайда Name Var—дың орнына FileOut атауы жазылады. rewrite(

Name Var) процедурасы—файлды жазу үшін ашады және көрсеткішті файлдың басына орналастырады.

Енді мәліметтерді файлға жазуға бәрі дайын. Ол үшін бұрынан белгілі Write() және Write() процедураларын қолданамыз. Жазулар экранға емес файлға жазылуы үшін, мәліметтерді шығару бағытын көрсетеміз. Яғни, жақшаның ішіндегі мәліметтерді жазатын айнымалы атауының алдында, бізді файлмен байланыстыратын assign() процедурасындағы айнымалы атуын көрсетеміз. Айталық, берілгендерді шығыс файлына бір жолға жазу керек болсын, бұл жағдайда бірінші мән ол енгізілетін сандардың мөлшері болады. Жаңа жолға көшу болмайтындықтан,Write() процедурасын қолданып, бастапқыда файлға SanMolcheri айнымалысын мәнін жазамыз да, содан кейін параметрлі циклді пайдаланып енгізу процедурасында енгізілген сандарды жазамыз. Барлық мәліметтер файлға жазылып болған соң, файлды жазу керек. Ол Close() процедурасының көмегімен орындалады.

Close(Name Var) процедурасы—файлдың соңына, файл соңы белгісін жазып, оны жабады. Егер файл Close() процедурасымен жабылмаған болса, онда мәліметтер сақталынбайды.

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

procedure exi;

var
FileOut:text;


begin
assing(FileOut,`mayFile.in`);
rewrite(FileOut);
write(FileOut, SanMolcheri);

for i=1 to SanMolcheri do

write(FileOut,San[i]);
close(FileOut);
end;
негізі программаның мәтіні өзгеріссіз қалады

begin


init;

work;


exi;

end.


Осы программаны ‘Misal_F1’ атымен дискіге жазып, оны орындауға жіберіңіз. Программа жұмысын аяқтағаннан кейін, BP редакторының көмегімен біздің программамыз құрған `mayFile.in` файлын ашып, оның мазмұнын көріңіз. Өкінішке орай сандар файлда бос орынсыз тіркесіп жазылған болып шығады. Мұндай жазбадан қандай сандар жазылғанын анықтау қиындық тудырады. Бұл жағдайды қалай түзетуге болады?

Ол үшін, сандары бір бірінен дәл ажыратудың екі мүмкіндігі бар:

а.әрбір мәнді бос орын (``)белгісі арқылы бөліп жазу

в.әрбір мәнді жаңа жолға жазу (баған бойынша).

Бірінші жағдайда енгізілетін айнымалы атауынан кейін бос орын (``) белгісін қоямыз.
write(FileOut, SanMolcheri,``);

for i:= to SanMolcheri do

write(FileOut,San[i],``);
екінші жағдай үшін, writeln() процедурасын қолданамыз:

writeln(FileOut,SanMolcheri);


for i=1 to SanMolcheri do

writeln(FileOut, San[i] );



Мәтiндiк файлдан мәлiметтердi оқу

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

Ол үшін `mayFile1/in` файлын пайдаланамыз. Мәліметтерді файлға жазу кезіндегідей, біздің файлмызды байланыстыратын айнымалыға атау беруіміз керек. Айталық, ол атау Fileln болсын, содан кейін біз оны мәтіндік файл ретінде сипаттауымыз керек. Бұл айнымалыны біз енгізу процедурасында пайдаланатын болғандықтан, сол процедураның жергілікті айнымалысы ретінде сипаттаймыз.

var
Filelnt:text;


Одан кейін біз программада, "мәтіндік типті ” Fileln айнымалысы, біздің

`mayFile1.in` атауымен берілген нақтылы файлмызды белгілейтіндігін көрсетуіміз керек. Ол үшін assing(NameVar,NameFile)-процедурасын қолданады.

Енді файлдан мәліметтерді оқу үшін, берілген файлды ашуымыз керек. Ол үшін, reset(NameVar)—процедурасында қолданады, мұндағы NameVar-сіздің файлды белгілеуге берген айнымалыңыздың атауы, біздің жағдайымызда, ол NameVar-Fileln. Reset(NameVar)-процедурасы, мәліметтерді оқуға файлды ашады және курсорды файлдың басына орналастырадв. Егер ондай жоқ болса, қателік туралы хабарлама береді. Енді мәліметтерді файлдан оқуға барлығы дайын болды. Ол үшін өзімізге бұрынан таныс Read() және Readln() процедураларын пайдаланамыз. Мәліметтерді оқу пернетақтадан емес, файлдан жүзеге асу үшін, мәліметтерді оқудың жолын көсетеміз. Яғни, жақшалардың ішіне, assing()- процедурасының көмегімен біздің файлмызды байланыстырып тұрған, айнымалының атауын көрсетеміз.

`MayFile.in`файлындағы бірінші сан, файлдағы барлық сандардардың мөлшерін көрсетеді. Сондықтан, алдымен файлдан

Sanau айнымалысының мәнін оқытамыз,содан кейін параметрлі циклді қолданып, файлдағы сандардың мәндерін оқимыз. Мәліметтер толық оқылып болған соң, өзімізге таныс Close() процедурасын пайдаланып, файлды жабу керек.
Енді, мәліметтерді фйалдан оқу процедурасы қандай болатындығын көрелік:

procedure lnit;

var
i:byte;
Fileln:text;
begin
assing(fileln,`mayFile1.in`);
reset(Fileln);
readln(Fileln,Sanau);
for i:=1 to Sanau do

read(Fileln,San[i]);


close(Fileln);
end;
Дәл осындай, егер өлшемдері белгілі болса, мәліметтерді екі өлшемді массивтен оқу да онша қиыншылық туғызбайды. `MayFile.in5` файлынан мәліметтерді оқитын программадан үзінді мысалға келтірейік:

procedure lnit;

var
i,j:byte;
{айнымалы атауын мәтiндiк файл түрiнде сипаттау}

Fileln :text;

begin
{айнымалыны нақтылы файл атымен байланыстыру}

assing(Fileln,`mayFile5.in`);


{файлды оқуға ашу}

reset(File);


{массив өлшемдерiн оқу, курсорды жаңа жолға көшiру}

readln(Fileln,JolSany,BaganSany);


{массив элементтерiн жол және баған бойынша оқу}

for:=1 to JolSany do

read(Fileln,San[i,j]);
{файлды жабу}

close(Fileln);


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

Егер мәтіндік файлдардағы жазбалар саны белгілі болса, онда мәліметтерді оқу онша қиын емес. Ал, егер мәтіндік файлдағы жазбалар саны белгісіз болса ше, онда не істейміз? Егер сізге орындалатын әрекеттердің саны белгісіз болса, онда қайталану саны белгісіз цикл операторларын қолдануға болатындығын білесіз.2.8.2 тақырыбында мәтіндік файлдардың қасиеттерін сипаттаған болатынбыз, онда файлдың соңына файл соңын көсететін белгі код қойылатыны жайлы айтылған. Олай болса, мәліметтерді оқу файлдың соңы табылғанша жалғаса береді. Егер файл бос болса, яғни онда ешқандай жазба жоқ, онда одан мәліметтерді оқуға болмайды. Осы айтылғандарды тұжырымдай келе, алғы шарт циклін қолдану керек екеніне көзіміз жетті. Файл соңы белгісін анықтау үшін, EOF(Name Var)-процедурасын қолданады ағылшын тілінде EndOf File—файл соңы деген сөзден қысқартылып алынған. Жақшаның ішіне assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOF(Name Var)-процедурасының мәні, False(жалған)-болады егер файл соңына жетпеген болса Ture(ақиқат)-болады, егер файлдың соңы анықталған болса. Олай болса, алғы шарт циклін қолданғанда Not EOF(Fileln)-шарты әзірше ақиқат болса, онда цикл орындала береді, яғни файл соңы анықталғанша. Бұл жағдайда мәліметтерді енгізу процедурасы келесідей болады:

procdure lnit;

var
{айнымалы атауын мәтiдiк файл түрiнде сипаттау}

Fileln:text;
Begin
{айнымалыны нақтылы файл атымен байланыстыру}

assing(fileln,`mayFile1.in`);


{файлды оғуға әзiрлеу}

reset(Fileln);


{санауыштын бастапқы мәнi}

Sanau:=0;


While Not EOF(Fileln) do

Begin
{санауыштын мәнiн бiрге арттыру}

inc(Sanau);
{массивтен элементтердi оқу}

read(Fileln,San[i]);


end;
{файлды жабу}

close(Fileln);


end.
Sanau-айнымалысы файлдағы жазбалардың санын анықтауға қызмет атқарады. Бұл айнымалыны ауқымды айнымалылар бөлімінде сипаттаған тиімді. Сол сияқты San[] массиві де ауқымды айнымалылар бөлімінде сипатталады:

Var
San: arry[1…100] of integer;

Sanau: byte;

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

procedure exi;

var
i: byte;

begin
for i:=1 to Sanau do

begin
writeln(San[i]);


end;
end;
Егер сіз программа мәтінінің қалған бөлігін дұрыс құрастырыңыз, онда жазбалар саны 100-ден аспайтын мәтіндік файлдан мәліметтерді және жазбалар санын оқитын программа аласыз. Сонымен қатар бұл программа файлдағы барлық жазбалар санын анықтап, оны экранда жазады.

Енді екі өлшемді массив мәліметтерін файлдан қалай оқуға болатындығын қарастырыралық. Жоғарыда айтылғандай мәліметтерді файлдан оқу, оның файл соңын анықтайтын белгісіне байланысты екен. Бірақ екі өлшемді массивтерді жазғанда оның элементтері жол бойынша және баған бойынша жазылады. Сондықтан файлдан мәліметтерді оқығанда, алдымен алғашқы жол бойынша файл соңы белгісі анықталады. Жолдағы мәліметтер толығымен оқылып болған соң келесі жолды оқуды бастау керек. Мәтіндік файлдар қасиеттерін қарастырғанда айтылғандай, онда әрбір жол, жол соңы белгісімен кодымен аяақталады. Осы белгіні анықтау үшін стандартты EOLn(Name Var) процедурасын қолданады. EOLn(), ағылшын тілінде End of length жол соңы сөзінің қысқартылған түрі. Жақшаның ішіне assing() процедурасында көрсетілген файлдың нақтылы атымен байланыстыратын айнымалы атауы жазылады. EOLn(Name Var)-процедурасының мәні, False(жалған)-болады, егер жолдың соңына жетпеген болса, Ture(ақиқат)-болады егер жолдың соңы анықталған болса. Олай болса мәліметтерді оқу жалғаса береді егер Not EOF(Fileln) шарты ақиқат болса, яғни жол соңы анықталғанша. Бұл жағдайда мәліметтерді оқу процедурасының түрі келесідей болады:

procedure lnit;

var
i: byte;

{айнымалы атауын мәтiндiк файл түрiнде сипаттау}

Fileln:text;


Begin
{айнымалыны нақтылы файл атымен байланыстыру}

assing(fileln,`mayFile5.in`);


{файлды оқуға әзiрлеу}

reset(Fileln);


{жолда санауыштың бастапқы мәнi}

Sanau Jol:=0;

{массив элементтерiн жол бойынша оқу}

while Not EOF (Fileln)do

begin
{санауыштың мәнiн бiрге арттыру}

inc(Sanau Jol);

{бағанда санауыштың бастапқы мәнi}

SanauBagan:=0;


{массив элементтерiн жол бойынша оқу}

while Not EOF (Fileln)do

begin
{санауыштың мәнiн бiрге арттыру}

inc(Sanau Bagan);

{массив элементтерiн оқу}

read(Fileln, San[i,j]);

end;
{курсорды жаңа жолдың басына қою}

read(Fileln, San[i,j]);

end;
{файлды жабу}

close(Fileln);


end;
Типті файл. Типті файлдарға мәліметті жазу

Келесі есепті қарастырып көрелік:

Мәтіндік файлға төрт таңбалы 50 сан жазу керек. Әрбір сан жеке жолдарға жазылатын болсын. Нәтижесіндегі файлдың өлшемі қандай болады?

Оны жуықтап бағалап көрелік. Әрбір таңба 1 байт орын алады. Ондай таңбалардың саны 50×4=200. Мәтіндік файлдарға берген анықтама бойынша әрбір жолдың соңында файл соңы белгісі болғандықтан, файл өлшемі 250 байттан асып кетеді.

Бұл мәліметтерді кіші өлшемдегі файлдарда сақтауға бола ма?

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

Мұндай амалдарды мәліметтерді файлда сақтау кезінде қолдануға бола ма? Болады екен. Типті файл деп аталатын арнайы файлдық типтер бар.

Типті файл – барлық элементтері бір типті мәліметтер болып келетін файл түрі. Типті файл элементтері файлдық типетен басқа кез-келген тип бола алады.

Әр элементті файлға жазу үшін, мәліметтердің типіне байланысты, міндетті белгіленген мөлшерде орын бөледі. Типті файлдарды смпаттау бөлімінде ашу үшін, мәтіндік файлды смпаттағандай, файл мәліметтерді смпаттайтын тип жазылады.

<файл атауы>:file of<мәліметтер типі>

Біздің жағдайымызда:

FileOut:File of interger

Бұл жазу, берілген файлдағы мәліметтер – 32768-ден 32767 аралығында жататын бүтін сандар екенін көрсетеді.

Сонымен қатар, типті файлдармен жұмыс істегенде де, assign( ) - процедурассының көмегімен нақтылы файл аты мен байланыстыратын атауды көрсетеміз.

Assign(<файл атауы>,<файлдың нақты атауы>)

Біздің жағдайымызда:

Assign(FileOut ,’may.dat’)

Типті файлдармен жұмыс жасағанда мәтіндік файлдардағы секілді оларды жазуға және оқуға ашуға болады. Ол үшін стандартты функциялар қолданады:

Rewrite(<файл атауы>) – процедурасын файлды жазуға ашады және курсорды файлдың басына орналастырады.

Типті файлдарға мәліметтерді жазу write() процедурасы арқылы жүзеге асырылады. Ол мәтіндік файлдардағы write() процедурасына ұқсас. Алайда write() процедурасын типті файлдарда қолдануында біршама өзгешелік бар. Әрекетті орындау кезінде көрсеткіш келесі жазу блогына көшеді. Типті файлдарда writeln() процедурасын қолдану қателік көрсетеді.

Типті файлдарға writeln() процедурасын қолдануға болмайды.

Типті файлдармен жұмыс аяқталған соң Close<файл атауы>) – процедурасы көмегімен файл жабылады.

Енді тақырып басында берілген есепті шешуді жалғастырайық. 2.8.2 тақырыбындағы Мisal_F1 мәліметтерді шығару программасына келесідегідей өзгертулер енгіземіз:

Procedure Exi;

Var
FileOut :File of integer;

I :integer;

Begin
Assign (FileOut, ‘mayFile.in’);

Rewrite(FileOut);
For i:=1 to Sanau do

Write (FileOut, San[i]);

Close(f);
End;
Программаны толықтырып жазып Мisal_F8 атымен сақтаңыз. Программа орындалғаннан кейін "mayFile.in" файлын ашып көріңіз. Не көрдіңіз?

Типті файл. Типті файлдарға мәліметті оқу

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

Типті файлдардан мәліметтерді оқуға арналған негізгі проуедураларды қарастырамыз.

Типті файлдармен жұмыс жасар алдында, мәтіндік файлдардағыдай, файл атауын жариялау және файлдағы мәліметтердің типін көрсету керек, нақтылы файл атауын байланыстыратын айнымалы атауын сипаттауымыз кереек (2.8.5 тақырыбын қараңыз).

Reset(<файл атауы>) – процедурасы файлдф оқуға ашады және көрсеткішті файлдың басына орналстырады.

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

Бұл қиындықтан шығу үшін FileSize( ) функциясын қолдануға болады.

FileSize(<файл атауы>):longint – функциясы файлдағы компоненттер санын анықтайды. Яғни, бізге файлдағы барлық мәліметтерді оқу керек болса, оқу процедурасын FileSize( ) рет орындауымыз керек. Мisal_F8 программасымен құралған типті файлдан мәліметтерді оқудың программасының мәтінінен үзінді келтіреміз:

Procedure Init;

Var
FileInput : file of integer;

I, Sanau : integer;

San:array[1..100] of integer;

begin
assign(FileInput, ‘mayFile.in’);

reset (FileInput);

Sanau :=FileSize(FileInput);

For i:=1 to Sanau do

Read(FileInput, San [i]);

Close(FileInput)’


End;
Тақырыптың басында типті файлдар – тікелей қатынау файлдарына жататынын айтып кеткенбіз. Яғни, файлдың кез-келген бөлігіндегі мәліметтерді оқу үшін, оның алдында тұрған мәліметтерді оқуды қажет етпейтін файлдар кездеседі.

Көрсеткішті қажетті мәліметті оқуға қою үшін, Seek() – процедурасын қолданады. Оның түрі келесідегідей болады:

Seek(<файл атауы>, <жазбаның нөмері>);

Сонымен қатар типті файлдарда нөмірлеу нөлден басталатыны есте ұстау керек, яғни бірінші лементтің нөмері "Нөл". Олай болса, біз көрсеткішті үшінші элементті оқуға көшіру үшін, Seek( ) - процедурасын қолдануды ескеруіміз керек. Мысалы:

Seek(FileInput, 2);

немесе
Seek(FileInput, 3-1);


Өзін тексеру сұрақтары

  1. Файл деген не?

  2. Файлдардың қандай ерекшеліктері бар?

  3. Файлдарды деректерді өңдеуге қолданудың қандай артықшылықтары бар?

  4. Ішкі және сыртқы файлдар деген не?

  5. Что такое файлы последовательного и прямого доступа?

  6. Типтелген, типтелмеген, мәтіндік файлдар деген не?

  7. Программада типтелген файлдарды қалай сипаттайды?

  8. Типтелген файлдармен жұмыс істеудің қандай процедуралары мен функциялары бар?

  9. Программада мәтіндік файлдарды пайдалануды қалай сипаттайды?

  10. Мәтіндік файлдармен жұмыс істеудің қандай процедуралары мен функциялары бар?

Әдебиет: (1) бет. 158-167

Тақырып 12. Модульдер ұғымы
Дәріс №14. Модульдер
Turbo Pascal тілінде модульдерді ұйымдастыру және пайдалану
Модуль дегеніміз нақты бір типті есептерді шығаруға арналған тұрақтылар, деректер типтері, айнымалылар, процедуралар мен функциялар жиынтығы.
Әрбір модуль әрбір жеке программада әртүрлі құрылымда болады. Модульді кейде кітапхана деп те атайды.
Модульді сонымен қатар, біреудің сізге және сіздің қолдануыңызға жазған қарапайым үрдіс деп те қарастыруға болады.
Turbo Pascal тілінде стандартты (встроенными) модульдер бар, олардың негізгілері мыналар:

  • System

  • Dos

  • Overlay

  • Graph

  • Crt

  • Printer

және т.б.

Модульдер System, Dos, Overlay, Crt, Printer біріктірілген және Turbo.tpl файлында сақталады.



Graph модулі Graph.tpu файлында сақталады.
System модулі деректердің кіру – шығу, жолдардың өңделуін және т.б. процедуралары мен функцияларын қолдайды.

Dos модулі көбісі MS-DOS командаларына эквивалентті стандартты процедуралар мен функцияларды қамтиды.

Overlay модулі Оверлейлер жүйесін қолдауды қамтамасыз етеді. (Оверлей – арнайы программа, негізгі программаға мәндер беріп тұрады)
Crt модулі поддерживает ряд стандартных процедур и функций, которые обеспечивают работу с экраном монитора в текстовом режиме, управление звуком и работу с клавиатурой.

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

Graph модулі монитор экранының графиктік режимде жұмыс істеуін қамтамасыз етеді.

Процедураны немесе қандай да бір модульді пайдалану үшін оны программаға қосу қажет. Бұл uses бөлімінде орындалады, оның түрі мынадай:


uses модуль _ аты_1, модуль_аты_2, …, модуль_ аты_N;
System модулі кез – келген программаға автоматты түрде қосылады, сондықтан uses бөлімінде көрсетудің қажеті жоқ.

Стандартты модульдер. CRT модулі. GRAPH модулі.
Crt модулі

1. Мәтіндік режимді қою

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

Мәтіндік режим TextMode(M) процедурасымен орнатылады, мұндағы М – режим.

2.Курсорды басқару

Курсордың орны жолдың нөмірі мен курсордың координаталары ретінде есептеуге болатын жолдағы позициясымен анықталады.


GotoXY(X,Y); процедурасы курсорды (X,Y) координаталы позицияға жылжытады

3. Түсті басқару

Келесі үрдістерді пайдалануға болады:



TextColor(C); енгізілетін символдардың түсін қою үшін.

TextBackGround(C); фонның түсін қою үшін.
мұндағы С – түс.

Экранды, жолдарды тазалау,жолдарды жою және жолдар қою

ClrScr; - экранды толық тазалайды, мұнда курсор экранның сол жақ жоғары бұрышына орналасады.

ClrEol; - курсордың тұрған орнынан бастап жолодың соңына дейін барлық символдарды өшіреді. DelLine; - курсор орналасқан жолды жояды, барлық астыңғы жолдарды бір позиция жоғары көтереді.
InsLine; - курсор тұрған позициядан бастап, жаңа жол қояды.

Программаның орындалуының кідіруі

Delay(N); - программаның орындалуын N миллисекундқа кідіртеді.

6. Пернетақтамен жұмыс

Әрбір перненің өз коды бар, ол пернетақтаның панелінде перненің орнына тәуелді және пернедегі салынған бейнеге қатысы жоқ..



  1. Функция Ord(C) – C символының кодын анықтайды.

  2. Функция Chr(X) – Коды X – ке тең символды анықтайды.

Дәріс №14.Өзін-өзі тексеру сұрақтары

  1. Модуль дегеніміз не?

  2. Стандарттық модульдердің қандай түрі бар және олар не үшін қажет?

  3. программаға модульді қалай қосу керек?

  4. Қандай модуль програмаға автоматты түрде қосылады?

  5. CRT модулі не үшін қолданылады?

  6. CRT модулінің қандай процедураларымен функциялары бар және олар не үшін қолданылады?

Дәріс №015. Модуль


  1. Адаптер ұғымы, адаптер типтері, драйверлер және режимдер ұғымы

Графикалық режимде кез – келген монитор экранындағы бейне көптеген пиксельдерден тұрады.

Монитор экранының графикалық режимде жұмыс істеуін графикалық адаптер деп аталатын арнаулы электрондық схема қамтамасыз етеді. Адаптерлердің негізгі иптері: CGA, EGA, VGA SVGA. Графикалық режимнің жұмысын драйвер деп аталатын арнайы программа. ТР драйверлер BGI өсімшелі файлдарда сақталады. Пайдаланылған драйвер әртүрлі режимде жұмыс істеуі мүмкін.



2. Инициализация және графикалық режимнен шығу

Graph модулін қосқан соң, алдымен мүмкін бір графикалық режимді орнататын процедура шақырылады.


InitGraph(D,M,P);
мұнда D – драйверді береді, М – режимді береді, Р – драйвер файлына жол көрсетеді, яғни сәйкес BGI өсімшелі файлға. (Ескерту: Егер драйвер файлы ағымдағы каталогта орналасса жол ретінде '' (екі апостроф)).
Графикалық режимнен шығу үшін CloseGraph; процедурасы

3. Координат жүйесі

Экранда бейнені тұрғызу үшін координаттар жүйесі қолданылады




Графикалық режимде көрінетін курсор жоқ, бірақ көрінбейтін ағымдағы сілтеме бар.

Ағымдағы сілтемені жылжыту үшін келесі процедуралар қолданылады:

MoveTo(X,Y); - ағымды сілтемені (Х,У) координаты бар нүктеге ауыстырады.
MoveRel(X,Y); - ағымды сілтемені көлденеңінен X нүктеге, тігінен Y нүктеге ауыстырады.
Тігінен және көлденеңінен нүктелердің максималды санын анықтау үшін келесі функциялар қолданылады:
GetMaxX – X-ң макималды мүмкін мәндерін анықтайды.
GetMaxY - У-ң макималды мүмкін мәндерін анықтайды.
Инициализация және графикалық режимнен шығу.
Негізгі фигураларды тұрғызу
1. PutPixel(X,Y,C);
(X,Y) координаталы С түсті нүктені тұрғызу.
2. Сызықты тұрғызу
Line(X1,Y1,X2,Y2);
(X1,Y1) координата нүктесінен (X2,Y2) координата нүктесіне дейінгі сызықты сызады.
LineTo(X,Y);
Ағымды сілтемеден (Х,У) координата нүктесіне дейінгі сызықты сызады.
Сызық түсі мына процедурамен беріледі:
SetColor(C);
Сызық стилі мына процедурамен беріледі:
SetLineStyle(L,P,T);
мұнда L сызықтың стилін береді;
Т сызықтың жуандығын көрсетеді;
Р үлгіні береді
Егер қандай да бір стандартты стильдің бірі қолданса, онда Р мәні 0 - ге тең.
Егер қолданушы өз стилін пайдаланса, онда Р мәні 4 - ке тең.
3. Тікбұрыштарды тұрғызу
Rectangle(X1,Y1,X2,Y2);

Боялмаған тікбұрышты сызу




Сызық түсі SetColor процедурасымен, стиль мен қалыңдығы SetLineStyle процедурасымен беріледі.
Bar(X1,Y1,X2,Y2);
Боялған тікбұрышты сызу
Бояу кезінде мына шаблонмен анықталатын шаблон мен түс қолданылады: SetFillStyle(N,C);
Мұндағы N толтыру стилі, ал С-түсі.
4. Параллелепипед тұрғызу
Bar3D(X1,Y1,X2,Y2,D,T);
Мұнда D үш өлшемді контурдың тереңдігін береді, Т тікбұрышты параллелепипед төбесін құру керек пе (T=True) , әлде жоқ па (T=False), соны көрсетеді.
Сызық түсі SetColor процедурасымен, стиль мен қалыңдығы SetLineStyle процедурасымен беріледі.
5. Шеңбер, доға, эллипстер тұрғызу
Circle(X,Y,R);
(X,Y) нүктесінде R радиусы бойынша шар салады.
Түс SetColor процедурасымен беріледі.
Arc(X,Y,B,E,R);
Центрі (Х,У) нүктесінде, В бастапқы бұрыштан Е соңғы бұрышқа дейінгі радиусы R болатын доға сызу.
Ellipse(X,Y,B,E,XR,YR);
В бастапқы бұрыштан Е соңғы бұрышқа дейінгі центрі (Х,У) нүктесінде, Х осі бойынша радиусы ХR болатын, У осі бойынша радиусы YR болатын эллипс сызу.
6. Толтыру түсі мен фон түсі
SetBkColor(C);
Графикалық режимде фонның түсін қояды.
ClearDevice;
Графикалық режимде экранды тазалау процедурасы.
FloodFill(X,Y,C);
SetFillStyle процедурасымен анықталған шектелген облысты ағымды түспен және толтыру стилімен бояйды.
(X, Y) – шектелген боялған облыстың ішінде орналасқан нүктелер координаты, С – шектелген облыстың шеттерінің түсі.
7. Мәтінді графикалық режимде шығару
OutText(S);
Мәтін жолын сілтеменің ағымды жағдайынан бастап шығарады.
S – жолдық типтегі айнымалы немесе константа
OutTextXY(X,Y,S);
(X, Y) – мәтінді шығарудың басының координаттары.
Ескерту: Сандық деректерді экранға шығару үшін санды жолға айналдыру қажет.

.Өзін-өзі тексеру сұрақтары



  1. GRAPH модулі не үшін қажет?

  2. Адаптер деген не?

  3. Адаптерлердің қандай типтері бар?

  4. Драйвер деген не?

  5. Графикалық режимді қалай инициализациялау қажет және одан шығу?

GRAPH модулінің қандай процедуралар мен функциялары бар және олар не үшін керек?
Әдебиет: (1) бет. 130-140




Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет