# GÓC SÁNG TẠO > Khu vực lập trình > Pascal/Delphi/Kylix >  Giúp mình bài pascal này !

## thanducha

Căn bậc bai: (CBH)
- Viết chương trình pascal tính:
P=CBH(1+CBH(2+...+CBH(N))) với n<=1000. Phần thập phần lấy 4 chữ số thập phân.
->> XIn lỗi, mình không thể gõ kí hiệu căn bậc hai lên diễn đàn.

----------


## thanhlong24

Vấn đề của bài này là viết được chương trình con tính căn bậc 2 của 1 số.
Đây là _Function CBH_ theo ý của bạn thích. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]


```
Function CBH(a : Integer) : Real;
Begin
       CBH := exp((1/2)*ln(a));
End;
```

----------


## hoang_kisirong

SQRT là hàm căn bậc hai mà. Dùng hàm đó có phải tiện hơn không HSG?

----------


## huongnguyen123

Đây là chương trình bạn ah. Vì ta cần cộng các số trong căn từ 1 đến N mà số căn của N là ít nhất, sau đó đến N-1,...,số1 là nhiều căn nhất Bạn phải dùng vòng lặp For- downto để tính theo lệnh lặp và công thức lặp S:=sqrt(i+S) như sau:



```
program vd;
Var i,N:integer;S:Real;
Begin
write('Nhap vao so N:'); Readln(N);
S:=0;
For i:=N downto 1 do
S:=sqrt(i+S);
write('S=',S:7:4);
Readln
End.
```

nhớ nhấn cám ơn nhé!

----------


## hajdajgja

lê hằng ơi, cái này phải là for... to chứ.

----------


## viettopcare10

Phải dùng For - dơnto thì mới cộng ra kết quả như bài toán bạn ah. Bạn xem lại xem.

----------


## pesttykl

không đúng, bài đó như thế này chứ:


```
var N,S,i:integer;
begin
write('so phan tu cua day:');
readln(N);
S:=0;
for i:=1 to N do

S:=sqrt(S+sqrt(i));
write('tong la:'S:8:4);
readln
end.
```

Nhưng mà sao khi chạy chương trình nó lại báo lỗi 26 ở


```
S:=sqrt(S+(i));
```

 nhĩ?

----------


## baothanh12345

> không đúng, bài đó như thế này chứ:
> 
> 
> ```
> var N,S,i:integer;
> begin
> write('so phan tu cua day:');
> readln(N);
> S:=0;
> ...


s : real ; mới đúng chứ . vì hàm sqrt trả ra kết quả là 1 số thực .

----------


## trangnt

> Đây là chương trình bạn ah. Vì ta cần cộng các số trong căn từ 1 đến N mà số căn của N là ít nhất, sau đó đến N-1,...,số1 là nhiều căn nhất Bạn phải dùng vòng lặp For- downto để tính theo lệnh lặp và công thức lặp S:=sqrt(i+S) như sau:
> 
> 
> 
> ```
> program vd;
> Var i,N:integer;S:Real;
> Begin
> write('Nhap vao so N:'); Readln(N);
> ...


uh mình cũng nghĩ là dùng for ... downto sẽ đúng hơn , vì đề nói là N <= 1000 , như vậy ta nhập N vào rồi cho nó chạy về 1 và đưa ra kết quả thì hay hơn . Mà sao cũng đc , quan trọng là chủ topic hiểu là đc rồi .

----------


## ducquan1008

nhưng mà bạn ơi, căn(1+căn(2+căn... chứ ko phải là căn(1+2+3+...) mà dùng downto
bài khi nảy của tớ bỏ cái


```
 while..do..
```

là ok

----------


## sangame

> nhưng mà bạn ơi, căn(1+căn(2+căn... chứ ko phải là căn(1+2+3+...) mà dùng downto
> bài khi nảy của tớ bỏ cái
> 
> 
> ```
>  while..do..
> ```
> 
> là ok


cái này thì ko phải rồi bạn ạ . 
mình thử lấy vd nhé : n=3
n =3 : s:=sqrt(3) --> n=2 : s:= sqrt(2+sqrt(3)) --> n=1 : s:= sqrt(1+sqrt(2+sqrt(3))) ;

----------


## xuantruong.seo

Bài của lehang đúng rồi đấy, chỉ chỉnh S: real thôi.
Bạn gianghen đọc lại đề nhé, số càng lớn thì nó càng được tính trong CBh trước, sau đó ta lấy kết quả của CBH làm tiếp với số nhỏ hơn mới đúng.

----------


## quangcaodienlanh

rồi, tóm lại là cả 2 cách đều đc phải không,


```
 downto
```

 cũng đc mà


```
 to
```

 cũng đc

----------


## toihoitoi

Cách dùng to đâu có được bạn, nếu bạn dùng to thì quá trình tính không phải là từ số lớn trước mà bạn sẽ tính từ số nhỏ trước, như thế là ngược lại với cách ra công thức của đề bài. Bài này dùng downto là chuẩn đấy, dùng to làm sao mà đúng công thức được.

----------


## obsking

xem lại bài tớ viết cái đã, rõ ràng là tớ đặt i sau S mà:



```
for i:=1 to N do
S:= sqrt(S+sqrt(i));
```

ví dụ: 
n=1 =>S=sqrt(1).n=2 => S=sqrt(1+sqrt(2)).....
Sai sao đc chứ?

----------


## otootin

Lấy tiếp ví dụ nha bạn, khi n=2 thì s = sqrt(1+sqrt(2)).
nếu n=3 thì i=3 ta có S:=(s+sqrt(i)) tức là : s:=sqrt(sqrt(1+sqrt(2))+sqrt(3)).
Công thức này sai đúng không nhỉ? Phải là s:=sqrt(1+sqrt(2+sqrt(3))).

----------


## ndk2303

có bạn nhầm thì có, làm gì có dấu) ở vị trí đó chứ,nó vẫn tiếp tục giống cái s:=sqrt(1+sqrt(2+sqrt(3))).

----------


## thanhlong24

úi, có lẽ đúng thật. sr mấy bác nhá. không bít cái kia thế nào.

----------


## iseovip5

Mọi người cho tớ hỏi cái
Làm thể nào để lập trình được 1 bài GPT mà giải phương trình đó ra được kết quả là 1 số hữu tỉ Vd= căn (2)
Mà máy tính nó viết ra hẳn x=\sqrt(2) thay bằng x=1,414............ hay không

----------


## HuaAnh

bạn khai báo biến 
var x: real;
thì nó sẽ ra số hửu tỉ

----------


## tantran24

> bạn khai báo biến 
> var x: real;
> thì nó sẽ ra số hửu tỉ


 bạn hiểu sai ý tớ rồi
Tớ muốn hỏi có bao giờ máy tính đưa ra màn hình kết quả =\sqrt(2) không

----------


## MuRom92

```
 
var
   M,N:real;
a,b,c,D,x1,x2:real;
begin
   write('a,b,c:');
   readln(a,b,c);
   D:=b*b-4*a*c;
   if D>=0 then
     begin
       x1:=(-b-sqrt(D))/(2*a);
       x2:=-b/a - x1;
       M:=x1*x1;
       N:=x2*x2;
     end;
   write('x1:', 'can',M);
   write('x2:', 'can',N);
readln;
end.
```

không bít có sai không mà nó cứ hiện :


```
lỗi 207:invalid floating point operation
```

 là sao nhĩ?

----------


## blackcatcn

> bạn hiểu sai ý tớ rồi
> Tớ muốn hỏi có bao giờ máy tính đưa ra màn hình kết quả =\sqrt(2) không


=\sqrt(2) là 1\sqrt(2) hay là n\sqrt(2) hả bạn?

----------


## thanhlydongden02

> ```
>  
> var
>    M,N:real;
> a,b,c,D,x1,x2:real;
> begin
>    write('a,b,c:');
>    readln(a,b,c);
>    D:=b*b-4*a*c;
> ...


*gianghen* này ! nhỡ biệt thức D ( delta ) < 0 thì sao hở bạn ?





> bạn hiểu sai ý tớ rồi
> Tớ muốn hỏi có bao giờ máy tính đưa ra màn hình kết quả =\sqrt(2) không


cái này thì phải điều khiển việc in bằng các lệnh bạn ạ . Nhưng cũng còn tùy vì với 1 số trường hợp thì đc 1 số thì không .

----------


## anhlinh123

> ```
>  
> var
>    M,N:real;
> a,b,c,D,x1,x2:real;
> begin
>    write('a,b,c:');
>    readln(a,b,c);
>    D:=b*b-4*a*c;
> ...


Lỗi 207 là lỗi dấu chấm động không hợp lệ. Theo đúng bảng lỗi biên dịch thì là như thế, còn nghĩa của nó thì :emlaugh::emlaugh::emlaugh:.. 
Chương trình này vướng lỗi ở dòng x1:=_______ ấy. Nhưng lỗi này có nghĩa là gì thì chưa hiểu, mặc dù các phép toán nhìn rất dễ hiểu:emlaugh:

----------


## wassing123

à ,mình sửa lại rồi.


```
 if D>= 0 then
            begin
               x1:=...
```

.

----------


## thaonguyenxanh_9x

> Lỗi 207 là lỗi dấu chấm động không hợp lệ. Theo đúng bảng lỗi biên dịch thì là như thế, còn nghĩa của nó thì :emlaugh::emlaugh::emlaugh:.. 
> Chương trình này vướng lỗi ở dòng x1:=_______ ấy. Nhưng lỗi này có nghĩa là gì thì chưa hiểu, mặc dù các phép toán nhìn rất dễ hiểu:emlaugh:


theo em nghĩ thì lỗi này xảy ra khi có gọi hàm sqrt(D) mà D < 0 .

----------


## nhimbien12

ừ, mình đã dùng thêm if rồi mà, xem lại đi

----------


## hardest

Có thể sacklove đúng đấy, vì sqrt là căn bậc hai của 1 số không âm. Thêm if vào chắc được nhỉ.

----------


## haicauhoan

> không đúng, bài đó như thế này chứ:
> 
> 
> ```
> var N,S,i:integer;
> begin
> write('so phan tu cua day:');
> readln(N);
> S:=0;
> ...


Chương trình như bạn viết sẽ không tính được đúng như bài toán đó. Bạn test xem lại nhé> Vì nếu như chương trình bạn viết sẽ tính như tieulong giải thích là đúng!

----------


## hantrongtai1

Khi làm bài các bạn có thể thêm vào Q+, R+ để Pascal kiểm tra chặt chẽ các lỗi biên dịch, khi đó sẽ không có tình trạng F9 không ra lỗi nhưng thật ra là có lỗi nhưng máy đã bỏ qua. Cái này khi đi thi sẽ thật sự hữu ích để kiểm tra tính đúng của chương trình.

----------


## mainguyen

*Phát hiên lỗi sai*

Hãy tính và đưa ra kq .Nếu tổng điểm >=10 thì đạt, < 10 thì không đạt
Tớ làm thế này mà k biết S ở đâu nữa mà k chạy được




cảm ơn mọi người!

----------


## Vibe89

Em gửi bài code của em lên để dễ dàng chỉnh sửa hơn.

----------


## viettopcare

> Em gửi bài code của em lên để dễ dàng chỉnh sửa hơn.


 anh ơi , em không biết gửi code như thế nào cả
Có anh bảo em tìm tập BAI4.bak mà em dùng công cụ tìm kiếm thì nó bảo k có kết qủ nào hiện thị
Là sao hả anh

----------


## seovotinh

em chọn đính kèm file rồi chọn file .pas để gửi lên.

----------


## thinhhp91

> em chọn đính kèm file rồi chọn file .pas để gửi lên.


Ý em bảo là tìm file đó kiểu j` cơ

----------


## lolem19

> Ý em bảo là tìm file đó kiểu j` cơ


thử vào search trong Window rồi tìm kiếm xem . Chắc sẽ thấy đó bạn ạ .
Sau đó trong quá trình đính kèm file bạn chỉ cần chọn đường dẫn đến file bạn vừa tìm đc .

----------


## accxaydung

quan trọng là bạn nên gửi file .pas lên bạn ạ.

----------


## Tidus86

Hay anh HSG bảo em chỗ sai đi ,em k biết mấy cái đó đâu

----------


## vip-yte

F3, chỉnh cái khu vực tìm kiếm là kiếm trong TP, gõ tên bài.pas. Enter.
Không thì bạn paste nguyên cái code đó vào để mọi người xem luôn.

----------


## phamvanhoa7592

Chỗ này em à.
*If Lop.Tong >= 10 Then ... Else Lop.Tong := 'Khong Dat';*_
Sai chỗ Lop.Tong.
Em phải đổi lại là Lop.KQ mới đúng._

----------


## trungvu

```
Program HSG;
        Uses Crt;

        Type Hocsinh = Record
                hoten : String[20];
                kq    : String[10];
                toan, van, tong : Real;
        End;

        Var i, n : Integer;
            hs : Array[1..60] Of Hocsinh;

BEGIN
        Clrscr;
        Write('Nhap so hoc sinh: ');
        Readln(N);
        For i := 1 To N Do
        With hs[i] Do
        Begin
                Writeln('- Hoc sinh thu ',i,': ');
                Write('  + Ho & Ten: '); Readln(hoten);
                Write('  + Toan    : '); Readln(toan);
                Write('  + Van     : '); Readln(van);
                tong := toan + van;
                If tong >= 10 Then kq := 'Dat' Else kq := 'Khong Dat';
        End;
        Clrscr;
        Writeln('Ket qua');
        Writeln('======');
        For i := 1 To N Do
        With hs[i] Do
                Writeln(i:3, hoten:20, toan:4:0, van:4:0, tong:4:0, kq:7);
        Readln
End.
```

Đây là bài dựa theo yêu cầu đề của bài em và có cải tiến.
Chúc em học tốt.

----------


## nhimbien12

lehang làm đúng đó. Vì n chịu ảnh hưởng bởi căn bậc hai nhiều nhất lên cho là dơnto

----------


## nhumotcongio

Anh HSG ơi .Anh viết mấy file BT về bảng ghi đi , cho em tham khảo với
VD: Như bài tính điểm chuẩn của 1 trường nào đó rồi đưa ra màn hình có thí sinh trúng tuyển chảng hạn
Bọn em sắp KT 45' rồi mà em chẳng hiểu j` cả 
Em cảm ơn anh nhiều!

----------


## phukienplus

> Trong kì thi tuyển sinh ĐH HN.có 4 thí sinh dự thi khối A .Lập trình nhập vào bạn phím thông tin của thí sinh bao gồm :Họ tên ,SBD , ngay sinh , điểm Toán , lí , hoá .Sau đó hãy tính và đưa ra điểm chuẩn tuyển sinh của trường , trường k quy định điểm liệt .Chỉ tiêu là 2 người




```
program bai1;
uses crt;
type Hocsinh=Record
SBD: string[2];
Hoten:string[4];
Ngaysinh:String;
Toan,Li,Hoa,Tong:real;
end;
var A:array[1..4] of Hocsinh ;
i,t :integer;
Begin
  clrscr;
  For i:=1 to 4 do
  Begin
    write('So bao danh:'); readln(A[i].SBD);
    Write('Hoc sinh:');readln(A[i].Hoten);
    write('ngay sinh:');readln(A[i].Ngaysinh);
    write('Toan=');readln(A[i].Toan);
    write('Li='); readln(A[i].Li);
    write('Hoa=');readln(A[i].Hoa);
  end;
  For i:=1 to 4 do
  begin
    A[i].Tong:=A[i].Toan+A[i].Li+A[i].Hoa;
    If A[i].Tong<A[i+1].Tong then
    Begin
    t:=A[i];
    A[i]:=A[i+1];
    A[i+1]:=t;
    end;
    end;
    Writeln('STT hoc sinh sau khi duoc sap xep la :');
    for i:=1 to 4 do write(A[i].);
    writeln('Diem chuan cua truong:',A[2].Tong);
    readln
    end.
```

anh ơi ! Nó toàn báo lỗi ở chỗ sắp xếp thôi ạ.Anh xem cho em

----------


## Winter Angle

Nếu em đã A_.Tong và A[i+1].Tong thì đi đâu hay làm gì cũng phải là i chang vậy chứ em không được thay đổi hay bỏ bớt đi. Nhìn sơ thì bài em thiếu mấy chỗ lỗi trên. Tập làm đi em!_

----------


## hpbuon

> Nếu em đã A_.Tong và A[i+1].Tong thì đi đâu hay làm gì cũng phải là i chang vậy chứ em không được thay đổi hay bỏ bớt đi. Nhìn sơ thì bài em thiếu mấy chỗ lỗi trên. Tập làm đi em!_


_

Em tưởng ta chỉ so sánh số tổng điểm của các thí sinh , còn muốn sắp xếp thì dựa vào STT tổng điểm đó ta sắp xếp tất cả các thông tin của thí sinh (học tên ,SBD,....) chứ anh

p/s: Em có chịu làm đấy chứ , nhưng làm toàn S nên em mới post lên nhờ anh chỉnh giúp mà :down:_

----------


## thienho

À. Ý anh là em nên tập làm rồi có gì hỗng biết hay sai thì post lên anh hoặc các mem khác giúp. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] 
Cố lên em nhé!

----------


## thanhtuancr7

*Nguyên văn bởi: doremon_mon*
_program bai1;
uses crt;
type Hocsinh=Record
SBD: string[2];
Hoten:string[4];
Ngaysinh:String;
Toan,Li,Hoa,Tong:real;
end;
var A:array[1..4] of Hocsinh ;
i,t :integer;
Begin
clrscr;
For i:=1 to 4 do
Begin
write('So bao danh:'); readln(A.SBD);
Write('Hoc sinh:');readln(A.Hoten);
write('ngay sinh:');readln(A.Ngaysinh);
write('Toan=');readln(A.Toan);
write('Li='); readln(A.Li);
write('Hoa=');readln(A.Hoa);
end;

__For i:=1 to 4 do
begin
A.Tong:=A.Toan+A.Li+A.Hoa;
If A.Tong<A[i+1].Tong then
Begin
t:=A;
A:=A[i+1];
A[i+1]:=t;
end;
end;
Writeln('STT hoc sinh sau khi duoc sap xep la :');
for i:=1 to 4 do write(A.);
writeln('Diem chuan cua truong:',A[2].Tong);
readln
end.



Biến t khai báo sai rồi.t phải là kiểu Hocsinh thì mới có thể hoán vị đc


_

----------


## vanphongquanphunhuan

+ Như bạn *ga vang* nói đúng rồi đó. Em cũng có thể cho phép nhiều lựa chọn như sắp xếp theo thứ tự bảng chữ cái, xếp ngược, xếp xuôi ...
+ Nói ra em hỗng hiểu chứ có thể dùng lệnh *gotoxy* kèm với màu và lệnh xóa màn hình có thể tạo một menu xuất hiện cho chọn các cách sắp xếp trên khi mình chọn sắp xếp. Cái đó cần phải dùng thư viện *dos*.

----------


## yentatoo

Đây là 1 bài mẫu, em cứ xem rồi nâng cấp nó lên cho hoàn chỉnh. Anh đang viết phần Sort (Sắp xếp), vì thời gian hạn hẹp quá nên anh post lên để em phát triển nó. Chúc em học tốt.



```
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, Chon : 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 HOC SINH                     º');
     Writeln('ÌÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍ¹');
     Writeln('º STT º      Ho & Ten        º Van  º Toan º Eng  º DTB  º  VT  º');
     Writeln('ÌÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍ¹');
     i := 0;
     Repeat
     Begin
          Read(F, HocSinh);
          Inc(i);
          With HocSinh Do
          Begin
               Write('º',i:3,'  ³ ',HoTen,' ³');
               For j := 1 To 4 Do Write(Diem[j]:5:1,' ³');
               Writeln(Vt:3,'   º');
          End;
          If not EOF(F) Then Writeln('Ç-Ä---Å----------------------Å------Å------Å------Å------Å------¶');
     End;
     Until EOF(F);
     Writeln('ÈÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍ¼');
     Writeln('Danh Sach nay co ',i,' hoc sinh');
     Close(F);
     Readln;
End;

Procedure Fix;
Begin
     OpenFile;
     Repeat
          Write('+ Nhap so thu tu: ');
          Readln(i);
          Dec(i);
          If i >= FileSize(F) Then
          Begin
               Write('=> Tap tin nay chi co ',FileSize(F),' record.');
               Readln;
               Close(F);
               Exit;
          End;
          Writeln('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
          Writeln('º                       HOC SINH BAN CAN TIM                    º');
          Writeln('ÌÍÍÍÍÍËÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍËÍÍÍÍÍÍ¹');
          Writeln('º STT º      Ho & Ten        º Van  º Toan º Eng  º DTB  º  VT  º');
          Writeln('ÌÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍÎÍÍÍÍÍÍ¹');
          Seek(F, i);
          Read(F, HocSinh);
          With HocSinh Do
          Begin
               Write('º',i:3,'  º ',HoTen,' º');
               For j := 1 To 4 Do Write(Diem[j]:5:1,' º');
               Writeln(Vt:3,'   º');
               Write('ÈÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍÊÍÍÍÍÍÍ¼');
               Writeln;
               Writeln('+ Ban hay chon muc can sua: ');
               Writeln('  1. Sua Ho va Ten.');
               Writeln('  2. Sua Diem mon hoc.');
               Write('=> Chon 1 hoac 2: ');
               Readln(Chon);
               Case Chon 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 (Chon = '1') Or (Chon = '2') Then
          Begin
               Seek(F, i);
               Write(F, HocSinh);
          End;
          Write('Co tiep tuc khong (C/K)? ');
          Readln(Kt);
          Clrscr;
     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.
```

Chắc em sẽ thắc mắc các kí tự lạ kia là gì. Em yên tâm, nó là những ký tự trong bảng mã ascii thôi. Cứ copy rồi dán vào file .txt sau đó đổi đuôi thành .pas mở lên là sẽ biết rõ.

----------


## bedaukute

@HSG:Em không hiểu gì hết .Anh làm theo kiến thức lớp 11 đi , mà đề có bảo cần nhập H/s mới hay sửa hồ sơ đâu ạ .Em sắp KT 45' rồi , anh giúp em đi 
@Ga Vang : Tớ sửa theo ý bạn rồi nhưng nó vẫn báo lõi ở chỗ
A_:=A[i+1]; ( nó bảo S ở dấu ";" )
Sửa là A.Tong:=A[i+1].Tong; thì vẫn báo lỗi nhưng vậy_

----------


## Winter Angle

Điểm chuẩn tuyển sinh của trường được tìm bằng cách nào em? Đề vẫn chưa rõ nhỉ. Anh sửa sơ sơ lại bài của em rồi. Tham khảo mà chỉnh lại nha em. Chúc em học tốt.



```
Program HSG_diendantinhoc;

        Uses Crt;

        Type Hocsinh = Record
                SBD   : String[3];
                Hoten : String[25];
                Ngaysinh : String;
                Toan, Ly, Hoa, Tong : Real;
             End;

        Var A : Array[1..50] Of Hocsinh;
            i, j : Byte;
            t : Hocsinh;
BEGIN
        ClrScr;
        For i := 1 to 4 do
        With A[i] Do
        Begin
                Writeln('[Hoc sinh thu ',i,']');
                Write('+ So bao danh: '); Readln(SBD);
                Write('+ Ho ten: ');      Readln(Hoten);
                Write('+ Ngay sinh: ');   Readln(Ngaysinh);
                Write('+ Toan: ');        Readln(Toan);
                Write('+ Ly: ');          Readln(Ly);
                Write('+ Hoa: ');         Readln(Hoa);
                Tong := Toan + Ly + Hoa;
        End;
        For i := 1 to 4 - 1 do
        For j := i + 1 to 4 do
                If A[i].Tong < A[j].Tong then
                Begin
                        t     := A[i];
                        A[i] := A[j];
                        A[j] := t;
                End;
        Writeln('=> STT hoc sinh sau khi duoc sap xep la: ');
        For i := 1 to 4 do writeln(A[i].SBD);
        Writeln('=> Diem chuan cua truong: ',A[4].Tong:0:0);
        Readln
END.
```

----------


## hautran200594

> Điểm chuẩn tuyển sinh của trường được tìm bằng cách nào em? Đề vẫn chưa rõ nhỉ. Anh sửa sơ sơ lại bài của em rồi. Tham khảo mà chỉnh lại nha em. Chúc em học tốt.


Điểm chuẩn thì = tổng điểm của thí sinh cuối cùng được trúng tuyển ạ .Ở bài này là điểm chuẩn của trường là tổng điểm của thí sinh có tổng điểm cao thứ 2 trong 4 thí sính dự thi 

Em vừa chạy thử chương trình của anh xong 
kết quả điểm chuẩn của trường sai ạ và anh này .em muốn sau khi sắp xếp tổng điểm của các thí sinh từ cao xuống thấp xong rồi , sau đó in ra màn hình tất cả các thông thông tin( họ tên , SBD, điểm thi các môn ,.) về 2 số thí sinh có tổng điểm cao nhất trong 4 thí sinh dự thi thì làm thế nào ạ

----------


## thangnguyenseo

+ Uhm, điểm trúng tuyển lúc nãy anh đâu biết. Nếu vậy thì sắp xếp từ cao xuống thấp xong lấy điểm của thí sinh kề cuối là được.
+ Em tham khảo bài viết lớn của anh í, cách xuất ra nếu em không thích ô vuông thì chỉ cần bỏ những dấu đi là được.
+ Còn 2 thí sinh cao nhất thì xuất thí sinh thứ nhất và thứ 2 là được.

----------


## phluant

> + Uhm, điểm trúng tuyển lúc nãy anh đâu biết. Nếu vậy thì sắp xếp từ cao xuống thấp xong lấy điểm của thí sinh kề cuối là được.
> + Em tham khảo bài viết lớn của anh í, cách xuất ra nếu em không thích ô vuông thì chỉ cần bỏ những dấu đi là được.
> + Còn 2 thí sinh cao nhất thì xuất thí sinh thứ nhất và thứ 2 là được.


Nhưng bài đó em mà làm trong bài kiểm tra thì thầy gạch hết mất. Bọn em đâu được học các cú pháp mà anh đã dùng ạ .Lạ hoắc đối với em

----------


## bocghenem

> Nhưng bài đó em mà làm trong bài kiểm tra thì thầy gạch hết mất. Bọn em đâu được học các cú pháp mà anh đã dùng ạ .Lạ hoắc đối với em


Đó toàn là những kiến thức lớp 11 hết á em. Lúc anh học thì có phát hiện nào mới là thầy cô đều hoan nghên, chẳng ai dám gạch hay là bảo thủ cả. Thầy cô nhưng nếu thầy cô sai là anh phản đối. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
Chắc em chưa biết lệnh *With ... Do* phải không?
*Ví dụ:* *
A.ten := 'abc';*_ là không có lệnh trên. Khi em chèn vào With A Do ten := 'abc';.
Đó. Nó chỉ giúp rút gọn câu lệnh, không rườm rà và gây khó nhìn._

----------


## bomhao

> Đó toàn là những kiến thức lớp 11 hết á em. Lúc anh học thì có phát hiện nào mới là thầy cô đều hoan nghên, chẳng ai dám gạch hay là bảo thủ cả. Thầy cô nhưng nếu thầy cô sai là anh phản đối. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
> Chắc em chưa biết lệnh *With ... Do* phải không?
> *Ví dụ:* 
> *A.ten := 'abc';*_ là không có lệnh trên. Khi em chèn vào With A Do ten := 'abc';.
> Đó. Nó chỉ giúp rút gọn câu lệnh, không rườm rà và gây khó nhìn._


_

Chỗ đó em hiểu mà anh 
Em tưởng anh bảo em làm như bài dài ở trên chứ.Bài đó các cú pháp bọn em mới chưa được học ạ_

----------


## VinhLink

[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Không có cái nào hết em à. Ngoại trừ 1 cái là *regs.* Còn mấy cái kia là chương trình con anh viết ra nên có cấu trúc vậy. Anh chắc chắn rằng em có thể sử dụng chương trình trên trong lớp học được rồi nhưng vấn đề là hơi dài và khó quản lí hết. [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA  l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR  EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

----------

