Cựu Học Sinh Lê Quý Đôn - Long An

Cựu Học Sinh Lê Quý Đôn - Long An (http://www.lqdlongan.com/forum/index.php)
-   Tin học phổ thông (http://www.lqdlongan.com/forum/forumdisplay.php?f=117)
-   -   Cứu bài tập pascal này với (http://www.lqdlongan.com/forum/showthread.php?t=6926)

johnceduy 02-02-2009 07:07 PM

Cứu bài tập pascal này với
 
:super:Mod nào hướng dẫn em giải bài này với: Để quản lí kết quả thi tuyển vào lớp 10 của học sinh phổ thông, mỗi thí sinh cần lưu trữ các thông tin sau: Số báo danh, họ và tên, điểm thi các môn toán lí hóa.Viết Chương trình thực hiện các công việc sau:
a)Tạo 1 tập tin mới có tên là họcsinh.txt để nhập họ tên thí sinh (chỉ nhập tên và điểm các môn). Việc lập được lập lại cho đến khi họ tên thí sinh là xâu rỗng.
b) Sắp xếp theo thứ tự alpha b của danh sách thí sinh được nhập vào.
c) Hiển thị danh sách thí sinh lên màn hình kèm theo điểm các môn và tổng điểm. Thí sinh trúng tuyển là thí sinh có điểm trên 20 không có môn nào dưới 2.:super:

myhanh 03-02-2009 07:45 AM

Ðề: Cứu bài tập pascal này với
 
Ở đây sẽ không ai đi giải bài tập cho em! Do đó em nên nêu lên cách giải, cách suy nghĩ của em và nói chỗ nào còn vướng để ACE có thể giúp em.
Chúc em học giỏi!

johnceduy 04-02-2009 07:21 AM

Ðề: Cứu bài tập pascal này với
 
Dạ vâng! Em đã giải đc 9/10 bài này! Ra đến kết quả thì phần nhập lại có vấn đề. Đầu tiên em gán i:=1 sau đó em cho nhập a[1] vào,nhập luôn điểm các môn, tiếp đến em dùng vòng lặp while để xét điều kiện xem chuỗi a[1] có phải là xâu rỗng không. Nếu không là rỗng thì i:=i+1 và nhập tiếp a[i], đồng thời nhập luôn điểm các môn của a[i]. Nhưng khi làm xong bài em cho chạy mới phát hiện là khi đánh kí tự rỗng vào ( tương đương phím enter) thì việc nhập a[i] có dừng lại, tuy nhiên sau vòng nhập a[i]= rỗng thì nó vẫn tiếp tục kêu nhập điểm các môn. Để em thí dụ cho mod về lúc chạy chương trình để dễ hiểu nhá!
VD:
Nhap vao a[1]:Le Anh Duy
Toan:9
Li:8
Hoa7
Nhap vao a[2]:Dinh The Ngoc Nam
Toan:9
Li:8
Hoa:6
Nhap vao a[3]: (a[3] em nhập rỗng =phím enter)
Toan: (nó vẫn tiếp tục kêu nhập 3 dòng điểm này Y.Y)
Li:
Hoa:
Nhưng theo yêu cầu đề bài em nghĩ là khi nhập rỗng nó nên bắt đầu thực hiện công việc của câu b) chứ không phải như thế!
Mod nào bik được hướng dẫn em làm sao cho nó thoát ra khỏi while khi nhập rỗng với!

myhanh 04-02-2009 07:40 AM

Ðề: Cứu bài tập pascal này với
 
Ở đây mình giả sử một lớp học khoảng 50 học sinh thì việc lưu trữ danh sách của em trên mảng là okie.
Em nên post phần code nhập liệu của em lên anh sửa cho

johnceduy 04-02-2009 07:55 AM

Ðề: Cứu bài tập pascal này với
 
Dạ vâng! Em cũng đã hỏi cô về trường hợp đó. Tuy nhiên do đây là đề để cô bồi dưỡng nên phải làm theo đề cô cho. Sau đây là toàn bộ code bài tập của em. Đáp án ra đúng, nhưng còn lộn xộn chỗ nhập dữ liệu, đồng thời em vẫn chưa nghĩ ra cách trình bày để xuất ra màn hình, mong các mod đóng góp cho em!
Program Tuyensinhlop10;
Uses crt;
Type hocsinh=record
hoten:string[20];
tong,Toan,Li,Hoa:real;
kp:string;
end;
var A:array[1..15]of hocsinh;
dem,j,i:byte;
tam:string; tam2,tam3,tam4,tam1:real;
f:text;
Begin
Clrscr;
assign(f,'D:\DuyGames\hocsinh.txt');
reset(f);
a[i].tong:=0;
i:=1;
dem:=0;
Write('Nhap vao a[',i,']:');readln(a[i].hoten);
Write('Toan:');Readln(a[i].Toan);
Write('Li :');Readln(a[i].Li);
Write('Hoa :');Readln(a[i].Hoa);
a[i].tong:=a[i].tong+a[i].toan+a[i].li+a[i].hoa;
While a[i].hoten<>'' do begin
dem:=dem+1;
i:=i+1;
Write('Nhap vao a[',i,']:'); readln(a[i].hoten);
Write('Toan:');Readln(a[i].Toan);
Write('Li :');Readln(a[i].Li);
Write('Hoa :');Readln(a[i].Hoa);
a[i].tong:=a[i].tong+a[i].toan+a[i].li+a[i].hoa;
end;
{ while ((a[i].tong>20) and not (a[i].toan<=2) and (a[i].li<=2) and (a[i].hoa<=2)) do a[i].kp:='Dau';}
For i:=1 to dem do a[i].hoten[1]:=UpCase(a[i].hoten[1]);
For i:=1 to dem-1 do
For j:=i+1 to dem do
If a[i].hoten>a[j].hoten then
begin
tam:=a[i].hoten;
a[i].hoten:=a[j].hoten;
a[j].hoten:=tam;
tam1:=a[i].tong;
a[i].tong:=a[j].tong;
a[j].tong:=tam1;
tam2:=a[i].toan;
a[i].toan:=a[j].toan;
a[j].toan:=tam2;
tam3:=a[i].Li;
a[i].Li:=a[j].Li;
a[j].Li:=tam3;
tam4:=a[i].hoa;
a[i].hoa:=a[j].hoa;
a[j].hoa:=tam4;
end;
For i:=1 to dem do
Writeln(a[i].hoten:5,a[i].toan:11:2,a[i].li:15:2,a[i].hoa:17:2,a[i].tong:19:2);
Writeln('Danh sach nguoi dau la:');
For i:=1 to dem+1 do begin
If ((a[i].tong>20) and not((a[i].toan<=2) or (a[i].li<=2) or (a[i].hoa<=2))) then
Writeln(a[i].hoten); end;
close(f);
readln;
end.
Trong chương trình trên biến "dem" có thể xem là "n" tức là số lượng học sinh có trong danh sách sau khi nhập.

myhanh 04-02-2009 08:02 AM

Ðề: Cứu bài tập pascal này với
 
Code:

a[i].tong:=0;
i:=1;
dem:=0;
Write('Nhap vao a[',i,']:');readln(a[i].hoten);
Write('Toan:');Readln(a[i].Toan);
Write('Li  :');Readln(a[i].Li);
Write('Hoa :');Readln(a[i].Hoa);
a[i].tong:=a[i].tong+a[i].toan+a[i].li+a[i].hoa;
While a[i].hoten<>'' do begin
 dem:=dem+1;
 i:=i+1;
  Write('Nhap vao a[',i,']:'); readln(a[i].hoten);
  Write('Toan:');Readln(a[i].Toan);
  Write('Li  :');Readln(a[i].Li);
  Write('Hoa :');Readln(a[i].Hoa);
 a[i].tong:=a[i].tong+a[i].toan+a[i].li+a[i].hoa;
  end;

Em chỉ cần kiểm tra một tí:
Code:

a[i].tong:=0;
 i:=1;
 dem:=0;
 Write('Nhap vao a[',i,']:');readln(a[i].hoten);
 Write('Toan:');Readln(a[i].Toan);
 Write('Li  :');Readln(a[i].Li);
 Write('Hoa :');Readln(a[i].Hoa);
 a[i].tong:=a[i].tong+a[i].toan+a[i].li+a[i].hoa;
 While a[i].hoten<>'' do begin
  dem:=dem+1;
  i:=i+1;
  Write('Nhap vao a[',i,']:'); readln(a[i].hoten);
if a[i].hoten<>'' then
begin
  Write('Toan:');Readln(a[i].Toan);
  Write('Li  :');Readln(a[i].Li);
  Write('Hoa :');Readln(a[i].Hoa);
  a[i].tong:=a[i].tong+a[i].toan+a[i].li+a[i].hoa
end
    end;

Chúc em thành công nha!

johnceduy 04-02-2009 03:55 PM

Ðề: Cứu bài tập pascal này với
 
Dạ vâng! Em làm đc rồi cám ơn bác nhìu! Lúc này bài nhìu quá nhìu lúc những chỗ nhỏ như thế khó lòng em nhận ra. Cám ơn anh mod myhanh nhiều ^^! \:D/


Múi giờ GMT +7. Hiện tại là 08:27 PM.

Website sử dụng phần mềm vBulletin phiên bản 3.6.8
do Công ty TNHH Jelsoft giữ bản quyền từ 2000 - 2024.
Hội CHS Lê Quý Đôn-Long An giữ bản quyền nội dung của website này