C++ dasturlash tillada fayllar bilan ishlash usullari. binar fayllarga maʼlumotlarni yozish va o‘qish

MAVZU:   C++ DASTURLASH TILLADA FAYLLAR BILAN
ISHLASH USULLARI. BINAR FAYLLARGA MA LUMOTLARNIʼ
YOZISH VA O QISH	
ʼ
  
REJA:
I.BOB.KIRISH.
1.1. . Fayllar bilan ishlashning ahamiyati.
1.2. Binar fayllar va matnli fayllar orasidagi farq.
II. BOB. ASOSIY QISM.
 2.1.  Fayllar bilan ishalash uchun ilk sozlash.
 2.2.  Faylga yozish, fayldan o'qish.
 2.3.  Fayl oxirini aniqlash.
 2.4.  Matnli faylga ma'lumot yozish.
III.BOB.XULOSA.
IV.BOB.FOYDALANILGAN ADABIYOTLAR RO’YXATI.
1 KIRISH
1.1. Fayllar Bilan Ishlashning Ahamiyati
Fayllar kompyuter dasturlashining ajralmas qismidir. Ma'lumotlarni saqlash
va ularni qayta ishlashda fayllar bilan ishlash juda muhim ahamiyatga ega. Fayllar
dasturlarga katta hajmdagi ma'lumotlarni uzoq muddatli saqlash imkonini beradi.
Masalan, dastur ishi davomida foydalanuvchi ma'lumotlarini yoki dastur
natijalarini saqlash va keyinchalik ulardan foydalanish uchun fayllar ishlatiladi.
Fayllar bilan ishlash imkoniyatini bilish dasturchilar uchun zarurdir, chunki bu
ularning dasturlarini yanada qulayroq va samaraliroq qilish imkonini beradi.
1.2. Binar Fayllar va Matnli Fayllar Orasidagi Farq
Fayllar ikkita asosiy turga bo'linadi: matnli fayllar va binar fayllar.
- Matnli Fayllar: Bu turdagi fayllarda ma'lumotlar oddiy matn ko'rinishida
saqlanadi. Matnli fayllar odatda .txt, .csv yoki .html kabi kengaytmalarga ega
bo'ladi. Matnli fayllarda har bir ma'lumot satr yoki belgi ko'rinishida saqlanadi.
Ushbu fayllar bilan ishlash oson, lekin katta hajmdagi ma'lumotlarni samarali
saqlash va qayta ishlashda ba'zi cheklovlarga ega.
- Binar Fayllar: Bu turdagi fayllarda ma'lumotlar xotiradagi kabi to'g'ridan-
to'g'ri bitlar ko'rinishida saqlanadi. Binar fayllar oddiy matnli fayllarga qaraganda
ko'proq ma'lumot saqlash imkoniyatiga ega. Ular dasturdan dasturga, platformadan
platformaga uzatishda ma'lumotlar aniqligini saqlab qoladi. Binar fayllar bilan
ishlash matnli fayllarga qaraganda murakkabroq, lekin katta hajmdagi
ma'lumotlarni samarali saqlash va qayta ishlashda juda qulaydir.
2 Ushbu kursda biz C++ dasturlash tilida binar fayllar bilan ishlash usullarini
o'rganamiz. Bunda fayllarni qanday ochish va yopish, ma'lumotlarni qanday yozish
va o'qish kerakligini ko'rib chiqamiz. Amaliy misollar orqali siz binar fayllar bilan
ishlashni chuqurroq o'rganasiz.
II BOB FAYLLAR BILAN ISHLASH
2.1 Fayllar bilan ishalash uchun ilk sozlash
C++   dasturlash   tilida   fayllar   bilan  ishlash   ftsream   kutubxonasidagi   biron  bir
sinflar yordamida amalga oshiriladi.
ftsream   kutubxonasi   fayllarni   o'qib   olish   javob   beradigan   ifstream   sinfiga
hamda faylga axborotni yozib qo'yilishiga javob beradigan oftsream sinfiga ega.
Biron-bir faylni yozish yoki o'qish maqsadida ochish uchun , oftsream turdagi
yoki   mos   holda   iftsream   turdagi   o'zgaruvchini   e'lon   qilish   kerak.   Bunday
o'zgaruvchini   e'lon   qilishda   fayl   nomi   o'zgaruvchi   nomidan   keyin   qavs   ichida
berilgan belgilar massivi ko'rinishida uzatiladi.
Masalan,   C   diskda   joylashgan   'text.txt'   faylini   ochish   kerak.   Buning   uchun
kodning quyidagi fragmenti qo'llaniladi:
ifstream  ifl ("C:\text.txt");
ofstream  ofl("C:\text.txt"):
char  s[20]="C:\text.txt";
ifstream  if] (s);
Bu   yerda   ifl,   if]   va   ofl   -   o'zgaruvchilar   nomi   bo'lib,   ular   orqali   fayl   bilan
ma'lumotlarni   ayirboshlash   amalga   oshiriladi.   Agar   fayl   xam   dasturning
bajarilayotgan   fayli   joylashtirilgan   papkada   bo'lsa,   u   xolda   faylning   nomi   to'liq
ko'rsatilmasligi   mumkin   (faqat   fayl   nomi,   unga   borish   yo'lisiz).   Bundan   tashqari
fayl   nomini   to'g'ridan-to'ri   ko'rsatish   o'rniga,   uning   nomidan   iborat   belgilar
massivlarini ko'rsatish mumkin. 
2.2 Faylga yozish, fayldan o'qish
3 Axborotni   faylga   yozish   uchun   put   komandasidan   foydalanish   mumkin.   Bu
komanda orqali standart turdagi yakka o'zgaruvchi yoki biron-bir belgilar massivi
uzatiladi. Belgilar massivi uzatilgan xolda xam massivdagi  belgilar sonini uzatish
kerak.
Bundan   tashqari   "<<"operatoridan   foydalanish   mumkin.   Bu   operatordan
kodning   bitta   satrida   turli   turdagi   qiymatlarni   uzatgan   xolda   ko'p   martalab
foydalanish   mumkin.   Satr   xaqida   gap   ketganda,   chiqarish   satr   oxiri   belgisi,   ya'ni
"n'   paydo   bo'lishidan   oldin   amalga   oshiriladi.   Belgisiz   turga   ega   bo'lgan   barcha
o'zgaruvchilar oldin belgilarga o'zgartirib olinadi 1
.
ifstream of ("C:\text.txt");
char a='M';
ofl.put(s):
char s[9]="The text";
ofl.put(s,9);
ofl<<"The text";
inti=100;
oflcci;
char ss[]="Salom, Dunyo!";
int k=200;
ofl<<" Salom, Dunyo!"<<k<<ss<<200;
Axborotni  fayldan o'qib olish uchun ">>" operatoriga ekvivalent  bo'lgan get
funksiyasi   qo'llanadi.   Put   funksiyasi   kabi,   get   funksiyasi   xam   har   qanday
o'zgaruvchilarning standart   turlari  yoki   /  va  belgilar  massivlari  bilan  ishlay  oladi.
Shuningdek get gaxar jixatdan ekvivalent bo'lgan getline funksiyasi mavjud: farqi
faqat shundaki, getline funksiyasi satr oxiridan oxirgi belgini qaytarmaydi.
1
 Sh. I. Razzoqov, M. J. Yunusova. Dasturlash: Kasb-hunar kollejlari uchun o'quv qo'llanma.  T. : "Ilim Ziyo", 2011y.
4 ifstream ofl ("C:\text.txt"); char s; char ss[9]; s=ofl.get ():
cout <es;
ofl.get (s);
cout <<s;
ofl.getline (ss,9);
cout <<ss;
ofl >>ss;
cout <<ss;
2.3 Fayl oxirini aniqlash
Fayl   ichidagisini,   fayl   oxiri   uchramaguncha,   o'qish   dasturdagi   oddiy   fayl
operatsiyasi   xisoblanadi.   Fayl   oxirini   aniqlash   uchun,   dasturlar   oqim   ob'ektining
eof funksiyasidan foydalanishlari mumkin. Agar fayl oxiri hali uchramagan bo'lsa,
bu   funksiya   0   qiymatini   qaytarib   beradi,   agar   fayl   oxiri   uchrasa 2
,   1   qimatini
qaytaradi.   While   siklidan   foydalanib,   dasturlar,   fayl   oxirini   topmagunlaricha,
quyida ko'rsatilganidek, uning ichidagilarini uzluksiz o'qishlari mumkin:
while (! Input_file.eof())
//Operatorlar
Ushbu   xolda   dastur,   eof   funksiyasi   yolg'on   (0)   ni   qaytarguncha,   siklni
bajarishda davom etadi.
Xuddi shunday, keyingi dastur - WORD_EOF.CPP fayl ichidagisini bitta so'z
bo'yicha bir martada, fayl oxiri uchramaguncha, o'qiydi: #include <lostream.h>
#include <fstream.h>
void main(void)
2
 М. Ашуров, М. Мирмахмудов, Ш. Сапаев. Замонавий дастурлаш тиллари фанидан лаборатория ишлари. Т . :
ТДПУ , 2008  й .
5 ifstream input_file ("BOOKINFO.DAT"):
char word [64] ;
while  (! input_file.eof())
input_file  >> word;
cout  << word << endl;
2.4. Matnli faylga ma'lumot yozish
Matnli   fayllar   bilan   ishlash   binar   fayllar   bilan   ishlashdan   bir   oz   farq   qiladi.
Matnli   fayllarda   ma`lumotlar   satrlarda   saqlanadi.   Matnli   fayl   elementilari   har   xil
uzunlikdagi   satrlardir.   Bu   satrlar   bir   biridan   satr   oxiri   belgisi   bilan   ajratiladi.
Matnli   fayl   elementlari   indekslanmagan   bo`lganligi   uchun,   faylning   istalgan
elementiga bevosita murojaat qilib bo`lmaydi 3
.
C++   da   matnli   yoki   binar   fayllar   bilan   ishlash   uchun   keng   imkoniyatlar
berilgan.   Matnli   fayllar   bilan   ishlashda   oddiy   C   ning   funksiyalaridan   ham
foydalanish mumkin. Masalan, formatli o'qish va yozish funksiyalari yoki oldingi
mavzudagi   funksiyalardan   foydalanishimiz   mumkin.   Matnli   fayllar   bilan
ishlashning   bunday   usuli   kitoblarda   keng   yoritilgan.   Ularni   mustaqil   o'qib   -
o'rganishingiz mumkin.
Bu   mavzu   fayllar   bilan   ishlovchi   oqimlarni   qisqacha   o'rganamiz   va   buni
matnli fayl misolida ko'ramiz.
Standart   kiritish   /   chiqarish   kutubxonasi   sinflari   quyidagicha   shajaraga   ega:
Fayllar bilan ishlash uchun quyidagi sifnlar ob'ektlari hosil qilinadi:
ofstream - faylga ma'lumot yozish uchun
3
 Horstmann, Cay S. C++ for everyone / Cay S. Horstmann. Printed in the United States of America - 2nd ed. 2010. - 
P. 562.
6 ifstream - fayldan ma'lumot o'qish uchun
fstream - fayldan ma'lumot o'qish uchun va yozish uchun
Bu   sinflarni   dasturda   ishlatish   uchun   <fstream.h>   sarlavha   faylini   qo'shish
kerak bo'ladi. Bundan keyin programmada aniq fayllar oqimini aniqlash mumkin.
Masala:   ofstream   yozish;   //   faylga   yozish   oqimini   e'lon   qilish   ifstream   oqish;   //
fayldan   o'qish   oqimini   e'lon   qilish   fstream   yoz_oqi;   //   faylga   yozish   va   o'qish
oqimini   e'lon   qilish   Keyin   faylni   ochish   kerak   bo'ladi.   Faylni   ochish   deganda,
uning ustida nima amal qilinishi haqida amaliyot tizimiga xabar berish tushuniladi.
void   open   (const   char   *   filename,   ios_base::openmode   mode   =   ios_base::out   );
mode parametri quyidagicha qiymatlarni qabul qilishi mumkin:
ios::in faqat ma'lumot o'qish uchun
ios::out faqat ma'lumot yozish uchun
faylni ochishda fayl ko'rsatkichini fayl oxiriga ios::ate qo'yish
ios::app fayl oxiriga ma'lumotlarni yozish uchun
ios::trunc bor bo'lgan faylning ustidan yangi faylni yozish
ios::binary binar holda ma'lumotlarni almashish uchun
Har bir sinf uchun mode parametrining odatiy qiymatlari mavjud:
class default mode parameter
ofstream ios::out
ifstream ios::in
fstream ios::in | ios::out
Fayl ustida o'qish yoki yozish amalini bajarib bo'lgandan song, faylni yopish kerak
bo'ladi. Faylni yopish uchun close funksiyadi ishlatiladi 4
.
Masalan:
4
 Peter Gottschling. Discovering Modern C++. An Intensive Course for Scientists, Engineers, and Programmers. 
"Addison-Wesley", 2015 y.
7 yozish.close();
oqish.close();
Matnli faylga ma'lumot yozish
#include <iostream.h>
#include <fstream.h>
int main ()
{
ofstream yozish; // faylga yozish oqimini hosil qilish
yozish.open("namuna.txt");
// yangi namuna.txt nomli fayl hosil qilinadi.
// agar namuna.txt fayli oldindan bo'lsa,
// uning eski qiymatlari o'chiriladi
// va yangi fayl hosil qilinadi
yozish << "Matnli faylga ma'lumot yozish" << endl;
yozish << "Juda oson!" << endl;
yozish.close(); // faylni yopish
system ("pause");
return 0;
}
Fayldan matni o'qish
#include <iostream.h>
#include <fstream.h>
#include <string.h>
int main ()
{
ifstream oqish; // fayldan o'qish oqimini hosil qilish
string satr;
8 oqish.open("namuna.txt");
// faylni ochishda xatolik sodir bo'lsa
if (!oqish.is_open())
{
cout << "Faylni ochishda xatolik sodir bo'ldi." << endl;
exit(1); // dasturni tugatish
}
while (!oqish.eof())
{
// fayldan o'qish
getline(oqish, satr);
// ekranga chiqarish
cout << satr << endl;
}
// namuna.txt fayli bilan oqish oqimi aloqasini uzish
oqish.close();
system (“pause”);
return 0;
}
istream sinfi funksiyalari
istream& seekg ( streampos pos );
istream& seekg ( streamoff off, ios_base::seekdir dir );;
oqish oqimi ko'rsatkichini o'rnatish (siljit ish).
pos - oqim buferining yangi pozitsiyasi.
dir parametri quyidagilardan birini qabul qilishi mumkin:
Qiymat Izoh
ios::beg oqimning boshlanishi
9 ios::cur oqimning joriy xolari
ios::end oqim oxiri
long tellg();
o'qish oqimining joriy xolatini (pozitsiyasi) aniqlash.
ostream sinfi funksiyalari
ostream& seekp ( streampos pos );
ostream& seekp ( streamoff off, ios_base::seekdir dir );
yozish oqimi o'rnini (pozitsiyasini) o'rnatish.
pos - oqim buferining yangi pozitsiyasi
dir parametri beg, cur, end qiymatlaridan birini qabul qilishi mumkin.
long tellp() - yozish oqimining kelgan joyini aniqlash.
Fayldan nusxa olish
//ushubu dastur orqali ixtiyoriy fayldan nusxa olish mumkin
#include <iostream.h>
#include <fstream.h>
int main ()
{
int length;
char * buffer, fayl[] = "matn.txt", yangi[]="yangi_fayl.txt";
// fayl - nusxalanadigan fayl nomi
// yangi - yangi nusxalangan fayl nomi
// o'qish oqimi
ifstream fromfile(fayl, ios::binary );
if (!fromfile.is_open())
{
cout << "faylni o'qishda xatolik sodir bo'ldi\n";
exit(1);
}
// yozish oqimi
10 ofstream tofile(yangi, ios::binary );
// fayl xajmini aniqlash:
fromfile.seekg (0, ios::end); // fayl oxiriga o'tish
length = fromfile.tellg();
fromfile.seekg (0, ios::beg); // fayl boshiga o'tish
// xotira ajratish:
buffer = new char [length];
// blokka ma'lumotlarni o'qish:
fromfile.read (buffer, length);
fromfile.close();
// nusxalanishi kerak bo'lgan faylga yozish
tofile.write (buffer, length);
// xotirani bo'shatish
delete[] buffer;
cout << "fayl nusxalandi\n";
system ("pause");
return 0;
}
dic.txt nomli fayl berilgan . Faylning har bir satrida inglizcha va o`zbekcha so`zlar 
"-" belgisi bilan ajratilgan. Inglizcha so`zlarni english.txt fayliga, o`zbekcha 
so`zlarni uzbek.txt fayliga o`tkazuvchi programma tuzilsin.
dic.txt fayli quyidagicha bo'ladi:
hello - salom
bread - non
car – mashina
#include <iostream.h>
#include <fstream.h>
#include <string.h>
using namespace std;
11 int main ()
{
ifstream dic("dic.txt");
ofstream uzbek("uzbek.txt");
ofstream english("english.txt");
if (!dic.is_open())
{
cout << "dic.txt - fayli topilmadi\n";
exit(1);
}
string s, uzb, eng;
int p;
cout << "dic.txt fayli ma'lumotlari\n";
while (!dic.eof())
{
getline(dic, s);
p = s.find("-");
eng.assign(s, 0, p - 1);
uzb.assign(s, p + 1, s.length() - (p + 1));
uzbek << uzb << endl;
english << eng << endl;
cout << s << endl;
}
dic.close();
uzbek.close();
english.close();
system ("pause");
return 0;
}
12 2.5. Matn va binar fayllar
Kalit   so'zlar:,   ro'yxat,   manzil,   nolinchi   ko'rchsatkich,   tugun,   adres   olish   &.
bo'shatish,   ko'rsatkich,   virtual   destruktor,   xotira,   xotira   chiqishi,   destruktor,
toifani o'zlashtirish, resurslar chiqishi, a'zo destruktori.
C++   tili   S   tilidan   o'qish-yozish   amalini   bajaruvchi   standart   funksiyalar
kutubxonasini   vorislik   bo'yicha   olgan.   Bu   funksiyalar   <stdio.h>   sarlavha   faylida
e'lon qilingan. O'qish-yozish amallari fayllar bilan bajariladi. Fayl matn yoki binar
(ikkilik) bo'lishi mumkin.
Matn   fayl   -   ASCII   kodidagi   belgilar   bilan   berilganlar   maj-muasi.   Belgilar
ketma-ketligi   satrlarga   bo'lingan   bo'ladi   va   satr-ning   tugash   alomati   sifatida   CR
(karetkani   qaytarish   yoki   "ur")   LF   (satmi   o'tkazish   yoki   "un")   belgilar   juftligi
hisoblanadi.   Matn   fayldan   berilganlarni   o'qishda   bu   belgilar   juftligi   bitta   CR
belgisi   bilan   almashtiriladi   va   aksincha,   yozishda   CR   belgisi   ikkita   CR   va   LF
belgilariga almashtiriladi. Fayl oxiri #26 ("Z) belgisi bilan belgilanadi 5
.
Matn faylga boshqacha ta'rif berish ham mumkin. Agar faylni matn tahririda
ekranga   chiqarish   va   o'qish   mumkin   bo'lsa,   bu   matn   fayl.   Klaviatura   ham
kompsyuterga   faqat   matnlarni   jo'natadi.   Boshqacha   aytganda   programma
tomonidan   ekranga   chiqariladigan   barcha   ma'lumotlarni   stdout   nomidagi   matn
fayliga   chiqarilmoqda   deb   qarash   mumkin.   Xuddi   shunday   klaviaturadan
o'qilayotgan qanday berilganlarni matn faylidan o'qilmoqda deb hisoblanadi.
Matn   fayllarining   komponentalari   satrlar   deb   nomlanadi.   Satrlar   uzluksiz
joylashib, turli uzunlikda va bo'sh bo'lishi mumkin. Faraz qilaylik, T matn fayli 4
satrdan iborat bo'lsin:
5
 A. R. Azamatov, B. Boltayev. Algoritmlash va dasturlash asoslari. O'quv qo'llanma. T. : "Cho'lpon", 2010 y.
13 Matnni ekranga chiqarishda satr oxiridagi #13#10 boshqaruv belgilari juftligi
kursomi   keyingi   qatorga   tushiradi   va   uni   satr   boshiga   olib   keladi 6
.   Bu   matn   fayl
ekranga chop etilsa, uning ko'rinishi quyidagicha bo'ladi:
I- satr[13][10]
2- satr uzunroq[13][10]
[13][10]
4- satr[13][10]
[26]
Matndagi  [n]  - n-  kodli  boshqaruv belgisini  bildiradi. Odatda matn tahrirlari
belgilarni ko'rsatmaydi.
bu
Binarfayllar   -   bu   oddiygina   baytlar   ketma-ketligi.   Odatda   binar   fayllardan
berilganlarni foydalanuvchi tomonidan bevosita «ko'rish» zarur bo'lmagan hollarda
ishlatiladi.   Binar   fayllardan   o'qish-yozishda   baytlar   ustida   hech   qanday
konvertatsiya amallari baja-rilmaydi.
2.6. O'qish-yozish oqimlari. Standart oqimlar
Oqim   tushunchasi   berilganlarni   faylga   o'qish-yozishda   ularni   belgilar
ketmaketligi yoki oqimi ko'rinishida tasavvur qilishdan kelib chiqqan. Oqim ustida
quyidagi amallarni bajarish mumkin:
oqimdan berilganlar blokini operativ xotiraga o'qish;
•
operativ xotiradagi berilganlar blokini oqimga chiqarish;
oqimdagi berilganlar blokini yangilash;
oqimdan yozuvni o'qish;
6
 A. R. Azamatov, B. Boltayev. Algoritmlash va dasturlash asoslari. O'quv qo'llanma. T.: "Cho'lpon", 2013 y.
14 •oqimga yozuvni chiqarish.
Oqim bilan ishlaydigan barcha funksiyalar buferli, format-lashgan yoki
formatlashmagan o'qish-yozishni ta'minlaydi.
Programma ishga tushganda o'qish-yozishning quyidagi standart oqimlar
ochiladi:
stdin - o'qishning standart vositasi;
stdout - yozishning standart vositasi;
stderr - xatolik haqida xabar berishning standart vositasi;
stdprn - qog'ozga chop qilishning standart vositasi;
stdaux - standart yordamchi qurilma.
Kelishuv   bo'yicha   stdin   -   foydalanuvchi   klaviaturasi,   stdout   va   stderr   -
terminal   (ekran),   stdprn   -   printer   bilan,   hamda   stdaux   -   kompsyuter   yordamchi
portlariga   bog'langan   hisoblanadi.   Berilgan-larni   o'qish-yozishda   stderr   va   stdaux
oqimidan   boshqa   oqimlar   bufer-lanadi,   ya'ni   belgilar   ketma-ketligi   operativ
xotiraning   bufer   deb   nomlanuvchi   sohasida   vaqtincha   jamlanadi.   Masalan,
belgilarni tashqi qurilmaga chiqarishda belgilar ketma-ketligi buferda jamlanadi va
bufer to'lgandan keyingina tashqi qurilmaga chiqariladi 7
.
Hozirdagi   operatsion   sistemalarda   klaviatura   va   displeylar   matn   fayllari
sifatida   qaraladi.   Haqiqatdan   ham   berilganlarni   klaviaturadan   programmaga
kiritish   (o'qish)   mumkin,   ekranga   esa   chiqarish   (yozish)   mumkin.   Programma
ishga tushganda standart o'qish va yozish oqimlari o'miga matn fayllarni tayinlash
orqali   bu   oqimlarni   qayta   aniqlash   mumkin.   Bu   holatni   o'qishni   (yozishni)   qayta
adreslashro'y berdi deyiladi. O'qish uchun qayta adreslashda "<" belgisidan, yozish
uchun   esa   ">   belgisidan   foydalaniladi.   Misol   uchun   gauss.exe   bajariluvchi
programma   berilganlarni   o'qishni   klaviaturadan   emas,   balki   massiv.txt   faylidan
7
 Horton I. - Beginning Visual C++ 2012 / I.Horton. Published simultaneously in Canada. - 2012. P. 988.
15 amalga oshirish zarur bo'lsa, u buyruq satrida quyidagi ko'rinishda yuklanishi zarur
bo'ladi:
gauss.exe < massiv.txt  Agar programma natijasini natija.txt fayliga chiqarish
zarur bo'lsa
gauss.exe > natija. txt satri yoziladi.
Va nihoyat, agar berilganlarni massiv.txt  faylidan o'qish va natijani natija.txt
fayliga yozish uchun
gauss. exe < massiv.txt > natija.txt
buyruq satri teriladi.
Umuman   olganda,   bir   programmaning   chiqish   oqimini   ikkinchi
programmaning   kirish   oqimi   bilan   bog'lash   mumkin.   Buni   konveyrli   jo'natish
deyiladi.   Agar   ikkita   junat.exe   programmasi   qabul.exe   programmasiga
berilganlarni jo'natishi  kerak bo'lsa, u holda ular o'rtasiga 'j' belgi qo'yib yoziladi:
junat.exe | qabul.exe
Bu   ko'rinishdagi   programmalar   o'rtasidagi   konveyrli   jo'na-tishni   operatsion
sistemaning o'zi ta'minlaydi 8
.
Belgilarni o'qish-yozish funksiyalari
Belgilarni o'qish-yozish funksiyalari makros ko'rinishida amalga oshirilgan.
getc()   makrosi   tayinlangan   oqimdan   navbatdagi   belgini   qayta-radi   va   kirish
oqimi ko'rsatkichini keyingi belgini o'qishga mos-lagan holda oshiradi. Agar o'qish
muvaffaqiyatli   bo'lsa   getc()   funksiyasi   ishorasiz   int   ko'rinishidagi   qiymatni,   aks
holda EOF qaytaradi. Ushbu funksiya prototipi quyidagicha:
int getc(FILE * stream) EOF identifikator makrosi
#define EOF(-1)
8
 Harry Hariom Choudhary, Bjarne M Stroustrup. C++ Programming Professional.: Sixth Best Selling Edition for 
Beginner's & Expert's 2014.
16 ko'rinishida   aniqlangan   va   o'qish-yozish   amallarida   fayl   oxirini   belgilash
uchun xizmat qiladi. EOF qiymati ishorali char turida deb hisoblanadi. SHu sababli
o'qish-yozish jarayonida unsigned char turidagi  belgilar ishlatilsa, EOF makrosini
ishlatib bo'lmaydi.
Navbatdagi misol getc() makrosini ishlatishni namoyon qiladi.
#include <iostream.h> #include <stdio.h>
int main()
char ch;
cout<<"Belgini kiriting: ";
ch=getc (stdin);
cout<<"Siz "<<ch<<" belgisini kiritdingiz.\n"; return 0;
getc()   makrosi   aksariyat   holatlarda   stdin   oqimi   bilan   ishlatilganligi   sababli,
uning getc(stdin) ko'rinishiga ekvivalent bo'lgan int getchar() makrosi aniqlangan.
YUqoridagi   misolda   «ch=getc(stdin)»   qatorini   «ch=getchar();»   qatori   bilan
almashtirish mumkin 9
.
Belgini oqimga chiqarish uchun pute() makrosi aniqlangan va uning prototipi
int pute(int c, FILE*stream)
ko'rinishida aniqlangan. putc() funksiyasi stream nomi bilan berilgan oqimga
s belgini chiqaradi. Funksiya qaytaruvchi qiymati sifatida int turiga aylantirilgan s
belgi bo'ladi. Agar belgini chiqarishda xatolik ro'y bersa EOF qaytariladi.
putc() funksiyasini standart stdout oqimi bilan bog'langan holati -
putc(c,strout) uchun putchar(c) makrosi aniqlangan.
Satrlarni o'qish - yozish funksiyalari
Oqimdan satmi o'qishga mo'ljallangan gets() funksiyasining prototipi
9
 Bjarne Stroustrup. Programming: Principles and Practice Using C++ (2nd Edition). Person Education, Inc. 2014. 
second printing, January 2015.
17 char * gets(char *s);
ko'rinishida   aniqlangan.   gets()   funksiyasi   standart   oqimdan   satrni   o'qiydi   va
uni s o'zgaruvchisiga joylashtiradi. Joylashtirish payti-da oqimdagi "n" belgisi "0"
belgisi   bilan   almashtiriladi.   Bu   funksiyani   ishlatishda   o'qilayotgan   satming
uzunligi   s   satr   uchun   ajratilgan   joy   uzunligidan   oshib   ketmasligini   nazorat   qilish
kerak bo'ladi.
puts() funksiyasi
int puts(const char *s);
ko'rinishida bo'lib, u standrat oqimga argumentda ko'rsatilgan satmi chiqaradi.
Bunda   satr   oxiriga   yangi   satrga   o'tish   belgisi   "In'   qo'shiladi.   Agar   satrni   oqimga
chiqarish   muvaffaqiyatli   bo'lsa   puts()   funksiyasi   manfiy   bo'lmagan   sonni,   aks
holda EOF qaytaradi.
Satmi o'qish-yozish funksiyalarini ishlatishga misol tariqa-sida qo'yidagi
programmani keltirish mumkin,
#include <stdio.h>
int main()
char *s;
puts("Satrni kiriting: ");
gets(s);
puts("Kiritilgan satr: ");
puts(s);
return 0;
Formatli o'qish va yozish funksiyalari
Formatli o'qish va yozish funksiyalari - scanf() va printf() funksiyalari S
18 tilidan   vorislik   bilan   olingan.   Bu   funksiyalarni   ishlatish   uchun   «stdio.h»
sarlavha faylini programmaga qo'shish kerak bo'ladi.
Formatli o'qish funksiyasi scanf() quyidagi prototipga ega:
int scanf(const char * <format>[<adres>…])
Bu funksiya standart oqimdan berilganlarni formatli o'qishni amalga oshiradi.
Funksiya,   kirish   oqimidagi   maydonlar   ketma-ket-ligi   ko'rinishidagi   belgilarni
birmabir   o'qiydi   va   har   bir   maydonni   <format>   satrida   keltirilgan   format
aniqlashtiruvchi-   siga   mos   ravishda   formatlaydi.   Oqimdagi   har   bir   maydonga
format   aniqlashtiruvchisi   va   natija   joylashadigan   o'zgaruvchining   adresi   bo'lishi
shart,   Boshqacha   aytganda,   oqimdagi   maydon   (ajratilgan   belgilar   ketma-ketligi)
ko'rsatilgan   formatdagi   qiymatga   akslanti-riladi   va   o'zgaruvchi   bilan   nomlangan
xotira   bo'lagiga   joylashtiriladi   (saqlanadi).   Funksiya   oqimdan   berilganlarni   o'qish
jarayo-nini   «to'ldiruvchi   belgini»   uchratganda   yoki   oqim   tugashi   natijasida
to'xtatishi   mumkin.   Oqimdan   berilganlarni   o'qish   muvafaqqiyatli   bo'lsa,   funksiya
muvafaqqiyatli   aylantirilgan   va   xotiraga   saqlangan   maydonlar   sonini   qaytaradi.
Agar   hech   bir   maydonni   saqlash   imkoni   bo'lmagan   bo'lsa,   funksiya   0   qiymatini
qaytaradi. Oqim oxiriga kelib
qolganda   (fayl   yoki   satr   oxiriga)   o'qishga   harakat   bo'lsa,   funksiya   EOF
qiymatini qaytaradi.
Formatlash satri -<format> belgilar satri bo'lib, u uchta toifaga bo'linadi:
•to'ldiruvchi belgilar;
•to'ldiruvchi belgilardan farqli belgilar;
•
format aniqlashtiruvchilari.
To'ldiruvchi-belgilar   -   bu   probel,   "t",   "n"   belgilari.   Bu   belgilar   formatlash
satridan o'qiladi, lekin saqlanmaydi.
19 To'ldiruvchi belgilardan farqli belgilar - bu qolgan barcha ASCII belgilari, %"
belgisilan tashqari. Bu belgilar formatlash satridan o'qiladi, lekin saqlanmaydi.
20 XULOSA
Kompyuterni   biron   bir   amalni   bajprishga   majburlash   uchun,   siz   (yoki
boshqalar) unga nima xoxlayotganingizni aniq, batafsil aytishingiz kerak.
Bundan   tashqari,   biz   o'zimiz   bajarishimiz   kerak   bo'lgan   vazifa   tavsifini
olamiz, masalan, "yaqin oradagi kinoteatrga qanday borish mumkin" yoki "to'lqinli
pechda go'shtni qanday qovurish mumkin". bunday tavsiflar va dasturlar orasidagi
farq   aniqlik   darajasida   aniqlanadi:   insonlar   sog'lom   aql   bilan   qo'llanmani
noaniqligini   aniqlashga   harakat   qiladilar,   kompyuter   bunday   qila   olmaydi.
Masalan,   "yo'lak   bo'ylab   o'nga,   zinadan   yuqoriga,   so'ngra   chapga"   -   yuqori
qavatdagi yuvinish xonasini topish imkonini beruvchi aniq qo'llanma. Biroq, agar
siz   bunday   sodda   qo'llanmaga   qarasangiz,   u   holda   ular   grammatik   noaniqligi   va
to'liq   emasligini   ko'rish   mumkin.   Masalan,   siz   stol   atrofida   o'tiribsiz   va   yuvinish
xonasiga   qanday   o'tishni   so'radingiz.   Sizga   javob   beruvchi,   o'rningizdan
turishingizni,   uni   aylanib   o'tishingizni   va   boshqalarni   aytishi   shart   emas.   Yana
sizga hyech kim sanchqini stolga qo'yishingiz, zanadan ko'tarilayotganda chiroqni
yoqishingiz kerakligini, yuvinish xonasiga kirish uchun eshikni ochish kerakligini
maslahat bermaydi.
Qarama-qarshi holatda bunga kompyuterning aqli yetmaydi. Unga barchasini
aniq   va   batafsil   tavsiflash   kerak.   Kompyuterga   qo'llanmani   batafsil   tavsiflash
uchun,   o'ziga   xos   grammatikaga   ega   bo'lgan   aniq   belgilangan   til   hamda   biz
bajarishni   xoxlayotgan   faoliyatlarni   barcha   ko'rinishlari   uchun   yaxshi   aniqlikdagi
lug'at kerak bo'ladi. Bunday til dasturlash tili va ko'p qamrovli masalalarni yechish
uchun ishlab chiqilgan - C+ + dasturlash tili deb nomlanadi.
Kompyuterlar, dasturlar va dasturlash bo'yicha falsafiy qarashlar 1-maruzada
kengroq yoritib berilgan. Bu yerda biz juda oddiy dasturdan boshlanadigan kodni
hamda uning bajarilishi uchun kerak bo'ladigan bir qancha usullar va qurilmalarni
ko'rib chiqamiz.
C+ tilida satrli literallar qo'shtirnoq (") bilan belgilanadi; ya'ni "Hello,Word!\
n" - bu belgilar satri. In belgi - yangi satrga o'tishni bildiruvchi maxsus belgi. cout
21 standart   chiqarish   oqimiga   tegishli.   "coutoqimida   chiquvchilar"   <<   chiqarish
operatori yordamida ekranda aks etadi. cout "see-out" kabi talaffuz qilinadi, lekin
"character   putstream"   ("belgilarni   chiqarish   oqimi")   qisqartmasi   hisoblanadi.
Dasturlashda qisqartmalar yetarlicha keng tarqalgan. Albatta, qisqartmalar birinchi
marta   eslab   qolish   uchun   noqulay   ko'rinishi   mumkin,   lekin   o'rganib   qolgach
ulardan   voz   kecha   olmaysiz,   ya'ni   ular   qisqa   va   boshqarib   bo'ladigan   dasturlarni
yaratishga imkon beradi. Satr oxiri
//"Hello, World!" chiqarish
izoh   hisoblanadi.   //   (ya'ni,   ikkita   egri   chiziqdan   keyin   (/))   belgidan   keyin
yozilgan   barchasi   izoh   hisoblanadi.   U   kompilyator   tomonidan   inkor   qilinadi   va
dasturni o'quvchi dasturchilar uchun mo'ljallangan. Bu holatda biz satrning birinchi
qismi nimani anglatishini sizga xabar qilish uchun izohdan foydalandik.
Izohlar   insonlar   uchun   dastur   matnida   ifodalashning   iloji   bo'lmagan   foydali
ma'lumotlarni qamrab oladi va dastur manzilini tasvirlaydi. Umuman olganda, izoh
o'zingiz   uchun   ham   foydali   bo'lishi   mumkin,   ya'ni   yaratgan   dasturingizga   xafta
yoki   yillar   o'tib   murojat   qilganingizda   nima   uchun   yaratilganini   tezda   anglab
olishga yordam beradi. O'zingizni dasturlaringizni yaxshi xujjatlashtirishga harakat
qiling 10
.
Dastur   ikkita   auditoriya   uchun   yoziladi.   Albatta,   biz   ularni   bajaruvchi
kompyuterlar uchun dastur yozamiz. Biroq biz kodni o'qish va modifikasiyalashga
uzoq   yillar   sarflaymiz.   Shunday   qilib,   dastur   uchun   ikkinchi   auditoriya   bo'lib
boshqa   dasturchilar   hisoblanadi.   Shuning   uchun   dasturning   yaratilishini   insonlar
o'rtasidagi muloqot shakli deb sanash mumkin. Albatta, insonlarni o'z dasturlarini
birinchi o'quvchilari deb hisoblash maqsadga muvofiq: agar ular qiyinchilik bilan
o'z yozganlarini tushunishsa, u holda dastur qachonlardir to'g'ri bo'lishi dargumon.
Shu sababli, kod o'qish uchun mo'ljallanganligini esdan chiqarmaslik kerak - dastur
10
 . Peter Gottschling. Discovering Modern C++. An Intensive Course for Scientists, Engineers, and Programmers. 
"Addison-Wesley", 2015 y.
22 onson o'qilishi uchun barcha imkoniyatlarni qilish kerak. Istalgan bolutda izohlar.
faqat insonlar uchun kerak, kompyuter ulami inkor qiladi
Dasturning   birinchi   satri   -   bu   o'quvchilarga   dastur   nima   qilishi   kerakligi
haqida xabar beradigan toifaviy izoh.
// Bu dastur ekranga "Hello, World!" xabarini chiqaradi.
Bu   izohlarning   foydali   tomoni   shundaki,   bunda   dastur   kodi   bo'yicha   dastur:
nima   qilayotganini   tushunish   mumkin,   lekin   biz   aynan   nima   hohlayotganimizni
aniqlash  mumkin emas.  Bundan   tasbqari, kodning  o'zidan  tashqari, biz  izohlarda.
dastuming maqsadini qisqacha tushuntirishimiz mumkin. Ko'pincha bunday izohlar
dasturing birinchi satrida joylashgan bo'ladi. Boshqa narsalar orasida, ular biz nima
qilmoqchi ekanligimizni eslatib o'tadi 11
.
Satr
#include "atd_lib_facilities.h"
o'zi   bilan   #inelude   direktivasini   akslantiradi.   U   std_lib_facilities.h   faylida
tasvirlanganlarni   imkoniyatlarini   "faollashtirish"   uchun   kompyuterni   majburlaydi.
Bu   fayl   C++   (C++   tilining   standart   kutubxonasi)   tilining   barcha   amalga
oshirishlarida ko'zda tutilgan imkoniyatlaridan foydalanishni osonlashtiradi.
std_lib   facilities.h   faylning   imkoniyatlari   berilgan   dastur   uchun   shunda
hisoblanadiki,   uning   yordami   bilan   biz   C+   tilining   standart   kiritish-chiqarish
vositalaridan  foydalanish  imkoniyatiga  ega  bo'lamiz. Bu  yerda  biz faqatgina  cout
standart   chiqarish   potoki   va   <<   chiqarish   operatoridan   foydalanamiz.   #include
direktivasi  yordamida  dasturga kiruvchi  fayl  odatda .h kengaytmasiga  ega  bo'ladi
va sarlavha (header) yoki sarlavha fayli (beader file) deb nomlanadi. Sarlavha biz
dasturimizda foydalanadigan cout kabi atamalarni aniqlashni o'z ichiga oladi.
11
 Horton I. - Beginning Visual C++ 2012 / I.Horton. Published simultaneously in Canada. - 2012.  P. 988.
23 FOYDALNILGAN ADABIYOTLAR RO’YXATI
1.   Bjarne   Stroustrup.   Programming:   Principles   and   Practice   Using   C++   (2nd
Edition). Person Education, Inc. 2014. second printing, January 2015.
2.   Harry   Hariom   Choudhary,   Bjarne   M   Stroustrup.   C++   Programming
Professional.: Sixth Best Selling Edition for Beginner's & Expert's 2014.
3.   Bjarne   Stroustrup.The   C++   Programming   Language,   4th   Edition.   Person
Education, Inc. 2013. Third printing, April 2014.
4. Nazirov Sh.A., Qobulov R.V., Bobojanov M.R., Raxmanov Q.S. C va C++ tili.
"Voris-nashriyot" MCHJ, Toshkent 2013. 488 b.
5. Horstmann, Cay S. C++ for everyone / Cay S. Horstmann. Printed in the United
States of America - 2nd ed. 2010. - P. 562.
6. Horton I. - Beginning Visual C++ 2012 / I.Horton. Published simultaneously in
Canada. - 2012. P. 988.
7. Peter Gottschling. Discovering Modern C++. An Intensive Course for Scientists,
Engineers, and Programmers. "Addison-Wesley", 2015 y.
8. A. R. Azamatov, B. Boltayev. Algoritmlash va dasturlash asoslari. O'quv 
qo'llanma. T. : "Cho'lpon", 2010 y.
9. A. R. Azamatov, B. Boltayev. Algoritmlash va dasturlash asoslari. O'quv 
qo'llanma. T.: "Cho'lpon", 2013 y.
10. Sh. I. Razzoqov, M. J. Yunusova. Dasturlash: Kasb-hunar kollejlari uchun 
o'quv qo'llanma.  T. : "Ilim Ziyo", 2011y.
11. М. Ашуров, М. Мирмахмудов, Ш. Сапаев. Замонавий дастурлаш тиллари 
фанидан лаборатория ишлари. Т. : ТДПУ, 2008 й.
12. Меняев Михаил Федорвич. Информационные технология управления. 
Москва, «Издательский Омегал», 2003 г.
24 Internet resurslar.
1.   http://www.stroustrup.com/4th.html
2.   http://www.cplusplus.com/
3. http://acm.tuit.uz/- дастурий ечим тўғрилигини автоматик тестловчи тизим.
4. http: //acm.tuit.uz/forum/
5. http: //   acm.timus.ru/   - дастурларни тестловчи тизим.
6.   http://codeforces.com/   - дастурий ечим тўғрилигини автоматик тестловчи 
тизим
25