Một số bài tập về Tệp


CÁC BÀI TP V TP
BÀI TP 1
Nhp mt mng 2 chiu m dòng, n ct t file BANG­SO.TXT. Cu trúc file như sau: dòng đầu là 2 s m và n, cách nhau bng du cách, m dòng sau, mi dòng n s nguyên.
a)      Hãy in ra nhng s là s nguyên t ca mng.
b)      Tìm v trí phn t ln nht trong mng.
c)       Sp xếp mi dòng ca mng tăng dn và in ra mng dng ma trn.
HƯỚNG DN
Ta khai báo mt mng 2 chiu và nhp d liu t file vào mng. Quá trình nhp t file văn bn ging như nhp t bàn phím, không cn thc hin kim tra d liu.
Để sp xếp mng theo yêu cu, ta thc hin sp xếp tng dòng ca mng bng cách viết mt th tc sp xếp (kiu đổi ch cho đơn gin) coi mi dòng ca mng như 1 mng 1 chiu.
Chương trình:
var m,n : in­te­ger;
    a : ar­ray[1..100,1..100] of in­te­ger;
(* Nhp d liu *)
pro­ce­dure nhap;
var f : text;
    i,j : in­te­ger;
be­gin
     as­sign(f,'BANG­SO.TXT'); re­set(f);
     readln(f,m,n);
     for i := 1 to m do
         for j := 1 to n do read(f,a[i,j]);
     close(f);
end;
func­tion ng­to(k : in­te­ger): boolean;
var i : in­te­ger;
be­gin
     ng­to := false;
     if k < 2 then ex­it;
     for i := 2 to round(sqrt(k)) do
         if k mod i = 0 then ex­it;
     ng­to := true;
end;
pro­ce­dure in­ng­to;
var i,j : in­te­ger;
be­gin
     writeln('Cac phan tu nguyen to cua mang:');
     for i := 1 to m do
         for j := 1 to n do
             if ng­to(a[i,j]) then write(a[i,j],' ');
     writeln;
end;
pro­ce­dure tim­max;
var max,i,j,im,jm : in­te­ger;
be­gin
     max := a[1,1]; im := 1; jm := 1; {im, jm lưu to độ phn t đạt max}
     for i := 1 to m do
         for j := 1 to n do
             if max < a[i,j] then be­gin
                max := a[i,j];  {mi ln gán max thì gán to độ luôn}
                im := i; jm := j;
             end;
     writeln('Phan tu lon nhat bang la A[',im,',',jm,']=',max);
end;
{Th tc thc hin sp xếp tăng dn dòng th k. Các phn t dòng k có dng a[k,i]}
pro­ce­dure xep­dong(k: in­te­ger);
var i,j, tg : in­te­ger;
be­gin
     for i := 1 to n do
         for j := i+1 to n do
             if a[k,i] > a[k,j] then be­gin
                tg := a[k,i]; a[k,i] := a[k,j]; a[k,j] := tg;
             end;
end;
pro­ce­dure sapx­ep;
var i,j : in­te­ger;
be­gin
     for i := 1 to m do xep­dong(i); {sp xếp tng dòng}
     writeln('Mang sau khi sap xep:');
     for i := 1 to m do be­gin                      {in dng ma trn}
         for j := 1 to n do write(a[i,j] : 5); {in các phn t trên 1 dòng}
         writeln;                {in hết 1 dòng thì xung dòng}
     end;
end;
BE­GIN
     nhap;
     in­ng­to;
     tim­max;
     sapx­ep;
END.
BÀI TP 2
Nhp 2 s m, n t bàn phím, sau đó sinh ngu nhiên m´n s nguyên ngu nhiên có giá tr t 15 đến 300 để ghi vào file BANG.TXT. Sau đó thc hin các yêu cu sau:
a)      In m´n s đã sinh dng ma trn m dòng, n ct.
b)      In ra các s chính phương.
Yêu cu: không được dùng mng 2 chiu để lưu tr d liu.
HƯỚNG DN
Do yêu cu không được dùng mng 2 chiu để lưu tr d liu nên ta s đọc file đến đâu, xđến đấy.
-         Để sinh các s ngu nhiên t a đến b, ta dùng biu thc a + ran­dom(b-a+1).
-         Để kim tra s k có phi là s chính phương không, ta ly căn bc 2 ca k, làm tròn ri bình phương. Nếu kết qu bng k thì k là s chính phương. Tc là kim tra sqr(round(sqrt(k))) = k.
Chương trình:
var m,n : in­te­ger;
    f : text;
pro­ce­dure sinh;
var
    i,j : in­te­ger;
be­gin
     write('Nhap vao 2 so m,n: '); readln(m,n);
     as­sign(f,'BANG.TXT'); rewrite(f);
     writeln(f,m,' ',n);
     for i := 1 to m do be­gin
         for j := 1 to n do
             write(f,15 + ran­dom(300-15+1) : 6); {sinh s ngu nhiên t 15 đến 300}
         writeln(f);
     end;
     close(f);
end;
{Hàm chính phương}
func­tion cp(k : in­te­ger) : boolean;
be­gin
     if sqr(round(sqrt(k))) = k then cp := true
     else cp := false;
end;
pro­ce­dure chinh­phuong;
var
    i,j,k : in­te­ger;
be­gin
     as­sign(f,'BANG.TXT'); re­set(f);
     readln(f,m,n);
     writeln('CAC SO CHINH PHUONG CUA BANG:');
     for i := 1 to m do be­gin
         for j := 1 to n do be­gin
             read(f,k);
             if cp(k) then write(k,' '); {va đọc va x lí}
         end;
     end;
     close(f);
end;
pro­ce­dure in­bang;
var
    i,j,k : in­te­ger;
be­gin
     as­sign(f,'BANG.TXT'); re­set(f); {m li để in dng ma trn}
     readln(f,m,n);
     writeln(#10,'IN BANG DANG MA TRAN:');
     for i := 1 to m do be­gin
         for j := 1 to n do be­gin
             read(f,k);
             write(k : 6);      {đọc đến đâu in đến đó}
         end;
         writeln;
     end;
     close(f);
end;
BE­GIN
     sinh;
     chinh­phuong;
     in­bang;
END.

Không có nhận xét nào:

Đăng nhận xét