Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Joqari darejeli programmalastiriwda C++ Last

.pdf
Скачиваний:
9
Добавлен:
03.12.2023
Размер:
2.03 Mб
Скачать

12.1-súwrette F - fayl atı, F1, F2, F3 - fayl elementleri (komponentaları). Tap taza muzıkanı lenta aqırına qosıw múmkin bolǵanınday, taza jazıwlar fayl aqırına qosılıwı múmkin.

F

F1

F2

F3

 

 

 

 

 

12.2-súwret. Fayl kórsetkishi.

Jáne bir áhmiyetli túsiniklerden biri fayl kórsetkishi túsinigi esaplanadı. Fayl kórsetkishi – sol waqıtta fayldan oqılıp atırǵan yaki oǵan jazılıp atırǵan orın (jazıw ornın) kórsetip turadı, yaǵnıy fayl kórsetkishi kórsetip turǵan orınnan bir jazıwdı oqıw yaki usı orınǵa taza jazıwdı jaylastırıw múmkin. 12.2-súwrette fayl kórsetkishi fayl basın kórsetpekte.

Fayl jazıwlarına múráját izbe-iz túrde ámelge asırıladı: n – jazıwǵa múráját etiw ushın n-1 jazıwdı oqıw zárúr boladı. Sonı aytıp ótiw kerek, fayldan jazıwlardı oqıw processiniń bir bólegi «avtomatlasqan», onda i - jazıw oqılǵannan keyin, kórsetkish náwbettegi i+1 jazıw basına kórsetip turadı hám sol tárizde oqıwdı dawam etiw múmkin. Fayl - bul berilgenlerdi saqlaw orını esaplanadı hám sol sebepli onıń jazıwları ústinde tuwrıdan-tuwrı ámel orınlap bolmaydı. Fayl jazıwı ústinde ámel orınlaw ushın jazıw mánisi operativ yadqa sáykes tiptegi ózgeriwshige oqılıwı kerek. Keyin, zárúr ámeller usı ózgeriwshi ústinde orınlanadı hám kerek bolsa nátiyjeler jáne faylǵа jazılıwı múmkin.

Operaciyalıq sistema kóz-qarasınan fayl esaplanǵan hár qanday fayl C++ tili ushın fizikalıq fayl esaplanadı. MS DOS ushın fizikalıq fayllar <fayl atı>.<fayl keńeytpesi> kórinisindegi «8.3» formattaǵı qatar (at) arqalı beriledi. Fayl atları qatar turaqlılar yaki qatar ózgeriwshilerinde beriliwi múmkin. MS DOS qaǵıydalarına bola fayl atı tolıq bolıwı, yaǵnıy fayl atınıń basında adres bólegi bolıwı múmkin: “C:\\USER\\Mısal.сpp”, “A:\\tekst.txt”.

C++ tilinde logikalıq fayl túsinigi bolıp, ol fayl tipindegi ózgeriwshini ańlatadı. Fayl tipindegi ózgeriwshilerge basqa tiptegi ózgeriwshiler sıyaqlı mánis beriw operatorı arqalı mánis berip bolmaydı. Basqasha aytqanda, fayl tipindegi

191

ózgeriwshiler ústinde hesh qanday ámel anıqlanbaǵan. Olar ústinde orınlanatuǵın

bárshe ámeller funkciyalar járdeminde orınlanadı.

Fayllar menen islew tómendegi basqıshlardı óz ishine aladı:

fayl ózgeriwshisi álbette disktegi fayl menen baylanısadı;

fayl ashıladı;

fayl ústinde jazıw yaki oqıw ámelleri orınlanadı;

fayl jabıladı;

fayl atın ózgertiw yaki fayldı diskten óshiriw ámellerin orınlaw múmkin.

12.2. Tekstli hám binar fayllar

C++ tili C tilinen oqıw-jazıw ámelin orınlawshı standart funkciyalar bibliotekasın miyras etip alǵan. Bul funkciyalar <stdio.h> baslama faylında járiyalanǵan. Oqıw-jazıw ámelleri fayllar menen orınlanadı. Fayl tekst yaki binar

(ekilik) bolıwı múmkin.

Tekst fayl - ASCII kodındaǵı belgiler menen berilgenler kompleksi. Belgiler izbe-izligi qatarlarǵa bólingen boladı hám qatardıń tamamlanıw belgisi sıpatında CR (karetkanı qaytarıw yaki ‘\r’) LF (qatardı ótkeriw yaki ‘\n’) belgiler juplıǵı esaplanadı. Tekst fayldan berilgenlerdi oqıwda bul belgiler juplıǵı bir ǵana CR belgisi menen almastırıladı hám kerisinshe, jazıwda CR belgisi eki CR hám LF belgilerine almastırıladı. Fayl aqırı #26 (^Z) belgisi menen belgilenedi.

Tekst faylǵa basqasha anıqlama beriw de múmkin. Eger fayldı tekst redaktorında ekranǵa shıǵarıw hám oqıw múmkin bolsa, bul tekst fayl. Klaviatura da kompyuterge tek tekstlerdi jiberedi. Basqasha aytqanda programma tárepinen ekranǵa shıǵarılatuǵın bárshe maǵluwmatlardı stdout atındaǵı tekst faylına shıǵarılıp atır dep qaraw múmkin. Dál sonday klaviaturadan oqılıp atırǵan hár qanday berilgenlerdi tekst faylınan oqılıp atır dep esaplanadı.

Tekst fayllarınıń komponentaları qatarlar dep ataladı. Qatarlar úzliksiz jaylasıp, túrli uzınlıqta hám bos bolıwı múmkin. Aytayıq, T tekst faylı 4 qatardan ibarat bolsın:

192

1-qatar#13#10

2-qatar uzınraq #13#10

#13#10

4-qatar#13#10#26

 

 

 

 

 

12.3-súwret. Tórt qatardan quralǵan tekst faylı.

Tekstti ekranǵa shıǵarıwdа qatar aqırındaǵı #13#10 basqarıw belgileri juplıǵı kursordı keyingi qatarǵa túsiredi hám onı qatar basına alıp keledi. Bul tekst fayl ekranǵa shıǵarılsa, onıń kórinisi tómendegishe boladı:

1-qatar[13][10]

2-qatar uzınraq[13][10]

[13][10]

4- qatar[13][10][26]

Teksttegi [n] - n- kodlı basqarıw belgisin bildiredi. Ádette tekst redaktorları bul belgilerdi kórsetpeydi.

Binar fayllar - bul ápiwayıǵana baytlar izbe-izligi esaplanadı. Ádette binar fayllardan berilgenlerdi paydalanıwshı tuwrıdan-tuwrı «kóriw» zárúr bolmaǵan jaǵdaylarda isletiledi. Binar fayllardan oqıw-jazıwda baytlar ústinde hesh qanday konvertaciya ámelleri orınlanbaydı.

12.3. Oqıw-jazıw aǵımları. Standart aǵımlar (potoklar)

Aǵım túsinigi berilgenlerdi faylǵa oqıw-jazıwda olardı belgiler izbe-izligi yaki aǵımı kórinisinde kóz aldımızǵa keltiriwden kelip shıqqan. Aǵım ústinde tómendegi ámellerdi orınlaw múmkin:

aǵımnan berilgenler blogın operativ yadqa oqıw;

operativ yadtaǵı berilgenler blogın aǵımǵa shıǵarıw;

aǵımdaǵı berilgenler blogın tazalaw;

aǵımnan jazıwdı oqıw;

aǵımǵa jazıwdı shıǵarıw.

Aǵım menen isleytuǵın bárshe funkciyalar buferli, formatlasqan yaki formatlaspaǵan oqıw-jazıwdı támiyinleydi.

Programma iske túskende oqıw-jazıwdıń tómendegi standart aǵımları ashıladı:

193

stdin - oqıwdıń standart quralı; stdout - jazıwdıń standart quralı;

stderr - qátelik haqqında xabar beriwdiń standart quralı; stdprn - qaǵazǵa shıǵarıwdıń standart quralı;

stdaux - standart járdemshi qurılma.

Kelisim boyınsha stdin - paydalanıwshı klaviaturası, stdout hám stderr - terminal (ekran), stdprn - printer menen, hámde stdaux - kompyuter járdemshi portlarına baylanısqan esaplanadı. Berilgenlerdi oqıw-jazıwda stderr hám stdaux aǵımınan basqa aǵımlar buferlenedi, yaǵnıy belgiler izbe-izligi operativ yadtıń bufer dep atalıwshı aymaǵında waqtınsha jámlenedi. Máselen, belgilerdi sırtqı qurılmaǵa shıǵarıwda belgiler izbe-izligi buferde jámlenedi hám bufer tolǵannan keyin ǵana sırtqı qurılmaǵа shıǵarıladı.

Házirgi operaciyalıq sistemalarda klaviatura hám displeyler tekst faylları sıpatında qaraladı. Haqıyqattan da berilgenlerdi klaviaturadan programmaǵa kiritiw (oqıw) múmkin, ekranǵa bolsa shıǵarıw (jazıw) múmkin. Programma iske túskende standart oqıw hám jazıw aǵımları ornına tekst fayllardı belgilew arqalı bul aǵımlardı qayta anıqlaw múmkin. Bul jaǵdaydı oqıwdı (jazıwdı) qayta adreslew júz berdi delinedi. Oqıw ushın qayta adreslewde ‘<’ belgisinen, jazıw ushın bolsa ‘>’ belgisinen paydalanıladı. Mısal ushın, gauss.exe orınlanıwshı programma berilgenlerdi oqıwdı klaviaturadan emes, balki massiv.txt faylınan ámelge asırıw zárúr bolsa, ol buyrıq qatarında tómendegi kóriniste júkleniwi zárúr boladı:

gauss.exe < massiv.txt

Eger programma nátiyjesin nátiyje.txt faylına shıǵarıw zárúr bolsa

gauss.exe > nátiyje.txt

qatarı jazıladı.

Eger berilgenlerdi massiv.txt faylınan oqıw hám nátiyjeni nátiyje.txt faylına jazıw ushın

gauss.exe < massiv.txt > nátiyje.txt

buyrıq qatarı teriledi.

194

Ulıwma alǵanda, bir programmanıń shıǵıw aǵımın ekinshi programmanıń kiriw aǵımı menen baylanıstırıw múmkin. Bunı konveyrli uzatıw (jiberiw) delinedi. Eger uzat.exe programması qabıl.exe programmasına berilgenlerdi uzatıw kerek bolsa, ol jaǵdayda olar ortasına ‘|’ belgi qoyıp jazıladı:

uzat.exe | qabıl.exe

Bul kórinistegi programmalar ortasındaǵı konveyrli uzatıwdı operaciyalıq sistemanıń ózi támiyinleydi.

12.4. Belgilerdi oqıw-jazıw funkciyaları

Belgilerdi oqıw-jazıw funkciyaları makros kórinisinde ámelge asırılǵan. getc() makrosı belgilengen aǵımnan náwbettegi belgini qaytaradı hám kiriw

aǵımı kórsetkishin keyingi belgini oqıwǵa sáykeslegen halda ámelge asıradı. Eger oqıw sátli bolsa getc() funkciyası belgisiz int kórinisindegi mánisti, keri jaǵdayda

EOF qaytaradı. Bul funkciya prototipi tómendegishe:

int getc(FILE *stream)

EOF identifikator makrosı

#define EOF(-1)

kórinisinde anıqlanǵan hám oqıw-jazıw ámellerinde fayl aqırın belgilew ushın xizmet etedi. EOF mánisi belgili char tipinde esaplanadı. Sol sebepli oqıw-jazıw processinde unsigned char tipindegi belgiler isletilse, EOF makrosın isletip bolmaydı.

Náwbettegi mısal getc() makrosın isletiwdi kórsetedi.

#include <iostream.h> #include <stdio.h> int main()

{

char ch;

cout << “Belgini kiritiń: “; ch = getc(stdin);

cout << “Siz ” << ch << “ belgisin kirittińiz.\n”; return 0;

195

}

getc() makrosı kópshilik jaǵdaylarda stdin aǵımı menen isletilgenligi sebepli, onıń getc(stdin) kórinisine ekvivalent bolǵan int getchar() makrosı anıqlanǵan.

Joqarıdaǵı mısalda, «ch=getc(stdin);» qatarın «ch=getchar();» qatarı menen almastırıw múmkin.

Belgini aǵımǵa shıǵarıw ushın putc() makrosı anıqlanǵan hám onıń prototipi

int putc(int c, FILE *stream)

kóriniste anıqlanǵan. putc() funkciyası stream atı menen berilgen aǵımǵa с belgini shıǵaradı. Funkciya qaytarıwshı mánisi sıpatında int tipine aylandırılǵan с belgi boladı. Eger belgini shıǵarıwda qátelik júz berse EOF qaytarıladı.

putc() funkciyasınıń standart stdout aǵımı menen baylanısqan jaǵdayı - putc(c,strout) ushın putchar(c) makrosı anıqlanǵan.

12.5. Qatarlardı oqıw - jazıw funkciyaları

Aǵımnan qatardı oqıwǵa arnalǵan gets() funkciyasınıń prototipi

char * gets(char *s);

kórinisinde anıqlanǵan. gets() funkciyası standart aǵımnan qatardı oqıydı hám onı s

ózgeriwshisine jaylastıradı. Jaylastırıw waqtında aǵımdaǵı ‘\n’ belgisi ‘\0’ belgisi menen almastırıladı. Bul funkciyanı isletiwde oqılıp atırǵan qatardıń uzınlıǵı s qatar ushın ajıratılǵan orın uzınlıǵınan asıp ketpewin qadaǵalaw kerek boladı.

puts() funkciyası

int puts(const char *s);

kórinisinde bolıp, ol standart aǵımǵa argumentte kórsetilgen qatardı shıǵaradı. Bunda qatar aqırına taza qatarǵa ótiw belgisi ‘\n’ qosıladı. Eger qatardı aǵımǵa shıǵarıw sátli bolsa, puts() funkciyası teris bolmaǵan sandı, keri jaǵdayda EOF qaytaradı.

Qatardı oqıw-jazıw funkciyaların isletiwge mısal sıpatında tómendegi programmanı keltiriw múmkin.

#include <stdio.h>

int main()

196

{

char *s;

puts(“Qatardı kiritiń: ”); gets(s);

puts(“Kiritilgen qatar: ”); puts(s);

return 0;

}

12.6. Formatlı oqıw hám jazıw funkciyaları

Formatlı oqıw hám jazıw funkciyaları - C tilinen miyras bolıp qalǵan scanf() hám printf() funkciyaları menen ámelge asırıladı. Bul funkciyalardı isletiw ushın «stdio.h» baslama faylın programmaǵa qosıw kerek boladı.

Formatlı oqıw funkciyası scanf() tómendegi prototipke iye: int scanf(const char * <format>[<adres>,...])

Bul funkciya standart aǵımnan berilgenlerdi formatlı oqıwdı ámelge asıradı.

Funkciya, kiriw aǵımındaǵı maydanlar izbe-izligi kórinisindegi belgilerdi birme-bir oqıydı hám hár bir maydandı <format> qatarında keltirilgen format anıqlastırıwshısına sáykes túrde formatlaydı. Aǵımdaǵı hár bir maydanǵa format anıqlastırıwshısı hám nátiyje jaylasatuǵın ózgeriwshiniń adresi bolıwı shárt.

Basqasha aytqanda, aǵımdaǵı maydan (ajıratılǵan belgiler izbe-izligi) kórsetilgen formattaǵı mániske sáwlelendiriledi hám ózgeriwshi menen atamalanǵan yad bólegine jaylastırıladı (saqlanadı). Funkciya aǵımnan berilgenlerdi oqıw processin «toltırıwshı belgini» ushıratqanda yaki aǵım tamamlanıwı nátiyjesinde toqtawı múmkin. Aǵımnan berilgenlerdi oqıw sátli bolsa, funkciya sátli aylandırılǵan hám yadqa saqlanǵan maydanlar sanın qaytaradı. Eger hesh bir maydandı saqlaw imkanı bolmaǵan bolsa, funkciya 0 mánisin qaytaradı. Aǵım aqırına kelip qalǵanda (fayl yaki qatar aqırına) oqıwǵa háreket bolsa, funkciya EOF mánisin qaytaradı.

Formatlaw qatarı - <format> belgiler qatarı bolıp, ol úsh túrge bólinedi:

toltırıwshı belgiler;

toltırıwshı belgilerden parıqlı belgiler;

197

– format anıqlastırıwshıları.

Toltırıwshı-belgiler – bul probel, ‘\t’, ‘\n’ belgileri. Bul belgiler formatlaw qatarınan oqıladı, biraq saqlanbaydı.

Toltırıwshı belgilerden parıqlı belgiler – bul ‘%’ belgisinen tısqarı qalǵan bárshe ASCII belgileri esaplanadı. Bul belgiler formatlaw qatarınan oqıladı, biraq saqlanbaydı.

12.1 - tablica. Format anıqlastırıwshıları hám olardıń wazıypaları.

Komponenta

Bolıwı shárt

 

Wazıypası

 

yaki yaq

 

 

 

 

 

 

 

 

 

 

 

 

Náwbettegi kórip shıǵılıp atırǵan maydan

[*]

Yaq

mánisin

ózgeriwshige

ózlestirmew

belgisi. Kiriw aǵımındaǵı maydan kórip

 

 

 

 

shıǵıladı, biraq ózgeriwshide saqlanbaydı.

 

 

 

 

 

 

 

Maydan

keńliginiń

anıqlastırıwshısı.

 

 

Oqılatuǵın

belgilerdiń

maksimal sanın

[<keńlik>]

Yaq

anıqlaydı. Eger aǵımda toltırıwshı belgi

yaki almastırılmaytuǵın

 

belgi ushırasa

 

 

 

 

 

funkciya salıstırmalı az sandaǵı belgilerdi

 

 

oqıwı múmkin.

 

 

 

 

 

 

 

Ózgeriwshi kórsetkishiniń (adresiniń)

[F|N]

Yaq

modifikatorı: F - far pointer; N - near

 

 

pointer.

 

 

 

 

 

 

 

 

 

Argument

tipiniń modifikatorı. <tip

[h|l|L]

Yaq

belgisi> menen anıqlanǵan ózgeriwshiniń

qısqa (short - h) yaki uzın (long –l,L)

 

 

 

 

kórinisin anıqlaydı.

 

 

 

 

 

<tip belgisi>

Awa

Aǵımdaǵı belgilerdiń almastırılatuǵın tip

belgisi.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

198

Format anıqlastırıwshıları –aǵım maydanındaǵı belgilerdi kórip shıǵıw, oqıw hám adresi menen berilgen ózgeriwshiler tipine sáykes túrde almastırıw processin basqarаdı. Hár bir format anıqlastırıwshısına bir ózgeriwshi adresi sáykes keliwi kerek. Eger format anıqlastırıwshıları sanı ózgeriwshilerden kóp bolsa, nátiyje qanday bolıwın aldınnan aytıp bolmaydı. Keri jaǵdayda, yaǵnıy ózgeriwshiler sanı kóp bolsa, artıqsha ózgeriwshiler inabatqa alınbaydı.

Format anıqlastırıwshısı tómendegi kóriniske iye:

% [*][<keńlik>] [F|N] [h|l|L] <tip belgisi>

Format anıqlastırıwshısı ‘%’ belgisinen baslanadı hám onan keyin

12.1–tablicada keltirilgen shárt yaki shárt bolmaǵan komponentalar keledi.

12.2–tablica. Almastırılatuǵın tip belgisi belgileri

Tip

Kútilip atırǵan mánis

 

Argument túri

belgisi

 

 

 

 

 

 

 

 

San túrindegi argument

 

 

 

 

d, D

Onlıq pútin san

 

int * arg yaki long * arg

 

 

 

 

E,e

Jıljıwshı noqatlı san

 

float * arg

 

 

 

 

F

Jıljıwshı noqatlı san

 

float * arg

 

 

 

 

G,g

Jıljıwshı noqatlı san

 

float * arg

 

 

 

 

O

Segizlik san

 

int * arg

 

 

 

 

O

Segizlik san

 

long * arg

 

 

 

 

I

Onlıq, segizlik hám on

 

int * arg

altılıq pútin san

 

 

 

 

 

 

 

 

I

Onlıq, segizlik hám on

 

long * arg

altılıq pútin san

 

 

 

 

 

 

 

 

U

Belgisiz onlıq san

 

Unsigned int * arg

 

 

 

 

U

Belgisiz onlıq san

 

Unsigned long * arg

 

 

 

 

X

On altılıq san

 

int * arg

 

 

 

 

X

On altılıq san

 

int * arg

 

 

 

 

 

 

Belgiler

 

 

 

 

 

 

199

S

Qatar

char * arg (belgiler massivi)

 

 

 

 

 

char *arg (belgi ushın maydan keńligi

C

Belgi

beriliwi múmkin (máselen, %4с).

N belgiden quralǵan belgiler massivine

 

 

 

 

kórsetkish: char arg[N])

 

 

 

%

‘%’ belgisi

Hesh qanday almastırıwlar orınlanbaydı,

‘%’ belgisi saqlanadı.

 

 

 

 

 

 

Kórsetkishler

 

 

 

 

 

%n argumentine shekem sátli oqılǵan

N

int *arg

belgiler sanı, tap usı int kórsetkishi

 

 

boyınsha adreste saqlanadı.

 

 

 

 

YYYY:ZZZZ yaki

 

P

ZZZZ kórinisindegi on

Obyektke kórsetkish (far* yaki near*).

 

altılıq

 

 

 

 

Aǵımdaǵı belgiler bóleginiń almastırılatuǵın tip belgisiniń qabıl etiwi

múmkin bolǵan belgiler 12.2-tablicada keltirilgen.

12.3–tablica. Format anıqlastırıwshıları hám olardıń wazıypası.

Komponenta

Bolıwı

 

Wazıypası

 

shárt yaki yaq

 

 

 

 

 

 

 

 

 

 

 

 

Bayraq belgileri. Shaqırılıp atırǵan mánisti

 

 

shepke yaki onǵa tegislewdi, sannıń

 

 

belgisin, onlıq bólshek noqatınıń izindegi

 

 

nollerdi, segizlik hám on altılıq sanlardıń

[bayraq]

Yaq

belgilerin shıǵarıwdı basqarаdı. Máselen, ‘-‘

 

 

bayraǵı

mánisti

ajıratılǵan

orınǵa

 

 

salıstırǵanda shepten baslap shıǵarıwdı hám

 

 

kerek bolsa ońnan probel menen toltırıwdı

 

 

bildiredi,

keri jaǵdayda shep

tárepten

 

 

 

 

 

 

 

 

200