Joqari darejeli programmalastiriwda C++ Last
.pdf
|
|
probeller menen toltıradı hám dawamına |
||||
|
|
mánis shıǵarıladı. |
|
|
||
|
|
|
|
|
||
|
|
Maydan |
keńliginiń |
anıqlastırıwshısı. |
||
[<keńlik>] |
Yaq |
Shıǵarılatuǵın belgilerdiń minimal |
sanın |
|||
anıqlaydı. Zárúr bolsa mánis jazılıwınan |
||||||
|
|
|||||
|
|
artqan orınlar probel menen toltırıladı. |
|
|||
|
|
|
||||
|
|
Anıqlıq. Shıǵarılatuǵın belgilerdiń maksimal |
||||
[<хanа>] |
Yaq |
sanın kórsetedi. Sandaǵı cifrlardıń minimal |
||||
|
|
sanın. |
|
|
|
|
|
|
|
|
|
||
|
|
Ólshem modifikatorı. |
Argumenttiń |
qısqa |
||
[F|N|h|l|L] |
Yaq |
(short - h) yaki uzın (long –l,L) kórinisiniń |
||||
|
|
adres tipin anıqlaydı. |
|
|
||
|
|
|
|
|
|
|
<tip belgisi> |
Awа |
Argument |
mánisi |
almastırılatuǵın |
tip |
|
belgisiniń belgisi |
|
|
||||
|
|
|
|
|||
|
|
|
|
|
|
Formatlı jazıw funkciyası printf() tómendegi prototipke iye: int printf(const char * <format>[,<argument>,...])
Bul funkciya standart aǵımǵa formatlasqan shıǵarıwdı ámelge asıradı. Funkciya argumentler izbe-izligindegi hár bir argument mánisin qabıl etedi hám oǵan <format> qatarındaǵı sáykes format anıqlastırıwshısın qollaydı hám aǵımǵa shıǵaradı.
12.4–tablica. printf() funkciyasınıń almastırılatuǵın tip belgileri
Tip belgisi |
Kútilip atırǵan mánis |
|
Shıǵıw formatı |
|
|
|
|
|
San mánisleri |
||
|
|
|
|
D |
Pútin san |
|
Belgili onlıq pútin san |
|
|
|
|
I |
Pútin san |
|
Belgili onlıq pútin san |
|
|
|
|
O |
Pútin san |
|
Belgisiz segizlik pútin san |
|
|
|
|
U |
Pútin san |
|
Belgisiz onlıq pútin san |
|
|
|
|
X |
Pútin san |
|
Belgisiz on altılıq pútin san |
|
|
|
|
|
201 |
|
|
|
(a,b,c,d,e,f belgileri isletiledi) |
|
|
|
|
|
Х |
Pútin san |
Belgisiz on altılıq pútin san |
|
(A,B,C,D,E,F belgileri isletiledi) |
|||
|
|
||
|
|
|
|
F |
Jıljıwshı noqatlı san |
[-]dddd.dddd kórinisindegi jıljıwshı |
|
noqatlı san |
|||
|
|
||
|
|
|
|
E |
Jıljıwshı noqatlı san |
[-]d.dddd yaki e[+/-]ddd kórinisindegi |
|
jıljıwshı noqatlı san |
|||
|
|
||
|
|
|
|
G |
Jıljıwshı noqatlı san |
Kórsetilgen anıqlıqqа sáykes e yaki f |
|
formasındaǵı jıljıwshı noqatlı san |
|||
|
|
||
|
|
|
|
|
|
Kórsetilgen anıqlıqqа sáykes e yaki f |
|
E, G |
Jıljıwshı noqatlı san |
formasındaǵı jıljıwshı noqatlı san. e |
|
|
|
format ushın ‘E’ baspaǵa shıǵarıladı. |
|
|
|
|
|
|
Belgiler |
||
|
|
|
|
|
|
0-belgisi ushıramaǵanǵa shekem yaki |
|
S |
Qatarǵa kórsetkish |
kórsetilgen anıqlıqqa erisilmegenshe |
|
|
|
belgiler aǵımǵa shıǵarıladı. |
|
|
|
|
|
C |
Belgi |
Bir belgi shıǵarıladı |
|
|
|
|
|
% |
Hesh nárse |
‘%’ belgisi aǵımǵa shıǵarıladı. |
|
|
|
|
|
|
Kórsetkishler |
||
|
|
|
|
|
|
%n argumentine shekem sátli |
|
N |
int kórsetkish (int* arg) |
shıǵarılǵan belgiler sanı, tap usı int |
|
kórsetkishi boyınsha adreste |
|||
|
|
||
|
|
saqlanadı. |
|
|
|
|
|
|
|
Argumentti YYYY:ZZZZ yaki ZZZZ |
|
P |
Kórsetkish |
kórinisindegi on altılıq sanǵa |
|
|
|
aylandırıp aǵımǵa shıǵaradı. |
|
|
|
|
Hár bir format anıqlastırıwshısına bir ǵana ózgeriwshi adresi sáykes keliwi kerek.
Eger format anıqlastırıwshıları sanı ózgeriwshilerden kóp bolsa, nátiyjede ne
202
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ı. Eger aǵımǵa shıǵarıw sátli bolsa, funkciya shıǵarılǵan baytlar sanın qaytaradı, keri jaǵdayda EOF.
printf() funkciyasınıń <format> qatarı argumentlerdi almastırıw, formatlaw hám berilgenlerdi aǵımǵa shıǵarıw processin basqarаdı hám ol eki túrdegi obyektlerden quraladı:
–aǵımǵa ózgerissiz shıǵarılatuǵın ápiwayı belgiler;
–argumentler dizimindegi tańlanatuǵın argumentke qollanılatuǵın format
anıqlastırıwshıları.
Format anıqlastırıwshısı tómendegi кóriniske iye:
% [<bayraq>][<keńlik>] [<хanа>][F|N|h|l|L] <tip belgisi>
Format anıqlastırıwshısı ‘%’ belgisinen baslanadı hám onnan keyin 12.3–tablicada keltirilgen shárt yaki shárt bolmaǵan komponentalar keledi.
Almastırılatuǵın tip belgisiniń qabıl etiwi múmkin bolǵan belgiler
12.4- tablicada keltirilgen.
Berilgenler mánislerin aǵımnan oqıw hám aǵımǵa shıǵarıwda scanf() hám prinf() funkciyalarınan paydalanıwǵa mısal:
#include <stdio.h> int main()
{
int bsan, nátiyje; float hsan;
char blg, qatar[81];
printf("\nPútin hám jıljıwshı noqatlı sanlardı,"); printf("\nbelgi hámde qatardı kiritiń\n"); nátiyje=scanf("%d %f %c %s", &bsan, &hsan, &blg,qatar); printf("\nAǵımnan %d mánis oqıldı ", nátiyje); printf("hám olar tómendegiler:");
printf("\n %d %f %c %s \n", bsan, hsan, blg, qatar); return 0;
}
203
Programma paydalanıwshıdan pútin hám jıljıwshı noqatlı sanlardı, belgi hám qatardı kiritiwdi soraydı. Buǵan juwap retinde paydalanıwshı tárepinen
10 12.35 A Qatar
mánisleri kiritilse, ekranǵa
Aǵımnan 4 mánis oqıldı hám olar tómendegiler:
10 12.35 A Qatar
qatarları baspaǵa shıǵarıladı.
12.7. Fayldan oqıw-jazıw funkciyaları
Fayl aǵımı menen oqıw-jazıw ámelin orınlaw ushın fayl aǵımın ashıw zárúr. Bul jumıstıń, prototipi
FILE *fopen(const char* filename, const char *mode);
kórinisinde anıqlanǵan fopen() funkciyası arqalı ámelge asırıladı. Funkciya filename atı menen fayldı ashadı, ol menen aǵımdı baylanıstıradı hám aǵımdı identifikaciya qılıwshı kórsetkishti juwap retinde qaytaradı. fopen() funkciyasınıń NULL mánisli juwabı, fayldı ashıw sátsiz bolǵanlıǵın bildiredi.
Parametrler dizimindegi ekinshi - mode parametri fayldı ashıw rejimin anıqlaydı. Ol qabıl etiwi múmkin bolǵan mánisler 12.5-tablicada keltirilgen.
12.5-tablica. Fayl ashıw rejimleri
Mode mánisi |
Fayl ashılıw jaǵdayı klassifikaciyası |
|
|
|
|
R |
Fayl tek ǵana oqıw ushın ashıladı. |
|
|
|
|
W |
Fayl jazıw ushın ashıladı. Eger bunday fayl bar bolsa, ol |
|
qaytadan jazıladı (jańalanadı). |
||
|
||
|
|
|
|
Faylǵa jazıwdı qosıw rejimi. Eger fayl bar bolsa, fayl onıń |
|
A |
aqırına jazıwdı jazıw ushın ashıladı, keri jaǵdayda taza fayl |
|
|
jaratıladı hám jazıw rejiminde ashıladı. |
|
|
|
|
r+ |
Bar fayl ózgertiw (oqıw hám jazıw) ushın ashıladı. |
|
|
|
|
|
Taza fayl jaratılıp, ózgertiw (oqıw hám jazıw) ushın ashıladı. |
|
w+ |
Eger fayl bar bolsa, ondaǵı aldınǵı jazıwlar óshiriledi hám ol |
|
|
qayta jazıwǵa tayarlanadı. |
|
|
|
|
|
204 |
Faylǵa jazıwdı qosıw rejimi. Eger fayl bar bolsa, onıń aqırına a+ (EOF belgisinen keyin) jazıwdı jazıw (oqıw) ushın ashıladı, keri
jaǵdayda taza fayl jaratıladı hám jazıw rejiminde ashıladı.
Tekst faylı ashılıp atırǵanlıǵın bildiriw ushın fayl ashılıw rejimi qatarına
‘t’ belgisin qosıp jazıw zárúr boladı. Máselen, tekst fayl ózgertiw (oqıw hám jazıw) ushın ashılıp atırǵanlıǵın bildiriw ushın “rt+” qatarın jazıw kerek boladı. Dál sonday, binar fayllar ústinde islew ushın ‘b’ belgisin isletiw kerek. Mısal ushın fayl ashılıwınıń “wb+” rejimi binar fayl jańalanıwın bildiredi.
Fayl ózgertiw (oqıw-jazıw) ushın ashılǵanda, berilgenlerdi aǵımnan oqıw, hámde aǵımǵa jazıw múmkin. Bıraq jazıw ámelinen keyin dárhal oqıp bolmaydı, bunıń ushın oqıw ámelinen aldın fseek() yaki rewind() funkciyaları shaqırılıwı shárt.
Aytayıq «C:\\USER\\STUDENT\\lekciya.txt» atlı tekst fayldı oqıw ushın ashıw zárúr bolsın. Bul talap
FILE *f = fopen(“C:\\USER\\STUDENT\\lekciya.txt”, “r+”);
ańlatpasın jazıw arqalı ámelge asırıladı. Nátiyjede diskte bar bolǵan fayl programmada f ózgeriwshisi atı menen bir zat dep túsiniledi. Basqasha aytqanda, programmada keyinirek f ústinde orınlanǵan bárshe ámeller, disktegi «lekciya.txt» faylı ústinde júz beredi.
Fayl aǵımı menen islew tamamlanǵannan keyin ol álbette jabılıwı kerek. Bunıń ushın, fclose() funkciyasınan paydalanıladı. Funkciya prototipi tómendegi kóriniske iye:
int fclose(FILE *stream);
fclose() funkciyası aǵım menen baylanıslı buferlerdi tazalaydı (máselen, faylǵa jazıw kórsetpeleri beriliwi nátiyjesinde buferde jıynalǵan berilgenlerdi disktegi faylǵa kóshiredi) hám fayldı jabadı. Eger fayldı jabıw qátelikke alıp kelse, funkciya EOF mánisin, normal jaǵdayda bolsa 0 mánisin qaytaradı.
fgetc() funkciyası prototipi:
int fgetc(FILE *stream);
205
kórinisinde anıqlanǵan bolıp, fayl aǵımınan belgini oqıwdı ámelge asıradı. Eger oqıw sátli bolsa, funkciya oqılǵan belgini int tipindegi belgisiz pútin sanǵa aylandıradı. Eger fayl aqırın oqıwǵa háreket qılınsa yaki qátelik júz berse, funkciya EOF mánisin qaytaradı.
Kórinip turıptı, getc() hám fgetc() funkciyaları derlik birdey jumıstı orınlaydı, parıqı sonda, getc() funkciyası belgini standart aǵımnan oqıydı. Basqasha aytqanda, getc() funkciyası, fayl aǵımı standart qurılma bolǵan fgetc() funkciyası menen anıqlanǵan makros boladı.
fputc() funkciyası
int fputc(int c, FILE *stream);
prototipi menen anıqlanǵan. fputc() funkciyası fayl aǵımına argumentte kórsetilgen belgini jazadı (shıǵaradı) hám ol putc()funkciyası menen birdey.
Fayl aǵımınan qatar oqıw ushın
char * fgets(char *s, int n, FILE *stream)
prototipi menen fgets() anıqlanǵan. fgets() funkciyası fayl aǵımınan belgiler izbeizligin s qatarına oqıydı. Funkciya oqıw processi aǵımnan n-1 belgi oqılǵannan keyin yaki keyingi qatarǵa ótiw belgisi (‘\n’) ushıraǵanda toqtaydı. Aqırǵı jaǵdayda
‘\n’ belgisi de s qatarǵa qosıladı. Belgilerdi oqıw tamamlanǵannan keyin s qatar aqırına, qatar tamamlanıw belgisi ‘\0’ belgisi qosıladı. Eger qatardı oqıw sátli bolsa, funkciya s argument kórsetetuǵın qatardı qaytaradı, keri jaǵdayda NULL qaytaradı.
Fayl aǵımına qatardı fputs() funkciyası járdeminde shıǵarıw múmkin. Bul funkciya prototipi
int fputs (const char *s, FILE *stream);
kórinisinde anıqlanǵan. Qatar aqırındaǵı jańa qatarǵa ótiw belgisi hám terminatorlar aǵımǵa shıǵarılmaydı. Aǵımǵa shıǵarıw sátli bolsa, funkciya teris emes san qaytaradı, keri jaǵdayda EOF qaytaradı.
foef() funkciyası tiykarında makros bolıp, fayl ústinde oqıw-jazıw ámelleri orınlanıp atırǵanda fayl aqırı belgisi ushıraǵan yaki joqlıǵın bildiredi. Funkciya
int feof(FILE *stream);
206
prototipine iye bolıp, ol fayl aqırı belgisi ushırasa, nolden parıqlı sandı qaytaradı, basqa jaǵdaylarda 0 mánisin qaytaradı.
Tómende keltirilgen mısalda faylǵa jazıw hám oqıw ámelleri kórsetilgen.
#include <iostream.h> #include <stdio.h> int main()
{
char с;
FILE *in, *out;
if((in = fopen("D:\\USER\\STUDENT.TXT", "rt")) == NULL)
{
cout << "student.txt faylı ashılmadı!\n"; return 1;
}
if((out = fopen("D:\\USER\\STUDENT.DBL", "wt+"))==NULL)
{
cout << "student.dbl faylı ashılmadı!\n"; return 1;
}
while (!feof(in))
{
char c = fgetc(in); cout << c; fputc(c, out);
}
fclose(in);
fclose(out); return 0;
}
Programmada «student.txt» faylı tekst faylı sıpatında oqıw ushın ashılǵan hám ol in ózgeriwshisi menen baylanısqan. Dál sonday, «student.dbl» tekst faylı jazıw ushın ashılǵan hám out penen baylanısqan. Eger fayllardı ashıw sátsiz bolsa, sáykes xabar beriledi hám programma óz jumısın tamamlaydı. Keyinrek, qashan in
207
faylı aqırına jetpegenshe, onnan belgiler oqıladı hám ekranǵa, hámde out faylına shıǵarıladı. Programma aqırında eki faylda jabıladı.
Мásele. Spiral tártiplestiriw usılı.
Berilgen х vektorın kóbikshe usılında kemeymeytuǵın etip tártiplestiriw usılı tómendegishe ámelge asırıladı: massivtıń qońsı elementleri xk hám xk+1 (k=1,..,n-1) salıstırıladı. Eger xk>xk+1 bolsa, ol jaǵdayda bul elementler óz-ara orın almasadı. Usı jol menen birinshi ótiwde eń úlken element vektordıń aqırına jaylasadı. Keyingi adımda vektor basınan n-1 orındaǵı elementke shekem joqarıda orınlanǵan jol menen qalǵan elementlerdiń eń úlkeni n-1 orınǵa jaylastırıladı hám t.b.
Spirallı tártiplestiriw usılı kóbiksheli tártiplestiriw usılına uqsas, biraq xk hám xk+1 (k=1,2,3,..,n-1) elementler orın almasqannan keyin «spiraldan» ótkeriw ámeli qollanıladı: shep táreptegi kishi element imkanı barınsha shep tárepke tártiplestiriw usılı saqlanǵan jaǵdayda kóshiriledi. Bul usıl ápiwayı kóbiksheli tártiplestiriw usılına salıstırmalı tez isleydi.
Programma teksti:
#include <stdio.h> #include <alloc.h>
int *Kóbiksheli_Tártiplestiriw(int *, int); int main()
{
char f_atı[80];
printf("Fayl atın kiritiń:"); scanf("%s", &f_atı);
int Ólshem, i = 0, *Massiv; FILE *f1, *f2;
if((f1 = fopen(f_atı, "rt")) == NULL)
{
printf("Qáte: %s fayl ashılmadı!", f_atı); return 1;
}
fscanf(f1, "%d", &Ólshem);
Massiv = (int *) malloc(Ólshem *sizeof(int));
208
while(!feof(f1))
fscanf(f1, "%d", &Massiv[i++]); fclose(f1);
Massiv = Kóbiksheli_Tártiplestiriw(Massiv, Ólshem); f2 = fopen("nátiyje.txt", "wt");
fprintf(f2, "%d%c", Ólshem, ' '); for(i = 0; i < Ólshem; i++)
fprintf(f2, "%d%c", Massiv[i], ' '); fclose(f2);
return 0;
}
int *Kóbiksheli_Tártiplestiriw(int M[], int n)
{
int almastı = 1, waqtınsha;
for(int i = 0; i < n-1 && almastı; i++)
{
almastı = 0;
for(int j = 0; j < n–i-1; j++) if(M[j] > M[j+1])
{
almastı = 1; waqtınsha = M[j]; M[j] = M[j+1]; M[j+1] = waqtınsha; int k = j;
if(k)
while(k && M[k] > M[k-1])
{
waqtınsha = M[k-1]; M[k-1] = M[k];
M[k] = waqtınsha; k--;
}
}
}
209
return M;
}
Programmada berilgenlerdi aǵımnan oqıw yaki aǵımǵa shıǵarıwda fayldan formatlı oqıw - fscanf() hám jazıw - fprintf() funkciyalarınan paydalanılǵan. Bul funkciyalardıń sáykes túrde scanf() hám printf() funkciyalarınan parıqı - olar berilgenlerdi birinshi argument sıpatında beriletuǵın tekst fayldan oqıydı hám jazadı.
Atı paydalanıwshı tárepinen kiritiletuǵın f1 fayldan pútin sanlar massiviniń uzınlıǵı hám mánisleri oqıladı hám tártiplengen massiv f2 faylǵa jazıladı.
Vektordı tártiplestiriw usılı Kóbiksheli_Tártiplestiriw() funkciyası tárepinen ámelge asırıladı. Oǵan vektor hám onıń uzınlıǵı kiriwshi parametr boladı hám tártiplengen vektor funkciya nátiyjesi sıpatında qaytarıladı.
Náwbettegi eki funkciya fayl aǵımınan formatlanbaǵan oqıw-jazıwdı ámelge asırıwǵa arnalǵan.
fread() funkciyası tómendegi prototipke iye:
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
Bul funkciya aǵımnan ptr kórsetip turǵan buferge, hár biri size bayt bolǵan n dana berilgenler blogın oqıydı. Oqıw sátli bolsa, funkciya oqılǵan bloklar sanın qaytaradı. Eger oqıw processinde fayl aqırı ushırap qalsa, yaki qátelik júz berse, funkciya tolıq oqılǵan bloklar sanın yaki 0 di qaytaradı.
fwrite() funkciyası prototipiniń
size_t fwrite(const void *ptr, size_t size,
size_t n, FILE *stream);
kórinisi anıqlanǵan. Bul funkciya ptr kórsetip turǵan buferden, hár biri size bayt bolǵan n dana berilgenler blogın aǵımǵa shıǵaradı. Jazıw sátli bolsa, funkciya jazılǵan bloklar sanın qaytarаdı. Eger jazıw processinde qátelik júz berse, funkciya tolıq jazılǵan bloklar sanın yaki 0 di qaytaradı.
12.8. Fayl kórsetkishin basqarıw funkciyaları
Fayl ashılǵanda, ol menen «stdio.h» baslama faylında anıqlanǵan FILE
210