Một số bài tập về Bản ghi


CÁC BÀI TP V BN GHI
BÀI TP 1
Viết chương trình qun lí sách. Mi cun sách gm tên sách, tên nhà xut bn, năm xut bn, giá tin, s lượng:
a)      Đưa ra danh sách các cun sách ca nhà xut bn Giáo dc.
b)      Tính tng s tin sách.
c)       Sp xếp danh sách theo năm xut bn gim dn và ghi kết qu ra màn hình.
d)      In ra màn hình các cun sách có giá tin<=10.000đ và xut bn sau năm 2000.
HƯỚNG DN
Mô t mi cun sách là mt bn ghi, các thông tin v nó (tên sách, tên tác gi,…) là các trường. Danh sách cun sách s là mt mng các bn ghi.
Khai báo kiu d liu mô t sách như sau:
type
    sach = record
         ten : string[30];                 {tên sách}
         nxb  : string[20];               {tên Nhà xut bn}
         namxb   : in­te­ger;  {năm xut bn}
         solu­ong : in­te­ger;  {s lượng}
         gia : re­al;              {giá tin}
    end;
Thông tin ca tt c các cun sách ta lưu trong mt mng các bn ghi kiu sach:
var
   ds : ar­ray[1..100] of sach;
   n : in­te­ger;
Nhp d liu: ta nhp tên sách trước. Nếu tên sách là xâu rng thì đừng nhp, ngược li ln lượt nhp các thông tin khác:
   pro­ce­dure nhap;
   var t : string;
   be­gin
        ClrScr;
        writeln('NHAP THONG TIN VE CAC CUON SACH');
        writeln('(nhap ten sach la xau rong neu muon dung)');
        re­peat
              write('Ten sach:  ');
              readln(t);
              if t='' then break;
              n := n + 1;
              with ds[n] do be­gin
                 ten := t;
                 write('NXB:  ');readln(nxb);
                 write('Nam xu­at ban:  ');readln(namxb);
                 write('So lu­ong:  ');readln(solu­ong);
                 write('Gia tien:  ');readln(gia);
              end;
        un­til false;
   end;
Câu a: ta s duyt qua toàn b danh sách các cun sách, kim tra nếu tên nhà xut bn là Giáo dc thì in ra tt c các thông tin ca cun sách tương ng:
   pro­ce­dure in­sach;
   var
      i   : in­te­ger;
   be­gin
        Clrscr;
        writeln('CAC CUON SACH CUA NXB GI­AO DUC:');
        for i:=1 to n do
            with ds[i] do
                 if nxb='Gi­ao duc' then be­gin
                    writeln('Ten:',ten);
                    writeln('Nam xu­at ban:',namxb);
                    writeln('So lu­ong:',solu­ong);
                    writeln('Gia tien:',gia);
                 end;
        readln;
   end;
Câu b: ta cũng duyt qua toàn b các cun sách, nhân s lượng và giá tin ri cng dn vào mt biến tng. Sau đó in ra biến tng đó:
pro­ce­dure tinh;
var i : in­te­ger;
    tong : re­al;
be­gin
     tong := 0;
     for i := 1 to n do
         with ds[i] do tong := tong + gia * solu­ong;
     writeln('TONG GIA TRI CUA TAT CA CAC CUON SACH:', tong:0:3);
end;
Câu c: Sp xếp danh sách gim dn theo năm xut bn bng phương pháp ni bt (2 vòng for). Chú ý biến trung gi­an trong đổi ch phi có kiu sach thì mi gán được.
pro­ce­dure sx­ep;
var i,j : in­te­ger;
    tg : sach;
be­gin
     for i := 1 to n do
         for j := i + 1 to n do
             if ds[i].namxb < ds[j].namxb then be­gin
                tg := ds[i]; ds[i] := ds[j]; ds[j] := tg;
             end;
     for i:=1 to n do
        with ds[i] do be­gin
             writeln('Ten:',ten);
             writeln('Nam xu­at ban:',namxb);
             writeln('So lu­ong:',solu­ong);
             writeln('Gia tien:',gia);
        end;
     readln;
end;
Câu d: ta làm tương t vic in danh sách các sách ca NXB Giáo dc:
pro­ce­dure inds;
var i : in­te­ger;
be­gin
     writeln('CAC CUON SACH GIA RE HON 10000 VA XU­AT BAN TU NAM 2000:');
     for i := 1 to n do
         with ds[i] do
              if (gia <= 10000) and (namxb >= 2000) then writeln(ten);
end;
Chương trình chính: Ln lượt gi các chương trình con theo th t:
BE­GIN
     nhap;
     in­sach;
     tinh;
     sx­ep;
     inds;
     readln;
END.
BÀI TP 2
Viết chương trình qun lí cán b. Thông tin v cán b gm tên, tui, h s lương, ph cp, thu nhp.
a)      Nhp thông tin cán b t file văn bn CAN­BO.TXT. Các thông tin gm tên, tui, h s lương, ph cp, mi thông tin trên mt dòng.
Tính thu nhp = h s lương ´ 350000đ + ph cp
b)      Đưa ra danh sách các b tr (tui <= 30), in đầy đủ các thông tin
c)       Sp xếp tên cán b theo abc và ghi lên file truy cp trc tiếp SAPX­EP.DAT.
d)      Đọc danh sách t file SAPX­EP.DAT, in ra màn hình các cán b có thu nhp t 3 triu tr lên.
HƯỚNG DN
Làm tương t bài 1, chú ý là nhp d liu t file ch không phi t bàn phím. Do đó không cn ghi các thông tin yêu cu nhp ra màn hình. Hơn na, phi to trước mt file văn bn là CAN­BO.TXT để chương trình có th chy mà không báo li.
Toàn văn chương trình:
us­es crt;
type
    can­bo = record
          ten : string[20];
          tuoi : byte;
          hsl, phu­cap, thun­hap: re­al;
    end;
var
   ds : ar­ray[1..100] of can­bo;
   n : in­te­ger;
(*********************************************)
pro­ce­dure nhap;
var f : text;
be­gin
     as­sign(f,'CAN­BO.TXT'); re­set(f);
     n := 0;
     while not eof(f) do be­gin
           n := n + 1;
           with ds[n] do be­gin
                readln(f,ten);
                readln(f,tuoi);
                readln(f,hsl);
                readln(f,phu­cap);
                thun­hap := hsl * 350000 + phu­cap;
           end;
     end;
     close(f);
end;
(*********************************************)
pro­ce­dure in30;
var i : in­te­ger;
be­gin
     writeln('DANH SACH CAC CAN BO TRE:');
     for i := 1 to n do
         with ds[i] do
              if tuoi <= 30 then be­gin
                 writeln('Ten:',ten);
                 writeln('Tuoi:',tuoi);
                 writeln('He so lu­ong:',hsl :0 :3);
                 writeln('Phu cap:',phu­cap :0 :3);
                 writeln('Thu nhap:',thun­hap :0 :3);
              end;
end;
(*********************************************)
pro­ce­dure sx­ep;
var i,j : in­te­ger;
    tg : can­bo;
be­gin
     for i := 1 to n do
         for j := i + 1 to n do
             if ds[i].ten > ds[j].ten then be­gin
                tg := ds[i]; ds[i] := ds[j]; ds[j] := tg;
             end;
end;
(*********************************************)
pro­ce­dure ghitep;
var f : file of can­bo;
    i : in­te­ger;
be­gin
     as­sign(f,'SAPX­EP.DAT'); rewrite(f);
     for i := 1 to n do write(f,ds[i]);
     close(f);
end;
pro­ce­dure doctep;
var f : file of can­bo;
    i : in­te­ger;
be­gin
     as­sign(f,'SAPX­EP.DAT'); re­set(f);
     i := 0;
     while not eof(f) do be­gin
           i := i + 1;
           read(f,ds[i]);
     end;
     n := i;
     close(f);
end;
(*********************************************)
pro­ce­dure in3M;
var i : in­te­ger;
be­gin
     writeln('DANH SACH CAC CAN BO CO THU NHAP CAO:');
     for i := 1 to n do
         with ds[i] do
              if thun­hap >= 3000000 then be­gin
                 writeln('Ten:',ten);
                 writeln('Tuoi:',tuoi);
                 writeln('Thu nhap:',thun­hap :0 :3);
              end;
end;
(*********************************************)
BE­GIN
     nhap;
     in30;
     sx­ep;
     in3M;
     readln;
END.

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

Đăng nhận xét