Informatika-9-A,B. 44- dars
Mavzu: Fayllar bilan ishlash.
Maqsad:
1) ta’limiy: O`quvchilarga Paskalning fayllar bilan ishlash operatorlari va ulardan foydalanishni o`rgatish;
2) tarbiyaviy: O`quvchilarga iqtisodiy tejamkorlik va estetik tarbiya berish;
3) rivojlantiruvchi: O`quvchilarning dasturlashda fayllar bilan ishlash ko`nikmalarini rivojlantirish.
DTS: Faylli o'zgaruvchini tashqi xotiradagi fayl bilan bog'lash, faylni «o'qish» yoki «yozish» uchun ochish, fayldagi ma'lumotlarni o'qish yoki faylga ma'lumotlarni yozish, Faylni yopishni bilish..
Darsning borishi
I. Tashkiliy davr
1) salomlashish;
2) davomatni aniqlash.
II. Takrorlash
-
Ekranda biror shakl chizish uchun uning rangi qaysi operator yordamida tanlanadi?
-
Paskalda kesma chizish qanday amalga oshiriladi?
-
Aylana qaysi operator yo`damida chiziladi?
-
To`g`ri to`rtburchak chizish operatorida x1,y1,x2,y2 lar nmalar?
-
SetFillStyle operatorining vazifasini tushuntirib bering.
-
To'g'ri to 'rtburchak chizish operatorida xl, yl, x2 va у2 lar nima?
-
Fon rangini о 'zgartirishni amalda ко 'rsating.
-
SetFillStyle operatorining vazifasini aytib bering.
-
Qaysi operator ichi bo'yalgan to'g'ri to'rtburchak chizadi?
-
Paskalda shakl ichini bo 'yash usullariga misollar keltiring.
-
FillEllipse operatori qanday shakl chizadi?
III. Yangi mavzuni o`rganish.
Biz kiritish va chiqarish operatorlari bilan tanishdik. Kiritish operatori yordamida ma’lumotlarni klaviatura orqali kiritish mumkin bo‘lsa, chiqarish operatori ma’lumotlarni ekranga chiqarar ekan. Ba’zan shunday masalalar uchraydiki, chiqarilishi lozim bo‘lgan ma’lumotlar ekranga sig‘may qoladi. Ba’zi masalalarning natijalarini esa keyinchalik foydalanish uchun saqlab qo‘yish lozim bo‘ladi. Bunday hollarda kerakli ma’lumotlarni fayl ko‘rinishida saqlash maqsadga muvofiq. Siz fayllar va ularning formatlari (matnli, grafik va hokazo) haqida yetarli ma’lumotga egasiz. Paskal dasturlash tili turli formatli fayllar bilan ishlash imkonini beradi. Paskalda fayllar bilan ishlash uchun maxsus fayl turdagi o‘zgaruvchilar (faylli o‘zgaruvchilar) kiritilgan. Faylli o‘zgaruvchilar orqali tashqi xotirada joylashgan fayllar ifodalanadi. Sonli o‘zgaruvchining qiymati son, satrli o‘zgaruvchining qiymati satr bo‘lgani kabi, faylli o‘zgaruvchining qiymati fayl bo‘ladi. Faylli o‘zgaruvchilar ham tavsiflanishi shart.
Biz quyida faqat matnli fayllar bilan ishlashni ko‘ramiz. Matnli fayllar har xil uzunlikdagi satrlardan iborat bo‘ladi. Bunda satr uzunligi 256 ta belgidan oshmasligi lozim. Matnli fayllarni ifodalovchi o‘zgaruvchilar Paskalning text xizmatchi so‘zi orqali tavsiflanadi. Masalan,
var fmatn : Text; {fmatn – matnli fayl}
Fayllar bilan ishlash uchun Paskalda quyidagi amallarni bajarish lozim:
-
Fayl turdagi o‘zgaruvchini tashqi xotiradagi fayl bilan bog‘lash;
-
Faylni “o‘qish” yoki “yozish” uchun ochish;
-
Fayldagi ma’lumotlarni o‘qish yoki faylga ma’lumotlarni yozish;
-
Faylni yopish.
Faylli o‘zgaruvchi tashqi xotiradagi fayl bilan Assign(f, ); operatori yordamida bog‘lanadi, bu yerda f – fayl turdagi o‘zgaruvchi; - tashqi xotirada joylashgan faylning nomini ifodalovchi satrli o‘zgaruvchi yoki o‘zgarmas. Agar fayl joriy katalogda bo‘lmasa, uning to‘liq nomi ko‘rsatiladi. Masalan, “Navro’z.txt” fayli “D” diskning “Bayram” nomli katalogida joylashgan bo‘lsa, uning to‘liq nomi quyidagi ko‘rinishda bo‘ladi:
d:\ Bayram \ Navro’z.txt
Ushbu faylni f – faylli o‘zgaruvchi bilan bog‘lash uchun Assign operatori quyidagicha yoziladi:
Assign(f, ‘d:\ Bayram \ Navro’z.txt’);
Assign operatori faylli o‘zgaruvchining qiymatini, ya’ni tashqi xotiradagi aniq bir faylni belgilaydi. Bu faylga murojaat etish (undagi ma’lumotlarni o‘qish, yoki unga ma’lumotlar yozish) uchun uni “ochish” kerak. Matnli faylni bir vaqtning o‘zida ham o‘qish, ham yozish uchun ochib bo‘lmaydi. O‘qish uchun ochilgan fayldan ma’lumotlarni faqat o‘qish mumkin. Yozish uchun ochilgan faylga esa ma’lumotlarni faqat yozish mumkin.
Paskalda fayllarni “yozish uchun” quyidagi ikki xil usulda ochish mumkin:
-
Yangi fayl hosil qilish va uni yozish uchun ochish;
-
mavjud faylni unga ma’lumotlar kiritishni davom ettirish uchun ochish.
Rewrite(f) operatori tashqi xotirada yangi fayl hosil qiladi va uni yozish uchun ochadi. U Assign operatori yordamida biror fayl bilan bog‘langan bo‘lishi kerak. Masalan, Assign(f, ‘sumalak.txt’); Rewrite(f); operatorlari bajarilgach, joriy katalogda “sumalak.txt” nomli yangi matnli fayl hosil bo‘ladi va unga ma’lumotlar yozish uchun ochiladi. Agar joriy katalogda xuddi shunday nomli fayl avvaldan mavjud bo‘lsa, endi u o‘chib o’rniga yangisi yoziladi.
Faylga kerakli ma’lumotlar yozib bo‘lingandan so‘ng albatta yopilishi kerak. Paskalda ochilgan fayl Close(f) operatori yordamida yopiladi. Bu operator o‘qish uchun ochilgan fayllarni ham yozish uchun ochilgan fayllarni ham yopadi. Tashqi xotiradagi faylli o’zgaruvchiga mos fayl Close operatori ishlatilishidan avval albatta ochilgan bo‘lishi kerak.
Faylga ma’lumotlarni yozish (ma’lumotlarni faylga chiqarish) uchun quyidagi operatorlar qo’llanadi:
Write(f, ); va WriteLn(f, );
bu yerda f – faylli o‘zgaruvchi, o‘zaro vergul bilan ajratilgan bitta yoki bir nechta o‘zgaruvchi yoki o‘zgarmas. Mazkur operatorlar da ko‘rsatilgan o‘zgaruvchi va o‘zgarmaslarning qiymatlarini faylga yozadi.
1–misol. Joriy katalogda “Madhiya.txt” nomli fayl hosil qilib, klaviaturadan kiritilgan madhiyamizning 4 satrini faylning alohida satrlariga yozib qo‘yuvchi dastur tuzing.
Yechish: Kiritilgan ma’lumotlarni faylning alohida satrlariga yozish uchun WriteLn operatoridan foydalanamiz.
Program Madhiya1;
Var _madh : Text; satr : String; m:integer;
Begin
Assign(_madh, ‘Madhiya.txt’); Rewrite(_madh);
For m:=1 to 4 do begin
Write(‘Madhiyamizning ‘, m, ‘satrini kiriting: ‘); ReadLn(satr);
WriteLn(_madh, satr); end;
Close(_madh);
End.
Biz tashqi xotirada yangi fayl hosil qilishni ko‘rdik. Ba’zan tashqi xotirada saqlanayotgan biror matnli faylni davom ettirish, ya’ni, unga yangi ma’lumotlar qo‘shish zarur bo‘lib qoladi. Bu holda Rewrite operatori o‘rniga Append(f) operatori qo’llanadi. Bu operator ko‘rsatilgan tashqi xotiradagi faylni “yozish uchun” ochadi. Ko‘rsatilgan fayl tashqi xotirada bo‘lmasa, xatolik yuz beradi. Demak, Append operatori yordamida ochilishi lozim bo‘lgan fayl tashqi xotirada albatta bo‘lishi shart.
2–misol. 1-misolda hosil qilingan “Madhiya.txt” faylini oching va madhiyamizning 4 satri davomiga naqoratni qo‘shib qo‘yuvchi dastur tuzing.
Yechish: Faylni davom ettirish uchun uni Append operatori bilan ochamiz.
Program Madhiya2;
Var f : Text; naqorat: String; m:integer;
Begin
Assign(f, ‘Madhiya.txt’); Append(f);
For m:=1 to 4 do begin
Write(‘Naqoratning ‘, m, ‘satrini kiriting: ‘); ReadLn(naqorat);
WriteLn(f, naqorat); end;
Close(f);
End.
Reset(f) operatori diskdagi fayllarni o‘qish uchun ochadi. U Assign operatori yordamida tashqi xotiradagi biror faylga bog‘langan bo‘lishi kerak. Ko‘rsatilgan fayl tashqi xotirada bo‘lmasa, xatolik yuz beradi.
O‘qish uchun ochilgan fayldan ma’lumotlar quyidagi operatorlar yordamida o‘qiladi:
Read(f, ); va ReadLn(f, );
Bu yerda f – faylli o‘zgaruvchi. – bitta yoki o‘zaro vergul bilan ajratilgan bir nechta o‘zgaruvchilar. Mazkur operatorlar ko‘rsatilgan o‘zgaruvchilarning qiymatlarini fayldan o‘qib oladi.
Read operatori asosan faylda sonli ma’lumotlar yozilgan bo‘lsa, ya’ni faylning satri o‘zaro probel bilan ajratilgan sonlardan iborat bo‘lsa qo‘llaniladi. Read operatori bu sonlarning har birini alohida o‘qib oladi. Bitta satrdagi ma’lumotlar tugagach keyingi satrga o‘tadi.
3–misol. Tomonlarining uzunliklari “uchbur.in” faylida berilgan uchburchak yuzini hisoblash dasturini tuzing. “uchbur.in” fayli bitta satrdan iborat bo‘lib, unda uchburchak tomonlarining uzunliklarini ifodalovchi uchta son o‘zaro probel bilan ajratib yozilgan.
Yechish: “uchbur.in” faylidagi ma’lumotlarni o‘qish uchun Read operatoridan foydalanamiz. Uchburchak yuzini Geron formulasidan foydalanib hisoblaymiz.
Program Uchburchak_yuzi;
Uses crt;
Var f : Text; a, b, c, yp, s : Real;
Begin
Clrscr;
Assign(f, ‘uchbur.in’);
Reset(f); {“uchbur.in” fayli o‘qish uchun ochildi}
Read(f, a); Read(f, b); Read(f, c);
{a,b,c larning qiymatlari “uchbur.in” faylidan o‘qib olindi}
Close(f); {“ uchbur.in” fayli yopildi }
yp:=(a+b+c)/2; s:=sqr(yp*(yp-a)*(yp-b)*(yp-c));
WriteLn(‘Uchburchak yuzi=’, s); readln;
End.
ReadLn operatori fayldagi satrni to‘lig‘icha o‘qiydi. Matnli fayllardan satrlarni tartib bilan navbatma-navbat o‘qish mumkin. Masalan, faylning 10-satrini o‘qish uchun undan oldingi 9 ta satr albatta o‘qib olinishi kerak.
4–misol. “sinf.txt” faylida 9-sinf o‘quvchilarining ro‘yxati (har bir satrda bittadan o‘quvchining familiyasi) berilgan. Shu ro‘yxatdagi 12-o‘quvchining familiyasini ekranga chiqaruvchi dastur tuzing.
Yechish: 12-o‘quvchining familiyasi “sinf.txt” faylining 12-satrida yozilgan. Uni o‘qib olish uchun avvalgi 11 ta satrni o‘qib olish kerak. Buning uchun parametrli takrorlash operatoridan foydalanamiz.
Program Sinf;
var fio : Text; i : Integer; fam : String;
Begin
Assign(fio, ‘sinf.txt’); Reset(fio);
For i:=1 to 11 Do ReadLn(fio, fam);
ReadLn(fio, fam); Close(fio);
WriteLn(’12-o`quvchining familiyasi:’, fam);
End.
Ushbu misolda “sinf.txt” faylida berilgan barcha o‘quvchilarining familiyalarini ekranga chiqarish talab etilsa, muammo kelib chiqadi. Chunki “sinf.txt” fayli necha satrdan iboratligi no‘malum. Bunday hollarda Paskalning Eof(f) funksiyasi qo‘llaniladi. Eof – mantiqiy funksiya bo‘lib, faylda o‘qish uchun ma’lumotlar qolmagan bo‘lsa “Rost”, aks holda “Yolg‘on” qiymatini qabul qiladi.
5–misol. “sinf.txt” faylida 9-sinf o‘quvchilarining ro‘yxati berilgan. Ro‘yxatdagi barcha o‘quvchilarning familiyalarini ekranga chiqaruvchi dastur tuzing.
Yechish: Shart bo‘yicha takrorlash operatori – While dan foydalanamiz.
Program Sinf;
var fio : Text; fam : String;
Begin
Assign(fio, ‘sinf.txt’); Reset(fio);
While Not(eof(fio)) Do begin
ReadLn(fio, fam);
WriteLn(fam); end;
Close(fio);
End.
Dasturdagi takrorlash operatorining sharti - Not(eof(fio)) “yolg‘on” qiymat qabul qilmaguncha, ya’ni eof(fio) funksiyasi “rost” qiymat qabul qilmaguncha takrorlanish davom etadi. Eof(fio) funksiyasi “rost” qiymat qabul qilishi bilan, ya’ni “sinf.txt” faylida o‘qish uchun ma’lumotlar tugashi bilan takrorlanish to‘xtatiladi.
Zarur bo’lsa bitta dasturda bir nechta faylni ochish mumkin. Agar ular navbat bilan, ya’ni bittasi yopilgandan keyin ikkinchisi ochiladigan bo‘lsa, bitta faylli o‘zgaruvchidan foydalanish mumkin. Aks holda ularning har biriga alohida faylli o‘zgaruvchi tavsiflanishi kerak.
IV. Mustahkamlsh uchun savol va topshiriqlar
-
Fayl turdagi o‘zgaruvchi deganda nima tushuniladi?
-
Faylli o‘zgaruvchi tashqi xotiradagi fayl bilan qaysi operator yordamida bog‘lanadi?
-
Rewrite operatorining vazifasini aytib bering.
-
Ochilgan faylni yopish uchun qaysi operator qo‘llaniladi?
-
Matnli faylga ma’lumotlarni yozish uchun qaysi operatorlardan foydalaniladi?
-
Faylga yangi ma’lumotlar qo‘shish uchun uni qaysi operator yordamida ochish kerak?
-
Ma’lumotlarni o‘qish uchun fayl qaysi operator yordamida ochiladi?
-
Matnli fayldan ma’lumotlarni o‘qish uchun qaysi operatorlardan foydalaniladi?
-
Read operatori bilan ReadLn operatorlarining farqini aytib bering.
-
ReadLn operatorida bir nechta o‘zgaruvchi ishtirok etsa, ular qanday yoziladi?
-
Eof funksiyasining vazifasini aytib bering.
Mashqlar
1. Hafta kunlarining nomlarini kiritib, ularni “HAFTA.TXT” faylida saqlab qo‘yadigan dastur tuzing.
Program hafta_1;
Var f : Text; kun : String; m:integer;
Begin
Assign(f, ‘hafta.txt’); Rewrite(f);
For m:=1 to 7 do begin
Write(‘Haftning ‘, m, ‘kuni nomini kiriting: ‘); ReadLn(kun);
WriteLn(f,kun); end;
Close(f);
End.
2. 1-mashqdagi “HAFTA.TXT” faylini ochib, davomidan hafta kunlarining rus tilidagi nomlarini yozuvchi dastur tuzing.
Program Hafta2;
Var f : Text; kun: String; m:integer;
Begin
Assign(f, ‘hafta.txt’); Append(f);
For m:=1 to 7 do begin
Write(‘Haftaning ‘, m, ‘-kuni rus tilidagi nomini kiriting: ‘); ReadLn(kun);
WriteLn(f, kun); end;
Close(f);
End.
V. Uyga vazifa
3-mashq. “HAFTA.TXT” faylida berilgan hafta kunlarining nomlarini ekranga chiqaruvchi dastur tuzing.
program masala61_3;
uses crt;
var hafta: array[1..7] of string;
f: text;
s: string;
i: integer;
begin
clrscr;
assign(f,'textlar\hafta.txt');
reset(f);
for i:=1 to 7 do
begin readln(f,s); writeln(s); end;
close(f);
readln;
end.