Энергетика



Pdf көрінісі
бет18/23
Дата07.02.2022
өлшемі1,03 Mb.
#91462
түріПрограмма
1   ...   15   16   17   18   19   20   21   22   23
Байланысты:
is 1

 
 
12 Дәріс №12. Файлдық енгізу-шығару
Дәрістің мақсаты:
файлдық енгізу-шығару кластарын қарастыру. 
Дәрістің мазмұны:
istream, оstream, iostream, оfstream, fstream 
кластарының объектісі. 
Файлдық және консольды енгізу-шығару өте тығыз байланысты. Нақты 
түрде файлдық енгізу-шығару консольды енгізу-шығару сияқты сол кластар 
иерахиясынан қолдау табады. 
Программа өз жұмысын бастаған кезде, төрт ағын автоматты түрде 
инициализацияланады (жүктелінеді) және оларға сәйкес стандарттты 
файлдармен (қондырғылармен) байланысады – бұл cin, cout, cerr және 
clog. Егер басқа ағындарды инициялизациялау және кейбір файлдармен 
байланыстыру керек болса, онда мұны айқын түрде істеу керек. 
Кез келген инициализацияланатын файлдық ағын енгізу ағыны немесе 
шығару ағыны немесе енгізу-шығару ағыны болу мүмкін. Енгізу ағыны бұл 
istream класынан туындаған, istream класының объектісі. Шығару ағыны –
бұл оstream класынан туындаған, оfstream класының объектісі. Енгізу-шығару 
ағыны - бұл iostream класынан туындаған, fstream класының объектісі. Осы 
кластардың әрбіреуінде, класс объектісін сәйкес файлмен біріктіру жұмысын 
орындайтын конструкторы бар. Файлдармен жұмыс істеу үшін кластар, 


46 
ағынды кластардан қайта жүктелген операцияларды ″«″және ″»″, жалауларды 
және форматтау әдістерін, манипуляторларды, ағындар күйін тексеру 
құрылғыларын және тағы басқаны мұрагерленеді. 
Программада файлдарды қолдану келесі әрекеттерді тұжырымдайды: 
1)
Ағынды құру.
2)
Ағынды ашу және оны файлмен байланыстыру. 
3)
Ағынмен алмасу (енгізу-шығару). 
4)
Файлды жабу. 
5)
Ағынды жою. 
Параметрлері жоқ конструкторлар объектті файлмен байланыстырмай 
құрады. Параметрлері бар конструкторлар объект құрады, берілген режимде 
көрсетілген 
аты 
бар 
файлды 
ашады 
және 
файлды 
объектімен 
байланыстырады. Егер үнсіздік бойынша файлды ашу режимінің мәні 
программист үшін қолайсыз болса, онда операция арқылы, ios класында 
анықталған, биттік маскалардан құралған басқа мәнін орнатуға болады. 
Ағынды құрған соң, оны файлмен байланыстыру әдістерінің бірі, 
ағынды кластардың барлық файлдарының мүшесі болып табылатын, open ( ) 
функциясы болып табылады. Егер open ( ) функциясының орындалуы 
қатемен аяқталса, онда бульдік өрнекте ағын false мәніне тең болады. Файлды 
жабу үшін қайтарылатын мәні мен параметрлері жоқ close ( ) функциясы 
колданылады.
Программалаудың негізгі, мынадай аспектілерін бейнелейтін бір 
тәжірибеде маңызды мысалды қарастырайық: ағынды енгізу-шығару;
туынды класс конструкторынан, базалық класс конструкторына параметрлерді 
берген кезде, класс үлгілерін қолдану; динамикалық 
жадыда 
орналастырылған екі өлшемді массивпен жұмыс. Келтірілетін программмада 
аспектілердің тек көрсетілген ерекшеліктері ғана қарастырылады, ал бақылау 
түрлері ескерілмеді.
// Файлдарды ашу/жабу үшін IOFile класын анықтау
Class IOFile : public fstream 
{ public : void open_f(char *filename, int mode ){ open (filename, mode ); 
void close _f(char * filename){ close ( );} 
};
// матрицалармен жұмыс істеуге арналған, базалық кластар үлгісі 
template // T-элементітің жалпы типі 
class Matrix_B 
// класс-«Матрица» - базалық класс 
{ protected: 
T**array; // жолға көрсеткіштер массивінің көрсеткіші 
іnt rows, columns; 
public: Matrix_B (int n, int m);
// конструктор 
Matrix_B (const Matrix_B ©);
// көшіру конструкторы 
~Matrix_B (void); // деструктор 
void ReadMatrix (char*fp); 
// файлдан матрица элементтерін оқу 


47 
}; 
template Matrix_B:: Matrix_B(int n, int m) 

array=new T*[n]; // матрицаға сай жадының динамикалық бөлінуі 
for(int i=0; i<0; i++) array[i]=new T[m]; 
for(i=0; ifor(int j=0; jrows=n; columns=m; 
return; 

// көшіру конструкторы 
templateMatrix_B::Matrix_B(constMatrix_B©) 
{ array=new Т*[copy.rows]; 
for(int i=0; iarray[i]=new Т[copy.columns]; 
for( i=0; ifor(int j=0; jarray[i][j]=copy.array[i][j]; 
rows=copy.rows; columns=copy.columns; 

templateMatrix_B::~Matrix_B(void) 
// деструктор 
{ for(int i=0; idelete [] array; 

// берілген файлдан матрица элементтерін оқу 
templatevoid Matrix_B::ReadMatrix(char*fp) 
{ IOFile fin; fin.open_f(fp,ios::in); 
for(int i=0; ifor(int j=0; j< columns; j++) fin>>array[i][j]; 
fin.close_f(fp); 
return; 

// матрицалармен жұмыс істеу үшін туынды класс үлгісін анықтау 
template 
class Matrix_D:public Matrix_B 
{ public: Matrix_D(int nrow, int ncol); 
void PrintMatrix(IOFile &); // матрицаны басып шығару 
//қосу, меншіктеу және индексациялау амалдарының жүктелуі
операцияларын жүктеу 
Matrix_Doperator+(const Matrix_D&); 
Matrix_D2operator=(const Matrix_D&); 
T*& operator [ ] (int index); 
// туынды класс конструкторы 
template 


48 
Matrix_D: : Matrix _D (int nrow, int ncol): Matrix_B( nrow, ncol){

// Қосу операцияларын қайта жүктеу 
template  
Matrix_D Matrix_D: : operator + (const Matrix_D&ref) 
{ Matrix_D result (rows, columns); // бос объектті құру 
for(int i=0; ifor(int j=0; jresult .array[i][j]=array[i][j]+ref.array[i][j]; 
return result; 

// меншіктеу операциясын қайта жүктеу 
template 
Matrix_D& Matrix_D: : operator = (const Matrix_D&ref) 

for(int i=0; ifor(int j=0; jarray[i][j]=ref.array[i][j]; 
rows=ref.rows; columns=ref.columns; 
return*this; 

// матрицаны басып шығару 
template 
void Matrix_D: : PrintMatrix(IOFile &fout) 

for(int i=0; i{for(int j=0; jfout « array[i][j] « ; 
fout « endl; 

return; 

// идекcация операциясын қайта жүктеу 
template 
T*& class Matrix_D: : operator [ ] (int index) 
{ return array[index]; 

// программаны тестеу 
int main(void) //сәттілік кезінде, main о қайтарады 
{ IOFile fout; // ″ matrix.out ″ файлына жазуға арналған объект ; 
fout.open_f(“matrix.out”, ios::out); 
// объект массивтерді құрамыз, оларды файлдан толтырамыз және басып
шығарамыз 
Matrix_D a1(2,2), a2(2,2), a3(2,2); 


49 
a1.ReadMatrix( ″matrix.in ″ ); a2 . ReadMatrix( ″matrix.in ″); 
fout « ″\na1: ″« endl; a1. PrintMatrix( fout) ; 
fout « ″\na2: ″« endl; a2. PrintMatrix( fout) ; 
fout « ″\na3: ″« endl; a3. PrintMatrix( fout) ; 
//Қайта жүктелген [] - операцияларды тестеу 
fout « ″\n қайта жүктелген [] - операцияларды тестеу″
″\n int k=a1[1][1];” « endl ; 
int k=a1[1][1]; fout « ″ \n k=” « k «endl; 
// Қарапайым мәндерді тестеу 
fout « ″\n Қарапайым мәндерді тестеу \n ″
″а3=а1+а2;”« endl; 
″а3=а1+а2;
fout « ″\n а3= ”« endl; a3 PrintMatrix(fout); 
// Шығару файлын жабу 
fout.close_f( ″matrix.out ″); 
return 0; 

Бақылау сұрақтары: 
1)
Егер scanf ( ) - fscanf ( ), printf-fprintf-sprintf ( ) жиындары жақсы 
жұмыс істесе Енгізу-шығару ағындары не үшін құрылады? 
2)
іgnore ( ) әдісін қашан қолдану керек? 
3)
Шығарудың қайта жүктелген операторы қандай мәнді қайтарады? 
4)
Бүтін сандарды шығарғанда, үнсіздік бойынша шығарудың өрісінің 
қандай ені қабылданады? 
5)
ios: : ate ашудың қарапайым режимі нені қамтамасыз етеді? 


Достарыңызбен бөлісу:
1   ...   15   16   17   18   19   20   21   22   23




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

    Басты бет