C++ тілінде сызықтық тізіммен жұмыс



Мазмұны

Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..5

1. Файлдарды қoлдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
1.1Файлдардыөндеу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...6 1.2 Файлдарды құру және оқу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...15
1.3 Файлдарды ашу, жабу және жою ... ... ... ... ... ... ... ... ... ... ... ... ...17

2. Текстік файлдарды берілгендерді форматты және форматсыз енгізу . шығару ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...19
2.1 Берілгендерді символды және жолдық енгізу шығару ... ... ... ... ... ... 19
2.2 Берілгендерді форматты енгізу, шығару ... ... ... ... ... ... ... ... ... ... ..21

3. Файлдармен базалық операторлар ... ... ... ... ... ... ... ... ... ... ... ... ... ..28
3.1 Пернетақтадан енгізу және экранға шығару ... ... ... ... ... ... ... ... ... ..28
3.2 Файлдардағы мәліметтерді жаңарту және олардың сәйкестігі ... ... ... ...29

Қорытынды ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..35

Пайдаланылған әдебиеттер тізімі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...34

Қосымша ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 45
КІРІСПЕ

Компьютер эрасының басында программистер есептеу машинасының құлы болған етін.
Сол кездердегі программа құрушылар өздерінің командаларын тек қана бір тілде жазуға мәжбүр болды, яғни тек қана екілік код түрінде жазды, сонымен программистер нөл мен бірліктің ізбасары ретінде көрінді. Уақыт өте келе алгоритмдерде күрделіне түсті, сонымен бірге программалауға көп көңіл бөлу қажет болды. Осылайша көптеген қиындықтарды бастан кешіре келе өмірге Фортран, Бейсик, Паскаль сияқты өте әйгілі, жоғарғы сатылы тілдер пайда болды.
ХХІ – ғасыр адамзат дамуының жаңа сатысы – ақпаратты қоғамға өтумен сипатталады.
Қазіргі ақпарат заманында информация ағымын компьютер информацияны жеделдетіп өңдеудің негізгі құралы болып табылады. Инженерлік – техникалық, экономикалық есептерді шешу және мәліметтерді компьютер арқылы автоматтандырып өңдеу мықты программаларды талап етеді.
Психологтар адамның бір мезгілде ондаған бірліктің аумағымен бірдей ақпататты қабылдай алатынын бұрыннан көрсеткен. Сөйтіп, программалық қамтамассыз етуді дайындағанда программиске көрінетін компоненттерінің санын кішірейтуге талап қойылады. Адамзат бірнеше өте тиімді декомпозиция жолдарын, яғни үлкен есептерді шағын есептерге бөлуді ойлап шығарған . Модульдік тәсіл көптен бері қолданып келеді, онда үлкен программалар бөлек дербес модульдерге бөлінеді. Программалар көптен бері «Жоғарыдан төмен » және құрылымдық декомпозицияны қолдану арқылы жасалынады. Осы тәсілге негізделген әдістердің ортақ сипаты болады: олардың ішінде деректер және оларды өңдейтін код бір – бірінен бөлек тұрады.
70-80 жылдары Норвегияның қарулы күштерінде қолданылған Sumila тілі класс түсінігінде құрылған өте алғашқы тіл болып табылды.
Шамамен сол жылдары жаңа программалау тілдерінің стандарты болып бекітілген, үлкен қуатты иеленетін, эффективті және бейімді атағына ие болған С тілі пайда болды. Бұл тіл ең жоғарғы сатыдағы және компьютерде жұмыс істеуге өте тиімді тіл болып табылды. Мысалы: мәліметтермен алмасуды іске асыратын, және тағы басқа.
1978 жылдары екі тілдің тиімді жақтарын біріктіруге арналған алғашқы қадамдар іске асты, нәтижесінде «Си класстармен» тілі пайда болды. . С++ жұмыс версиясы 1983 жылы жасалынды. Сол уақыттан бастап тілдің дамуы басталды және Си мен С++ стандарттарының жобасының бірнеше версиялары баспада жарияланды.
Бірнеше жылдар өткеннен кейін ол қазіргі біздің кең түрде пайдаланып жүрген С++ тілі болып қабылданды. Уақыт өткен сайын программаға деген сұраныстар арта түсіп, соның сарынында тілде өзгеріске ұшырайды. Қазір С++-тің бірнеше платформасы және әдістері бар. Солардың ішінде қолданыста жүрген Microsoft C++(Dos, Windows) және Borland C++ (Dos, Windows), Visual C++ (Windows), GNUC++(Linux).
С++ тілі программалауда обьектілерді міндетті түрде қолдануды қажет етпейді. Программалық қамтамассыз етуді шығаратын біраз формалар Си және С++ компиляторларды дайындап жасайды. Borland International фирмасының программалау жүйелері басқа фирмаларға қарағанда программаны дайындауда кешенді жолды қолданумен ерекшеленді.Ол дайындаушының интегралдау ортасын программалау жүйесіне енгізумен білінеді, ол жалпы басқарумен программалардың бастапқы мәндерін кіргізу үшін мәтіндік редакторын және отладталған құралдардың жиынтығын біріктіреді.
1989 жылы осы фирмамен С++ компиляторы енгізілген, DOS операциялық жүйеде жұмыс істейтін TurboC++ жүесін шығарады. 1992 жылдан бастап DOS және Windows үшін С++ компиляторлары бар Borland C++ жүйесі шығарылады. 1997 жылдан бастап С++ компиляторлары Borland C++ 5,0 версиясын қолданады, бұнда Windows үшін компилятор 1486 және Pentium процессорлары бар ДЭЕМ үшін 16 разрядты және 32 разрядты варианттар дайындауға мүмкіндік жасады.
Си/С++ программасы бөлек трансляция жасайтын бір немесе бірнеше бастапқы файлдан тұрады .
Адамның қызметінің әр түрлі салаларында программаларды қолдану – барлық программалық қамтамассыз етудің сенімділігін арттыру қажеттілігіне алып келді.
Программалау технологиясы – бұл программалауды дайындаудың әдістері мен тәсілдерінің жиынтығы және осы әдістер мен тәсілдерді қолданудың тәртібі.
Мен осы С++ тіліндегі ең қызықтысы, әрі ең тартымдысы болып Си-дегі графикамен жұмыс болғандықтан, осы тақырыпты курстық жұмысымның негізі ретінде таңдадым.
Пайдаланылған әдебиеттер тізімі

1. Атымтаева Л.Б. Объектіге бағытталған программалау негіздері. А: «Қазақ университеті», 2005
2. Климова Л.М. С++ Практическое программирование. Москва, 2001г 3.Франка П. С++ учебный курс. Санкт-Петербург: ЗАО «Издательство Питер», 1999
4. Бьярн Страуструп. Язык программирования С++. Киев: Диасофт, 1993-1,2 часть.
5.Павловская Т.А. С / С++ программирование на языке высокого уровня. Санкт-Петербург, 2002г.
6. Вайнер Р., Пинсон Л. С++ изнутри: Пер. с англ. Киев Диасофт, 1993
7. Керниган В., Ритчи Д. Язык программирования Си. Санкт-Петербург, 2001г.
8.Дьюхарсг С., Старк К. Программирование на С++. Пер. с англ. – Киев. Диасофт, 1993
9. А.В. Крячков и др. Программирование на С и С++, практикум. М.: Телеком, 2000
10. Калверт Ч. Самоучитель по программированию на С++Builder. Киев, 2000г.
11. Рейсдорф К., Хендерсон К. С++ Builder. Освой самостоятельно. 2002г.
12. П. Лукас. С++ под рукой. – Киев: НПИФ «ДиаСофт», 1993.

Аннотация
Курстық жұмыстың тақырыбы: C++ тілінде сызықтық тізіммен жұмыс.
Курстық жұмыс Есептеуіш техника және бағдарламалық қамтамасыз ету
кафедрасында орындалған.
Курстық жұмыс 4 тараудан тұрады, Файлдарды қолдану,Тексттік файлдарды
берілгендерді форматты және форматтсыз енгізу-шығару,Файлдармен базалық
операторлар және қортынды тізімінен тұрады.

Мазмұны

Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... ... ... ..5

1. Файлдарды
қoлдану ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... .
1.1Файлдардыөндеу ... ... ... ... ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... .6 1.2 Файлдарды құру
және оқу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...15
1.3 Файлдарды ашу, жабу және жою ... ... ... ... ... ... ... ... ... ... ... ... ...17

2. Текстік файлдарды берілгендерді форматты және форматсыз енгізу -
шығару ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ..1 9
2.1 Берілгендерді символды және жолдық енгізу шығару ... ... ... ... ... ... 19
2.2 Берілгендерді форматты енгізу, шығару ... ... ... ... ... ... ... ... ... ... ..21

3. Файлдармен базалық операторлар ... ... ... ... ... ... ... ... ... ... ... ... ... ..28
3.1 Пернетақтадан енгізу және экранға шығару ... ... ... ... ... ... ... ... ... ..28
3.2 Файлдардағы мәліметтерді жаңарту және олардың сәйкестігі ... ... ... ...29

Қорытынды ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... 35
Пайдаланылған әдебиеттер тізімі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 34
Қосымша ... ... ... ... ... ... ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ... ..4 5

КІРІСПЕ

Компьютер эрасының басында программистер есептеу машинасының құлы
болған етін.
Сол кездердегі программа құрушылар өздерінің командаларын тек қана бір
тілде жазуға мәжбүр болды, яғни тек қана екілік код түрінде жазды, сонымен
программистер нөл мен бірліктің ізбасары ретінде көрінді. Уақыт өте келе
алгоритмдерде күрделіне түсті, сонымен бірге программалауға көп көңіл бөлу
қажет болды. Осылайша көптеген қиындықтарды бастан кешіре келе өмірге
Фортран, Бейсик, Паскаль сияқты өте әйгілі, жоғарғы сатылы тілдер пайда
болды.
ХХІ – ғасыр адамзат дамуының жаңа сатысы – ақпаратты қоғамға өтумен
сипатталады.
Қазіргі ақпарат заманында информация ағымын компьютер информацияны
жеделдетіп өңдеудің негізгі құралы болып табылады. Инженерлік – техникалық,
экономикалық есептерді шешу және мәліметтерді компьютер арқылы
автоматтандырып өңдеу мықты программаларды талап етеді.
Психологтар адамның бір мезгілде ондаған бірліктің аумағымен бірдей
ақпататты қабылдай алатынын бұрыннан көрсеткен. Сөйтіп, программалық
қамтамассыз етуді дайындағанда программиске көрінетін компоненттерінің
санын кішірейтуге талап қойылады. Адамзат бірнеше өте тиімді декомпозиция
жолдарын, яғни үлкен есептерді шағын есептерге бөлуді ойлап шығарған .
Модульдік тәсіл көптен бері қолданып келеді, онда үлкен программалар бөлек
дербес модульдерге бөлінеді. Программалар көптен бері Жоғарыдан төмен
және құрылымдық декомпозицияны қолдану арқылы жасалынады. Осы тәсілге
негізделген әдістердің ортақ сипаты болады: олардың ішінде деректер және
оларды өңдейтін код бір – бірінен бөлек тұрады.
70-80 жылдары Норвегияның қарулы күштерінде қолданылған Sumila тілі
класс түсінігінде құрылған өте алғашқы тіл болып табылды.
Шамамен сол жылдары жаңа программалау тілдерінің стандарты болып
бекітілген, үлкен қуатты иеленетін, эффективті және бейімді атағына ие
болған С тілі пайда болды. Бұл тіл ең жоғарғы сатыдағы және компьютерде
жұмыс істеуге өте тиімді тіл болып табылды. Мысалы: мәліметтермен алмасуды
іске асыратын, және тағы басқа.
1978 жылдары екі тілдің тиімді жақтарын біріктіруге арналған алғашқы
қадамдар іске асты, нәтижесінде Си класстармен тілі пайда болды. . С++
жұмыс версиясы 1983 жылы жасалынды. Сол уақыттан бастап тілдің дамуы
басталды және Си мен С++ стандарттарының жобасының бірнеше версиялары
баспада жарияланды.
Бірнеше жылдар өткеннен кейін ол қазіргі біздің кең түрде пайдаланып
жүрген С++ тілі болып қабылданды. Уақыт өткен сайын программаға деген
сұраныстар арта түсіп, соның сарынында тілде өзгеріске ұшырайды. Қазір С++-
тің бірнеше платформасы және әдістері бар. Солардың ішінде қолданыста
жүрген Microsoft C++(Dos, Windows) және Borland C++ (Dos, Windows), Visual
C++ (Windows), GNUC++(Linux).
С++ тілі программалауда обьектілерді міндетті түрде қолдануды қажет
етпейді. Программалық қамтамассыз етуді шығаратын біраз формалар Си және
С++ компиляторларды дайындап жасайды. Borland International фирмасының
программалау жүйелері басқа фирмаларға қарағанда программаны дайындауда
кешенді жолды қолданумен ерекшеленді.Ол дайындаушының интегралдау ортасын
программалау жүйесіне енгізумен білінеді, ол жалпы басқарумен
программалардың бастапқы мәндерін кіргізу үшін мәтіндік редакторын және
отладталған құралдардың жиынтығын біріктіреді.
1989 жылы осы фирмамен С++ компиляторы енгізілген, DOS операциялық
жүйеде жұмыс істейтін TurboC++ жүесін шығарады. 1992 жылдан бастап DOS және
Windows үшін С++ компиляторлары бар Borland C++ жүйесі шығарылады. 1997
жылдан бастап С++ компиляторлары Borland C++ 5,0 версиясын қолданады,
бұнда Windows үшін компилятор 1486 және Pentium процессорлары бар ДЭЕМ
үшін 16 разрядты және 32 разрядты варианттар дайындауға мүмкіндік жасады.
СиС++ программасы бөлек трансляция жасайтын бір немесе бірнеше бастапқы
файлдан тұрады .
Адамның қызметінің әр түрлі салаларында программаларды қолдану – барлық
программалық қамтамассыз етудің сенімділігін арттыру қажеттілігіне алып
келді.
Программалау технологиясы – бұл программалауды дайындаудың әдістері мен
тәсілдерінің жиынтығы және осы әдістер мен тәсілдерді қолданудың тәртібі.
Мен осы С++ тіліндегі ең қызықтысы, әрі ең тартымдысы болып Си-дегі
графикамен жұмыс болғандықтан, осы тақырыпты курстық жұмысымның негізі
ретінде таңдадым.

I ФАЙЛДАРДЫ ҚОЛДАНУ
Дискте сақталатын кез – келген ақпарат файл деп аталады. Файлдармен
жұмыс дисплей және пернетақтамен жұмысқа аналогты. Файл өзінің атымен
дискте идентифицияланады. Бір файлды ақпаратты жазуға (компьютерден шығару)
және ақпаратты оқуға (компьютерге енгізу) қолдануға болады.
Файлға ат беру керек болғандықтан, файл объектісін компиляторға алдын
– ала жариялау мүмкін емес. Файлдарға енгізу ағынының шығару бастапқыда
cin және cout идентифткаторларымен жарияланған, сондықтан оларға арнайы
атты тағайындамауға болады. Ал файлдарда енгізуге (бұрын бір ғана cin
объектісі болатын) және шығаруға (бұрын бір ғана cout объектісі болатын)
бірнеше файлдар қажет. Бізге бастапқыда өзіміздің файлдарымызды fstream
класының объектісі ретінде жариялау қажет, содан кейін оларға сәйкес
аттарын береміз. fstream класының функция – мүшелерімен тек осы класстың
объектілерін жариялағаннан кейін ғана қолдануға болады. Объектілер
жарияланған кезде енгізу ағынын беру нмесе шығару ағынының объектісін cin
және cout объектісі сияқты жасауға болады. Мысалы:
# includefstream.h
void main ( )
{ fstream myfile;
myfile.open(“list.txt”, ios::out);
myfile”Anything goes”;
myfile.close ( ); }
Бұл программада list.txt атты файл құрылады, және оған Anything goes
жолы жазылады.
Ескерту: Файлдармен жұмыс істегенде fstream.h тақырыптық файл енгізу
керек.

1.1 Файлдарды өңдеу

Файлдардың екі түрін өңдеуге болады:
∙ Текстік файлдар.
∙ Бинарлық файлдар.
Текстік файлдар әр түрлі жолдардан құрастырылған. Олардың әр қайсысы
жол соңы (endl) символымен белгіленген. Барлық мәліметтер оқуға ыңғайлы
түрде сақталынады. Мәліметтер өрістері пробелдермен бөлінген, сондықтан
файлдың құрамын оңай түсінуге болады.
Керісінше, бинарлы файлдар жолдардан құрастырылмаған. Мәліметтердің
бір бөлігі үзіліссіз басқа бөлігіне өтеді, ал сандар ондық сандар сияқты
емес, компьютер жадысындағыдай, бинарлы форматындағыдай сақталады. Сол
себептен басып шығарылған бинарлы файлдарды оқу қиын.Файлдарды басқа кез –
келген объект тәрізді қолдану үшін, оны жариялау керек.
Файлдарды жариялау.
Файлдар fstream класының объектісі болғандықтан, оларды жариялау мына
түрде болады:
fstream идентификатор;
Идентификатор – ол дисктегі файл аты емес, ол программада файлға бару
үшін қолданылатын аты. Идентификатор және файл атының арасындағы сәйкестік
дискте open( ) функция – мүшесімен анықталады.
Файлдарды жариялағаннан кейін оны fstream класының функция – мүшесінің
көмегімен орындауға болады. open( ),close( ), eof( ) маңызды функция –
мүшелері болып табылады.
open () функция – мүшесі.
fstream класының open( ) функция – мүшесі файл объектісі және дисктегі
мәліметтер арасындағы сәйкестікті орнатады. Ол енгізуге, шығаруға, қосуға
және т.б. файлға ену режимін анықтайды.
open( ) функциясының синтаксисі:
open(char имя_файла[ ], int ену_режимі);
Функция екі аргументті алады: дисктегі файл атын анықтайтын символдар
жолы (имя_файла), және файлге ену режимін анықтайтын жалау (режим_доступа).
Файл аты. Жолда файлға толық жолды беруге болады, оның ішінде диск,
каталог және т.б. Сол кезде кері қисық сызық \ функция аргументіндегі
файлға толық жолда екі кері қисық сызыққа ауыстырылады \\.
Ену режимі.. Ену режимі келесілердің біреуі болуы мүмкін:
∙ ios::out жалауы файлды шығаруға ашады (файлға жазу).
∙ ios::in жалауы енгізу файлын ашады (фалдан оқу)
∙ ios::app файлды қосу үшін ашады (алдындағы мәліметтің соңына жазу)
∙ ios::nocreat, егер файл бар болса ғана оны ашады.
Мысалы:
Открытие файла list.txt, который находится на диске а
в каталоге \franca, для ввода:
myfile.open(“a:\\franca\\list.txt”, ios::in);
Открытие файла, имя которого написано в
символьном массиве “имя_файла”, для вывода:
myfile.open(имя_файла,ios::out);
Доступ режимінің жалауын ( ) дизъюнкция логикалық операторын қолдана
отырып комбинациялауға болады.
ваш_файл.open(“roster.txt”, ios::nocreate:ios::in);
Осындай жағдайда жүйе (флаг ios::in) енгізуге roster.txt файлын
ашуға тырысады. Егер бұл файл осы каталогта табылмаса, онда жаңа файл
құрылмайды және ашылмайды.
Файлдың дұрыс ашылуын тексеру.
Microsoft компиляторына файлдың ашылуының дұрыстығын тексергенде
is_open( ) функция – мүшесі шақырылады. Егер функция нөл қайтарса, онда
файл ашылмайды.
is_open( ) функциясы келесі түрде қолданылады:
ваш_файл.open(“roster”,ios::in:ios: :nocreate);
if (ваш файл.is_open( )= =0) cout” Ошибка открытия файла”;
close( ) функция – мүшесі.
close( ) функция – мүшесі файлдың дұрыс жабылуын және дискте
мәліметтердің дұрыс сақталуын қамтамасыз етеді. Кейде мәліметтер дискке
бірден түспейді, сол кезде файл дұрыс жабылмаса, файл жоғалады. Бұл функция
параметрсіз болып табылады.
eof( ) функция – мүшесі.
eof( ) функция – мүшесі файлдарды енгізу үшін ашу кезінде өте пайдалы.
Егер процессте мәліметтерді оқу кезінде файл соңы символымен белгіленетін
(end – of – eof символы немесе eof) файл шегінен шығып кетсеңіз, ол 1
қайтарады. eof( ) функциясында файлдағы мәліметтер көлемі алдын – ала
белгісіз болады. eof символына жеткенде ол оқуды тоқтатады.
Мәліметтерді жазуға және оқуға мысал.
Дискет ұсынатын c8persnl.txt файлы бір кәсіпорын жұмысшылары жайында
мәліметтерді құрайды. Біздің оқуға және басып шығаруға кез – келген текстік
процессорды қолдануымызға болады. Ондағы әр жол идентификациялық нөмірден,
жұмысшының аты және фамилиясы, және айлық мөлшерінен құралады.
Файл құрамы мына түрде болады:
1 Clark Kent 20.00
2 Alfred Newman 6.00
3 Oliver Twist 15.00
4 Huck Finn 17.00
5 James Bond 32.00
6 Saint Nick 22.00
Идентификациялық нөмір кезекпен толық жазылмайды (кейбіреулері, 5, 6,
8 және 9 жазылмаған), бұл көптеген файлдарға тән.
Енді аналогтык программа құрайық.
1. Айнымалыларды және файлды жариялау.
2. Файл соңы болғанша мәліметтерді оқу.
3. Әрбір жұмысшының идентификациялық нөмірін, атын, фамилиясын және
айлығының мөлшерін енгізу.
Программаны құруды жоғарыдағы комментариядан бастауға болады, содан
кейін сәйкес программа кодын қоямыз:
# includefstream.h c8wage.cpp
# includeiomanip.h
void main ( )
{ Объявить файл и переменные:
char filename[ ]=”c8persnl.txt”;
int id;
char fname[20], lname[20];
float wage;
fstream employees;
employees.open(filename, ios::in:ios::nocreate);
for(;;)
{ employeesid;
if(employees.eof( )) break;
employeesfnamelnamewage;
Вывести идентификационный номер, имя, фамилию
и почасовую оплату каждого сотрудника:
coutendl;
coutsetw(5)setiosflags(ios::rig ht)id.
setw(20)setiosflags(ios::left) fname
setw(20)lname
setw(6)setprecision(2)setiosf lags(ios::fixed)
resetiosflags(ios::left)
setiosflags(ios::showpoint)wage ; }
char choice;
coutendle”Enter any character to finish”;
cinchoice;
}
Келтірілген программаның аспектілері:
∙ Біз filename символдық массивін файл атымен инициализацияладық. Бұл
тек файл программа орналасқан каталогта бар болса ғана жұмыс істейді. Кері
жағдайда толық жолды көрсету керек.
∙ Біз файлдың дұрыс ашылғанын тексерген жоқпыз.
∙ Біз файл символының барын тексерген жоқпыз. Мұндай тексеруді
берілгендерді оқуды бастағанда енгізу керек. Файл соңының символы
файлдың соңғы символы болып табылады. Сол себептен сәйкес шарттарды
тексеруді цикл басына қою керек (мысалы, while (‘employees.eof( )...) қолдану
арқылы).
∙ Соңғы үш жол маңызды емес. Кейбір компиляторлар экранды программа
аяқталғаннан кейін тазалап тастайды. Бұл орындалғанда бізге нәтижелерді
көруге уақыт жетпейді. Экранға мәліметтерді енгізуді сұрай отырып, біз
компьютерді экранды тазаламалауға мәжбүрлейміз.
Программаға келесі элементтерді қойсақ артық болмас:
∙ Файлдың ашылуының дұрыстығын тексеру.
∙ Аты мен фамилияны форматтау.
Файлдың ашылуының дұрыстығын тексеру үшін, программаға әр
компилятордың құрылымы әр түрлі болатын if нұсқауын енгізу керек.
Microsoft компиляторында келесі нұсқауларды қолдану керек:
if (employee.is_open( )==0) cout”Error:file does not open”;
else...
С++ программалау тілін қолдану бір машинадан басқа машинаға өткенде
немесе бір компилятордан басқа компиляторға өткенде ешқандай өзгеріс
енгізуді талап етпейді. Көптеген компиляторларда кейбір процедураларды
орындау әдісінде сәйкессіздіктер болып тұрады.
Алдындағы программада аты және фамилиясы әр түрлі бағандарда
орналасқандықтан тізім қанағаттандырылмауы мүмкін. Мұны жаңа символды
массивке атын көшіріп және оған пробел қойып, одан кейін фамилиясын жазып
жөндеуге болады. Мысалы:
char full_name[40];
...
stropy(full_name, fname);
stropy(full_name, ” “);
stropy(full_name, lname);
Бұл жерде full_name символды массивінде жұмысшының бөлек жазылған аты
мен фамилиясының орнына оның толық аты – жөні жазылады.
Мысал 2. Алдындағы программаның басқа әдісі. Бұл әдісте жұмысшы жайлы
жазғанда объект қолданылады, ал форматтауда display( ) функция – мүшесі
қолданылады. Альтернативті жақындауды көркемдеуге объект класта емес база
құрылымында құрылады.
# includefstream.h
# includeiomanip.h
# include(string.h
struct hired_person
{ int id;
char fname[20],lname[20];
float wage;
void display( ); };
void hired_person::display( )
{ char full_name[40];
strcpy(full_name, fname);
strcat(full_name, ” ”);
strcat(full_name, iname);
coutsetiosflags(ios::right)setw (6)id” “setw[40]
setiosflags(ios::left)full_name setw(6)setprecision(2)
resetiosflags(ios::left)
resetiosflags(ios::right)
resetiosflags(ios::fixed)
resetiosflags(ios::showpoint)wa ge; }
Бұл құрылымның арқасында c8wage1.cpp программасының негізгі функциясы
келесі түрде өзгереді:
void main ( ) c8wage1.cpp
{ Объявление переменных:
char filename[ ]=”c:\\franca\\c8persnl.txt”;
hired_person worker;
fstream employees;
Открытие файла для ввода:
employees.open(filename,ios::in);
Цикл просмотра всех сотрудников:
{ for (;;)
{ Считывание данных на сотрудника:
employeesworker.id;
Проверка конца файла:
if (employees.eof( )) break;
employeesworker.lnameworker.wag e;
coutendl;
Вывод данных на сотрудника:
worker.display( ); }
coutendlendl”Enter any character to finish:”;
char enter;
cinenter; } }
Файлдың ашылуының дұрыстығын тексеру.
Кейбір программистер файлдың ашылуының дұрыстығын тексеруде тексеру
шартының қысқартылған формасын қолданылады, яғни мына
if (employee.is_open()==0) cout”Error:file does not open”;
нұсқауының орнына
if ( employee.is_open()) cout”Error:file does not open”;
нұсқауы қолданылады.
Екі нұсқаудың да нәтижелері бірдей.
Препроцессор директивтері:
∙ # define
∙ # ifdef
∙ # ifndef
∙ # endid
Препроцессор программаны оның компиляциясына дейін өңдейді.
Программаны функциялағанда препроцессор директивтері жұмыс істемейді.
# define директивтері.
# define директиві берілген жолдың берілген идентификаторын
ауыстырғанда қолданылады.
# define pi 3.1416
Бұл директиваны бергенде препроцессор оны программаның қалған
бөлігінде pi идентификаторын іздейді және оны 3,1416 жолымен ауыстырады.
Нәтижесі нұсқау орындалғаннан кейінгідей болады:
const float pi=3.1416;
Бірақ бірінші әдіспен көп нәрсеге қол жеткізуге болады, егер онда
бөлетіндер (пробел, табуляция және т.б.) жоқ болса, онда кез – келген
идентификатор кез – келген жолмен ауыстырылады. Мысалы,
# define условие1 employee.is_open( )
# define условие2 employee = = NULL
Сол кезде программаның ішінде файлды ашудың дұрыстығын тексеру шарты
компиляторға байланысты болмайды.
if (condition1) cout”Error”;
Бірақ екі программада да айырмашылық бар, себебі не бірінші шартты, не
екінші шартты қолдану керек.
# ifdef директивасы.
#ifdef директивасы берілген идентификатор # define директивасымен
анықталғанын, не анықталмағанын тексереді. Ол анықталды ма, және ол қалай
анықталғаны маңызды болып табылады. Microsoft компиляторын қолданғанда
келесі директивтері жазу керек.
# define Microsoft
Осылай біз компиляторды сәйкес идентификатор анықталғанын тексере
отырып анықтаймыз. Мысалы,
# ifdef Borland
# define condition employee = =NULL
# endif
# ifdef Microsoft
# define condition employee.is_open( )= =0
# endif
# endif директивасы. С++ тілінде if инструкциясының басы және соңын
белгілеу үшін { } фигуралық жақшалары қолданылады. Препроцессорда сәйкес
іс – қимыл # ifdef директивасынан кейін басталады және # endif
директивасынан кейін аяқталады. Сол себептен алдындағы директивтер
тізбегінде екі # endif директивтері қосылған.
Егер де Borland идентификаторы анықталған болса, онда if нұсқауына
арналған condition сәйкестік шарты employee=NULL ретінде анықталады. Егер
де Borland идентификаторы анықталмаса, онда препроцессор директивтерді
анықтауда # endif директивасын кездестіргенше жалғастырады. Содан соң ол
Microsoft идентификаторының анықталғандығын тексереді.
Компилятордың тағайындалуына сәйкес condition идентификаторына келесі
жолдардың бірі беріледі:
employee = = NULL
employee.is_open( ) = = 0
Осылай программада келесі нұсқауды қолдануға болады:
if (condition) cout”Error”;
Егер екі Borland және Microsoft идентификаторлары анықталмаса, онда
препроцессор ары қарай жылжиды. Мысал,
# define condition 0! = 0
# ifdef Borland
# define.condition employee = = NULL
# eddif
# ifdef Microsoft
# define condition employee.is_open( ) = =0
# endif
Бірнеше файлдардың ашылуының дұрыстығын тексеру.
Біздің препроцессорлық файлдың ашылуының дұрыстығын тексеретін
техника, тек бір ғана файлды тексереді. Ал егер бірнеше файл болса, онда
препроцессор директивін функциямен комбинациялаймыз, оның параметрі файл
болып табылады. Fileopen ( ) функциясы берілген файл алынды ма, алынған жоқ
па, соны тексереді. Егер алынса, онда 1, ал алынбаса, 0 қайтарады.

# includefstream.h
int fileopen(fstresm & datafile)
{ int yesopen = 1;
# ifdef Microsoft
yospen = datafile.is_open( );
# endif
# ifdef Borland
yesopen = ! (datafile = = NULL);
# endif
return yesopen; }
Осы функцияға компиляция жасағанда, препроцессор қандай идентификатор
анықтағандығыңызды тексереді, Borland немесе Microsoft (бірақ екеуін бірге
анықтауға болмайды).
Файлдарды өңдеуге арналған textfile класы.
Барлық операциялар файлдармен бірге негізгі функциядан жойылуы керек.
Жаңа textfile класының объектісі файлдарды өзі өңдей білу керек.
Егер де төлем тізімі мысалында workers класы (textfile класынан
шыққан) болса, онда негізгі функция былай жазылады:
workers staff;
for(;;)
{ if (staff.read( ) = = 0) break;
staff.display( ); } }
Жаңа класстың ерекшеліктері:
∙ файлды ашудың қажеті жоқ – ол объектісі жариялағанда автоматты түрде
конструктормен ашылады;
∙ fatream объектісін еске түсірудің және негізгі функция
программасында файлдармен операция жүргізудің қажеті жоқ;
∙ негізгі функцияда жазбаның құрылымы туралы мәліметтің керегі жоқ. Әр
өрісті бұрынғыдай санаудың қажеті жоқ read ( ) функция – мүшесін барлық
жазбаны бірден оқу үшін қолдануға болады.
∙ read ( ) функция – мүшесін оның нәтижесі бүтін мәнмен шығаратындай
етіп жүзеге асыруға болады.
Программада ыңғайлы болу үшін nofranca.h тақырыптық файлы қосылған.
Оның мүмкіндіктері:
∙ Біз askwords( ), yesno( ) және т.б. функцияларды қолдана аламыз.
∙ Біз не С++ интерфейсін, не franca.h тақырыптық файлының графикалық
интерфейсін таңдай аламыз. Егер бізге текстік интерфейс керек болса, онда
ештеңе істемеу керек. Ал егер franca.h файлының графикалық интерфейсі керек
болса, онда программаға # include “franca.h” директивасын c8tfile.h
файлын қоймай тұрып енгізу керек.
Класстарды жариялау. textfile класын жариялау:
class textfile
{ protected:
fstream data;
char datafile[40];
int filemode;
public:
char id[40];
textfile( );
textfile (char filename[ ]6 int mode =
ios::in:ios::app:ios::nocreate);
textfile( );
void display( );
virtual int read( );
int find(char id[ ]);
int input( );
void write( ); }
Берілген – мүшелер.Берілген – мүшелер тек textfile класынан шыққан
классқа рұқсат етілуі үшін қорғалған.
∙ fstream класының data объектісі файлдарға операция жасау үшін керек.
∙ datafile айнымалысы дисктік файл атын білдіретін символдық массив
құрайды.
∙ бүтін filemode айнымалысында файлды ашу тәртібі жайлы мәліметтер
сақталады.
Функция – мүшелер.
Негізгі функция – мүшелер:
∙ textfile класында екі конструктор бар. Бірінші конструктор
параметрсіз
конструктор болып табылады. Ол қолданылатын файлдың атын сұрайды. Ал
екінші конструкторда файлдың аты параметр болып табылады.
∙ Деструктор (destructor) ~ textfile( ) – ол арнайы функция – мүше.
Көп жағдайда класс деструкторында ерекше қажет жағдайлар болмайды.
Деструкторлар объектіні жою үшін және автоматты түрде шақыру үшін керек.
Бұл жағдайда деструктор файлды жабу үшін қолданылады. Деструктордың жұмысы
конструктор жұмысына қарама – қарсы.
∙ find( ) функциясы құрамы функция параметрі болып табылатын бірінші
өріс бойынша файлдан жазбаны іздеуге арналған. Текстік файлда кез – келген
берілгендер типі символды жолмен берілген. Біз өлшемді шектеуді (39 символ)
және кілттің орналасуын (ол жазбаның бірінші өрісінде орналасу керек)
енгіземіз.
∙ write( ) функциясы осы жазбаны файлға сақтау үшін арналған.
∙ read( ) функциясы дисктен жазбаны оқу үшін арналған.

1.2 Файлдарды құру және оқу

Файл құру үшін немесе бұрын мәліметтер жазылған файл құрамын жою үшін,
файлды (“w”) жазбасы үшін ашамыз. Сәйкес файлды оқу үшін, файлды (“ r ”)
оқу үшін ашамыз. Егер файлға берілгендерді жазғандай оқу үшін, файлды
“r+”, ”w”, немесе “a+” режимдердің ішінен жаңарту үшін файлды ашамыз. ”w”
режимі файлды оқу және жазу үшін құрады. Егер файл бар болса, онда файл
ашылады және оның құрамындағылар жойылады. “a+” режимі файлды оқу және жазу
үшін ашады, барлық жазбалар файл соңына жазылады. Егер файл жоқ болса,
онда ол құрылады.
Мысал, тізбектеп ену файлын құру.
# includestdio.h
main ( )
{ int account;
char name[30];
float balance;
FILE *cfptr; cfptr = указатель файла clients.dat*
if ((cfptr = fopen(“clients.dat”,”w”)) = = NULL)
printf(“File could not be opened\n”);
else
{
printf (“Enter the account, name, and balance.\n”);
printf (“Enter EOF to end input.\n);
printf(“? “);
scanf (“%d%s%f”,&account, name, &balance);
while (!feof (stdin))
{
printf (cfptr, “%d %s %.2f\n”, account,name, balance);
printf (“? “);
scanf (“%d%s%f”, &account, name, &balance); }
fclose(cfptr);
}
return 0;
}
Тізбектеп ену файлынан мәліметтерді оқу үшін, программа оқуды файл
басынан бастайды және барлық мәліметтерді олар біткенше оқиды. Программаны
орындау кезінде тізбектеп ену файлынан мәліметтерді бірнеше рет өңдеу
қажеттілігі туындайды. Оператордың орындалуы:
rewind(cfptr);
Ол функция позициясының көрсеткіші – байт нөмірін көрсетеді. Ол
файлдағы байтты анықтайтын бүтін мән. Позиция көрсеткіші FILE құрылымды
файлмен байланысты элемент болып табылады.
Тізбектеп ену файлынан мәліметтерді оқу және баспаға шығару:
# includestdio.h
main ( )
{
int account;
char name[30];
float balance;
FILE *cfptr; cfptr = указатель файла clients.dat*
if ((cfptr = fopen(“ clients.dat ”,” r ”)) = = NULL)
printf(“ File could not be opened\n ”);
else {
printf (“% - 10s% - 13s%s\n”, “Account”, “Name”, “Balance”);
fscanf (cfptr, “%d%s%f”,&account, name, &balance);
while (!feof (cfptr))
{
printf (“% - 10d% - 13s%7.2f\n”, account, name, balance);
fscanf (cfptr, “%d%s%f”, &account, name, &balance);
}
fclose(cfptr); }
return 0;
}
fwrite функциясы жады адресінің көрсеткішінен бастап берілген байттар
санын файлға көшіреді. Берілгендер файл позициясының көрсеткішімен
белгіленген жерден бастап жазылады. fread функциясы берілген байт санын
файлдағы орнынан жады массивіне ауыстырады. fwrite және fread функциялары
мәліметтерді дисктен дискке жазуға және оқуға мүмкіндік береді. fread және
fwrite тәрізді үшінші аргумент – ол массив элементінің саны, оны дисктен
оқуға және дискке жазуға болады. fwrite функциясын шақыру дискке бір
бүтінді жазады, сол себептен үшінші аргумент 1 – ге тең. fwrite функциясы
объект массивтерінің бірнеше элементтерін жазу үшін қолданылады. fread
функциясы файлдан жадыға берілген байт санын оқиды. Мысалы, оператор fread
(&client, sizeof(struct, clientData), 1, cfptr); cfptr файлынан
sizeof(struct, clientData) байт санын оқиды және оны client құрылымына
сақтайды. Байттар файлдан файл позициясын көрсеткішімен анықтайтын жерден
бастап оқылады.
Туынды ену файлынан тізбектеп оқу:
# includestdio.h
struct clientData
{ int acctNum;
char lastName[15];
char firstName[10];
float balance;
};
main ( )
{ FILE *cfptr;
struct clientData client;
if ((cfptr = fopen (“credit.dat”, “r”)) = =NULL)
printf(“File could not be opened.\n”);
else
{
printf(“% - 6s% - 16s% - 11s%10s\n”, “Acct”, “Last Name”,
“First Name”, “Balance”);
while (!feof (cfptr))
{
fread (&client, sizeof(struct clientData), 1, cfptr);
if (client.acctNum !=0)
printf (“% - 6d% - 16s% - 11s%10.2f\n”,client.acctNum,
client.lastName,
client.firstName, client.balance);
} }
fclose (cfptr);
return 0;
}

3. Файлдарды ашу, жабу және жою

Файлдарды ашу оны FILE типінің сәйкес құрылымымен байланыстырады.
Операциялық жүйе автоматты түрде стандартты файлдарды және қондырғыларды
ашады. Қолданушының файлдарды ашуы және жабуы түзілген функциялар көмегімен
жүзеге асады. Функцияларды ашу және жабу үшін fopen, freopen, fclose және
fcloscall функциялары қолданылады.
Ағындарды ашу fopen функциясымен жүзеге асады. Функция прототипі:
FILE*fopen(char*filename, char*type);
Мұндағы: filename – физикалық файлдың толық атын анықтайды, ол
физикалық файлдың атын құрайтын көрсеткіш немесе жол тұрақтысы болуы
мүмкін;
type – файлға енудің әдісін анықтайды.
Кесте 1.3 - Ену әдістерінің мүмкін мәндері
Ену әдістері Ену әдістерін тағайындау – файл ашу үшін
“ r ” read – оқу; файл құрылып қойылуы керек.
“ w ” write – жазу; егер функция сол атпен болса, онда ол
ашылған кезде өшіріледі.
“ a “ append – функция соңына мәлімет қосу; егер файл болмаса,
онда ол құрылады.
“ + “ файлдан оқу және файлға жазу жүргізіледі.

Файлдарды ашу операторларына мысал:
fid = fopen(“Ir2.dat”, “r”); - оқу үшін;
fin = fopen(filename, ”a+”); - оқу және толықтыру үшін;
frz = fopen(“con”, ”w”); - экранға мәліметтерді шығару үшін. Егер
файл ”a” немесе ”a+” режимдерімен ашылса, онда берілгендер файл соңына
жазылады. Егер файл көрсеткіші файл соңынан fseek немесе
rewind функцияларымен орналасса, онда берілгендер файл соңына жазылады.
fseek немесе rewind функцияларын файлға жазғанда көрсеткіш файл соңына
орналастырылады. Осылай, функциядағы барлық мәліметтер жойылмайды.
“r+”, ”w+” және “a+” режимдеріне оқу және жазу рұқсат етілген, себебі
функция жаңару (undate) үшін ашылған.
Текстік режимде type жолында t символы болуы керек, ал бинарлыға b
символы болуы керек. С – де fmode мәні текстік режимді анықтайды.
Берілгендерді пернетақтадан енгізу кезінде Ctrl+z командасы функция соңы
символы ретінде интерпретацияланады.
Текстік режимде берілгендерді жазба ретінде енгізу – шығару кезінде
басқару кодтарымен сәйкес келетін көшірілетін берілгендер мәні жазбаларды
ауыстыру процесін бұзуы мүмкін. Сол себептен берілгендерді жазба ретінде
енгізіп – шығарғанда бинарлы ену режимдерін қолдану керек: “wb”, “ab”,
“rb”, “rb+”.
Егер файл сәтті ашылса, онда fopen функциясы FILE типінің айнымалысына
мән – көрсеткіш қайтарады және программа файлын ашу орындалмаса (мысалы,
мұндай атты файл табылмаса), fopen функциясы NULL мәнін қайтарады. Файлдың
сәтті ашылғанын if операторының көмегімен тексеруге болады. Файлды
ашқаннан кейін FILE типінің айнымалы – көрсеткішімен алынғандарды көруге
болады.
Мысалы: fr:DS:OBBC – файлды сәтті ашқаннан кейін, fid:DS:NULL – файлды
сәтсіз ашқаннан кейін.
fclose функциясы бір берілген ағынды жабады;
fcloseall функциясы барлық ағындарды жабады;
stdin, stdout, stderr ағындарынан басқасын fopen функциясының
көмегімен ашады
Осы функциялардың прототиптері:
int fclose(FILE*stream); int fcloseall( );
Файлдарды жабу функцияларын қолдану мысалы:
fclose(fid); fclose(res);
fcloreall( );
Осы функцияларды орындағаннан кейін буферленген мәліметтерді буферден
файлға жазу жүреді. Ағынмен байланысқан барлық буферлер тасталынады. Егер
ағын сәтті жабылса, онда fclose функциясы 0 мәнін қайтарады. Егер жабу
кезінде қате болса, онда екі функция да eof(-1) мәнін қайтарады. remove
функциясының көмегімен файлды жоюға болады. Функция прототипі: int
remove(const char*filename);
Мұндағы: filename – физикалық файл аты бар жолды көрсетеді.
remove функциясы файл сәтті жойылса, нөл қайтарады, ал егер сәтсіз
жойылса, нөл емес қайтарады. Егер файл ашылған болса, онда оны жою үшін
алдын – ала жабу керек. Егер жабу сәтсіз болса, онда perror функциясы
арқылы қате туралы хабарлама енгізуге болады.

2 ТЕКСТІК ФАЙЛДАР БЕРІЛГЕНДЕРДІ ЖӘНЕ ФОРМАТТСЫЗ ЕНГІЗУ-ШЫҒАРУ

2.1 Берілгендерді символды және жолдық енгізу -шығару

Кесте 2.1-Берілгендерді символды енгізу – шығару бойынша тағайындау
және функция құрамы.
функция аты функцияны тағайындау
getc, fgetc символды кіру ағынынан енгізу
getchar, символды stdin файлынан енгізу (пернетақтадан)
fgetchar
ungetc, символды кіру ағынына қайтару
ungetch
putc, символды шығару ағынына шығару
fputc
putchar символды stdout стандартты файлына шығару
getch символды stdin файлынан енгізу
putch символды экранға шығару

getc және fgetc функцияларының прототиптері бірдей:
int getc(FILE *stream); int fgetc(FILE *stream);
Мұндағы: stream - кіру ағыны файлының көрсеткішінің аты.
getchar және fgetchar функцияларының прототиптері бірдей.
getchar функциясы: int getchar(void);
getchar функциясын шақыру getc(stdin) шақыруына эквивалентті.
getc және fgetc функциялары кіру ағынынан символды оқиды және онымен
байланысты көрсеткішті келесі символға орналастырады. Егер қате болса, не
файл соңы болса, онда барлық символдық енгізу функциялары оқылған символ
кодының мәнін немесе eof мәнін қайтарады.
getch функциясы stdin стандартты файлынан бір символды оқиды.
Оның прототипі: int getch(void);
Шақыру функциясына мысал:
char ch;
ch = getc(fid); ... ch = fgetc(fid); ...
ch = getchar( ); ... ch = getch( );
ungetc және ungetch функцияларының прототиптері:
int ungetc (int c, FILE *stream);
int ungetch (int c);
ungetc және ungetch функциялары кіру ағынына коды параметр мәнімен
берілген символды қайтарады:
ungetc – stream ағынына.
ungetch – буферге.
Қайтарылатын мән – символ коды немесе eof мәні, егер попытка сәтсіз
болса. Символды қайта кіру ағынына қайтару қажет болуы мүмкін.Мысалы, егер
getc функциясы енгізетін мәннен бұрын енгізбейтін “артық” символды
оқыса. putc, fputc, putchar және putch бір символды шығару үшін
қолданылады. Олар шығару ағынына параметрмен берілген бір символды
шығарады. putchar функциясы stdout стандартты енгізу файлына символды
шығарады. Егер шығаратын символ мәні =\n болса, онда осы аталған файлдардың
көмегімен курсорды келесі жолдың басына қоюға болады.
putc және fputc функцияларының прототиптері бірдей:
int putc (int c, FILE *stream);
int fputc (int c, FILE * stream);
Мұндағы с – шығарылатын символ коды.
Функциялардың шақырулары да бірдей. Мысалы:
putc (c, stdout); - стандартты шығару ағынына шығару үшін:
putc (c, fres); - fres файлына шығару үшін;
fputc (c,fres); - fres файлына шығару үшін.
putchar және fputchar функцияларының прототиптері бірдей:
int putchar (int c);
int fputchar (int c);
putchar(c) функциясын шақыру put(c, stdout) функциясының ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Си бағдарламалау тілінде сызықтық тізімдерді таңдау және іздеу
Динамикалық тізімдермен жұмыс
Таңдау арқылы сұрыптау
Ғылыми мақаланың құрылымы және ресімдеуге қойылатын негізгі талаптар
Мәліметтердің динамикалық құрылымы
Жылуөткізгіштік теңдеуін нүктелік жылу көзін ескеріп шекті элементтер әдісімен шешу
Жоба және пішін терезесі
Тізімдер, файл және графиканы қолдану. Тізімдермен, файлдармен және графикамен жұмыс жасау үшін қолданылатын стандартты предикаттар
Вариациялық есептерді MATLAB жүйесінде шешудің алгоритмдері
Тұтас денедегі температуралық өрістің қалыптасуына жылу өткізбейтін қабаттың әсерін зерттеу
Пәндер