234
" a "- ( apprnd) толықтыру;
Кейбір жүйеде тексттік және бинарлық файлдар болып жіктеледі, бұл жағдайда
режим жолына "в" (binary – бинарлық) немесе “t”(тексттік) таңбасы тіркеледі.
Файлмен жұмыс жасау барысында қате кездессе, онда fopen функциясы NULL
мәнін қайтарады.
Файлдан оқу - жазу әрекетінің ең қарапайым тәсілі – getc және putc
функцияларын қолдану.
int getc (FILE * fp) - файлға көрсеткіштен тәуелді және файлдан кезекті
литерді қайтарады.
Ал, int putc (int с, FILE * fp) – функциясы с литерін fp файлына жазады және
жазылған литерді немесе EOF мәнін қайтарады (егер қате болса).
Файлға форматтап енгізу – шығару функциялары:
int fscanf ( FILE * fp, char * format,…)
int frint (FILE * fp, char * format,…)
Бұлар scanf және printf функциялары секілді, тек бірінші аргументтері – файлға
көрсеткіш.
Жолдарды оқып – жазуға мынадай функциялар қолданылады:
char * fgets ( char * l, int maxl, FILE * fp);
int fputs ( char * w, FILE * fp)
мұндағы fgets – fp файлынан келесі жолды оқып алып, w литерлер массивіне
орналастырады, көшірілген жол "о" литерімен толықтырылады.
fputs – шығару функциясы жолды файлға жазады.
Мұндағы: w – жол тұрған массив адресі;
maxl – жолдағы символдардың максимум саны;
fp – файл көрсеткіші;
feоf (FILE * fp) – функциясы файлдың соңын анықтайды.
Файлды жабу үшін:
Int fclose(FILE *fp) функциясы қолданылады, яғни файлдық көрсеткішпен
орнатылған байланысты үзеді.
С++ тілінде:
Файлмен мәлімет алмасу мақсатында ifstream және ofstream кластарын
қолданған тиімді. Ол үшін < fstream. h > тақырыптық файлы ашылуы тиіс.
Мұнда, сәйкесінше, ifstream класының объектісі myof және ostream
класының mygf лектері құрылып көрсетілген файлмен байланысады.
Мысалы, Ifstream myof(“prim.in”,ios::in);
Ofstream mygf(“prim.out”,ios::out);
Бір объектімен тізбектеп бірнеше лекті байланыстыру қажет болса, онда ол
төмендегідей ретпен орындалады:
Ifstream myof;
. . .
myof(“prim.in”);
. . .
myof.close();
myof.open (“prim2.in”);
. . .
235
myof.close();
Файлмен мәлімет алмасу мүмкіндігінің режимін өзгерту – файлдық объектінің
сипатындағы екінші аргументін өзгерту арқылы жүзеге асады.
Мысалы, Ofsetream myof ( “prim.in”,ios::app | ios::nocreate); - мұндағы файл бар
болса ғана myof объектісі құрылып, байланыс орнатылады, себебі ios::nocreate
аргументі берілген, яғни файл болмаса, объект құрылмайтынын білдіреді. Ал,
ios::app аргументі файлға шығарылатын мәндер файлдың соңына қосылатынын
анықтайды.
Флаг-аргументтер биттік | - «немесе» амалының көмегімен біріктіріліп
анықтала алады.
Файлдық лекті анықтау барысында қолданылатын аргументтерді анықтайтын
флагтар төмендегідей:
флаг
Мағынасы
ios::in
Файл оқуға ашылады
ios::out
Файл жазуға ашылады
ios::ate
Объект құрылған соң, ағымды көрсеткіш файлдың
соңына орнатылады
ios::app
Мәндер файлдың соңына жазылады
ios::trunc
Егер файл бар болса, ол тазартылады
ios::nocreate
Файл болмаса, онда объект құрылмайды
ios::noreplace
Файл бар болса, онда объект құрылмайды
ios::binary
Файл екілік режимде ашылады (қалыпты жағдайда
тексттік режим)
Файлмен мәлімет алмасу үшін fstream класының объектісі де қолданылады:
Fstream io(“update.dat”, ios::in|ios::app); - бұл жағдайда көрсетілген файл мәліметті
оқуға және жазуға ашылады.
Seekg() файлдан оқу ал, seekp() файлға жазу барысында функциялары файлдың
ағымды позициясының маркерін басқаруға қолданылады.
Мысалы,
io.seekg(5, ios::cur) – оқу барысында маркерді ағымды орынынан 5 байтқа
жылжыту;
io.seekg(-7, ios::end); - маркерді соңынан бастап 7 байтқа жылжыту
керектігін білдіреді.
Аргументтер:
Io::cur – ағымды орынынан; Io::beg – файл басынан;
Io::end - файл соңынан жылжытылатынын білдіреді.
Файлдық лектің күйін анықтау функциялары:
Функция
Түсініктеме
eof()
Файл соңын кездестірсе, 0-дік емес мән қайтарады
fail()
Лекте қате кездессе 0- ден өзге мән қайтарады
bad()
Енгізу-шығару барысында мағыналы қате кетсе, нөлден өзге
мән қайтарады, онда лекпен жұмыс тоқтатылғаны дұрыс. Лек
күйінің биттік мәндері анықталмаса, 0-ге тең емес мән береді.
236
rdstate()
Мына тұрақтылардың бірін, яғнм лектің ағымды күйін
анықтайтын мәнді қайтарады:
Ios::goodbit - қате жоқ
Ios::eofbit – файл соңына жетті
Ios::failbit – форматтау немесе түрлендіру қатесі
Ios::badbit - маңызды қате
clear()
0-ге тең болса тазарту
Файлдан оқу және файлға шығару әрекеттерін қолдану мысалы:
Есеп:
Білім деңгейін тексеруге арналған тестілеу программасын құрыңыз. Мұндағы
тест материалдары тексттік файлда мынадай ретпен берілсін:
Алдыңғы жолда тест сұрағы;
келесі бес жолда сол сұрақтың мүмкін болатын жауаптар нұсқасы;
одан кейінгі жолда дұрыс жауабының нөмірі орналастырылады;
келесі сұрақтар осындай ретпен файлға жазылады.
Тестілеу нәтижесін дұрыс жауаптар саны мен сәйкес алған бағасын
жариялау арқылы хабарлау керек.
Есеп қойылымын нақтылау: Белгілеулер енгізейік:
F – файлдық айнымалы;
Kb – варианттар саны, жалпы жағдайда 5-ке тең;
Sur_san – Файлдағы сұрақтар біткенше оқылып анықталатын сұрақтар саны;
Dur_san – қолданушының жауаптарына қарай анықталатын дұрыс жауаптар саны;
Otb - қолданушы енгізетін ағымды жауаптарын меншіктейтін айнымалы;
Dg – файлдан оқылып анықталатын әр сұрақтың ағымды дұрыс жауабы;
Baga – дұрыс жауаптарының саны арқылы анықталатын баға;
P – дұрыс жауаптардың пайыздық мөлшерін меншіктейтін айнымалы;
Gol – сұрақтар мен варианттарын меншіктейтін ағымды жол айымалысы;
Fname – Тест материалдарынан тұратын файл аты енгізілетін айнымалы.
Математикалық моделі:
P=dur_san *100/sur_san;
жаєдайда
ќалєан
p
егер
p
егер
p
егер
baga
_
,
2
90
56
_
,
3
91
76
_
,
4
91
_
,
5
Есептің программасы (С тілінде):
#include "stdio.h"
#include "conio.h"
#include "string.h"
#define kb 5
void main()
{char fname[40]; FILE* f;
int sur_san=0;
Достарыңызбен бөлісу: |