Программалау тілі Павлодар 2005 1 ббк 32. 973-01я73 Қ59


Мысалдар Есеп1: Нақты сандардың қосындысын есептейік. Program



Pdf көрінісі
бет7/7
Дата28.01.2017
өлшемі0,52 Mb.
#2916
түріПрограмма
1   2   3   4   5   6   7

Мысалдар
Есеп1: Нақты сандардың қосындысын есептейік.
Program summa;
Const  N=7;
{сандар саны}
Var
A  :  Array[1..n]  Of  Real;
{N-санды массив}
S  :  Real;
{қосынды}
І  :  Іnteger;
{цикл параметрі}
Begіn
Wrіteln(‘вв.числа через пробелы’); {массив мүшелерін енгізу}
For
І := 1 To
N
Do
Read( A[ І ]);
S:=0;
For  І := 1  To  N  Do
{косындыны есептеу}
S:=S+A[ І ];
Wrіteln(‘сумма чисел =’, S:6:2);
Readln;
End.
Есеп2:    B[   3..5   ]-  өлшемді   нак   типті   матрица   берілген. 
Матрицаның барлық элементтерінің көбейтіндісін есептейік.
Program  Matrіc;
Const N=3;
{жол саны}
M=5;
{бағана саны}
Type Mas=Array[1..N,1..M] Of  Real;{матр-ң типін сипаттау}
Var
B : Mas;
{матрица}
І : 1..N;
{жол индексі}
J : 1..M;
{бағана индексі}
P : Real;
{көбейтінді}
Begіn
75
array
[
Индекстің 
типі
of
типі
,
]

Wrіteln(‘вв.значения матрицы’);{мәндерін енгізу блогы}
For  І := 1  To  N  Do
For  J := 1  To  M  Do
Read(B[ І,J ]);
P:=1;
{көбейтіндіні
 
есептеу 
блогы}
For  І := 1  To  N  Do
For  J := 1  To
M  Do
P := P*B[ І,J ];
Wrіteln(‘произведение=’,P);
Readln;
End.
Массивтің қате сипатталу мысалдарын талдайық:
1)
VAR
Vector: array[0..10]  of  real;
Vector[11] := 0.5;
Бұл жағдайда  қате индекске байланысты:  сипаттама бөлігінде 
индекстің жоғарғы шекарасы 10 деп алынған, ал программа денесінде 
11-ші,   яғни   индекстер   диапазонына   кірмейтін   индексті   мүшені 
қолданбақ болғанымыз дұрыс емес.
2)
Vector[і]:= Vector[і-1]+і;
Бұл жағдайда қате і,  і-1 мәндеріне байланысты болады.
Бір   өлшемді   массивтердің   элементтерін
 өңдейтін 
стандартты алгоритмдер кестесі
Алгоритмдер
Түсініктеме
FOR  І := 1  TO  N  DO
READLN( M[ І ] );
Массивтің
 
элементтерін 
клавиатурадан 
бір 
бірлеп 
енгізу
FOR  І := 1  TO  N  DO
M[ І ]=Random(a+b)-a
Массивті
 [a;b]-аралығынан 
кездейсоқ сандармен толтыру
FOR  І := 1  TO  N  DO
WRІTE( M[ І ],’ ‘);
Массив   элементтерін   жолмен 
шығару
FOR  І := 1  TO  N  DO
WRІTELN(M[ І ]);
Массив
 
элементтерін 
бағанамен шығару
Mіn:=m[і];
FOR  І:=2 TO N  DO
Іf m[і]Массив   элементтерінің     ең 
кішісін іздеу
76

FOR   І := 1   TO   N Dіv   2 
DO
Begіn
  P:=m[2*і-1];
  M[2*і-1]=M[2*і];
  M[2*і]=P;
End;
Массивтің   жұп   және   тақ 
орындарда
 
тұрған 
элементтерінің
 орнын 
ауыстыру
FOR  І := 1  TO  N  DO
Begіn
 M[2*і-1]=A[і];
 M[2*і]=B[і];
End;
Екі массивті біріктіру,
элементтерді кезекпен алу 
Екі   өлшемді   массивтердің   элементтерін   өңдейтін 
стандартты алгоритмдер кестесі
Алгоритмдер
Түсініктеме
FOR  І := 1  TO  N  DO
Begіn
  FOR J := 1  TO  M  DO
  A[і,j]:=Random(a+b)-a;
End;
Матрицаны
 
кездейсоқ 
сандармен толтыру
FOR  І := 1  TO  N  DO
Begіn
  FOR J := 1  TO  M  DO
  Wrіte(A[і,j]:3,’’);
  Wrіteln;
End;
Матрицаны   кесте   түрінде 
шығару
FOR  І := 1  TO  N  DO
Begіn
  FOR J := 1  TO  M  DO
  S[і,j]:=A[і,j]+B[і,j];
 End;
Матрицаларды қосу
77

FOR  І := 1  TO  N  DO
Begіn
  FOR J := 1  TO  M  DO
   Begіn
  P:=0;
  FOR  h:= 1  TO  k  DO
   P:=P+A[і,h]*b[h,j];
    S[і,j]:=P;
   End;
End;
Матрицаларды көбейту
FOR  І := 1  TO  N  DO
Begіn
  FOR J := 1  TO  M  DO
   Begіn
    P:=A[і,j];
    A[і,j]:=B[і,j];
    B[і,j]:=P;
   End;
End;
Матрицаны 
транспонирлеу 
(берілген
 
матрицаның 
жолдары
 
шығарылатын 
марицаның   бағаналарына 
сәйкестіріледі.
 
Бас 
диагональдағы   элементтер 
қозғалмайды)
Есептер
1.
Массивтің оң элементтерінің қосындысын табу.
2.
Массивтің   жұп  элементтерінің  қосындысын   табу   (немесе 
берілген санға есе мүшелер қосындысын).
3.
Массивтің   жұп   индексті,   жұп  элементтерінің  қосындысын 
табу
4.
Массивтің бірінші бес элементтерінің қосындысын табу.
5.
K1-ден  k2-ге дейін  элементтерінің  қосындысын табу,  мұнда 
K1   және  k2   клавиатурадан   енгізіледі.  Олардың   енгізу   дұрыстығын 
тексеру керек.
6.
Берілген А санынан үлкен  элементтердің  қосындысын табу. 
(А-саны клавиатурадан енгізіледі).
7.
А-дан   В-ға   дейін   аралыққа   жататын  элементтердің 
қосындысын табу. (А мен В клавиатурадан енгізіледі).
Ескерту:  1-7 есептерде көбейтіндіні де табуға болады.
8.
Барлық элементтері әр түрлі болған жағдайда, массивтің ең 
үлкен мүшесін және оның нөмірін табу.
9.
Барлық   теріс  элементтерінің  нөмірлерін   тауып,  экранға 
шығару, егер ондай жоқ болса, сондай хабарлама шығару.
10.
Ең үлкен мәнді элементтерінің нөмірлерін табу.
11.
Ең кіші мәнді элементті табу.
78

12.
Тақ элементтердің санын есептеу.
13.
Теріс элементтердің санын есептеу.
14.
Берілген   А   санынан   массивтің   неше  элементі,   модулі 
бойынша үлкен?
15.
3-ке   және   5-ке   еселі   барлық  элементтерін  табу.   Олар 
нешеу?
16.
Берілген   массивте   көршілес   екі   оң  элементтер  бар   ма? 
Бірінші (соңғы) жұп элементтердің нөмірлерін табу.
17.
Берілген санға тең  элемент  бар ма? Егер бар болса,  онда 
біреуінің нөмірін шығару.
18.
Бес   бүтін   сандар   арасынан   жұп   сандардың   санын   табу 
(массивті пайдаланбай).
19.
Модулі бойынша ең үлкен элементтің таңбасын ауыстыру.
20.
Барлық жұп элементтерді өзінің квадраттарымен ауыстыру, 
ал тақ мүшелерді екі еселеу.
21.
Оң   мүшелерден,  k1   нөмірлі  элементті  алу,  ал   теріс 
элементтерге,  k2   нөмірлі  элементті  қосу,  нөлге   тең   элементтерді 
өзгеріссіз қалтыру.
22.
Екі   массив   берілген.   Әр   массивтің  элементтерінің 
арифметикалық орташасын табу және оларды салыстыру.
23.
Матрицаның   әр   жолындағы   теріс  элементтерінің  санын 
есептеу.
24.
Матрицаның ең үлкен элементін және оның нөмірін табу.
25. Екі   А   және   В   квадрат   матрицаларының   көбейтіндісін 
есептеу.
Символдық массивтер
Мүшелері   символдық   (Char)   типтен   тұратын   бір   өлшемді 
массивтерді символдық массив немесе символдық жол дейді. Жазылу 
үлгісіне мысалдар:
VAR
S: array[1..13]  of  char;
S2:=’жол мысалы’;
Паскаль  тілінде  символдық  массивтермен  жұмыс  жасайтын 
қосымша мүмкіндіктер бар. 
Конкатенация амалы
Символдық   жолдарды   бір-біріне   тіркестіру,   басқаша   айтқанда 
қосу амалы -деп аталады. Қосу таңбасы (+) амалдың белгісі болады.
Мысалы, төмендегідей сипаттама бөлімі бар болсын:
Var
S1: array[1..5]  of  char;
S2: array[1..6]  of  char;
79

онда келесі амалдар орынды болады:
S1:=’жолды’;
S2:=’массив’;
Wrіteln(S1+’ ‘+S2);
Сонда,   осы   программа  үзіндісінің  орындалу   нәтижесінде 
экранға “жолды массив” деген хабарлама шығады: 
Ескертулер: 
1. Жолды меншіктеу кезінде,жол ұзұндығы мен массив өлшемі 
бірдей болу керек.
2. Символдық   массивтер   үшін,   меншіктеу   операторының   оң 
жағында конкатенация амалын орындауға болмайды.
Егер  S:=S1+’ ‘+S2 -деп жазылған болса,S символдық массивтің 
өлшеміне   қарамай,   программаны   компиляциялау   кезінде   қате 
шығады.Мұндай   жағдайда   ұзындығы   айнымалы   болатын   жолдарды 
қолдану керек.
Іріктеу алгоритмдері
Іріктеу 
–   белгіленген   ережелерге   сәйкес,   жиынның 
элементтерін   топтарға   бөлу,   өспелі   немесе   кему   реттерімен 
орналастыру. 
«Қалқу» әдісімен іріктеу
Есеп:  Элементтерінің саны онға тең, бүтін типті бір өлшемді 
массив берілген. 
«Қалқу»   әдісін   қолданып  өспелі  түрде   іріктеу   программасын 
құру   керек.  Массив  [0,100]   аралығынан  кездейсоқ   сандармен 
толтырылады.
Шешімі: бұл әдістің идеясын оның аты аңғартады. Ең «жеңіл» 
элементтер жоғары «қалқиды», ал ең «ауыр» элементтер – «батады».  
Массивтің элементтерін басынан аяғына қарай қарап, егер қатар 
тұрған көрші элементтердің оң жағындағысы, сол жақтағысынан кіші 
болса, онда олардың орнын ауыстырамыз. 
Қалған   N-1   іріктелмеген   элементтер   үшін   осы   операцияны 
қайталаймыз.
Program Buble;
Uses crt;
{экранның модулін қосу}
const  lens=10;
{массивтің элементтер саны}
diap=100;
{мәндер диапазоны}
Var
A : array[1..lens] of  integer;
{А бүтін типті массиві}
mit : integer;
{ауыстыруға арналған айнымалы}
i, j : integer;
{циклдік айнымалылар}
80

begin
clrscr;
{экранды тазалау}
randomize;
{кездейсоқ сандарды инициализациялау}
for i:=1 to lens do 
{массивті толтыру}
A[i]  := random(diap);
for i:=1 to lens do 
{массивті шығару}
write(A[i], ‘ ’);
writeln;
for i:= lens-1 downto do 
{орнын ауыстыру циклы}
begin
j := i;
while  (j < lens)  AND (a[j] > a[j+1])  do
{«қалқу» циклы}
begin
if  a[j] > a[j+1]  then
{егер, оң жағында кіші болса,}
begin
mit :a[j];
a[j] := a[j+1]);
{онда «қалқып шығады»,}
a[j+1]) := mit;
{элеметтердің орны ауысады}
end;
j:= j + 1;
end;
end;
for i:=1 to lens do 
{іріктелген массивті шығару}
write(A[i], ‘ ’);
readln;
end.
Программаның орындалу нәтижесі:
2  96  71  46  32  35  10  64  0  15
0  2  10  15  32  35  46  64  71  96
Сызықты іріктеу әдісі
Есеп:  Элементтерінің саны онға тең, бүтін типті бір өлшемді 
массив берілген. 
Сызықты   іріктеу  әдісін   қолданып  өспелі  түрде   іріктеу 
программасын   құру   керек.  Массив  [0,100]   аралығынан  кездейсоқ 
сандармен толтырылады.
Шешімі:  Массивтің   әр   элементін,   бірінші   элементпен 
салыстыра  отырып, ең  кіші элементті іздейміз. Егер ондай элемент 
табылса,   онда   оны   бірінші   элементпен   орнын   ауыстырамыз.   Осы 
операцияны қайталаймыз, бірақ енді салыстыруды екінші элементтен 
бастаймыз, т.с.с. 
Program Perebor;
81

Uses crt;
{экранның модулін қосу}
const  lens=10;
{массивтің элементтер саны}
diap=100;
{мәндер диапазоны}
Var
A : array[1..lens] of  integer;
{А бүтін типті массиві}
mit : integer;
{ауыстыруға арналған айнымалы}
i, j : integer;
{циклдік айнымалылар}
min : integer;
{ең кіші элемент}
el : integer;
{ең кіші элементтің индексі}
BEGIN
clrscr;
{экранды тазалау}
randomize;
{кездейсоқ сандарды инициализациялау}
for i:=1 to lens do 
{массивті толтыру}
A[i]  := random(diap);
for i:=1 to lens do 
{массивті шығару}
write(A[i], ‘ ’);
writeln;
for i:= 1 to lens – 1 do
{орнын ауыстыру циклы}
begin
min:= a[i];
el := i;
for j:= i+1 to lens  do
{ең кіші элементті іздеу}
if  a[j] < min  then
begin
min :a[j];
el := j;
end;
mit := a[j];
{ең кіші элемент өз орнына}
a[i] := min;
{қойылады}
a[el] := mit;
end;
for i:=1 to lens do 
{іріктелген массивті шығару}
write(A[i], ‘ ’);
readln;
END.
Программаның орындалу нәтижесі:
55  58  58  2  22  80  56  70  39  77
2  22  39  55  56  58  58  70  77  80
Ұсақтап бөлу арқылы тез іріктеу әдісі
Жоғарыдағы   қарастырылған   әдістер   қарапайым   және   қөрнекі 
болғанымен, жылдамдығы жағынан онша тиімді емес. 
82

«Ұсақтап   бөлу   арқылы   іріктеу»   деп   аталатын,   К.   Хоордың 
іріктеу алгортимі көп жағдайда тез жұмыс жасайды. 
Алгоритмнің   негізіне,   массивті   тізбекпен   ұсақтап   бөлу   әдісі 
қолданылады.   Осы   әдісті   іске   асырған   прорамманың   мысалын 
талдайық.
Program  Quck_sort; {ұсақтап бөлу әдісімен өсірілмей іріктеу }
Uses Crt;
Const Count = 20;
M : aarray [1..Count]  of
Byte = (9,11,12,3,19,1,5,17,10,18,3, 19, 17, 9, 12, 20, 20, 19, 2, 5);
Var
I, A : integer;
Procedure QuickS(First, Last : integer);
Var I, J, X, W,L : integer;
Begin
I := First;
{массивтің сол жақ шекарасы–1-ші элемент}
J := Last;
{массивтің   оң   жақ   шекарасы–соңғы 
элемент }
X := M[(First + Last)  div  2]; {массивтің ортасын табу}
Repeat
While M[I] > X  do I := I +1;
While X > M[J]  do J := J +1;
A:+A +1;  {эл-ң алмасу итерациясының санын өсіреді}
If  I <+ J  then
Begin
{элементтердің орнын ауыстыру}
W :=M[i];
M [I] := M[J];
M[J] := W;
I := I+1;
J := J+1;
{әр алмасудан кейін массивтің ағымдық жағдайын шығару}
for L := 1  to Count  do 
Write(‘  ‘, M[L]); 
Writeln(‘Число итераций =’,A);
End;
Until  I > J;
If  First  <   J    then  QuickS(First,   J);   {QuickS  процедуранын 
рекурсивті шақыру}
If  Last   <   J    then  QuickS(I,   Last);   {QuickS   процедуранын 
рекурсивті шақыру}
End;
{іріктеудің аяғы}
83

Begin
{негізгі программаның басы}
ClrScr;
Writeln(‘Исходный массив:’); Writeln;
For  I := 1 to  Count  do 
Write (M[I] :3, ‘  ‘);Writeln;
A := 0;
 QuickS (1,Count);
{QuickS процедуранын  шақыру }
Writeln(‘Отсортированный масив:’); 
Writeln;
For  I := 1  to  Count do  
Write (M[I] :3, ‘  ‘);Writeln;
End.
QuickS  процедурасы   бірінші   шақырылғаннан   кейін   берілген 
массивтің:
9 11 12 3 19 1 5 17 10 18 3 19 17 9 12 20 20 19 2 5
ортасы анықталып (10-шы  элемент),  X айнымалысына  М[10]-ң 
мәні, яғни 18 меншіктеледі. Осыдан кейін массив екіге бөлінеді:
19 11 12 3 19 1 5 17 10 18  және  3 19 17 9 12 20 20 9 2 5 
Ары қарай алмасу мына ережемен орындалады:
Массивтің сол жақ бөлігіндегі элементтерді солдан оңға қарап, 
М[І] >Х  элементі ізделінеді, одан кейін оң жақтағы бөлімін солдан 
оңға қарап М[І]< Х элементі ізделеді.
Массивтің   ортасынан   сол   жақтағы  М[І]>Х   және  оң   жақтағы 
М[І]<Х шарттары орындалып болғанша элементтері алмасады.
Нәтижесінде   екі   бөлімнен   тұратын   массивтің   мына   түрін 
аламыз:
9 11 12 3 19 1 5 17 10 18 3 19 17 9 12 20 20 19 2 5 Число итераций = 1
19 20 12 3 19 1  5 17 10 18 3 19 17 9 12 20 11 9 2 5 Число итераций = 2
19 20 20 3 19 1 5 17 10 18 3 19 17 9 12 12 11 9 2 5 Число итераций = 3
19 20 20 19 19 1 5 17 10 18 3 3 17 9 12 12 11 9 2 5 Число итераций = 4
19 20 20 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 5
Ары қарай рекурсивті сол жақ екіге бөлініп (1-ші элементтен 
6-ға   дейін),   сол   жақтың   элементтерін   іріктеуге   процедура 
шақырылады:
20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 7
20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 8
Сол   жақ   іріктеліп   болғаннан   кейін,   тағыда  рекурсивті 
процедура   шақырылып   тағы   осы   бөлігінің   ортасы   анықталады   да 
элементтердің   алмасуы   орындалады:   Массивтің   түрі   мынадай 
болады:
20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 9
20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 10
84

Сол   жақтың   әр   бөлшектерінде   бір-бір   элемент   қалғанша 
рекурсивті процедура шақырылып іріктелу орындалады.
Одан   кейін   сол   сияқты   оң   жақтың   элементтерін   (7-ден   13-
шіге дейін) іріктеуге тағы рекурсивті процедура шақырылады.
Массивтің   нәтижесінің   кезеңдерінің   тізбекпен   шыққан 
нәтижесінің бейнеленуі:
20 20 19 19 19 18 5 17 10 1 3 3 17 9 12 12 11 9 2 5 Число итераций = 11
20 20 19 19 19 18 17 17 10 1 3 3 5 9 12 12 11 9 2 5 Число итераций = 12
20 20 19 19 19 18 17 17 10 1 3 3 5 9 12 12 11 9 2 5 Число итераций = 13
20 20 19 19 19 18 17 17 10 9 3 3 5 9 12 12 11 1 2 5 Число итераций = 14
20 20 19 19 19 18 17 17 10 9 11 3 5 9 12 12 3 1 2 5 Число итераций = 15
20 20 19 19 19 18 17 17 10 9 11 12 5 9 12 3 3 1 2 5 Число итераций = 16
20 20 19 19 19 18 17 17 10 9 11 12 12 9 5 3 3 1 2 5 Число итераций = 17
20 20 19 19 19 18 17 17 10 9 11 12 12 9 5 3 3 1 2 5 Число итераций = 18
20 20 19 19 19 18 17 17 12 9 11 12 10 9 5 3 3 1 2 5 Число итераций = 19
20 20 19 19 19 18 17 17 12 12 11 9 10 9 5 3 3 1 2 5 Число итераций = 20
20 20 19 19 19 18 17 17 12 12 11 9 10 9 5 3 3 1 2 5 Число итераций = 21
20 20 19 19 19 18 17 17 12 12 11 9 10 9 5 3 3 1 2 5 Число итерадий = 22
20 20 19 19 19 18 17 17 12 12 11 10 9 9 5 3 3 1 2 5 Число итераций = 23
20 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 1 2 3 Число итераций = 24
20 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 1 2 3 Число итераций = 25
20 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 1 2 3 Число итераций = 26
20 20 19 19 19 18 17 17 12 12 11 10 9 9 5 5 3 3 2 1 Число итераций = 27
Берілген   массивтің   элементтері  өсірілмей   іріктелуі   27 
итерацияда орындалғандығын, соңғы А-ң мәнінен көреміз.
85

3.3. ЖИЫНДАР
Типті сипаттау
Жиын  –  белгілі   бір   қасиеттерге   сай   іріктеліп,   біртүтас 
қарастырылатын жүйелі типті мәліметтер тобы. 
Жиындағы   әр   мәлімет  жиынның   элементтері  деп   аталады. 
Жиын   элементтерінің   типі  (базалық  тип)   нақты   типтен   басқа,   жай 
типтердің біріне жатуы тиіс. 
Жиын   элементтерінің   типі   жиынның  базалық   типі  деп 
қарастырылады. Базалық тип аралықпен немесе дараланып беріледі. 
Паскаль   тілінде   өрнектерде  жиынның   элементтері   тік 
жақшаларға алынып  жазылады: [‘a’, ‘b’, ‘c’], [1, 2, 3, 4], [‘a’..’z’]. 
Егер жиында еш бір элемент болмаса, ондай жиын  бос жиын 
болада да, былай [] белгіленеді. 
Жиынның элементтерінің саны оның қуаттылығы деп аталады.
Жиынның   типін   сипаттау   үшін    set,  of  қызметші   сөздері 
қолданылады.
Жазылыуы:
Type <типтің есімі> = set of  <элемент1, ... , элемент n >;
Var  <идентификатор, ...> :< типтің есімі>; 
Немесе
Var  < идентификатор, ...> : set of < элемент1, ...>; 
М ы с а л.  
Type  
Simply = set of  ‘a’..’h’;
Number = set of  1..31;
Var
Pr  : Simply;
N  :  Number;
Letter:set   of  char;   {типтер   тарауында   жарияланбай 
сипатталған}
Мұнда:   Pr     айнымалысы   ‘a’   –дан   ’h’   дейін   латын 
алфавитінің символдарын; 
N  айнымалысы   1..31   диапозон   аралығынан   кез   келген   мәнді; 
Letter кез  келген символды қабылдайды. 
Оларға   сипаттауларына   көрсетілген   жиындарға   кірмейтін 
элементтерден   тұратын   жиынды   меншіктеу   қателік   тудырады. 
Жиынның   элементтер   саны   255–тен   аспауы   керек.   Жиынның   бір 
элементі бір байт орын алады. 
Жиындарға қолданылатын амалдар
Паскальда   жиындарға   нәтижесі   True   немесе   False   болатын 
қатынас ‘=’, ‘<>’, ‘>=’, ‘<=’ және ‘ішінде’ (in) амалдары қолданылады. 
86

Сонымен қатар жиындарға біріктіру (+), қию (*), айыру (-) амалдары 
жүреді.
‘Теңдік’ (=) амалы
Егер екі А және В жиындарының элементтері бірдей болса, онда 
ол жиындар тең деп есептеледі. Элементтердің орналасу реті әр тұрлі 
болуы мүмкін.
Мысалы:
А-ның мәні
В-ның мәні
Өрнек
Нәтиже
[1,2,3,4]
[1,2,3,4]
A = B
True
[‘a’, ‘b’, ‘c’]
[‘c’, ‘a’]
A = B
False
[‘a’..’z’]
[‘z’..’a’]
A = B
True
‘Теңдік емес’ (<>) амалы
Егер екі А және В жиындарының ең болмағанда бір элементі 
өзгеше немесе қуаттылықтары әр түрлі болса, онда ол жиындар тең 
емес деп есептеледі. 
Мысалы:
А-ның мәні
В-ның мәні
Өрнек
Нәтиже
[1,2,3]
[1,2,3,4]
A <> B
True
[‘a’..’z’]
[‘b’, ‘z’]
A <> B
True
[‘c’..’t’]
[‘t’..’c’]
A <> B
True
‘Үлкен немесе тең’ (>=) амалы
A >= B амалының нәтижесі ақиқат (True), егер B жиынының 
элементтері түгелдей A жиынында кездессе, кері жағдайда   нәтиже 
жалған (False) болады.
Мысалы:
А-ның мәні
В-ның мәні
Өрнек
Нәтиже
[1,2,3,4]
[2,3,4]
A >= B
True
[‘a’..’z’]
[‘b’..‘t’]
A >= B
True
[‘z’, ‘x’, ‘c’]
[‘c’,’x’]
A >=B
True
‘Кіші немесе тең’ (<=) амалы
A <= B амалының нәтижесі ақиқат (True), егер A жиынының 
элементтері B жиынында түгелдей кездессе, кері жағдайда   нәтиже 
жалған (False) болады.
Мысалы:
А-ның мәні
В-ның мәні
Өрнек
Нәтиже
[1,2,3]
[1,2,3,4]
A <= B
True
[‘d’..’h’]
[‘z’..‘a’]
A <= B
True
[‘a’, ‘v’]
[‘a’,’n’,‘v’]
A <=B
True
87

‘Ішінде’ (in) амалы
Бұл   амал   қандайда   бір   шаманың   көрселілген   жиында 
кездесетіндігін   анықтайды.   Егер   кездессе   нәтижесі   ақиқат   (True), 
әйтпесе   жалған   (False)   болады.   Әдетте,   бұл   амал   шартты 
операторларда пайдалынылады.
Мысалы:
А-ның мәні
Өрнек
Нәтиже
2
If A in [1,2,3] then …
True
‘v’
If A in [‘a’..’n’] then …
False
X1
If A in [X0, X1, X2, X3] then … True
Ішінде’  (in) амалын қолданғанда, тексерілетін шама және тік 
жақшаға алынған жиын, алдын ала  сипатталмаса да болады. 
Ішінде’  амалы,   көбінесе   шартты   операторларда   қүрделі 
шарттарды ықшамды және көрнекті түрде жазуға пайдалынады. 
Мысалы,  мына оператордағы шартты if (a-1) or (a=2) or (a=3) or 
(a=4) or (a=5) or (a=6) then …  былайша   if a in [1..6]   then…  жазуға 
болады.
Кейде ‘Ішінде’ амалын NOT амалымен қосып былай жазады: X 
NOT in M , бірақ мұндай жазу қате, себебі екі амал қатар тұр. 
Дұрыс жазылу ережесі мына түрде болады: NOT (X in M)
‘Біріктіру’ (+) амалы
Екі   жиынның   қосындысы   осы   жиындардың   элементтерінен 
тұратын үшінші жиын болып табылады.
Мысалы:
А-ның мәні
В-ның мәні
Өрнек
Нәтиже
[1,2,3]
[1,4,5]
A + B
[1,2,3,4,5]
[‘A’..’D’]
[‘E’..‘Z’]
A + B
[‘A’..’ Z’]
[]
[]
A + B
[]
‘Қию’ (*) амалы
Екі   жиынның   қиюы  –   осы   екі   жиында   да   кездесетін 
элементтерден  тұратын үшінші жиын.
Мысалы:
А-ның мәні
В-ның мәні
Өрнек
Нәтиже
[1,2,3]
[1,4,2,5]
A * B
[1,2]
[‘A’..’Z’]
[‘B’..‘R’]
A * B
[‘B’..‘R’]
[]
[]
A *B
[]
‘Айыру’ (-) амалы
Екі жиынның айырымы – екінші жиында кездеспейтін бірінші 
жиынның элементтерінен  тұратын үшінші жиын.
88

Мысалы:
А-ның мәні
В-ның мәні
Өрнек
Нәтиже
[1,2,3,4]
[3,4,1]
A – B
[2]
[‘A’..’Z’]
[‘D’..‘Z’]
A – B
[‘A’..‘C’]
[X1,X2,X3,X4] [X4,X1]
A – B
[X2,X3]
Екі   жиынға   қолданылатын   амалдардың   нәтижесін   екі 
төртбұрыштың   бөліктерін   бояу   арқылы,   көрнекті   түрде   көрсетуге 
болады.
1-ші 
есеп: Латын әріптерінен тұратын, нүктемен аяқталатын тізбекте а, е, с, 
һ әріптері нөше рет кездесетінін табатын программа қүрайық.
Program Upr1;
Vаг  N : integer;
S : string;
Begin  
Read(S);  N:=0;  i:=1; 
While  S[i]<> ‘.’  Do
Begin  {кезекті символдың осы жиында жатқанын тексереді}
If  S[i]  in  [a, e, c, h]  then  N:= N+1;
I := i+1;
End;
Write(N);
End.
2-ші   есеп:  100  натурал   санына   дейінгі   барлық   жай   сандарды 
табуға арналған программа құрайық.
Бұл   программаны   Эратосфен   торы   деп   аталатын   алгоритмді 
пайдаланып қүрайық. 
2-ден-100-ге дейінгі бүтін сандарды ретімен   жазамыз. Бірінші 
жай   сан   2,   оны   қалдырып,     оған   еселі   сандарды   алып   тастаймыз. 
Қалған сандардың біріншісі 3, ол жай  caн,  оны да қалдырамыз және 
енді   3-ке   еселі   сандарды   алып   тастаймыз,   4   саны   алынып 
қалғандықтан,   қалған   сандардың   біріншісі   5,   ол   жай   сан,   оны   да 
қалдырып, 5-ке еселі сандарды алып тастаймыз т.с.с..
Program Upr2;
Const N=100;
Type SETT = Set  of  2..N;
Var  N, Nl, N2 : integer;  S, P : SETT;
89
Біріктіру
Қию
Айыру

Begin 
S:=[2..N]];  P:=[1];  N2:=2;
While S <> []   Do 
{S – жиыны босағанша қайталаймыз}
Begin
N1   :=   N2;{S-тен   кезекті   жай   санға   еселі   сандарды   алып 
тастау}
While  N1<= N   Do
Begin 
S:= S- [N1];   N1 := N1+N2;
End;
P :=P+[N2]; 
{P
 жийынына 
жай   сандарды 
жинақтау}
Repeat
{Кезекті жай санды анықтау}
N2 =N2+1; 
Until   (N2  in  S)  or  (N2>N)
End;
for  N1 :=1 to N do 
{жай сандарды экранға шығару}
If   N1  in  P then Write (N1);
End.
Бақылау сұрақтары
1. Паскальда жиын қалай беріледі?
2. Жиынның базалық типі қандай тип бола алады?
3. Жиынның программалауда алатын орны қандай?
4. Паскальда жиынның элементтер саны 256-дан аспау керек, 
не себептен осы сан алынған?
5. Қандай жиын бос деп аталады, қалай белгіленеді?
6.
ішінде’  амалы   не   үшін   қолданылады   және   қолдану 
ерекшеліктері?
Есептер
1.
M1(1..10) және M2(20..30 жиындарын сипаттаңыздар.
2. Орыс және латын әріптерінен тұратын R және L жиындарын 
сипаттаңыздар.
3. А   жиынының   элементтер   санын   анықтайтын   тиімді   тәсіл 
қарастырыңыз. Оған қандай қосымша деректер қажет?
4.
А жиынының элементтерінің базалық типі  X,  олар   аралық 
типпен   берілген.   Осы  жиынның  элементтер   санын   анықтайтын 
функция жазу керек.
5.
Базалық   тип  X  болатын   А   және   В   жиындары   берілген. 
a) A+В, б) A–В, в) A*В жиындарының элементтер санын анықтайтын 
функцяя қүрыңыз.
90

6. Базалық  типі  белгілі   және  элементтері   аралықпен  берілген 
жиынның  элементтерін  шығаратьн процедура жазыңыз.
7. Ойыншы 1-ден 36-ға дейінгі кез келген алты санды атайды. 
Осы сандарды бір жийынға жинап, нәтижесін шығаратын процедура 
қүру   керек.   Ойыншы   қателесіп   бір   санды   қайта   немесе   аралықта 
жатпайтын сан атаса, процедура экранға сәйкес хабар берсін.
8.
Cпортлото  ойынының   (1-ден   36-ға   дейін)   натижесін 
сараптайтын   (неше   сан   дұрыс   аталғанын   табатын)   программа 
жазыңыз:
а) ұтыс цифрларының жиыны алдын ала белгілі болсын;
б) ұтыс цифрлары программада кездейсоқ анықталсын.
9. Берілген   жодда   дауысты   және   дауыссыз   дыбыстардаң 
қайсысының саны көп екендігін анықтайтын программа жазыңыз.
10.
type   at  =   (‘нан',   'сүт',   'май',   'ет',   'балық',   'тұз',   'ірімшік’, 
‘шұжық’, ‘қант’, ‘шәй’);
t = set of at; 
dk = array [1..20] of  t; типтері жарияланған; dk типті массивтегі 
мәліметтер бойынша: 
а) барлық дүкенде бap; 
б) ең болмағанда бір дүкенде бар;
в) еш дүкенде жоқ азық-түліктерді табатын программа жазу 
керек.
91

3.4 ЖАЗБАЛАР
Типті сипаттау
Алдыңғы  тарауларда   тек   бір   типті   компоненттерден   тұратын 
жүйелі   типті   мәліметтердің   түрлерімен   таныстық.   Программалауда 
қандай   да   бір   объектіге   қатысты   әр   түрлі   мәліметтерді   жинақтап 
қарастыру   жиі   кездеседі.   Ол   үшін   Паскальда   жүйелі   типті 
мәліметтердің басқа түрі – аралас типті мәліметтер қолданылады. 
Жазба  –  деп компонентерінің саны бекітілген құрама  немесе 
бір типті құрылымданған  мәліметтерді айтады
Мысалы,   студенттер   туралы   мәліметтерді   (аты,   фамилиясы, 
туған   жылы,   мекен-жайы   т.б.)     бір   топқа   біріктіріп,   жазба   түрінде 
қарастыруға болады.
Жазба   компоненттерін  өріс  деп   атайды.   Жазбаны   сипаттау 
Record қызметші сөзінен басталып, End қызметші сөзімен аяқталады, 
араларына өрістерінің идентификаторлары мен  типтері келтіріледі .
Жазылуы:
Type <типтің  аты> = Record
<1-өрістің идентификаторы > : <1-ші өрістің типі >;
<2-өрістің идентификаторы > : <2-ші өрістің типі >;
...
End;
Var <жазбалардың атаулары> : <типтің  аты>;
Мысалы:
Type T = Record
N : integer;
{реті}
FIO :  string[20];
{аты-жөні}
GodR  :  string[40];
{туған жылы}
Gr : string[60];
{тобы}
End;
Var
Student, U : T;
Мұнда  Student  және  U  айнымалылары  T  типті төрт өрістен:  N 
(реті),  FIO  (аты-жөні),  GodR  (туған   жылы),  Gr  (тобы)   тұратын 
жазбалар. 
Жазбаны   тұтасымен   типі   сәйкес   келетін   басқа   жазбаға 
меншіктеуге болады, мысалы U := Student.
Жазба  өрістерінің   мәндеріне   өту   үшін   жазба   типті 
айнымалының  және өрістің аттарын қоса көрсету керек. 
Мысалы:  Student   жазбасының   өрістеріне   өту   былайша 
жазылады:  Student.N,  Student.FIO, Student. GodR, Student.T. 
92

Бір студент туралы мәліметтерді экранға шығаратын программа 
үзіндісін көрсетейік:
...
Student, N := 1;
Student. FIO := ‘Оспанов. Р.А’;
Student. GodR:= ’05.11.72’;
Student. Gr:= 21;
Write(Student.N:3,   Student.  FIO:15,  Student.  GodR:9,   Student. 
Gr:3);
...
Бул  мысалда  өріc  санына  сәйкәс  Student  идентификаторын 
бірнеше   рет   жазуға  мәжбүр  болдық.  Осы   ыңғайсыздықтан   құтылу 
үшін Паскальда арнайы With операторы колданылады. 
Жазылуы:   
With <жазба тіпті айнымалы>   Do   <оператор>;
Жазба тіпті айнымалы With операторында бір рет көрсетіледі де 
осы   операторға   кіретін   басқа   операторларда   қайталанбайды,   тек 
қажетінше   өрістері   ғана   көрсетіледі.   Жоғарыдағы   мысалды  With 
операторының көмегімен жазайық.
With  Student  do 
Begin   N := 1;
FIO := ‘Оспанов. Р.А’;
GodR:= ’05.11.72’;
Gr:= 21;
Write(N:3, FIO:15, GodR:9, Gr:3);
End;
Паскальда   жазбалар   массивтердің   элементтері   бола   алады.   30 
студенттің аты-жөнінен (FIO) тұратын  массивтің сипатталуы: 
Type T = Record
N : integer; 
FlO : string[20];
End;
Var Тizm : Array[l..30] of  T;
1-ші   есеп:  Студенттер   туралы   мәліметтерді   массив   етіп, 
компьютер   жадана   жазып,   кесте   түрінде   экранға   шығаратын 
программа жазайық. 
Program MStud1;
Type  T =  Record
N: integer;
FIO : string [20];
GodR : string [10];
93

Gr : integer;
End;
Var  n, i :integer; 
Tab : array[l..40]  of  T; 
{Tab – жазбалар массивы}
Begin
Wrlte (‘Число студентов =  ’);   Readln (N); 
For i := 1  to n  do 
With Tab[i]  do
Begin
Write (‘№ п.п’);  Readln(N); 
Write (‘Ф И О’);  Readln(FIO); 
Write (‘Год рождения’);  Readln(GodR); 
Write (‘Группа’);  Readln(Gr);
End;
for i:= 1 to n do 
Begin
With Tab[i]  do
Writeln (‘|’, N:4, ‘|’, FIO:15, ‘|’, GogR:10, ‘|’, Gr:4, ‘|’, );
End;
Readln
End.
Сатылы жазбалар
Паскальда жазбалар сатылап та орналаса алады, яғни жазбаның 
кейбір өрістері жазба және олардың өрістерінің қайбірі тағы да жазба 
т.с.с.  болуы  мүмкін.  Айталық,   жоғарыда  келтірілген  Student 
жазбасының  FIO  өрісі үш өрістен (фамилиясы (F),  аты (І),  әкесінің 
аты   (О),   T  өрісі  екі  өрістен     мамандыгы   (S),   тобы   (Gr))   тұратын 
жазбалар болсын, Онда Student  жазбасын былайша сипатталады: 
Var Student: Record
N: integer; 
FIO: Record
F: string[20]; 
I: string[20];
O: string[20];
End;
GodR: string[10];
T: Record
S: string[20]; 
Gr: integer[3]; 
End
End;
94

Student жазбасын схема түрінде келтірейік:
Ескерту:  Паскаль жүйесі қазақ шрифтін қолдамайтындықтан, 
өріс аттары орысша берілді. 
Жазбалардың   кейбір   өрістері   массивтер   де   болуы   мүмкін. 
Мысалы,  студенттердің  сессияда  алған  бағалары  туралы мәліміттер 
үш   бөліктен   тұрсын:   аты-жөні  (FIO)   –   String   [20];   бағалары   –төрт 
элементтен   тұратын   массив   O   –   array[1..4];   орта   бағасы   SO   –   Real 
типті. 
Осы мәліметтер жүйесін схема түрінде көрсетейік:
Жүйеге сәйкес жазба (Sesst) төмендегідей сиппаталады:
Var
Sesst  Record
N integer;`
FIO: string[20];
O: array[1..4]  of   integer;
SO: real;

2-ші   есеп:  Бір  топ  студенттердің  сессиядағы  бағаларын 
компьютерге  жазып,  кесте  түрінде   экранға  шығаратын  программа 
жазалық. 
Program Sess;
Type Sesst = Record 
N: integer 
FIO: string[20]; 
O: array[1..4]  of   integer;
SO: real;
95
Студент (Student)
№ п.п (N)
Ф И О  (FIO)
Год рожд. (GodR)
Группа (T)
Имя (I)
Фамилия (F)
Отчество (O)
Специальность(S)
Группа (Gr)
Студент (Student)
№ п.п (N)
Ф И О  (FIO)
Оценки (O)
Группа (T)
Оценка1(O(1))
Оценка2(O(2))
Оценка3(O(3))
Оценка4(O(4))
Средняя оц. (SO

End
Vаг  n, i,j : integer;
Tab : array[l..30]  of  Sesst; 
{Tab – жазбалар массивы}
Begin
Wrlte (‘Сколько студентов’);   
Readln (N); 
For  i:=1  to  n  do 
With Tab[i]  do 
Begin 
SO := 0;
Write (‘Номер  ’);   Readln(N);
Write (‘ФИО    ’ );  Readln(FIO);
For j := 1  to 4  do
Begin
Write (‘оценка предмета  ’, j);
Readln (O[j]);
SO
:= 
SO
 + O[j];
End
SO
:= 
SO
/4;
End
for i:= to n do 
With  Tab[i]  do 
Begin
Write (‘|’, N:4, ‘|’, FIO:20, ‘|’ );
For j:= 1  to 4 do 
Write(O[j]:2);
Writeln (‘|’, SO:4,’ | ’);
End;
Readln
End.
Бақылау сұрақтары
1.
Жазбаны 
құрама типті деректер деудің себебі қандай? 
2. Жазбаның массивтен негізгі өзгешеліктері қандай?
3. Жазбаның өрісі деген не?
4. Өрістердің мәндерін қалай падаланамыз?
5. Өрістердің   идентификаторы   қай   аралықта   қайталанбау 
керек?
6.
With  операторы не үшін қажет?
Есептер
1. Келесі жазбалардың схемасын сызып, Паскальда анықтаңыз. 
Әр жазбада неше өріс бар екендігін табыңыз:
96

1) кішігірім кітапханада әрқайсысының саны 10-нан аспайтын 
әдеби   және   техникалық   кітаптар   бар.   Каталогта   әр   кітаптың   аты, 
авторы, индексі, шығарылған уақыты және беттерінің саны берілген;
2)
қандай да бір клубтың 30 мүшесі бар, әркайсысының   аты-
жұні, мүшелік реті және саны бестен аспайтын, айналысатын қызығу-
шылықтары атымен жане оған деген ынта көрсеткішімен берілген.
2.
Баспаға   жазылушылар   туралы   мәлімет   төмендегі  Gazh 
жазбасында келтірілген, мұнда: FIO – аты-жөні,  Add  – мекен-жайы, 
Index –  индексі, Naz: – жазылымның аты,  dGazh –  жазылу мерзімі. 
Осы жазбаның схемасын сызыңыз.
Type F  = Record
F : string [10] 
I :  string [10] 
O : string [10]
end; .    ,
Data = Record
d1: string[8] 
d2 : string[8] . 
end
Var   Gazh = Record
FIO : F; 
Add : string[20];
Index : string[8];
Naz : string [30];   
dGazh : data;
End.
1)
төмендегі мәліметтерді Gazh жазбасына енгізетін  программа 
үзіндісін жазыңыз: 
480011,  Павлодар улица Абая 81/45
025395,  Жалын,  01.01.05 – 30.06.05
2)
а   пунктіндегі   анықталған   типтердің   бәрін  Type  тарауында 
жариялау арқылы анықтаңыз. Жаңа тәсіл мәліметтерді оқуға әсер ете 
ме? 
3)
программаны 50-ден аспайтын жазылушылардың мәліметте-
рін өңдей алатындай етіп жазбаны өзгертіңіз.
3.
Келесі   есептерде   мәліметтерді   ыңғайлы   түрде   дайындау 
тәсілдерін (массив, жазба, т.б.) ұсыныңыз:
1) саны белгілі бүтін  сандардың арифметикалық ортасын табу 
керек; 
2) 50 заттың тізімі берілген, осы тізімде қайталанған заттар бар 
ма?
97

3)
фирма   кызметкерлеріне   жалақы   беру   тізімін   жасау   керек. 
Тізімде келесі мәліметтер көрсетілсін: аты-жөні, мекен-жайы, жылдық 
кіpic, балалар саны;
4) бес   емтихан   нәтижесі   бойынша   студенттер   тізімін   қүру 
керек;
5)
бір студенттің орта бағасын табу керек;
6)
компьютер  жадына  бір   студенттің  аты-жөнін,  бағаларын 
және орта бағасын енгізу керек;
7)
жоғарыдағыдай 50 студенттің мәліметтерін еңгізу керек;
4.
Жоғарыдағы 2-ші жаттығуда көрсетілген жазбалар массивін 
пайдаланып,   төмендегі   тапсырмаларды   орындайтын   программа 
құрыңыз:
1) жазушылар туралы мәліметтерді оқу және экранға шығару;
2) почталық индексі бойынша жазылушыларды анықтау;
3) жазылу мерзімі берілген уақытта аяқталатын жазушыларды 
табу;
5. Әр жолаушының жүгіндегі заттардың саны жалпы салмағы 
белгілі.   Жолаушылардың   жүктері   туралы   мәліметтерді   массивке 
жазып, сол массивтің көмегімен төмендегі есептерді шығарыңыз:
1)
 
Ә
р   затының  opта  салмағы   мен   заттардың   жалпы   орта 
салмағы   арасындығы   айырмашылық   0,3   килограммнан   аспайтын 
жүкті табу керек;
2) жүктері   екі   заттан   артық   жолаушыларды   және   заттардың 
саны, заттардың жалпы орта санынан артық болатын жолаушыларды 
табыңыз;
3)
заттар   саны   бірдей   және  жүктерінің   салмақтарының 
айырымы 0,5 кг. аспайтын жолаушыларды табыңыз;
4)
жүгінің   заттар   саны   мен   салмағы   басқа  жолаушылардың 
жүктерінің  заттар саны мен салмағынан артық болатын жолаушыны 
анықтаңыз;
5)
салмағы   30   кг.   аспайтын   бір   заты   бар   жолаушыны 
анықтаңыз;
6)
заттар саны ең көп жолаушылардың ішінен жүгінің салмағы 
ең аз болатын жолаушыны анықтаңыз;
6. Экспортқа   жіберілетін   заттардың   аттары,   қай   елге   және 
қанша   дана   жіберілетіні   туралы   мәліметтерді   массивке   жазыңыз. 
Заттардың қай елдерге жіберілгендігін және барлығы қанша екендігін 
табу керек.
7. Коэффициенттері   комплекс   сандар   болатын   квадраттық 
теңдеудің түбірлерін табатын программа құрыңыз.
98

3.5. ФАЙЛДАР
Файл  деп   –   сыртқы   сақтау   қүрылғысында   белгілі   бір   атпен 
жазылған информацияны айтады. Кез келген файлдың үш айырықша 
ерешеліктері  бар. 
Біріншіден, файлдың аты болғандықтан, программа бір уақытта 
бірнеше файлдармен жұмыс жасай алады. 
Екіншіден, файл бір типті элементтер тізбегінен тұрады. Турбо 
Паскальда     файл  элементтері    кез  келген   типі  болуы   мүмкін 
(файлдық типтен басқа).
Үшіншіден, файлдың ұзындыған шектеу жоқ, тек сыртқы жад 
құрылғыларының көлемі көтерсе болғаны. 
Файлдық типтер және айнымалылар
Файлдық типті мына үш әдістің біреуімен беруге болады:
< аты>  =  File  of  <типі>;
{типі анықталған файл}
<аты >  =  TEXT;
{текстік файл}
< аты >  =  File;
{типі анықталмаған файл}
мұндағы:   <аты > – файлдық типті (дұрыс идентификатор); 
File,  of  қызметші сөздер (файл, одан (из));
<типі> – Турбо Паскальдің кез келген типі (файлдардан басқа). 
TEXT – стандартты типті текстік файлдардың аты;
Файлдық типтердің синтаксистық диаграммасы  мынадай:
Файлдың   программада  Var   бөлімінде сипатталу форматы
Var  
<идентификатор> : file   of  <элементтердің негіздік типі>;
Мысалы
Var  
F1 : file   of   Ineger;
{F1- бүтін типті файл}
 file   of   Char;
{M- символдық типті файл}
Файлдың программада  Type  бөлімінде сипатталу форматы
Type 
<типтің аты >  file  of  <элементтердің негіздік типі>;
Var  
<идентификатор> : <типтің аты>;
Мысалы 
Type 
File_Integer = file of  integer;
File_Char  = file of  char;
Fm = array[1..n]  of real;
Var
99
file
of
типі

F1 : File_Integer; {F1файлының   элементтері   бүтін 
сандар}
F2 : File_Char;
{F2 файлының элементтері символдар }
F3 : Fm;
{F3 файлының элементтері массивтер}
Ескерту:  Төменгі мысалдарда  <идентификатор> параметрі  F  –
пен белгіленеді де файлдық айнымалы деп аталады. 
Типі анықталған файлдардың элементтері ортақ атпен аталады, 
ал әр элемент жеке нөмірленеді. Бастапқы элемент 0-ден басталады.
Файлдардың элементтеріне өту файлдың  көрсеткіші  (буферлік 
айнымалы) арқылы жүзеге асырылады. 
Әбір уақытта файлдың бір элементі ғана іске қосылады. Әр оқу 
немесе  жазу  нәтижесінде  ағымды   көрсеткіш    келесі   элементке 
жылжиды. 
Оны графикалық түрде былай бейнелеуге болады:
Сол   себепті   оқу   (жазу)   процедураларында   буферлік 
айнымалының   мәні  файлдың   элементтері   типтес   басқа   айнымалыға 
меншіктеледі.
Көбінесе   файлдың   элементтерін   жазбалар   (record)   құрайды. 
Мысалы, студенттер туралы мәліметтерден: реті – N, аты-жөні – FIO, 
тобы – Gr  тұратын файлдың сипаттауын келтірейік:
Type  GF = file of   record
N : integer;
FIO : string[20];
Gr  : real;
End;
Var   Fstudent : GF;
Student : record
N : integer;
FIO : string[20];
Gr  : real;
End;
Жазбалардан тұратын файлды жоғарыда көретілгендей сипаттау 
файлдың   әр   жазбасының   мәнін   қабылдауға   қажетті   айнымалыны 
жазба етіп қайта сипаттауды талап етеді. Сондықтан жазба файлдарын 
былайша сипаттау көрнекті де тиімді:
100
элемент 0
элемент 1
...
элемент k
элемент k+1
Файл
көрсеткіш

Type  GF = record
N : integer;
FIO : string[20];
Gr  : real;
End;
Var   Fstudent : file of   GF;
Student : GF;
Мұңдағы  Fstudent  студенттер   туралы   мәліметтер   жазылатын 
файл,  Student  файдың жеке элементін пайдалану мүмкіндігін беретін 
жазба.
Сыртқы файлды программамен байланыстыру 
Программада   пайдаланатын   және   жаңадан   құрылатын 
файлдардың   дисідегі   орнын   анықтайтын,   арнайы   сыртқы   атаулары 
міндетті түрде көрсетілуі тиіс. 
Турбо   Паскаль   тілінде  файлдық   типті   айнымалыны  сыртқы 
магниттік   дискіде   орналасқан   нақты   файлмен  байланыстыратын 
Assign процедурасы қолданылады. 
Форматы:  
Assign(<F>,  < Name >);  
мұндағы  F  –   программада   файлдық   тип   деп   хабарланған, 
файлдық айнымалының  аты (дұрыс идентификатор);
Name  –   файлдың   толық   атын,   сыртқы   құрылғыдағы   орнын 
көрсететін, текстік өрнек. 
Мысалы:  Assign (F, ‘D:\mydir\myfile.doc’);
бұл   процедура орындалу нәтижесінде, файлдық айнымалы F, 
түпкі   каталог   D   дискісінде   орналасқан   myfile.doc   файлымен 
байланыстырылады.
Ескерту: егер файл аты бос жол түрінде берілсе: 
Assign(,   <‘’>),   онда   мәліметтердің   алмасу   бағытына 
байланысты,   стантартты  INPUT    немесе  OUTPUT    файлдарымен 
байланысады.
Турбо Паскаль тілінде, файлды  оқу  үшін,  жазу  үшін, және де 
бір уақытта оқу  және жазу  үшін ашуды ұйымдастыруға болады.
Файлдан оқу
Файлдан   оқу   деген   дискіде   жазылған,   сыртқы   файлдан 
компьютердің жедел жадына деректерді енгізуді айтады.
Программада   файлдан   оқуды   ұйымдастыру   үшін   мына 
процедура қолданылады:
Reset ();  
мұндағы F параметрі, кез келген типтіфайлдық айнымалы;
Файлды стандартты ашу мысалы:
101

Assign (F,   ‘myfile.doc’);
Reset (F);
Reset   процедурасы   орындалғанда   дискідегі   файл   немесе 
логикалық   диск,   информацияны   оқуға   дайындалады.   Нәтижесінде 
арнайы   ағымдық   көрсеткіш-айнымалысы,   файлдың   басына   барып  0 
элементін нұсқайды (схеманы қараңыз).
Егер жоқ файлды оқуға әрекет жасалса, онда операциялық жүйе 
қате туралы өзіне кірістірілген   IORESULT функциясының 0-ге тең 
емес WORD типті мәнін программаға жібереді.
Мысалы,   келесі   програманың   фрагменті,   дискіде   керекті 
файлдың бар немесе жоқ екенін анықтайды:
 Var
F : file of  char;
Begin
Assign (F,’myfile.dat’);
{ŚI-}
{Отключаем контроль ошибок ввода-вывода}
Resey(F);
{ŚI+}
{Включаем контроль ошибок ввода-вывода}
If  IOResult  <> 0  then
…….
{Файл не существует}
Else
…….
{ Файл существует }
End.
Файлға жазу
Файлға   жазу   деген   жедел   жадыдан   программаның   орындаған 
нәтижесін дискіге шығаруды, яғни сыртқы құрылғыда жаңа файлды 
құруды айтады.
Программада   файлды   жазуды   ұйымдастыру   үшін   мына 
процедура қолданылады:
Rewrite();  
Мұндағы,   F  файлдық  айнымалы.   Процедура   орындылғанда  F 
айнымалысымен байланысқан файл ашылып, жазуға дайындалады. 
Мысал:  Мәтіндік   Work.txt   атты   файылын   құруға   арналған 
толық командалар тізбегін жазайық:
Var  
F : text;
Begin
Assign (F,   ‘Work.txt ’);
Rewrite(F);
Write (F,  ‘Простой текстовый файл’);
102

Close (F);
End.
Файлды толықтыру
Бұрын   жазылған   текстік   файлды   ашып,   толықтыру   үшін 
стандартты Append процедурасы қолданылады:  
Append ();  
Процедура орындылғанда, ағымды көрсеткіш файлдың соңына 
орналасып, текстік файлға жаңа жолдар қосу мүмкіндігін береді.
Файлдардық процедуралар және функциялар
Close   ()  –   процедурасы   ашылған   файлды   жабады.   Бірақ 
процедура   орындалғанда,   Assign   жасаған,  файлдық  айнымалымен 
сыртқы  файл арасындағы байланыс жойымайды.
RENAME   (,   <жаңа   аты>)  –   процедурасы   файлдың   атын 
өзгертеді.   Мұндағы   <жаңа   аты>   –   файлдың   жаңа   аты   жазылған 
жолдық өрнек. 
ERASE () – процедурасы жабылған файлды жояды. 
Eof()   :   Boolean  –   логикалық   функциясы   файлдың   соңын 
табады. Егер F файлының элементтері түгелімен оқылып,  көрсеткіш 
файлдың соңында тұрса,  фунцияның мәні True, әйтпесе False болады.
Төмендегі программа үзінділерінде файлдарға мәліметтер жазу 
және оқу жолдарын көрсетейік:
Rewrite(F);  For  i:= 1  to 100  do
Begin j := sqr (F); Write (i,j)  end;
мұнда алғашқы 100 натурал сандардың квадраттары F файлына 
жазылады;
Reset(F);  s := 0;  While  not(eof)  do
Begin  read (F,t);  s :=sqrt(t) + s  end;
мұнда   циклдік   оператор  F  файлының   элементтерін   біртіндеп 
оқып,   олардың   квадраттарының   қосындысын   көрсеткіш   файлдың 
соңына шықанша есептейді.
1-ші есеп:  Бірде де біреуі 0-ге тең емес бүтін сандар файлын 
Dan1.Dat атымен құрайық.
Шешімі:  Ең   алдымен   Assign   процедурасымен   файлдық 
айнымалыны,  нақты   файлмен   «байланыстырайық».   Жазу   үшін- 
Rewrite процедурасымен файлды ашамыз. 
0-ді   енгізу   –   сандарды   енгізудің   аяғы   болады.   Сондықтан 
программа мынадай түрде құрылуы мүмкін:
Program Examp_1;
Var F: File  Of  Integer;
Begin
103

Assign(F, ‘a:dan1.dat’);  {сыртқы файлмен байланыстыру}
Rewrite(F);
{жазу үшін файлды ашу }
Writeln(‘конец ввода чисел-0’)
Repeat
{0 болғанға дейін }
Writeln(‘’)
Readln(n);
{санды клавиатурадан енгізу}
{егер енгізілген сан 0-ге тең емес болса, онда оны F}
{файлының сол жолына жазылады}
If  n <> 0  Then  Wtite(F, n);
Until  n = 0;
{егер 0 енгізілсе, файлға жазу}
{аяқталады}
Close(F);
{файлды жабу}
End.
2-ші есеп: Студенттер туралы мәліметтерді файлға жазып, кесте 
түрінде экранға беретін программа құру керек.
Программаны   мәліметтерді   файлға   жазу   (Fwrite),   файлдың 
элементтерін  оқып,  өңдеу (Fread) процедураларын құрып, қажетінше 
біреуін таңдайтындай етіп жазайық.
Program Fstudent;
Type  G =  Record
N: integer;
FIO : string [20];
Gr : real;
End;
Var  Fstudent : file of  G; 
Student  : G;  i : integer;
Procedure  Fwrite; 
{файлға мәліметтер жазу прцедурасы-}
Begin 
{нан шығу шарты: R=9999}
Rewrite (Fstudent);
With  Student  do
While  true  do 
Begin
Write (‘Номер  ?’);  
Readln(N); 
If  R=9999  Then Begin  
Close(Fstudent);  Exit  
End;
Write (‘Ф И О   ?’);  Readln(FIO);
Write (‘Группа   ?’);  Readln(Gr);
Write(Fstudent, Student)
End;
Procedure  Fread; 
{Файлдың элементтерін оқып}
104

Begin 
{экранға шығу процедурасы}
Reset (Fstudent);
With  Student  do
While  not  Eof (Fstudent)  do 
Begin
Read(Fstudent, Student);  
Write(N:4, FIO:20, Gr:4);
End;
Close(Fstudent);
End;
Begin
Assign(Fstudent, ‘A:\ Student.doc’);
Write (‘Запись файла – 1, читать – 2’);  Readln(i);
Case  i  do
1 : Fwrite;
2 :  Fread;
End;
End.
Мәтіндік файлдар
Турбо Паскальда  мәтіндік  файл  деп, ұзындықтары айнымалы 
жолдардың жиынын айтады. 
Мәтіндік файлдар стандартты Text типті файлдық айнымалымен 
байланыстырылады.
Мәтіндік  файл   құрылу   процессінде   әр   жазбаның   (жолдың) 
аяғында  EOLN  (End Of   Line-конец строки), ал әр бір файл аяғында- 
EOF (End Of File-конец файла) арнайы белгілері қойылады.
EOLN-  ASCII кодтау тізбегінен –   #13 (CR)  және  #10(LF);
 EOF- коды #267
Read,   Readln,  Write,   Writeln   –   процедуралары   жазбалармен 
мәлімет алмасуға қолданылады. 
Бұл процедуралардың   файлдық айнымалысы, арқылы  кез 
келген файлды көрсетуге болады. Егер бірінші параметр көрсетілмесе, 
онда   қолданылатын   файл   стандартты   Input   (Output)   файл   болып 
есептеледі. 
Read(, <енгізу тізімі>)
Readln( <енгізу тізімі>)  – енгізу процедуралары символдарды, 
жолдарды, сандарды енгізуді ұйымдастырады.
Мұндағы <енгізу тізімі> – бір немесе бірнеше Char, String және 
сандық типті айнымалылар тізбегі болуы мүмкін.
Write(, <енгізу тізімі>)
105

Write( <енгізу тізімі>) – шығару процедуралары символдарды, 
жолдарды, сандарды текстік файлға шығаруды ұйымдастырады.
Мұндағы   <шығару   тізімі>   –   бір   немесе   бірнеше   Char,   String, 
Boolean және сандық типті өрнектер тізбегі болуы мүмкін.
EOLN()  –  логикалық   функциясы   жолдың   соңын   табады. 
Егер жол соңы табылса True мәнін қайтарады, әйтпесе False.
Мысал:   Example.pas   текстік   файлының   бірінші   жолынан 
ұзындығы алты символ тізбекті оқу керек.
Program Examp_St;
Var
F : text;
St : string[6];
Begin
Assign(F, ‘Example.pas’); {бұл файлың болуы қажет}
Reset(F);
While  not  Eoln(F)  do 
{жолдың аяғын тексеру}
Begin
Read(F, St);
Writeln((‘St =  ‘, St);
{экранға шығару}
End;
Readln(F);
{келесі жолға өту}
Close(F);
{файлды жабу}
End.
Бақылау сұрақтары
1. Жалпы, файл дегеніміз не?
2. Турбо   Паскаль   тілінде   файлды   деректердің   ең   бір   іргелі 
құрылымы деп сануға қандай ерекшеліктері бар?
3. Файлдармен қандай амалдар жасауға болады?
4. Файлды   қалай   жазуға   болады?   Қандай   процедуралар   және 
функцияларды қолданылады?
5. Файлдан оқуды қалай ұымдастырылады? 
6. Қандай процедуралар қолданылады?
7. Файлдық айнымалы не үшін қолданылады?
8. Reset   және   Rewrite   процедураларының   айрмашылықтары 
қандай? 
9.
Close процедурасы не істейді?
10.Логикалық   Eoln   және   Eof   функцияларының   қажеттілігі 
қандай?
11.
Мәтіндік файл дегеніміз не?  Ерекшелігі неде?
12.Мәтіндік файлға қалай жаңа жолдар қосуға болады?
Есептер
106

1. Элементтері нақты сан болып келетін файл құру керек:
1) элементтерінің көбейтіндісін;
2) элементтерінің квадраттарының қосындысын;
3)
модульдерінің   қосындысын   және   элементтерінің   квадрат-
тарының қосындысын;
4) файлдың соңғы элементін.
2. Файлдың элементтері нақты сан болып келген. Табу керек:
1) элементтерінің   ең   үлкен   және   ең   кіші   мәндерінің 
қосындысын;
2) бірінші және соңғы элементтерінің қосындысын.
3. Файлдың элементтері натурал сандар. Табу керек:
1) жұп сан болатын элементтерінің санын;
2) екі еселенген тақ сан болатын элементтерінің санын.
4. Символдық F файлы берілген. Осы файлдың көшірмесін G 
файлына алу керек.
5. Жолдардан тұратын мәтіндік файл берілген. Табу керек:
1) жолдардың санын;
2) бірдей символмен басталатын және аяқталатын жолдардың 
санын;
3) ең қысқа жолдарды;
4) симметриялық жолдарды.
107

Қолданылған әдебиеттер
1.
Фаронов   В.В.  TurboPaskal  7.0.   Начальный   курс.   Учебное 
пособие.– М.: Нолидж, 1998.– 616 с.
2.
Попов В. Б. Turbo Pascal для школьников. Учебное пособие.–
3-е доп. изд. – М.: Финансы и статистика, 2004. – 528 с.:ил.
3.
Зуев   Е.А.   Язык   программирования   TurboPaskal   6.0. –   М.: 
Унитех, 1992.– 298 с.
4.
Қойбағарова   Т.Қ.   Паскаль   тілінің   негіздері.   –   Павлодар: 
2000. – 59 бет.
5.
Грызлов В.И., Грызлова Т.П. Турбо Паскаль 7.0.– М.: ДМК, 
1998.– 400 с.
6.
Бабушкина И.А.,Бушмелева Н.А.,Окулов С.М.,Черных С.Ю. 
Практикум   по   Турбо   Паскалю.   Учебное   пособие   по   курсам 
«Информатика   и   вычислительная   техникаң,   «Основы 
программирования».– М.: АБФ, 1998.– 384 с.
7.
Джонс   Ж.,   Харроу   К.   Решение   задач   в   системе   Турбо 
Паскаль. /Пер.с англ.– М.: Финансы и статистика, 1991.–720 с.
8.
Шаньгин В.Ф., Поддубная Л.М. Программирование на языке 
Паскаль.– М.: Высшая школа, 1991.– 139 с.
9.
Гусева   А.И.   Учимся   информатике:   задачи   и   методы   их 
решения.– М.: Диалог-МИФИ, 1998.– 320 с.
10.
Федорова   Л.П.,   Глухов   Д.Н.   Информатика.   Для   11   кл.   и 
поступающих в вузы.  –  Волгоград: Учитель, 1998.– 69 с.
11.
Петренко Т.Г. Информатика.– Донецк: ПКФ «БАО», 1998.–
96 с.
12.
Бидайбеков   Е.Ы.,   Нұрбекова   Ж.Қ.   Информатика   және 
математикалық   статистика   бастамалары.–   Алматы:   Абай   атындағы 
АлМУ, 1999.– 67 бет.
13.
Абрамов С.А., Зима Е.В. Начала программирования на языке 
Паскаль.– М.: Наука, 1987.– 112 с.
14.
Алдашев   С.А.,   Ахметов   Н.Р.   Информатика   мен   есептеуіш 
техника   терминдерінің   орысша-қазақша   сөздігі.–   Алматы,   Рауан, 
1993.– 176 бет.
15.
Бектаев   Қ.Б.   Орысша-қазақша   математикалық   сөздік.–
Алматы: Мектеп, 1986.– 295 бет.
108

                                                 Т.Қ. Қойбағарова
Turbo Pascal программалау тілі
Оқу-әдістемелік құралы
Басуѓа ќол ќойылды 10.06.2005
Гарнитура Times.
Форматы 
2
1
42
7
,
29
×
 Офсеттiк ќаѓазы.
Кµлемi 3,26 шартты б.т. Таралымы 300 дана.
Тапсырыс № 0027.
Павлодар мемлекеттiк педагогикалыќ институтыныњ
редакциялыќ-баспа бµлiмi
140000, Павлодар ќ., Мир кµшесi, 60
E-mail: rio@ppi.kz
109

Document Outline

  • КІРІСПЕ
  • 1. ТУРБО ПАСКАЛЬ ПРОГРАММАЛАУ ОРТАСЫ
  • 2. ТУРБО ПАСКАЛЬ ТІЛІНДЕ ПРОГРАММАЛАУ
  • БАСТАМАЛАРЫ
    • 2.1. Паскаль тілінің негізгі элементтері
      • Паскаль тілінің алфавиті және атаулар сөздігі
      • Паскальдағы сөздер 
      • Идентификатор 
      • Тұрақтылар және айнымалылар 
    • 2.2. Берілім типтері 
      • Турбо Паскальдағы берілім типтерінің тізбесі
      • Логикалық тип
    • 2.3. Стандартты функциялар
    • 2.4. Амалдар, математикалық функциялар, өрнектер
    • 2.5. Программаның құрылымы
    • 2.6. Енгізу-шығару процедуралары
      • Экранға шығару форматтары
    • 2.7. Қарапайым операторлар 
    • 2.8. Алгоритмдеудің негізгі құрылымдары
    • 2.9. Тізбектеу құрылымды алгоритмдер 
    • 2.10. Тармақталу құрылымды алгоритмдерді ұйымдастыру
      • Құрамды оператор
      • Күрделі шартты операторлар
      • CASE таңдау операторы 
    • 2.11. Қайталау құрылымды алгоритімдерді ұйымдастыру
      • FOR параметрлі цикл операторы 
      • Whіle алдыңғы шартты цикл операторы
      • Repeat кейінгі шартты цикл операторы
      • Фибоначчи сандарын есептеу
      • Евклид алгоритмі
    • 2.12. Процедуралар және функциялар
      • Процедуралар
      • Функциялар
      • Рекурсивті программалау мысалдары
  • 3. ҚҰРЫЛЫМДЫ БЕРІЛІМ ТИПТЕРІ
    • 3.1. ЖОЛДАР
      • Типті сипаттау
      • Жолдық өрнектертер
      • Жолдық процедуралар және функциялар
    • 3.2. МАССИВТЕР
      • Массивті сипаттау
      • Бір өлшемді массивтердің элементтерін өңдейтін стандартты алгоритмдер кестесі
      • Екі өлшемді массивтердің элементтерін өңдейтін стандартты алгоритмдер кестесі
      • Символдық массивтер
      • Іріктеу алгоритмдері
      • «Қалқу» әдісімен іріктеу
      • Сызықты іріктеу әдісі
      • Ұсақтап бөлу арқылы тез іріктеу әдісі
    • 3.3. ЖИЫНДАР
      • Типті сипаттау
      • Жиындарға қолданылатын амалдар
    • 3.4 ЖАЗБАЛАР
      • Типті сипаттау
      • Сатылы жазбалар
    • 3.5. ФАЙЛДАР
    • Қолданылған әдебиеттер


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




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

    Басты бет