PDA

View Full Version : Giúp em 1 bài pascal về xâu với



choxin5000
23-01-2008, 11:26
Nhập vào 1 mảng bản ghi gồm họ tên tùy ý(chữ nào in hoa hay in thường đều được) và điểm trung bình của n học sinh. Sắp xếp tên học sinh theo thứ tự chữ cái và xuất ra màn hình(kèm số thứ tự + điểm trung bình của học sinh đó).
Mọi người giúp em đi ạ

nguyen ban
23-01-2008, 16:02
Bạn chuyển đổi sử dụng hàm sang Ascii sẽ được ngay thôi

choxin5000
24-01-2008, 12:01
À vấn đề là ở thuật toán sắp xếp.
Trước tiên là sắp theo tên. Nếu trùng tên thì xếp theo họ, cuối cùng là tên lót. Vấn đề là được phép nhập in hoa hay in thường tùy ý. Ví dụ có thể nhập nguyễn Văn aN và Nguyễn Thị Na thì xếp theo tên trước,nó sẽ xếp Na trước (theo mã ascii). Anh chị giúp em đi ạ :D

flora
24-01-2008, 12:37
bạn sử dụng hàm chuyển đổi chữ thường sang chữ hoa hết đi, nó sẽ sắp xếp đúng thôi (UPCASE(ch))

nongdantangai
25-01-2008, 08:27
- 1 hàm lọc tên trong chuỗi họ và tên
- dùng hàm UPCASE(?)
so sánh và sắp xếp lại thôi, có gì đâu.
VD:
uses crt;
var mang:array[1..100] of string[50];
n:integer;
function locten(st:string):string;
var i:integer;
tg:string;
begin
tg:="";
i:=length(st);
while(i>0) and ( st[i]<>' ')do
begin
tg=st[i]+tg;
i:=i-1;
end;
locten:=tg;
end;
{hàm đổi chuỗi thường thành chuỗi hoa}
function chuhoa(st:string):string;
var i:integer;
tg:string;
begin
tg:="";
for i:=1 to length(st) do
begin
tg:=tg+UPCASE(st[i]);
end;
chuhoa:=tg;
end;
procedure nhap;
begin
write("So nguoi can nhap:");
readln(n);
writeln("Nhap vao danh sach");
for i:=1 to n do
begin
write("Ho ten nguoi thu ",i,":");
readln(mang[i]);
end;
{thủ tục nhập cùi pắp he he}
function sosanh(st1,st2:string):boolean;
var tg1,tg2:string;
begin
tg1:=locten(st1);
tg2:=locten(st2);
if(chuhoa(tg1)>chuhoa(tg2))then
begin
sosanh:=false;
end else
if(chuhoa(tg1)<chuhoa(tg2))then
begin
sosanh:=true;
end else
if(chuhoa(st1)>chuhoa(st2)then sosanh:=false else sosanh:=true;
end;
procedure sapxep;
var i,j,k:integer;
tg:string;
begin
for i:=1 to n do
begin
k:=i;
for j:= i+1 to n do
if(sosanh(mang[k],mang[j])then k:=j;
if k<>i then
begin
tg:=mang[k];
mang[k]:=mang[i];
mang[i]:=tg;
end;
end;
end;
procedure hienketqua;
var i:integer;
begin
writeln(" Mang sau khi sap xep";
for i:=1 to n do writeln(mang[i]);
readln;
end;
BEGIN
nhap;
sapxep;
hienketqua;
END.


chưa chạy thử, có lỗi gì tự sửa lấy!hic