logo

Informatika darsliklarining uzviyligi va uzluksizligi

Yuklangan vaqt:

08.08.2023

Ko'chirishlar soni:

0

Hajmi:

34.41796875 KB
Oqimlar yordamida ma’lumotlarni kiritish va chiqarishni dasturlash
Reja
1. Oqimli kiritish va chiqarish
2. Satrlar yordamida fayllar bilan bog`lanish
3. Ishlab chiqarishni optimal rejalashtirish masalasi Oqimli kiritish va chiqarish
C ++ tilining asosiy xususiyatlaridan biri oldindan rejalashtirilgan fayllar 
strukturasi yo`qligidir. Hamma fayllar, baytlar ketma-ketligi deb ko`riladi. UNIX 
operatsion sistemasida har bir qurilmaga «Maxsus fayl» mos keladi, shuning uchun C++
kutubxonasidagi funksiyalar fayllar bilan ham, qurilmalar bilan ham ma`lumot 
almashinishi uchun foydalaniladi. C++ tili kutubxonasida kiritish – chiqarish, quyi 
darajadagi kiritish, chiqarish va portlar uchun kiritish – chiqarish, oqimli daraja tizim 
xususiyatlariga bog`liq bo`lishi uchun bu yerda qaralmaydi. Oqimli chiqarish va 
kiritishda ma`lumotlar bilan almashish baytma-bayt amalga oshiriladi. Lekin tashqi 
xotira qurilmalari bilan almashish oldidan belgilangan ma`lumotlar bloki orqali amalga 
oshiriladi. Odatda u blokning minimal hajmi 512 yoki 1024 baytga teng bo`ladi. Diskga 
o`qilishda ma`lumotlar operatsion qatordagi buferi yoziladi, so`ngra baytma bayt 
buferga yig`iladi, so`ngra diskka har bir murojaat qilinganda yagona blok sifatida 
uzatiladi. Shuning uchun ma`lumot almashishi diskka to`g`ridan to`g`ri murojaat 
qilishiga ko`ra tezroq amalga oshadi. Shunday qilib, oqim bu buferlash vositalari va 
fayldir.
Oqim bilan ishlashda quyidagi vazifalarni bajarish mumkin.
-Oqimlarni ochish va yopish.
-Simvol, qator, satr, formatlangan ma`lumot ixtiyoriy uzunlikdagi ma`lumotlarni 
kiritish yoki chiqarish va fayl oxiriga yetganlik shartini tahlil qilish;
-Buferlash va bufer hajmini boshqarish;
-Ko`rsatkich oqimdagi o`rnini aniqlash yoki yangi o`ringa ko`chirish.
Bu vazifalarni boshqaruvchi funksiyalar teng foydalanish dasturiga Stdio.h – 
faylini ulash lozim. Dastur bajarilishi boshlanganda avtomatik ravishda 5 ta oqim 
ochilib, bulardan:
-Standart kiritish oqimi stdin;
-Standart chiqarish oqimi stdout;
-Xatolar haqida ma`lumotlar standart oqimi stderr;
Oqimlarni ochish va yopish. Oqim ochilishi uchun, oldindan kiritilgan FILE 
tipidagi struktura bilan bog`lash lozimdir. FILE strukturasi ta`rifi iostream.h 
bibleotekasida joylashgan. Bu strukturada buferga ko`rsatkich, o`qilayotgan pozitsiyaga 
ko`rsatkich va boshqa ma`lumotlar saqlanadi. Oqim ochilganda dasturda oqimga 
ko`rsatkich ya`ni FILE strukturali tipdagi ob`yektga ko`rsatkich qaytariladi. Bu 
ko`rsatkich quyidagicha e`lon qilinishi lozim. Masalan, FILE * fp
FILE * Oqim ochish funksiyasi quyidagi ko`rinishga ega;
=fopen(,)
Masalan, fp=fopen(“t.tnt”, “r”)
Oqim bilan bog`liq faylni quyidagi rejimlarda ochish mumkin:
[w]- Yangi fayl o`qish uchun ochiladi. Agar fayl mavjud bo`lmasa, yangidan 
yaratiladi.
[r] - Mavjud fayl faqat o`qish uchun ochiladi.
[a] - Fayl davom ettirish uchun ochiladi.
[wt] - Fayl yozish va keyingi tahrirlash uchun ochiladi. Faylni ixtiyoriy joyidan 
o`qish yoki yozish mumkin.
[rt]- fayl ixtiyoriy joyidan o`qish yoki yozish mumkin, lekin fayl oxiriga qo`shish 
mumkin emas.
[at] - Fayl ixtiyoriy joyidan o`qish va yozish uchun ochiladi “wt” rejimdan farqli 
fayl oxiriga ma`lumot qo`shish mumkin.
Oqimdan o`qilgan quyidagi simvollar:
CR(13)-naryat nomi qaytarish
RF(10)-“yangi qator” boshiga o`tish bitta simvolga “\n” (10)
Agar fayl ixtiyoriy bo`lsa, binar rejimda ochiladi. Buning uchun rejimlar harfi 
qo`shiladi “wb” yoki “rtb”. Ba`zi matnli rejim t harfi yordamida ko`rsatiladi masalan, 
”rt”.
Oqim ochilishi uchun, oldindan  kiritilgan FILE  tipidagi struktura  bilan boglash 
lozimdir.  FILE strukturasi ta'rifi iostream.h bibleotekasida joylashgan. Bu 
strukturada buferga ko’rsatkich, o’qilayotgan pozitsiyaga ko’rsatkich va boshqa 
ma'lumotlar saqlanadi. Oqim ochilganda dasturda oqimga ko’rsatkich ya'ni FILE 
strukturali  tipdagi ob'ektga ko’rsatkich qaytariladi. Bu ko’rsatkich  qo’yidagicha 
e'lon qilinishi lozim. 
FILE * <kursatkich  nomi>
Misol uchun  FILE * fp
Oqim ochish  funktsiyasi quyidagi ko’rinishga ega;
          <oqimga  ko’rsatkich  nomi>=foren(<fayl-nomi>,<ochish rejimi>)
           Misol uchun:fp=fopen(“t.tnt”, “r”) 
           Oqim bilan bog’lik  faylni  qo’yidagi  rejimlarda ochish mumkin:            “ w”- Yangi fayl o’qish uchun ochiladi. Agar fayl mavjud bo’lmasa  
yangidan yaratiladi.
            “r”   -   Mavjud fayl faqat o’qish uchun ochiladi.
             “a”  -  Fayl da'vom ettirish uchun ochiladi.
            “wt” -  Fayl yozish va keyingi tahrirlash uchun ochiladi. Fayl ihtiyoriy 
joyidan o’qish yoki yozish  mumkin.
“rt”-  fayl  ihtiyoriy joyidan o’qish yoki yozish mumkin, lekin fayl ohiriga qo’shish
mumkin emas.
“at” -  Fayl ihtiyoriy joyidan o’qish va yozish uchun ochiladi  “wt”  rejmdan farqli 
fayl ohiriga ma'lumot qo’shish mumkin.
Oqimdan   o’qilgan qo’yidagi simvollar   -------
CR(13)-naryat  nomi qaytarish
RF(10)-“yangi  qator”  boshiga  o’tish bitta simvolga “\n” (10) fqkfynbhbkflb/
Agar fayl------- emas   ihtiyoriy bulsa, binar rejimda ochiladi. Buning uchun  
rejimlar--------- harfi  qo’shiladi -------  “wb”  yoki       “rtb”. Ba'zi ----- matnli  
rejim  t harifi  yordamida ko’rsatiladi  masalan  “yoki”rt”.
Oqim ochilganda quyidagi hatolar kelib chiqishi mumkin:ko’rsatilgan fayl mavjud 
emas(o’kish rejimida); disk to’la yoki yozishdan himoyalangan va hokazo. Yana 
shuni aytish kerakki  fopen()  funktsiyasi  bajarilganda  dinamik hotira  ishlatiladi. 
Agar hotirada joy qolmagan bo’lsa   “not  enough  ”  -  hatosi  kelib  chiqadi.
Ko’rsatilgan hollarda ko’rsatkich  ~ NULL  qiymatga ega  bo’ladi.
Bu hatolar haqidagi ma'lumotlarni ekranga chiqarish uchun perror ()  funktsiyasi 
ishlatiladi. Bu funktsiya  iostream.h  bibliotekasida   saqlanuvchi  prototipi  
qo’yidagi ko’rinishga ega.:
Void perror(court char * s);
Diskda ochilgan fayllarni berkitish  uchun qo’yidagi funktsiyadan  foydalaniladi.
Int fellove(<oqimga-kursatkich nomi>).   
Fayllar bilan ishlashning bitli rejimi.
Fayl bilan bitli almashish rejimi  getc( )  va  putc( )  funktsiyalari yordamida tashkil 
etiladi. Bu funktsiyalarga qo’yidagi shaklda murojat etiladi:
C=getc(fp);
Putc(c,fp); Bu erda fp-ko’rsatkich
S-int tipidagi o’zgaruvchi
Misol tariqasida klaviaturadan simvol kiritib faylga yozishni ko’ramiz. Matn  
ohirini ‘#’ belgisi ko’rsatadi. Fayl nomi foydalanuvchidan so’raladi. Agar <enter> 
klavishasi bosilsa faylga CR va LF (qiymatlari 13 va 10) konstantalar yoziladi. 
Keyinchalik fayldan simvollarni uqishda bu konstantalar satrlarni ajratishga imkon 
beradi.
#include <iostream.h>
int main()
{ file *fp;
char c;
const char CR=’\015’;
const char LF=’\012’;
char f name [20];
puts(“fayl nomini kiriting:\n”);
gets(f name);
if((fp=f open(f name, “w”)) ==null)
{ perror(f name);
return 1;
}
while ((c=getchar())!=’#’)
}
if (c==’\n’)
{ putc(CR,fp);
putc(LF,fp);
}
else putc (c,fp);
}
Fclose (fp);
Return 0; Keyingi programma fayldan simvollarni o’qib ekranga chiqaradi.
#include <iostream.h>
int main()
{ file *fp;
char c;
char f name [20];
puts(“fayl nomini kiriting:\n”);
if((fp=f open (f name, “r”)) ==null)
{ perror(f name);
return 1;
}
while ((c=getc(fp))!=eof)
putchar(c);
f close (fp);
return 0;
}
Satrlar yordamida fayllar bilan bog’lanish.
Matnli fayllar bilan ishlash uchun  fget  va  fputs  funktsiyalaridan foydalaniladi. Bu 
funktsiyalari prototiplari  iostream.h  faylida qo’yidagi ko’rinishga ega:
Int fputs (const char *s, FILE *stream);
Char *fgets (char * s, int n, FILE * stream);
Fputs funktsiyasi ‘\0’  simvoli bilan chegaralangan satrni  stream ko’rsatkichi 
orqali aniqlangan faylga yozadi. ‘\0’   simvoli faylga yozilmaydi.
Fgets()  funktsiyasi stream ko’rsatkichi orqali aniqlangan fayldan (n-1) simvolni 
o’qiydi va S ko’rsatgan satrga yozib qo’yadi. Funktsiya n-1 simvolni o’qib bo’lsa 
eki 1-chi qator  simvoli ‘\n’ni uchratsa ishini tuhtatadi. Har bir satr ohiriga 
qo’shimcha \0 belgisi qo’shiladi. Hato bo’lganda yoki fayl ohiriga etganda agar 
fayldan birorta  simvol o’qilmagan bo’lsa  NULL  qiymat qaytariladi. Qo’yidagi 
dasturda bir fayldagi matnni ikkinchi faylga yozishni ko’rib chiqamiz. Bu misolda 
yana bir imkoniyat komanda qatoridan programmaga ma'lumot uzatish imkoniyati 
ko’rib chiqilgan. Har qanday dastur operatsion sistemada ma'lumotni  argc  va  argv  
parametrlar qiymati sifatida oladi. Birinchi programmaga uzatilayotgan satrlar  sonini ko’rsatadi. Argv[0] bu faylning nomini saklovchi satrga ko’rsatkich 
massivining qolgan elementlari argv[10]…argv[argc-1] komanda qatorida fayl 
nomidan so’ng bo’shlik tashlab yozilgan parametrlarga ko’rsatkichlar.
Programmamiz nomi coryfile.exe bo’lsin va bu programma yordamida f1.dat 
Faylni f2.dat faylga yozmoqchimiz. Komanda qatori qo’yidagi ko’rinishga ega:
<copyfile.exe f1.dat f2.txt
Programma matni:
#include <iostream.h>
main (int argc, char*argv[])
{ char cc[256];
FILE *f1, *f2;
If (argc!=3)
{ print (“\n Format bazovih programma:”);
print f (“\n copyfile.exe”)
Cout<< (“\n Fayl netosnihh Fayl priemnik”);
return 1;
}
if ((f1=fopen(argv[1],”r”))==NULL)
{perror(argv[1]);
return 1;
}
if ((f2=fopen(argv[2], “w”))==NULL)
{perror(arg[2]);
return 1;
}
while (fgets(cc,256,f1)!=NULL)
fputs(CC,f2);
fclose(f1);
fclose(f2);
return 0; } 
Bu dastur bajarilishi natijasida int.dat fayliga Cout<< funktsiyasi yordamida 
monitorga qanday chiqsa shunday ko’rinishda ma'lumotlar yozadi. Keyingi 
misolda fayldan monitorga o’qishni kuramiz:
#include <iostream.h> 
int main()
{
FILE *fp;
Intn,nn,I;
If((fp=fopen(“int.dat”,”r”))==NULL)
{perror (“int.dat”);
return 1;
}
for(i=1; i<11;i++)
{fCin>>(fp,”%d”,&n)        ;
Cout<<(“%d \n”,n);
}
fclose(fp);
return 0;
}
Oqim ochilganda quyidagi xatolar kelib chiqishi mumkin: ko`rsatilgan fayl mavjud
emas(o`qish rejimida); disk to`la yoki yozishdan himoyalangan va hokazo. Yana shuni 
aytish kerakki fopen() funksiyasi bajarilganda dinamik xotira ishlatiladi. Agar xotirada 
joy qolmagan bo`lsa “not enough ” - xatosi kelib chiqadi.Ko`rsatilgan hollarda 
ko`rsatkich ~ NULL qiymatga ega bo`ladi. Bu xatolar haqidagi ma`lumotlarni ekranga 
chiqarish uchun perror () funksiyasi ishlatiladi. Bu funksiya iostream.h kutubxonasida 
saqlanuvchi prototipi quyidagi ko`rinishga ega.:
void perror(court char * s);
Diskda ochilgan fayllarni berkitish uchun quyidagi funksiyadan foydalaniladi.
Int fellove(). Fayllar bilan ishlashning bitli rejimi. Fayl bilan bitli almashish rejimi getc( ) va 
putc() funksiyalari yordamida tashkil etiladi. Bu funksiyalarga quyidagi shaklda 
murojaat etiladi:
C=getc(fp);
Putc(c,fp);
Bu yerda fp-ko`rsatkich, S-int tipidagi o`zgaruvchi. Masalan, klaviaturadan simvol 
kiritib faylga yozishni ko`ramiz. Matn oxirini # belgisi ko`rsatadi. Fayl nomi 
foydalanuvchidan so`raladi. Agar klavishasi bosilsa, faylga CR va LF (qiymatlari 13 va 
10) o`zgarmaslar yoziladi. Keyinchalik fayldan simvollarni o`qishda bu o`zgarmaslar 
satrlarni ajratishga imkon beradi.
107-listing.
Output:
#include
#include
int main() { FILE *fp;
char c;
const char CR='\015';
const char LF='\012';
char f_name[20];
puts("fayl nomini kiriting:\n");
gets(f_name);
if((fp=fopen(f_name,"w")) ==NULL)
{ perror(f_name);
return 1; }
while ((c=getchar())!='#') {
if (c=='\n')
{ putc(CR,fp);
putc(LF,fp); }
else putc (c,fp); }
fclose (fp);
return 0; } 108-listing. fayldan simvollarni o`qib ekranga chiqaradi
Output:
#include
#include
int main()
{ FILE *fp;
char c;
char f_name [20];
puts(“fayl nomini kiriting:\n”);
if((fp=f open (f name, “r”)) ==NULL)
{ perror(f name);
return 1; }
while ((c=getc(fp))!=eof)
putchar(c);
fclose (fp);
return 0; }
Satrlar yordamida fayllar bilan bog`lanish Matnli fayllar bilan ishlash uchun fget va fputs funksiyalaridan foydalaniladi. Bu 
funksiyalari prototiplari iostream.h faylida quyidagi ko`rinishga ega:
Int fputs (const char *s, FILE *stream);
Char *fgets (char * s, int n, FILE * stream);
Fputs funksiyasi \0 simvoli bilan chegaralangan satrni stream ko`rsatkichi orqali 
aniqlangan faylga yozadi. \0 simvoli faylga yozilmaydi. Fgets() funksiyasi stream 
ko`rsatkichi orqali aniqlangan fayldan (n-1) simvolni o`qiydi va S ko`rsatgan satrga 
yozib qo`yadi. Funksiya n-1 simvolni o`qib bo`lsa yoki 1-chi qator simvoli `\n`ni 
uchratsa ishini to`xtatadi. Har bir satr oxiriga qo`shimcha \0 belgisi qo`shiladi. Xato 
bo`lganda yoki fayl oxiriga yetganda agar fayldan birorta simvol o`qilmagan bo`lsa 
NULL qiymat qaytariladi. Quyidagi dasturda bir fayldagi matnni ikkinchi faylga 
yozishni ko`rib chiqamiz. Bu misolda yana bir imkoniyat buyruq qatoridan dasturga 
ma`lumot uzatish imkoniyati ko`rib chiqilgan. Har qanday dastur operatsion sistemada 
ma`lumotni argc va argv parametrlar qiymati sifatida oladi. Birinchi programmaga 
uzatilayotgan satrlar sonini ko`rsatadi. Argv[0] bu faylning nomini saqlovchi satrga 
ko`rsatkich massivining qolgan elementlari argv[10]…argv[argc-1] komanda qatorida 
fayl nomidan so`ng bo`shlik tashlab yozilgan parametrlarga ko`rsatkichlar.
Programmamiz nomi copyfile.exe bo`lsin va bu programma yordamida f1.dat 
Faylni f2.dat faylga yozmoqchimiz (
109-listing.
Output:
#include
#include
main (int argc, char*argv[])
{ char cc[256];
FILE *f1, *f2;
If (argc!=3)
{ printf (“\n copyfile.exe”)
return 1; }
if ((f1=fopen(argv[1],”r”))==NULL)
{perror(argv[1]);
return 1; }
if ((f2=fopen(argv[2], “w”))==NULL) {perror(arg[2]);
return 1; }
while (fgets(cc,256,f1)!=NULL)
fputs(cc,f2);
fclose(f1);
fclose(f2);
return 0; }
Bu dastur bajarilishi natijasida int.dat fayliga cout<< funksiyasi yordamida 
monitorga qanday chiqsa, shunday ko`rinishda ma`lumotlar yozadi. Keyingi misolda 
fayldan monitorga o`qishni ko`ramiz:
110-listing.
Output:
#include
#include
int main() {
FILE *fp;
Int n,nn,I;
If((fp=fopen(“int.dat”,”r”))==NULL)
{ perror (“int.dat”);
return 1; }
for(i=1; i<11;i++)
{cin>> (fp,”%d”,&n) ;
fprintf(fp,“%d \n”,n);}
fclose(fp);
return 0; } Ishlab chiqarishni optimal rejalashtirish masalasi
Faraz qilaylik, korxona  m  xil mahsulot ishlab chiqarishga  ixtisoslashtirilgan 
bo`lsin. Mahsulotlarni ishlab chiqarish uchun miqdorlari  mos holda 
12, , . . . , mbbb bo`lgan ishlab chiqarish resurslaridan foydalanilsin. Bir birlik  j  (  j = 1, 2, 
…, n )  xil mahsulotni ishlab chiqarish uchun sarflanadigan  i (  i = 1,2,…, m )  xil resurs 
miqdori (normasi) -  ij a birlikni tashkil qilsa,  jc -  esa korxonaning bir birlik tayyor 
mahsulotdan oladigan daromadi bo`lsa, korxona ishini shunday rejalashtirish kerakki: 
a) hamma mahsulotni ishlab chiqarish uchun sarf qilinadigan har bir ishlab chiqarish 
resursining miqdori ularning mavjud umumiy miqdoridan oshmasin; b)  tayyor 
mahsulotlarni sotishdan olinadigan umumiy  daromad maksimal  bo`lsin. Masalaning 
matematik modelini tuzish uchun rejalashtirilayotgan davr ichida ishlab chiqariladigan
j  (  j = 1,2,…, n )  xil mahsulot miqdorini  jx bilan belgilaymiz. U holda masaladagi 1 - 
shart quyidagi tengsizliklar orqali ifodalanadi
14  11 a 1 x + 12 a 2 x +...+1 nanx  1 b ,  21 a 1 x + 22 a 2 x +...+2 nanx  2 b ,
.....................................1 ma 1 x +2 ma 2 x +...+ mn anx  mb . Masalaning iqtisodiy 
ma’nosigako`ra  jx ning qiymatlari manfiy bo`lmasligi kerak,  ya’ni : 0 , ( 1, ) jxjn  . 
Masaladagi 2  – shart uning maqsadini  – korxonaning maksimal daromadini quyidagi 
chiziqli funksiya orqali ifodalash mumkin:  1122 ... nnyc xc xc x  .  Shartga ko`ra m a
x y  . Bundan keyin  y funksiya maksimumga (minimum)ga erishsin degan shartni 
max y ( min y ) ko`rinishda belgilaymiz. Shunday qilib, mahsulot ishlab chiqaruvchi 
korxonaning ishini  optimal rejalashtirish masalasining iqtisodiy-matematik modeli 
quyidagi  ko`rinishda bo`ladi:  11 a 1 x + 12 a 2 x +...+ 1 nanx  1 b ,  21 a 1 x + 22 a 2 x +...
+2 nanx  2 b ,  .....................................1 ma 1 x +2 ma 2 x +...
+ mn anx  mb ,12 0 , 0 ,..., 0 , nxxx  max y = 1 c 1 x +2 c 2 x +...+ ncnx .  Endi aniq iqtisodiy 
masalalarning matematik modellarini tuzishga  doir misollar keltiramiz. 1. Sut 
firmasining mahsuloti qog`oz idishlarga quyilgan sut, kefir va qaymoqdan iborat. 1 t 
dan sut, kefir va qaymoq tayyorlash uchun mos ravishda  1000 kg,  1010 kg va  9450 kg sut
kerak bo`ladi. 1t sut va kefirni idishlarga maxsus qurilma - mashinalarda quyishda 
0 , 1 8 va  0, 19 mashina/soat vaqt sarflanadi. 1t qaymoq tayyorlash uchun esa maxsus 
avtomatlar  3 , 2 5 soat ishlaydi. Sut mahsulotlarini tayyorlash uchun firma har kuni 
3600 kg sut ishlatiladigan qurilmadan  2 1 , 4 mashina/soat, qaymoq  uchun esa maxsus 
avtomatlardan  16,25 soat foydalanishi mumkin. 1t sut, kefir va qaymoqlarni sotishda 
olinadigan daromad mos ravishda  50000 so`m,  60000 va  520000 so`m. Firma har kuni 
100 t dan kam bo`lmagan sut tayyorlashi zarur, kefir va qaymoqlar esa ixtiyoriy. 
Firmaning daromadi yuqori bo`lishini  ta’minlaydigan sut mahsulotlaridan qanchadan 
ishlab chiqarish kerak?  Bunday qo`yilgan masalaning matematik modelini tuzing.
15  Yechish. Faraz qilaylik, firma har kuni  1 x t sut, 2 x t kefir va 3 x t  qaymoqlarni 
idishlarga quysin
14  11 a 1 x + 12 a 2 x +...+1 nanx  1 b ,  21 a 1 x + 22 a 2 x +...+2 nanx  2 b ,
.....................................1 ma 1 x +2 ma 2 x +...+ mn anx  mb . Masalaning iqtisodiy 
ma’nosigako`ra  jx ning qiymatlari manfiy bo`lmasligi kerak,  ya’ni : 0 , ( 1, ) jxjn  . 
Masaladagi 2  – shart uning maqsadini  – korxonaning maksimal daromadini quyidagi 
chiziqli funksiya orqali ifodalash mumkin:  1122 ... nnyc xc xc x  .  Shartga ko`ra m a x y  . Bundan keyin  y funksiya maksimumga (minimum)ga erishsin degan shartni 
max y ( min y ) ko`rinishda belgilaymiz. Shunday qilib, mahsulot ishlab chiqaruvchi 
korxonaning ishini  optimal rejalashtirish masalasining iqtisodiy-matematik modeli 
quyidagi  ko`rinishda bo`ladi:  11 a 1 x + 12 a 2 x +...+ 1 nanx  1 b ,  21 a 1 x + 22 a 2 x +...
+2 nanx  2 b ,  .....................................1 ma 1 x +2 ma 2 x +...
+ mn anx  mb ,12 0 , 0 ,..., 0 , nxxx  max y = 1 c 1 x +2 c 2 x +...+ ncnx .  Endi aniq iqtisodiy 
masalalarning matematik modellarini tuzishga  doir misollar keltiramiz. 1. Sut 
firmasining mahsuloti qog`oz idishlarga quyilgan sut, kefir va qaymoqdan iborat. 1 t 
dan sut, kefir va qaymoq tayyorlash uchun mos ravishda  1000 kg,  1010 kg va  9450 kg sut
kerak bo`ladi. 1t sut va kefirni idishlarga maxsus qurilma - mashinalarda quyishda 
0 , 1 8 va  0, 19 mashina/soat vaqt sarflanadi. 1t qaymoq tayyorlash uchun esa maxsus 
avtomatlar  3 , 2 5 soat ishlaydi. Sut mahsulotlarini tayyorlash uchun firma har kuni 
3600 kg sut ishlatiladigan qurilmadan  2 1 , 4 mashina/soat, qaymoq  uchun esa maxsus 
avtomatlardan  16,25 soat foydalanishi mumkin. 1t sut, kefir va qaymoqlarni sotishda 
olinadigan daromad mos ravishda  50000 so`m,  60000 va  520000 so`m. Firma har kuni 
100 t dan kam bo`lmagan sut tayyorlashi zarur, kefir va qaymoqlar esa ixtiyoriy. 
Firmaning daromadi yuqori bo`lishini  ta’minlaydigan sut mahsulotlaridan qanchadan 
ishlab chiqarish kerak? Bunday qo`yilgan masalaning matematik modelini tuzing.
15  Yechish. Faraz qilaylik, firma har kuni  1 x t sut, 2 x t kefir va 3 x t  qaymoqlarni 
idishlarga quysin.

Oqimlar yordamida ma’lumotlarni kiritish va chiqarishni dasturlash Reja 1. Oqimli kiritish va chiqarish 2. Satrlar yordamida fayllar bilan bog`lanish 3. Ishlab chiqarishni optimal rejalashtirish masalasi

Oqimli kiritish va chiqarish C ++ tilining asosiy xususiyatlaridan biri oldindan rejalashtirilgan fayllar strukturasi yo`qligidir. Hamma fayllar, baytlar ketma-ketligi deb ko`riladi. UNIX operatsion sistemasida har bir qurilmaga «Maxsus fayl» mos keladi, shuning uchun C++ kutubxonasidagi funksiyalar fayllar bilan ham, qurilmalar bilan ham ma`lumot almashinishi uchun foydalaniladi. C++ tili kutubxonasida kiritish – chiqarish, quyi darajadagi kiritish, chiqarish va portlar uchun kiritish – chiqarish, oqimli daraja tizim xususiyatlariga bog`liq bo`lishi uchun bu yerda qaralmaydi. Oqimli chiqarish va kiritishda ma`lumotlar bilan almashish baytma-bayt amalga oshiriladi. Lekin tashqi xotira qurilmalari bilan almashish oldidan belgilangan ma`lumotlar bloki orqali amalga oshiriladi. Odatda u blokning minimal hajmi 512 yoki 1024 baytga teng bo`ladi. Diskga o`qilishda ma`lumotlar operatsion qatordagi buferi yoziladi, so`ngra baytma bayt buferga yig`iladi, so`ngra diskka har bir murojaat qilinganda yagona blok sifatida uzatiladi. Shuning uchun ma`lumot almashishi diskka to`g`ridan to`g`ri murojaat qilishiga ko`ra tezroq amalga oshadi. Shunday qilib, oqim bu buferlash vositalari va fayldir. Oqim bilan ishlashda quyidagi vazifalarni bajarish mumkin. -Oqimlarni ochish va yopish. -Simvol, qator, satr, formatlangan ma`lumot ixtiyoriy uzunlikdagi ma`lumotlarni kiritish yoki chiqarish va fayl oxiriga yetganlik shartini tahlil qilish; -Buferlash va bufer hajmini boshqarish; -Ko`rsatkich oqimdagi o`rnini aniqlash yoki yangi o`ringa ko`chirish. Bu vazifalarni boshqaruvchi funksiyalar teng foydalanish dasturiga Stdio.h – faylini ulash lozim. Dastur bajarilishi boshlanganda avtomatik ravishda 5 ta oqim ochilib, bulardan: -Standart kiritish oqimi stdin; -Standart chiqarish oqimi stdout; -Xatolar haqida ma`lumotlar standart oqimi stderr; Oqimlarni ochish va yopish. Oqim ochilishi uchun, oldindan kiritilgan FILE tipidagi struktura bilan bog`lash lozimdir. FILE strukturasi ta`rifi iostream.h bibleotekasida joylashgan. Bu strukturada buferga ko`rsatkich, o`qilayotgan pozitsiyaga ko`rsatkich va boshqa ma`lumotlar saqlanadi. Oqim ochilganda dasturda oqimga ko`rsatkich ya`ni FILE strukturali tipdagi ob`yektga ko`rsatkich qaytariladi. Bu ko`rsatkich quyidagicha e`lon qilinishi lozim. Masalan, FILE * fp FILE *

Oqim ochish funksiyasi quyidagi ko`rinishga ega; =fopen(,) Masalan, fp=fopen(“t.tnt”, “r”) Oqim bilan bog`liq faylni quyidagi rejimlarda ochish mumkin: [w]- Yangi fayl o`qish uchun ochiladi. Agar fayl mavjud bo`lmasa, yangidan yaratiladi. [r] - Mavjud fayl faqat o`qish uchun ochiladi. [a] - Fayl davom ettirish uchun ochiladi. [wt] - Fayl yozish va keyingi tahrirlash uchun ochiladi. Faylni ixtiyoriy joyidan o`qish yoki yozish mumkin. [rt]- fayl ixtiyoriy joyidan o`qish yoki yozish mumkin, lekin fayl oxiriga qo`shish mumkin emas. [at] - Fayl ixtiyoriy joyidan o`qish va yozish uchun ochiladi “wt” rejimdan farqli fayl oxiriga ma`lumot qo`shish mumkin. Oqimdan o`qilgan quyidagi simvollar: CR(13)-naryat nomi qaytarish RF(10)-“yangi qator” boshiga o`tish bitta simvolga “\n” (10) Agar fayl ixtiyoriy bo`lsa, binar rejimda ochiladi. Buning uchun rejimlar harfi qo`shiladi “wb” yoki “rtb”. Ba`zi matnli rejim t harfi yordamida ko`rsatiladi masalan, ”rt”. Oqim ochilishi uchun, oldindan kiritilgan FILE tipidagi struktura bilan boglash lozimdir. FILE strukturasi ta'rifi iostream.h bibleotekasida joylashgan. Bu strukturada buferga ko’rsatkich, o’qilayotgan pozitsiyaga ko’rsatkich va boshqa ma'lumotlar saqlanadi. Oqim ochilganda dasturda oqimga ko’rsatkich ya'ni FILE strukturali tipdagi ob'ektga ko’rsatkich qaytariladi. Bu ko’rsatkich qo’yidagicha e'lon qilinishi lozim. FILE * <kursatkich nomi> Misol uchun FILE * fp Oqim ochish funktsiyasi quyidagi ko’rinishga ega; <oqimga ko’rsatkich nomi>=foren(<fayl-nomi>,<ochish rejimi>) Misol uchun:fp=fopen(“t.tnt”, “r”) Oqim bilan bog’lik faylni qo’yidagi rejimlarda ochish mumkin:

“ w”- Yangi fayl o’qish uchun ochiladi. Agar fayl mavjud bo’lmasa yangidan yaratiladi. “r” - Mavjud fayl faqat o’qish uchun ochiladi. “a” - Fayl da'vom ettirish uchun ochiladi. “wt” - Fayl yozish va keyingi tahrirlash uchun ochiladi. Fayl ihtiyoriy joyidan o’qish yoki yozish mumkin. “rt”- fayl ihtiyoriy joyidan o’qish yoki yozish mumkin, lekin fayl ohiriga qo’shish mumkin emas. “at” - Fayl ihtiyoriy joyidan o’qish va yozish uchun ochiladi “wt” rejmdan farqli fayl ohiriga ma'lumot qo’shish mumkin. Oqimdan o’qilgan qo’yidagi simvollar ------- CR(13)-naryat nomi qaytarish RF(10)-“yangi qator” boshiga o’tish bitta simvolga “\n” (10) fqkfynbhbkflb/ Agar fayl------- emas ihtiyoriy bulsa, binar rejimda ochiladi. Buning uchun rejimlar--------- harfi qo’shiladi ------- “wb” yoki “rtb”. Ba'zi ----- matnli rejim t harifi yordamida ko’rsatiladi masalan “yoki”rt”. Oqim ochilganda quyidagi hatolar kelib chiqishi mumkin:ko’rsatilgan fayl mavjud emas(o’kish rejimida); disk to’la yoki yozishdan himoyalangan va hokazo. Yana shuni aytish kerakki fopen() funktsiyasi bajarilganda dinamik hotira ishlatiladi. Agar hotirada joy qolmagan bo’lsa “not enough ” - hatosi kelib chiqadi. Ko’rsatilgan hollarda ko’rsatkich ~ NULL qiymatga ega bo’ladi. Bu hatolar haqidagi ma'lumotlarni ekranga chiqarish uchun perror () funktsiyasi ishlatiladi. Bu funktsiya iostream.h bibliotekasida saqlanuvchi prototipi qo’yidagi ko’rinishga ega.: Void perror(court char * s); Diskda ochilgan fayllarni berkitish uchun qo’yidagi funktsiyadan foydalaniladi. Int fellove(<oqimga-kursatkich nomi>). Fayllar bilan ishlashning bitli rejimi. Fayl bilan bitli almashish rejimi getc( ) va putc( ) funktsiyalari yordamida tashkil etiladi. Bu funktsiyalarga qo’yidagi shaklda murojat etiladi: C=getc(fp); Putc(c,fp);

Bu erda fp-ko’rsatkich S-int tipidagi o’zgaruvchi Misol tariqasida klaviaturadan simvol kiritib faylga yozishni ko’ramiz. Matn ohirini ‘#’ belgisi ko’rsatadi. Fayl nomi foydalanuvchidan so’raladi. Agar <enter> klavishasi bosilsa faylga CR va LF (qiymatlari 13 va 10) konstantalar yoziladi. Keyinchalik fayldan simvollarni uqishda bu konstantalar satrlarni ajratishga imkon beradi. #include <iostream.h> int main() { file *fp; char c; const char CR=’\015’; const char LF=’\012’; char f name [20]; puts(“fayl nomini kiriting:\n”); gets(f name); if((fp=f open(f name, “w”)) ==null) { perror(f name); return 1; } while ((c=getchar())!=’#’) } if (c==’\n’) { putc(CR,fp); putc(LF,fp); } else putc (c,fp); } Fclose (fp); Return 0;