Mới nhất

Bài tập cơ sở lập trình

By phantuanduy - Sunday, November 4, 2012 No Comments

Viết chương trình thực hiện các yêu cầu sau:
a)     Khai báo kiểu dữ liệu bảng ghi có tên là hocsinh gồm các thành phần sau: họ tên, điểm toán, điểm lý, điểm hóa, điểm trung bình,xep loai.
b)     Viết chương trình con sinh số liệu ngẫu nhiên cho một mảng động kiểu hocsinh nêu trên. Yêu cầu điểm số của tất cả các môn và điểm trung bình đều phải làm tròn đến 1 chữ số sau dấu chấm thập phân.
c)     Viết thủ tục  xuất nội dung của mảng động kiểu hocsinh ra màn hình theo mẫu sau.
1.      Cột thứ 1: ghi số thứ tự
2.      Cột thứ 2: ghi họ tên
3.      Cột thứ 3: điểm toán
4.      Cột thứ 4: điểm lý
5.      Cột thứ 5: điểm hóa
6.      Cột thứ 6: điểm trung bình
7.      Cột thứ 7: Xếp loại (dựa vào điểm trung bình với các mức học lực giỏi(dtb>=8), khá(8>dtb>=6.5), trung bình(6.5>dtb>=5), yếu(5>dtb>=3.5), kém(dtb<3.5));
8.      Cuối danh sách có thống kê số lượng học sinh có trong danh sách và ghi ra màn hình
d)     Viết chương trình con sắp xếp mảng động trên theo chiều giảm dần của điểm trung bình.
e)     Viết chương trình con sắp xếp mảng động trên theo chiều tăng dần của họ tên.
f)      Viết hàm tìm kiếm trả về số học sinh xếp loại khá.
g)     Viết hàm tìm kiếm trả về điểm trung bình cao nhất
h)     Viết hàm tìm kiếm trả về học sinh đầu tiên trong danh sách có điểm trung bình cao nhất.

i)       Viết hàm tìm kiếm trả về  học sinh đầu tiên có tên trùng với tham số truyền vào từ hàm
j)       Viết hàm tìm kiếm trả về  học sinh đầu tiên có điểm trung bình trùng với tham số truyền vào từ hàm
k)     Viết hàm trả về một mảng động chỉ chứa các học sinh có điểm trung bình cao nhất
l)       Viết hàm trả về một mảng động chỉ chứa các học sinh có điểm trung bình nằm trong doan x đến y với x,y nhập vào từ chương trình chính và được truyền vào từ tham số của chương trình con.
m)   Hãy viết chương trình chính gọi tất cả các chương trình con ở các câu trên theo một thứ tự logic phù hợp, xuất các kết quả tương ứng. Chú ý các câu tìm kiếm có xuất kết quả “khong tim thay {yêu cầu}” nếu không tìm thấy.

Bài giải:
program BAI1;
type
       hocsinh = record
                     hoten:string[30];
                     toan,ly,hoa,dtb:real;
                     xl:string[10];
                end;
        mang=array of hocsinh;
        chuoi=string[30];
 var a:mang;
     tb,x,y:real;

procedure sinh(var a:mang);
var n,i,j:integer;
  begin
       write('nhap so hoc sinh'); readln(n);
       setlength(a,n); randomize;
       for i:=low(a) to high(a) do
           begin
                a[i].hoten:='';
                for j:=1 to 30 do
                    a[i].hoten:=a[i].hoten+chr(random(26)+65);
                a[i].toan:=round(random*100)/10;
                a[i].ly:=round(random*100)/10;
                a[i].hoa:=round(random*100)/10;
                a[i].dtb:=(round(a[i].toan+a[i].ly+a[i].hoa)/3*10)/10;
                if (a[i].dtb>8) then a[i].xl:='gioi'
                   else if (a[i].dtb>6.5) then a[i].xl:='kha'
                      else if (a[i].dtb>5) then a[i].xl:='trung binh'
                         else if (a[i].dtb>3.5) then a[i].xl:='yeu'
                            else a[i].xl:='kem' ;
           end;
  end;

procedure xuaths(h:hocsinh);
  begin
                 writeln(h.hoten,'     ',h.toan:0:2,'     ',h.ly:0:2,'     ',h.hoa:0:2,'    ',h.dtb:0:2,'   ',h.xl);
  end;

procedure xuat(a:mang);
var i:integer;
  begin
       for i:=low(a) to high(a) do
              xuaths(a[i]);
       writeln(' co ',high(a)+1, ' hoc sinh trong danh sach nay');
  end;

function sapxepgiamdtb(var a:mang):mang;
var i,j:integer; t:hocsinh;
  begin
       for i:= low(a) to high(a)-1 do
           for j:= i+1 to high(a) do
               if (a[i].dtb<a[j].dtb) then
                  begin
                       t:=a[i];
                       a[i]:=a[j];
                       a[j]:=t;
                  end;
       sapxepgiamdtb:=a;
  end;

function sapxeptanghoten(var a:mang):mang;
var i,j:integer; t:hocsinh;
  begin
       for i:= low(a) to high(a)-1 do
           for j:= i+1 to high(a) do
               if (ORD(a[i].hoten[1])>ORD(a[j].hoten[1])) then
                  begin
                       t:=a[i];
                       a[i]:=a[j];
                       a[j]:=t;
                  end;
       sapxeptanghoten:=a;
  end;

function timkha(a:mang):integer;
var i,dem:integer;
  begin
       dem:=0;
       for i:= low(a) to high(a) do
           if (a[i].xl='kha') then
              dem:=dem+1;
       timkha:=dem;
  end;

function timmax(a:mang):real;
var i:integer; max:real;
  begin
       max:=a[0].dtb;
       for i:=low(a)+1 to high(a) do
           if (a[i].dtb>max) then max:=a[i].dtb;
       timmax:=max;
  end;

function timhsmax(a:mang):hocsinh;
var i:integer; t:hocsinh;
  begin
       for i:=low(a) to high(a) do
           if (a[i].dtb=timmax(a)) then
              begin
                   t:=a[i];
                   break;
              end;
       timhsmax:=t;
  end;

function timhsten(s:chuoi):hocsinh;
var i:integer; t:hocsinh;
  begin
       t.hoten:='';
       for i:=low(a) to high(a) do
           if (a[i].hoten=s) then
              begin
                   t:=a[i];
                   break;
              end;
       timhsten:=t;
  end;

function timhsdtb(m:real):hocsinh;
var i:integer; t:hocsinh;
  begin
       t.dtb:=-1;
       for i:=low(a) to high(a) do
           if (a[i].dtb=m) then
              begin
                   t:=a[i];
                   break;
              end;
       timhsdtb:=t;
  end;

function timmangmax(a:mang):mang;
var i,d:integer; m:mang;
  begin
       d:=0;
       for i:=low(a) to high(a) do
           if (a[i].dtb=timmax(a)) then
              d:=d+1;
       setlength(m,d);
       d:=0;
       for i:=low(a) to high(a) do
           if (a[i].dtb=timmax(a)) then
              begin
                   m[d]:=a[i];
                   d:=d+1;
              end;
       timmangmax:=m;
  end;

function timmangxy(x,y:real):mang;
var i,d:integer; m:mang;
  begin
       d:=0;
       for i:=low(a) to high(a) do
           if ((a[i].dtb>=x) and (a[i].dtb<=y))then
              d:=d+1;
       setlength(m,d);
       d:=0;
       for i:=low(a) to high(a) do
           if ((a[i].dtb>=x) and (a[i].dtb<=y)) then
              begin
                   m[d]:=a[i];
                   d:=d+1;
              end;
       timmangxy:=m;
  end;

BEGIN
     sinh(a);
     xuat(a);
     writeln('mang sap xep giam dan diem trung binh:');
     xuat(sapxepgiamdtb(a));
     writeln('mang sap xep tang dan ho ten:');
     xuat(sapxeptanghoten(a));
     writeln('So hoc sinh loai kha:  ',timkha(a));
     writeln('Diem trung binh max:  ',timmax(a):0:2);
     writeln('hoc sinh co diem trung binh max dau tien:');
     xuaths(timhsmax(a));
     write('nhap diem trung binh can tim:  '); readln(tb);
     if (timhsdtb(tb).dtb<0) then writeln(' khong tim thay hoc sinh co diem trung binh can tim')
        else xuaths(timhsdtb(tb));
     writeln('cac hoc sinh co diem trung binh max');
     xuat(timmangmax(a));
     writeln('nhap x'); readln(x);
     writeln('nhap y'); readln(y);
     writeln('cac hoc sinh co diem trung binh trong doan',' [',x:0:2,';',y:0:2,'] la');
     xuat(timmangxy(x,y));
     readln;
END.                  

No Comment to " Bài tập cơ sở lập trình "