Joqari darejeli programmalastiriwda C++ Last
.pdf12.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 |
|
|
|