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

Joqari darejeli programmalastiriwda C++ Last

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

 

 

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