# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  [Bài tập lớn] Bài toán về mảng! help gấp!

## chungcunhavuong

*[Bài tập lớn] Bài toán về mảng! help!!!* 
Viết chương trình nhập vào danh sách sinh viên có các thông tin sau: Mã sinh viên, tên sinh viên, tuổi, điểm toán, điểm lí, điểm tin, điểm trung bình(trong đó, điểm trung bình=(điểmtoán*3+điểmlí*2+điểmtin*5)/10.
Lưu danh sách vừa nhập vào sv.dat

1.Hiện danh sách vừa nhập
2.Thống kê sinh viên có tuổi<20
3.thống kê sv có điểm tb>7.5
*3.tìm sinh viên có điểm trung bình nhỏ nhất.
4.tìm sinh viên có điểm trung bình cao nhất.*
5.Xóa bỏ các sinh viên có điểm trung bình dưới 3,5
6. sắp xếp danh sách sinh viên theo điểm trung bình, theo tên.

*đặc biệt 2 câu in đậm* ai giúp mình càng sớm càng tốt, mình đang cần gấp, mọi người nhé! Mình cảm ơn rất nhiều! 
 
---------------------------------Bài viết đã được trộn ---------------------------------
*Doublepost will be merged* 
*các bước trên gồm nhap xuat du lieu,tim sinh vien co diem >7.5,sinh vien tren 20 tuoi,xoa bo sinh vien co diem trung binh <3.5

*



> Uses crt;
> Type sinhvien=record
> masv:real;
> tensv:string[30];
> tuoisv:integer;
> toan,li,tin:integer;
> dtb:real;
> end;
> Var a:array [1..100] of sinhvien;
> ...


_

các bước phần này:sap xep theo ten abc...,theo diem trung binh tang dan





			
				uses crt;
type sinhvien=record
masv:real;
tensv:string[30];
tuoisv:integer;
toan,li,tin:integer;
dtb:real;
end;
var a:array [1..100] of sinhvien;
i,j,n:integer;
tb:real;
tt:string[30];
{cac bien cho phan sap xep}
ti,ta,li,tu:integer;
ma:real;
Begin
clrscr; {lenh nhap du lieu}
write('nhap vao so sinh vien n=');readln(n);
for i:=1 to n do begin
writeln('Nhap vao sinh vien thu : ',i);
write('Nhap vao Ma sinh vien thu',i,':');readln(a.masv);
write('Nhap vao Ten sinh vien thu',i,':');readln(a.tensv);
write('Nhap vao Tuoi sinh vien thu',i,':');readln(a.tuoisv);
write('Nhap vao Diem toan sinh vien thu',i,':');readln(a.toan);
write('Nhap vao Dien li sinh vien thu',i,':');readln(a.li);
write('Nhap vao Dien tin sinh vien thu',i,':');readln(a.tin);
end;
for i:=1 to n do
a.dtb:=(a.toan*3+a.li*2+a.tin*5)/10;

{sap xep danh sach theo dtb tang dan}
writeln('Danh sach sau khi sap xep theo DTB tang dan');
for i:=1 to n-1 do
for j:=i+1 to n do
if a.dtb>a[j].dtb then begin {doi vi tri cuaDTB}
tb:=a.dtb;
a.dtb:=a[j].dtb;
a[j].dtb:=tb;
{doi vi tri ma sinh vien}
ma:=a.masv;
a.masv:=a[j].masv;
a[j].masv:=ma;
{doi vi tri ten}
tt:=a.tensv;
a.tensv:=a[j].tensv;
a[j].tensv:=tt;
{doi vi tri tuoi}
tu:=a.tuoisv;
a.tuoisv:=a[j].tuoisv;
a[j].tuoisv:=tu;
{doi vi tri diem li}
li:=a.li;
a.li:=a[j].li;
a[j].li:=li;
{doi vi tri diem toan}
ta:=a.toan;
a.toan:=a[j].toan;
a[j].toan:=ta;
{doi vi tri diem tin}
ti:=a.tin;
a.tin:=a[j].tin;
a[j].tin:=ti;
end;

writeln(' ---------------------------------------------------------------------');
writeln(' | STT | Ma sv | Ten | Tuoi | toan | li | tin | DTB |');
writeln(' --------------------------------------------------------------------');
for i:=1 to n do
begin
writeln('|':2,i:2,'|':3,a.masv:11:0,'|':4,a.tensv:7,'|':7,a.tuoisv:4,
'|':3,a.toan:4,'|':3,
a.li:3,'|':2,a.tin:4,'|':2,a.dtb:1:1,'|':2);
end;
writeln(' --------------------------------------------------------------------');

{sap xep danh sach theo thu tu abc...}
writeln('Danh sach theo theo thu tu ten abc..');
for i:=1 to n do
for j:=n downto i+1 do
if a.tensv>a[j].tensv then begin {doi vi tri ten}
tt:=a.tensv;
a.tensv:=a[j].tensv;
a[j].tensv:=tt;
{doi vi tri tuoi}
tu:=a.tuoisv;
a.tuoisv:=a[j].tuoisv;
a[j].tuoisv:=tu;
{doi vi tri diem li}
li:=a.li;
a.li:=a[j].li;
a[j].li:=li;
{doi vi tri diem toan}
ta:=a.toan;
a.toan:=a[j].toan;
a[j].toan:=ta;
{doi vi tri diem tin}
ti:=a.tin;
a.tin:=a[j].tin;
a[j].tin:=ti;
{doi vi tri cuaDTB}
tb:=a.dtb;
a.dtb:=a[j].dtb;
a[j].dtb:=tb;
{doi vi tri ma sinh vien}
ma:=a.masv;
a.masv:=a[j].masv;
a[j].masv:=ma;

end;

writeln(' ---------------------------------------------------------------------');
writeln(' | STT | Ma sv | Ten | Tuoi | toan | li | tin | DTB |');
writeln(' --------------------------------------------------------------------');
for i:=1 to n do
begin
writeln('|':2,i:2,'|':3,a.masv:11:0,'|':4,a.tensv:7,'|':7,a.tuoisv:4,'|':3,a.toan:4,'|':3,
a.li:3,'|':2,a.tin:4,'|':2,a.dtb:1:1,'|':2);
end;
writeln(' --------------------------------------------------------------------');
Readln;
End. 



có bạn nào giúp mình gộp 2 chương trình này lại được không! mình cho vào nó không chạy được đành phải viết riêng ra. Và đặc biệt giúp cho mình câu 3, 4 và ghép 2 câu đó, câu sắp xếp theo tên, theo điểm trung bình tăng dần vào trong nhé! cám ơn mọi người rất nhiều!_

----------


## seo3m

em nghĩ anh nên chia thành các ctcon 
không để thế này có lỗi khó sửa chữa lắm .
3,4 Anh lưu điểm của các sv ra 1 mảng 1 chiều rồi tìm min và max của mảng đó .

----------


## manquang29

Bài toán này bạn sử dụng kiểu bản ghi cũng rất đơn giản thôi mà. Bạn chưa học bản ghi ah

----------


## minhtshop

mình học rồi nhưng mình vẫn chưa biết cách làm! ai có thể giúp mình nhanh được không? mình sắp pahir nộp bài rồi!

----------


## sebweb

Ghép một chương trình và sửa chữa chương trình của người khác hơi khó bạn à. Vì mỗi người một cách viết và các biến đặt tùy theo ý của người đó nên việc ghép lại giúp bạn tốn thời gian. Ngày mấy bạn nộp bài vậy?

----------


## goldenfalcon

Đây là code bằng kiểu bản ghi câu 3 và 4 bạn ah


```
type hocsinh=record
     masv:integer;
     ten:string[30];
     Tuoi:byte;
     toan,li,tin,TB:Real;
     end;
Var A:array[1..50] of hocsinh;
N,i,csmax,csmin:integer;
max,min:Real;
Begin
write('Nhap vao so hoc sinh trong lop:');
Readln(N);
For i:=1 to N do
Begin
 writeln('Nhap thong tin ve hoc sinh thu',i,':');
 write('Ma sv:');Readln(a[i].masv);
 write('Ho va ten:');Readln(A[i].ten);
 write('tuoi:');Readln(A[i].Tuoi);
 write('Diem toan:');Readln(A[i].Toan);
  write('Diem li:');Readln(A[i].li);
   write('Diem tin:');Readln(A[i].Tin);
   A[i].TB:=(a[i].toan*3+a[i].li*2+a[i].tin*5)/10;
  end;
  For i:=1 to N do
    writeln( a[i].masv:10,a[i].ten:10,a[i].TB:5:2);
    min:=a[1].tb; csmin:=1;
    For i:=1 to n do
    if min>a[i].tb then
    Begin
       min:=a[i].TB;
       csmin:=i;
    end;
    writeln('sinh vien co DTB nho nhat la:',a[csmin].ten:15,a[csmin].tb:5:2);
     max:=a[1].tb;csmax:=1;
     For i:=1 to n do
    if max<a[i].tb then
    Begin
       max:=a[i].TB;
       csmax:=i;
    end;
    write('sinh vien co DTB lon nhat la:',a[csmax].ten:10,a[csmax].tb:5:2);
    Readln
    End.
```

----------


## banthe247

mình nhày 12 phải nộp bài rồi! gấp quá! mọi người giúp mình được thì mình cảm ơn rất nhiều!!!!!!

----------


## tuoiyeux

các bạn cứ làm theo ý tưởng của các bạn, tớ sẽ từ đấy mà chuyển sang dạng của tớ!
thank moị người rất nhiều!

----------


## giaitriso

Chưa hoàn chỉnh hết các tác vụ nhá bạn. Đang xử lí tiếp nhưng thấy bạn nóng lòng nên post cho bạn nếu bạn có ý chỉnh sửa.



```
Program HappySoftGroup_diendantinhoc;

Uses Crt, Dos;

Const Menu : Array[1..5] Of String = ('Tao Co So Du Lieu  ',
                                      'Nhap Them HS Moi   ',
                                      'Tim Kiem, Sua Ho So',
                                      'In Danh Sach HS    ',
                                      'Ket Thuc Cong Viec ');

Type Nguoi = Record
          HoTen : String[25];
          Diem  : Array[1..4] Of Real;
          Vt    : Byte;
     End;

Var HS : Array[1..100] Of Nguoi;
    i, j, N : Byte;
    D : Real;
    F : File Of Nguoi;
    Hocsinh : Nguoi;
    Kt : Char;

Procedure Setcusor(bot, top : Byte);
Var regs : Registers;
Begin
     regs.AH := 1;
     regs.CH := bot;
     regs.CL := top;
     Intr($10, regs);
End;

Procedure WriteXY(x, y, MauC, MauN : Byte; ST : String);
Var Maucu : Byte;
Begin
     Maucu := TextAttr;
     TextColor(MauC);
     TextBackground(MauN);
     GotoXY(x, y);
     Write(ST);
     TextAttr := Maucu;
End;

Procedure DoubleBox(x1, y1, x2, y2 : Byte);
Var i : Byte;
Begin
     GotoXY(x1, y1); Write(#201);
     For i := x1+1 To x2-1 Do Write(#205);
     GotoXY(x1, y2); Write(#200);
     For i := x1+1 To x2-1 Do Write(#205);
     GotoXY(x2, y1); Write(#187);
     GotoXY(x2, y2); Write(#188);
     For i := y1+1 To y2-1 Do
     Begin
          GotoXY(x1, i); Write(#186);
          GotoXY(x2, i); Write(#186);
     End;
End;

Procedure OpenFile;
Begin
     Assign(F, 'HOSO.DAT');
     {$I-} Reset(F); {$I+}
     If IOResult <> 0 Then
     Begin
          Writeln('Khong co CSDL tren dia');
          Exit;
     End;
End;

Procedure Input;
Begin
     Repeat
          N := FileSize(F);
          Write('Nhap HO TEN HS thu ',N+1,' : ');
          With HocSinh Do
          Begin
               Readln(HoTen);
               While Length(HoTen) < 20 Do HoTen := HoTen + ' ';
               D := 0;
               For j := 1 To 3 Do
               Begin
                    Write('Diem mon ',j,': ');
                    Readln(Diem[j]);
                    D := D + Diem[j];
               End;
               D := D/3;
               Diem[4] := D;
               Vt := 1;
          End;
          Seek(F, FileSize(F));
          Write(F, HocSinh);
          Write('Co tiep tuc khong (C/K)? ');
          Readln(Kt);
     Until UpCase(Kt) = 'K';
End;

Procedure Sort;
Begin
     OpenFile;
     i := 0;
     While Not EOF(F) Do
     Begin
          Read(F, HocSinh);
          Inc(i);
          HS[i] := HocSinh;
     End;
     N := i;
     For i := 1 To N Do HS[i].VT := 1;
     For i := 1 To N Do
          For j := 1 To N Do
          If HS[i].Diem[4] < HS[j].Diem[4] Then Inc(HS[i].VT);
     For i := 1 To N Do
     Begin
          Seek(F, i-1);
          Write(F, HS[i]);
     End;
     Close(F);
End;

Procedure NewFile;
Begin
     Assign(F, 'HOSO.DAT');
     {$I-} Reset(F); {$I+}
     If IOResult = 0 Then
     Begin
          Write('CSDL se bi xoa. Co tiep tuc khong (C/K)? ');
          Readln(Kt);
          If UpCase(Kt) = 'K' Then
          Begin
               Close(F);
               Exit;
          End;
     End;
     ReWrite(F);
     Input;
     Close(F);
End;

Procedure AppendFile;
Begin
     OpenFile;
     Input;
     Close(F);
End;

Procedure Print;
Begin
     Sort;
     OpenFile;
     Clrscr;
     Writeln('                     DANH SACH HOC SINH');
     Writeln('-----------------------------------------------------------');
     Writeln('STT :      Ho & Ten        : Van : Toan: NN  : DTB :   VT :');
     Writeln('-----------------------------------------------------------');
     i := 0;
     While Not EOF(F) Do
     Begin
          Read(F, HocSinh);
          Inc(i);
          With HocSinh Do
          Begin
               Write(':',i:2,' : ',HoTen,' :');
               For j := 1 To 4 Do Write(Diem[j]:4:1,' :');
               Writeln(Vt:4,'  :');
          End;
     End;
     Writeln('-----------------------------------------------------------');
     Writeln('Danh Sach nay co ',i,' hoc sinh');
     Close(F);
     Readln;
End;

Procedure Fix;
Begin
     OpenFile;
     Repeat
          Writeln('Nhap so thu tu: ');
          Readln(i);
          Dec(i);
          If i >= FileSize(F) Then
          Begin
               Writeln('Tap tin nay chi co ',FileSize(F),' record');
               Readln;
               Close(F);
               Exit;
          End;
          Seek(F, i);
          Read(F, HocSinh);
          With HocSinh Do
          Begin
               Write(':',i+1:2,' : ',HoTen,' : ');
               For j := 1 To 4 Do Write(Diem[j]:4:1,' : ');
               Writeln(Vt:4,'  :');
               Writeln('Ban hay chon muc can sua: ');
               Write('1. Sua Ho va Ten.',
                     '2. Sua Diem mon hoc.');
               Readln(Kt);
               Case Kt Of
                    '1' : Begin
                              Write('Nhap Ho va Ten: ');
                              Readln(HoTen);
                              While Length(HoTen) < 20 Do HoTen := HoTen + ' ';
                          End;
                    '2' : Begin
                              D := 0;
                              For j := 1 To 3 Do
                              Begin
                                   Write('Diem mon ',j,': ');
                                   Readln(Diem[j]);
                                   D := D + Diem[j];
                              End;
                              D := D/3;
                              Diem[4] := D;
                          End;
               End;
          End;
          If (Kt = '1') Or (Kt = '2') Then
          Begin
               Seek(F, i);
               Write(F, HocSinh);
          End;
          Write('Co tiep tuc khong (C/K)? ');
     Until UpCase(Kt) = 'K';
     Close(F);
End;

Procedure Menu1(cd, dd, SoMenu : Byte);
Var chon, tam, i : Byte;
    Kt : Char;
Begin
     TextAttr := 16*Blue+Yellow;
     chon := 1;
     tam := 1;
     Repeat
          SetCusor(32,3);
          ClrScr;
          DoubleBox(cd-1, dd, cd+Length(Menu[1]), dd+1+SoMenu);
          WriteXY(cd, dd-1, White, Red, 'Hay chon cac muc sau');
          For i := 1 To SoMenu Do
          WriteXY(cd, dd+i, Black, LightCyan, Menu[i]);
          WriteXY(cd, dd+chon, White, Red, Menu[chon]);
          tam := chon;
          Kt := ReadKey;
          If Kt = #13 Then
          Begin
               ClrScr;
               SetCusor(9,10);
               Case chon Of
                    1 : NewFile;
                    2 : AppendFile;
                    3 : Fix;
                    4 : Print;
                    5 : Exit;
               End;
          End;
          If Kt = #0 Then Kt := ReadKey;
          Case Kt Of
               #72 : If chon > 1 Then Dec(chon) Else chon := SoMenu;
               #80 : If chon < SoMenu Then Inc(chon) Else chon := 1;
          End;
     Until Kt = #27;
End;

BEGIN
     Menu1(32,10,5);
END.
```

----------


## caole1992

cảm ơn bạn *HappySoftGroup rất rất nhiều!*
mình thấy cách của bạn thật khoa học! đến nỗi cô giáo mình chưa chắc đã làm được vậy! rất đẹp bạn à. Mong chờ bản full của bạn! mình cảm ơn bạn và diễn đàn tin học rất nhiều!

----------


## rickyson280287

Ủa bạn ơi! Ngày mai bạn nộp bài hả? Hôm bửa đang viết, cái FreePascal của mình bị lỗi nên không chạy được đành phải cài lại. Nếu bạn cần gấp thì mình hoàn chỉnh lun cho bạn. Chúc bạn vui vẻ!

----------


## kevin_cn08b

Đây là bài khá hoàn chỉnh. Nó thực hiện các công việc điển hình thôi. Còn nếu bạn muốn thực hiện đầy đủ các công việc như đề thì bạn phát triển thêm thành bài code của mình. Chúc bạn vui vẻ và học tập tốt!
Bạn hãy copy qua notepad rồi sửa đuôi nó lại thành *.pas là có thể đọc được những kí tự lạ bên dưới!


```
Program HappySoftGroup_diendantinhoc;

Uses Crt, Dos;

Const Menu : Array[1..6] Of String = ('1. Tao Co So Du Lieu  ',
                                      '2. Nhap Them HS Moi   ',
                                      '3. Tim Kiem, Sua Ho So',
                                      '4. In Danh Sach HS    ',
                                      '5. Thong ke           ',
                                      '6. Ket Thuc Cong Viec ');

Type Nguoi = Record
          HoTen : String[25];
          Diem  : Array[1..4] Of Real;
          Vt    : Byte;
     End;

Var HS : Array[1..100] Of Nguoi;
    i, j, N : Byte;
    D : Real;
    F : File Of Nguoi;
    Hocsinh : Nguoi;
    Kt : Char;

Procedure Setcusor(bot, top : Byte);
Var regs : Registers;
Begin
     regs.AH := 1;
     regs.CH := bot;
     regs.CL := top;
     Intr($10, regs);
End;

Procedure WriteXY(x, y, MauC, MauN : Byte; ST : String);
Var Maucu : Byte;
Begin
     Maucu := TextAttr;
     TextColor(MauC);
     TextBackground(MauN);
     GotoXY(x, y);
     Write(ST);
     TextAttr := Maucu;
End;

Procedure DoubleBox(x1, y1, x2, y2 : Byte);
Var i : Byte;
Begin
     GotoXY(x1, y1); Write(#201);
     For i := x1+1 To x2-1 Do Write(#205);
     GotoXY(x1, y2); Write(#200);
     For i := x1+1 To x2-1 Do Write(#205);
     GotoXY(x2, y1); Write(#187);
     GotoXY(x2, y2); Write(#188);
     For i := y1+1 To y2-1 Do
     Begin
          GotoXY(x1, i); Write(#186);
          GotoXY(x2, i); Write(#186);
     End;
End;

Procedure OpenFile;
Begin
     Assign(F, 'HOSO.DAT');
     {$I-} Reset(F); {$I+}
     If IOResult <> 0 Then
     Begin
          Writeln('Khong co CSDL tren dia');
          Exit;
     End;
End;

Procedure Input;
Begin
     Repeat
          N := FileSize(F);
          Write('Nhap HO TEN HS thu ',N+1,' : ');
          With HocSinh Do
          Begin
               Readln(HoTen);
               While Length(HoTen) < 20 Do HoTen := HoTen + ' ';
               D := 0;
               For j := 1 To 3 Do
               Begin
                    Write('Diem mon ',j,': ');
                    Readln(Diem[j]);
                    D := D + Diem[j];
               End;
               D := D/3;
               Diem[4] := D;
               Vt := 1;
          End;
          Seek(F, FileSize(F));
          Write(F, HocSinh);
          Write('Co tiep tuc khong (C/K)? ');
          Readln(Kt);
     Until UpCase(Kt) = 'K';
End;

Procedure Sort;
Begin
     OpenFile;
     i := 0;
     While Not EOF(F) Do
     Begin
          Read(F, HocSinh);
          Inc(i);
          HS[i] := HocSinh;
     End;
     N := i;
     For i := 1 To N Do HS[i].VT := 1;
     For i := 1 To N Do
          For j := 1 To N Do
          If HS[i].Diem[4] < HS[j].Diem[4] Then Inc(HS[i].VT);
     For i := 1 To N Do
     Begin
          Seek(F, i-1);
          Write(F, HS[i]);
     End;
     Close(F);
End;

Procedure NewFile;
Begin
     Assign(F, 'HOSO.DAT');
     {$I-} Reset(F); {$I+}
     If IOResult = 0 Then
     Begin
          Write('CSDL se bi xoa. Co tiep tuc khong (C/K)? ');
          Readln(Kt);
          If UpCase(Kt) = 'K' Then
          Begin
               Close(F);
               Exit;
          End;
     End;
     ReWrite(F);
     Input;
     Close(F);
End;

Procedure AppendFile;
Begin
     OpenFile;
     Input;
     Close(F);
End;

Procedure Print;
Begin
     Sort;
     OpenFile;
     Clrscr;
     Writeln('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
     Writeln('º                    DANH SACH SINH VIEN                 º');
     Writeln('ÌÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍ¹');
     Writeln('º STT º       Ho & Ten      º Van º Toanº NN  º DTB º VT º');
     Writeln('ÌÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍ¹');
     i := 0;
     While Not EOF(F) Do
     Begin
          Read(F, HocSinh);
          Inc(i);
          With HocSinh Do
          Begin
               Write('º ',i:3,' º ',HoTen,'º');
               For j := 1 To 4 Do Write(Diem[j]:4:1,' º');
               Writeln(Vt:3,' º');
          End;
     End;
     Writeln('ÌÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍ¹');
     Writeln('º Co tong cong ',i:3,' sinh vien dtb tren 7.5                º');
     Writeln('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼');
     Close(F);
     Readln;
End;

Procedure Fix;
Begin
     OpenFile;
     Repeat
          Writeln('Nhap so thu tu: ');
          Readln(i);
          Dec(i);
          If i >= FileSize(F) Then
          Begin
               Writeln('Tap tin nay chi co ',FileSize(F),' record');
               Readln;
               Close(F);
               Exit;
          End;
          Seek(F, i);
          Read(F, HocSinh);
          With HocSinh Do
          Begin
               Write(':',i+1:2,' : ',HoTen,' : ');
               For j := 1 To 4 Do Write(Diem[j]:4:1,' : ');
               Writeln(Vt:4,'  :');
               Writeln('Ban hay chon muc can sua: ');
               Write('1. Sua Ho va Ten.',
                     '2. Sua Diem mon hoc.');
               Readln(Kt);
               Case Kt Of
                    '1' : Begin
                              Write('Nhap Ho va Ten: ');
                              Readln(HoTen);
                              While Length(HoTen) < 20 Do HoTen := HoTen + ' ';
                          End;
                    '2' : Begin
                              D := 0;
                              For j := 1 To 3 Do
                              Begin
                                   Write('Diem mon ',j,': ');
                                   Readln(Diem[j]);
                                   D := D + Diem[j];
                              End;
                              D := D/3;
                              Diem[4] := D;
                          End;
               End;
          End;
          If (Kt = '1') Or (Kt = '2') Then
          Begin
               Seek(F, i);
               Write(F, HocSinh);
          End;
          Write('Co tiep tuc khong (C/K)? ');
          Readln(Kt);
     Until UpCase(Kt) = 'K';
     Close(F);
End;

Procedure Statistical;
Var i, j, dem : Byte;
Begin
     Clrscr;
     OpenFile;
     Writeln('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
     Writeln('º       NHUNG SINH VIEN CO DIEM TRUNG BINH TREN 7.5      º');
     Writeln('ÌÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍÍËÍÍÍÍ¹');
     Writeln('º STT º       Ho & Ten      º Van º Toanº NN  º DTB º VT º');
     Writeln('ÌÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍÍÎÍÍÍÍ¹');
     dem := 0;
     i := 0;
     While Not EOF(F) Do
     Begin
          Read(F, HocSinh);
          Inc(i);
          With HocSinh Do
          Begin
               If Diem[4] > 7.5 Then
               Begin
                    Inc(dem);
                    Write('º ',i:3,' º ',HoTen,'º');
                    For j := 1 To 4 Do Write(Diem[j]:4:1,' º');
                    Writeln(Vt:3,' º');
               End;
          End;
     End;
     Writeln('ÌÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍÍÊÍÍÍÍ¹');
     Writeln('º Co tong cong ',dem:3,' sinh vien dtb tren 7.5                º');
     Writeln('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¼');
     Close(F);
     Readln;
End;

Procedure Menu1(cd, dd, SoMenu : Byte);
Var chon, tam, i : Byte;
    Kt : Char;
Begin
     TextAttr := 16*Blue+Yellow;
     chon := 1;
     tam := 1;
     Repeat
          SetCusor(32,3);
          ClrScr;
          DoubleBox(cd-1, dd, cd+Length(Menu[1]), dd+1+SoMenu);
          WriteXY(cd, dd-1, White, Red, ' Hay chon cac muc sau');
          For i := 1 To SoMenu Do
          WriteXY(cd, dd+i, Black, LightCyan, Menu[i]);
          WriteXY(cd, dd+chon, White, Red, Menu[chon]);
          tam := chon;
          Kt := ReadKey;
          If Kt = #13 Then
          Begin
               ClrScr;
               SetCusor(9,10);
               Case chon Of
                    1 : NewFile;
                    2 : AppendFile;
                    3 : Fix;
                    4 : Print;
                    5 : Statistical;
                    6 : Exit;
               End;
          End;
          If Kt = #0 Then Kt := ReadKey;
          Case Kt Of
               #72 : If chon > 1 Then Dec(chon) Else chon := SoMenu;
               #80 : If chon < SoMenu Then Inc(chon) Else chon := 1;
          End;
     Until Kt = #27;
End;

BEGIN
     Menu1(32,10,6);
END.
```

----------


## seochoikiemgao

mình đã đi rất nhiều diễn đàn nhưng có ít diễn đàn nào nhiệt tình như diễn đàn này! cám ơn bạn, cám ơn diễn đàn rất nhiều!

----------


## trinhhiep.camera

mà ban ơi! cái kí tự 
*ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ  ÍÍÍÍÍÍÍ¼

*

làm thế nào mà hay thế bạn???? từ kí tự này mà ra được khung! hay thật đấy! thủ thuật này sao bạn biết vậy??

----------


## lamtuenhi

> mà ban ơi! cái kí tự 
> *ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ  ÍÍÍÍÍÍÍ¼*
> 
> 
> 
> làm thế nào mà hay thế bạn???? từ kí tự này mà ra được khung! hay thật đấy! thủ thuật này sao bạn biết vậy??


cái này chỉ cần căn chỉnh chính xác các kí tự in ra là đc mà [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------


## ami_thuongthuong

Code của anh HASO thì ko phải bàn nữa, nhưng wlforever lần sau làm thì nên làm mỗi phần của chương trình thành 1 chương trình con, lưu ý rằng các biến phải kiểm tra cẩn thận, kẻo 2 ctc gọi lẫn nhau mà dùng chung biến hoặc biến đã thay đổi giá trị mà không cập nhật lại thì sẽ dẫn tới sai. Mình nghĩ bài của bạn gộp 2 câu vào thì sai chắc do lí do trên.

----------

