9.2 Мәтіндік файлға мәліметтер жазу.
Екі өлшемді массив
Алдыңғы тақырыпта мҽтіндік файлдарды ашуды, оған ақпараттарды
жазуды ҥйреніңіздер. Write()- процедурасын пайдаланып мҽліметтерді бір
жолға, ал writeln()—процедурасын пайдаланып оларды бағанға жазуды кҿрдік.
Осы білгендерімізді пайдаланып, келесі есепті шешіп кҿрелік:
Пернетақтадан, ҿлшемі 100х100, элементтері бҥтін сан болатын, екі
ҿлшемді массив енгізіледі. Осы массивті элементтерінің орналасу реті
бойынша, `МayFile5.in` атымен, мҽтіндік файл тҥрінде жазатын, программа
жазу керек.
Бҧл есеп те, алдыңғы тақырыпта қарастырылған есепке ҧқсас, екі негізгі
кезеңнен тҧрады:
1.Пернетақтадан мҽліметтерді енгізу
2.Оларды атауы `МayFile5.in` болатын, файлға жазу керек.
Бірінші кезеңді орындау ҥшін :
־
Пернетақтадан енгізілетін, массив ҿлшемдерінің нақты мҽндерін кіргізу;
־
Массив ҿлшемдерін біле отырып параметрлі цикл операторын қолданып
массив элементтеріне нақты мҽндерді меншіктеу.
Мҽліметтерді енгізу процедурасының мҽтінін Misal_8 программасынан
алуға болады. Ал мҽліметтерді ҿңдеу процедурасы ҿзгеріссіз қалатындықтан,
Misal_F1программасындағыдай болады.
Массив элементтерін `МayFile5.in` файлына жазу процедурасының
қандай болатындығын қарастыралық:
procedure exi;
var
FileOut: text;
begin
{нақтылы файлмен айнымалы арасындағы байланыс}
assing (FileOut,`mayFile.in`);
{файлды жазуға дайындау}
rewrite(FileOut);
{массив ҿлшемдерiн жазу жҽне курсорды жаңа жолға кҿшiру}
writeln(FileOut, JolSany,``, BaganSany);
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 70-сі
70
for i=1 to JolSany do
begin
{массив элементтерiн бос орын арқылы жолға жазу}
for j=1 to BaganSany do
write(FileOut,San[i,j],``);
{j-циклiн аяақтаған соң, курсорды жаңа жолға кҿшiру}
writeln(Fileout);
end;
{файлды жабу}
close(FileOut);
end;
Негiзгi программа мҽтiнiнiң ҿзгерiсiз қалатындығын айтпаса да болады.
Осы программаны Misal_F5 атымен сактаңыз. Программаны iске қосу ҥшін
алдымен, келесi ҽрекеттердi:
־
Курсорды Exi процедурасын сипаттайтын жолдың басына қойыңыз;
־
Негiзгi менюдi Debug iшкi менюiн ашыңыз;
־
Add brekpoint… әрекетiн тандаңыз;
־
Enter пернесiн басыңыз.
Экранға Add brekpoint… (тоқтату нҥктесiн қосу) сұхбат терезесi
шығады (2.8-сурет).‖Line number‖ (жол нөмері)өрісінде, курсор тұрған
жолдвң нөмірін көрсетіп тұрады, ол Exi процедурасын сипаттайтын
жолдың басын көрсетеді.
־
―Ok‖ батырмасын (сұхбат терезесіндегі) немесе ―Enter‖ пернесін
басыңыз.
Редактор терезесіндегі бұл жол басқа тҥспен бөлінеді. Енді Ctrl+F9
пернелерін басу арқылы программаны іске қосыңыз. Пернетақтадан
бастапқы мәндерді енгізіңіз. Мәліметтерді енгізген соң программа
жұмысын тоқтатады және компьютердің экранында қайтадан редактор
терезесі шығады. Яғни, біз өзіміздің әрекеттеріміз арқылы программа
жұмысын көрсетілген жолда тоқтатуға нұсқау бердік. Жұмысты қайтадан
жалғастырву ҥшін ―Ctrl+F9‖ пернелерін басуымыз керек немесе F7
пернесін пайдаланған тиімді және Exi процедурасының қалай жұмыс
істейтінін бақылап көре аламыз.
Бұл әрекеттер, программаның жеке бөліктерімен жұмыс жасағанда
(жҥріп өткенде) тиімді, себебі ҥлкен өлшемді программаларды толығымен
жҥріп өту жалықтырады және керек емес. Олай болса, программалаудың
құрылымдылық тәсілін (1.5 тақырып) қолдай отырып бізде бары:
1.
Жеке модульдермен ―жҧмыс істеу‖ (программалау) мҥмкіндігі.
2.
Бір деңгейдегі ―ойша‖ машиналардың тҽуелсіздігі, программаның
жекеленген бҿліктерін, программаш\ның басқа бҿліктеріне ҽсер етпей тҽуелсіз
жетілдіруге мҥмкіндік береді. Э. Дейкстр атап ҿткендей: ―... программаны
жетілдіру, бір тҥрдегі (ойша) машиналардың басқа қолайлы машиналарға
ауысуынан туындайды‖.
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 71-сі
71
3.
Қҧрылымдылық программаның жеке бҿліктерімен жҧмыс жасау.
Процедура мҽтінімен жҥріп ҿткенде қҧрама операторлардың жҧмысына
кҿңіл бҿліңіз.
begin
{массив элементтерiн бос орын аркылы жолга жазу}
for j:=1 to BaganSany do
write (FileOut, San[i,j],``);
{j-цикл аякталган сон, курсорды жана жолга кошiру}
writeln(FileOut);
end;
Тоқтату нҥктесін алып тастау ҥшін, келесі ҽрекеттерді орындаймыз:
־
Негізгі менюді бес\лсенділеңіз;
־
Негізгі менюден Debug ішкі менюін ашыңыз;
־
Breakpoints пернесін басыңыз.
־
Enter пернесін басыңыз.
Экранда программаға қойылған барлық тоқтату нҥктелерінің тізімі
кҿһрсетілген, Breakpoints… (тоқтату нҥктелері ) сҧхбат терезесі (2.9-сурет)
шығады.
־
Қажетті элементті белгілеңіз;
־
―Delete‖ (сҧхбат терезесінен) батырмасын немесе ―D‖
(пернетақтадан) пернесін басыңыз.
Белгіленген тоқтату нҥктесі тізімнен алынып тасталады . Егер сіз барлық
тоқтату нҥктесін алып тастағыңыз келсе-- ―Clear all‖ батырмасын басу керек.
9.3 Мәтiндiк файлдан мәлiметтердi оқу
Ҿткен тақырыптарда сіздер, мҽліметтерді мҽтіндік файлға жазуды
ҥйреніңіздер. Енді оларды қайтадан файлдан қалай оқуға болатынын
қарастырамыз.
Ол ҥшін `mayFile1/in` файлын пайдаланамыз. Мҽліметтерді файлға жазу
кезіндегідей, біздің файлмызды байланыстыратын айнымалыға атау беруіміз
керек. Айталық, ол атау Fileln болсын, содан кейін біз оны мҽтіндік файл
ретінде сипаттауымыз керек. Бҧл айнымалыны біз енгізу процедурасында
пайдаланатын болғандықтан, сол процедураның жергілікті айнымалысы ретінде
сипаттаймыз.
var
Filelnt:text;
Одан кейін біз программада, ―мҽтіндік типті ‖ Fileln айнымалысы, біздің
`mayFile1.in` атауымен берілген нақтылы файлмызды белгілейтіндігін
кҿрсетуіміз
керек.
Ол
ҥшін
assing(NameVar,NameFile)-процедурасын
қолданады.
Енді файлдан мҽліметтерді оқу ҥшін, берілген файлды ашуымыз керек.
Ол ҥшін, reset(NameVar)—процедурасында қолданады, мҧндағы NameVar-
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 72-сі
72
сіздің файлды белгілеуге берген айнымалыңыздың атауы, біздің жағдайымызда,
ол 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ру}
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 73-сі
73
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;
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 74-сі
74
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-ден аспайтын мҽтіндік файлдан мҽліметтерді жҽне жазбалар
санын оқитын программа аласыз. Сонымен қатар бҧл программа файлдағы
барлық жазбалар санын анықтап, оны экранда жазады.
Енді екі ҿлшемді массив мҽліметтерін файлдан қалай оқуға
болатындығын қарастырыралық. Жоғарыда айтылғандай мҽліметтерді файлдан
оқу, оның файл соңын анықтайтын белгісіне байланысты екен. Бірақ екі
ҿлшемді массивтерді жазғанда оның элементтері жол бойынша жҽне баған
бойынша жазылады. Сондықтан файлдан мҽліметтерді оқығанда, алдымен
алғашқы жол бойынша файл соңы белгісі анықталады. Жолдағы мҽліметтер
толығымен оқылып болған соң келесі жолды оқуды бастау керек. Мҽтіндік
файлдар қасиеттерін қарастырғанда айтылғандай, онда ҽрбір жол, жол соңы
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 75-сі
75
белгісімен кодымен аяақталады. Осы белгіні анықтау ҥшін стандартты
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;
{файлды жабу}
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 76-сі
76
close(Fileln);
end;
10 Типті файл. Типті файлдарға мәліметті жазу
Келесі есепті қарастырып кҿрелік:
Мҽтіндік файлға тҿрт таңбалы 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(<файл атауы>) – процедурасын файлды жазуға ашады жҽне
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 77-сі
77
курсорды файлдың басына орналастырады.
Типті файлдарға мҽліметтерді жазу 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" файлын ашып кҿріңіз. Не кҿрдіңіз?
10.1 Типті файлдан мәліметтерді оқу
Титі файлдар тікелей қатынау файлдарына жатады, ол оның қатал
ҧйымдастырылғанына байланысты. Бҧрында айтып ҿткеніміздей, типті
файлдың компоненттері біркелкі, қатаң тҽртіптегі кҿлемде орын алады.
Сонымен тҧтас блок бар делік жҽне оған қатынауды ҧйымдастырғанда, оған
олардың орналасуы жайлы қосымша ақпараттарды сақтау қажет емес.
Типті файлдардан мҽліметтерді оқуға арналған негізгі проуедураларды
қарастырамыз.
Типті файлдармен жҧмыс жасар алдында, мҽтіндік файлдардағыдай, файл
атауын жариялау жҽне файлдағы мҽліметтердің типін кҿрсету керек, нақтылы
файл атауын байланыстыратын айнымалы атауын сипаттауымыз кереек (2.8.5
тақырыбын қараңыз).
Reset(<файл атауы>) – процедурасы файлдф оқуға ашады жҽне
кҿрсеткішті файлдың басына орналстырады.
Типті файлдан мҽліметтерді оқу ҥшін read( ) процедурасын қолданады.
ПОҼК 042-11.1.20/03-2014
Баспа №1 кҥні 11.09.2014 ж. 121 беттің 78-сі
78
Берілген процедураның жҧмысы кезінде, блоктан мҽліметті оқыған соң,
кҿрсеткіш автоматтты тҥрде келесі жазбаға ауысады. Егер кҿрсеткіш соңғы
жазбаның соңынан тҧрса, онда программа орындалуында қателік болады.
Бҧл қиындықтан шығу ҥшін 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( ) - процедурасын
қолдануды ескеруіміз керек. Мысалы:
Достарыңызбен бөлісу: |