Giải bài tập Turbo Pascal - Bài 11 trang 80

Đề bài: Hãy bổ sung thêm vào chương trình xep_loại (bài 13, sgk tin học 11) những lệnh cần thiết để chương trình đưa ra danh sách học sinh xếp loại A.
Chương trình xep_loai của bài 13 có đề là: Viết chương trình nhập vào từ bàn phím thông tin của từng học sinh trong lớp, thực hiện xếp loại và và đưa ra màn hình kết quả sắp xếp.

#HướngDẫn

Đề bài yêu cầu là đưa ra danh sách các học sinh xếp loại A nên ta sẽ sử dụng vòng lặp For Do để duyệt qua từng phần tử, phần tử nào có điều kiện là lop[i].xeploai = 'A' thì xuất ra thông tin về học sinh đó.
for i:= 1 to n do
  if lop[i].xeploai = 'A' then
     with lop[i] do
              begin
        write(hoten,' : ' );
write(ngaysinh,' - ');
write(diachi,' - ');
write('Diem toan: ',toan,' Diem van: ',van);
                writeln;
      end;

#Chương trình khác

Mình đã chuyển chương trình trên từ sử dụng chương trình chính sang sử dụng chương trình con, mình cũng đã chuyển nó sang sử dụng kiểu dữ liệu tệp, bên dưới là chương trình đó.
{Giai bai tap tin hoc 11 turbo pascal - bai 11 trang 80}
program xep_loai_hoc_sinh;
const fi='vao.inp';
fo='ra.out';
type hocsinh = record
    hoten: string[30];
    ngaysinh: string[10];
    diachi: string[50];
    toan,van: real;
    xeploai: char;
   end;
var lop: array[1..60] of hocsinh;
n,hocsinhloaiA: integer;
f: text;

procedure input;
var i: integer;
diemtong: real;
begin
   assign(f,fi);
   reset(f);
   readln(f,n);
   for i:= 1 to n do
      with lop[i] do
      begin
      readln(f,hoten);
   readln(f,ngaysinh);
   readln(f,diachi);
   readln(f,toan);
   readln(f,van);
   diemtong:=toan+van;
   if diemtong >= 18 then
    begin
       xeploai:='A';
       inc(hocsinhloaiA);
    end;
   if (diemtong >= 14) and (diemtong <18) then xeploai:='B';
   if (diemtong >= 11) and (diemtong < 14) then xeploai:= 'C';
   if diemtong < 10 then xeploai:='D';
   end;
end;

procedure output;
var i: integer;
begin  
 assign(f,fo);
 rewrite(f);
 if hocsinhloaiA = 0 then
 writeln(f,'Khong co mot hoc sinh nao xep loai A')
 else
 begin
 writeln(f,'Co ',hocsinhloaiA,' hoc sinh xep loai A:');
 for i:= 1 to n do
    if lop[i].xeploai = 'A' then
       with lop[i] do
              begin
          write(f,hoten,' : ' );
    write(f,ngaysinh,' - ');
    write(f,diachi,' - ');
    write(f,'Diem toan: ',toan,' Diem van: ',van);
    end;
 end;
 close(f);
end;
begin
input;
output;
end.
Trong chương trình trên mình có sử dụng câu lệnh With (trang 134, sgk Tin Hoc 11), câu lệnh này sẽ giúp bạn khỏe hơn trong việc viết tên biết. Trong sách giáo khoa khi muốn đọc dữ liệu thì họ phải viết lop[i].hoten , viết như vậy thì khá là mệt nếu bạn phải viết nhiều biến như vậy. Trong Pascal có câu lệnh With sử dụng như sau:
With <tên biến bản ghi> do
begin
<Các Câu lệnh>
end;
Một điều liên quan tới việc xuất kết quả những học sinh loại A, sẽ có trường hợp là không có một học sinh nào đạt loại A. Nếu bạn cứ cho ra một dòng thông báo write(f,'Cac hoc sinh xep loai a'); nhưng lại không có một học sinh nào xếp nên sẽ không có chữ nào sau dòng thông báo của bạn. Như vậy thì bài của sẽ không hay, tự nhiên thông báo Cac hoc sinh xep loai A nhưng bên dưới chẳng có gì nên ta sẽ đếm số học sinh loại A, mỗi lần ta xếp loại A cho một học sinh nào đó thì ta tăng biến đếm hocsinhloaiA lên 1. Khi thông báo bạn hãy kiểm tra xem biến hocsinhloaiA = 0 hay không, nếu bằng không ta thông báo không có học sinh nào đạt loại A.

Tí thì quên mất, ta sẽ nhập dữ liệu vào file vao.inp, dòng đầu là một số nguyên (N) chỉ số học sinh mà bạn sẽ nhập dữ liệu.5N dòng tiếp theo ta sẽ nhập dữ liệu cho từng học sinh, mỗi học sinh gồm năm dòng, dòng đầu nhập hoten học sinh, dòng thứ 2 nhập ngaysinh, dòng thứ 3 nhập diachi, dòng thứ 4 và 5 nhập điểm toanvan .
Kết quả được ghi vào file ra.out.

Comments