107
Programmada «talaba.txt» fayli matn fayli sifatida o`qish
uchun ochilgan va u in
o`zgaruvchisi bilan bog‘langan. Xuddi shunday, «talaba.dbl»
matn fayli yozish uchun
ochilgan va out bilan bog‘langan. Agar fayllarni ochish muvaffaqiyatsiz bo`lsa, mos xabar
beriladi va programma o`z ishini tugatadi. Keyinchalik, toki in fayli oxiriga etmaguncha,
undan
belgilar
o`qiladi
va
ekranga,
hamda
out
fayliga
chiqariladi. Programma oxirida ikkita fayl ham yopiladi.
Masala.
G‘alvirli tartiblash usuli.
Berilgan x vektorini pufakcha usulida kamaymaydigan qilib tartiblash quyidagicha
amalga oshiriladi: massivning qo`shni elementlari xk va xk+1 (k=1,..,n-1) solishtiriladi.
Agar xk>xk+1 bo`lsa, u holda bu elementlar o`zaro o`rin almashadi. SHu yo`l
bilan
birinchi o`tishda eng katta element vektorning oxiriga joylashadi. Keyingi qadamda vektor
boshidan n-1 o`rindagi elementgacha yuqorida qayd qilingan yo`l bilan qolgan
elementlarning
eng
kattasi
n-1
o`ringa
joylashtiriladi va h.k.
G‘alvirli tartiblash usuli pufakchali tartiblash usuliga o`xshash, lekin xk va xk+1
(k=1,2,3,..,n-1) elementlar o`rin almashgandan keyin «g‘alvirdan» o`tkazish
amali
qo`llaniladi: chap tomondagi kichik element imkon qadar chap tomonga tartiblash
saqlangan holda ko`chiriladi. Bu usul oddiy pufakchali tartiblash
usuliga nisbatan tez
ishlaydi.
Programma matni:
#include
#include
int * Pufakchali_Tartiblash(int*,int);
int main()
{char fnomi[80];
printf("Fayl nomini kiriting:");
scanf("%s", &fnomi);
int Ulcham,i=0,* Massiv;
FILE * f1, *f2;
if((f1=fopen(fnomi,"rt"))==NULL)
{printf("Xato:%s fayli ochilmadi!",fnomi);
return 1;}
fscanf(f1,"%d",&Ulcham);
Massiv=(int *)malloc(Ulcham*sizeof(int));
while(!feof(f1))
fscanf(f1,"%d",&Massiv[i++]);
fclose(f1);
Massiv=Pufakchali_Tartiblash(Massiv,Ulcham);
f2=fopen("natija.txt","wt");
fprintf(f2,"%d%c",Ulcham,' ');
108
for(i=0; i
fprintf(f2,"%d%c",Massiv[i],' ');
fclose(f2);
return 0;}
int * Pufakchali_Tartiblash(int M[],int n)
{int almashdi=1, vaqtincha;
for(int i=0; i
{almashdi=0;
for(int j=0; j
if (M[j]>M[j+1])
{almashdi=1;
vaqtincha=M[j];
M[j]=M[j+1];
M[j+1]=vaqtincha;
int k=j;
if(k)
while(k && M[k]>M[k-1])
{vaqtincha=M[k-1];
M[k-1]=M[k];
M[k]=vaqtincha;
k--;}}}
return M;}
Programmada berilganlarni oqimdan o`qish yoki oqimga chiqarishda fayldan
formatli o`qish - fscanf() va yozish - fprintf() funktsiyalaridan foydalanilgan. Bu
funktsiyalarning mos ravishda scanf() va printf() funktsiyalaridan farqi - ular berilganlarni
birinchi argument sifatida beriladigan matn fayldan o`qiydi va yozadi.
Nomi foydalanuvchi tomonidan kiritiladigan f1 fayldan butun sonlar massivining uzunligi
va qiymatlari o`qiladi va tartiblangan massiv f2 faylga yoziladi.
Vektorni tartiblash Pufakchali_Tartiblash() funktsiyasi tomonidan amalga oshiriladi.
Unga vektor va uning uzunligi kiruvchi parametr bo`ladi va tartiblangan vektor funktsiya
natijasi sifatida qaytariladi.
Navbatdagi ikkita funktsiya fayl oqimidan formatlashmagan o`qish-yozishni amalga
oshirishga mo`ljallangan.
fread() funktsiyasi quyidagi prototipga ega:
Do'stlaringiz bilan baham: