PDA

View Full Version : Xem giúp mình chương trình này có gì cần cải tiến không?



wsrvnar
26-09-2010, 18:51
Mình là học sinh 11, mới học pascal nhưng rất thích. Đây là chương trình kiểm tra xem chuỗi nhập vào có là chuỗi palindrome (chuỗi đối xứng) không, mọi người xem rùi góp ý nhé.
program Palindrome;
uses crt;
var
ch: string;
x,c,i: byte;
begin
clrscr;
write('Nhap chuoi can kiem tra: ');
readln(ch);
x:=length(ch); c:=0;
for i:=1 to x do
if ch[i]<>ch[x+1-i] then c:=c+1;
if c=0 then writeln('Day la chuoi palindrome');
if c>0 then writeln('Day khong la chuoi palindrome');
readln
end.
Tiện thể có ai biết làm bài 8a) bài thực hành 1 của Tim học 11 thì chỉ giúp luôn nhé (viết biểu thức logic cho kết quả true khi tọa độ (x,y) là điểm nằm trong tam giác có 3 đỉnh là gốc tọa độ (0,0) và hai điểm (1,1) và (-1,1))

mekun
26-09-2010, 22:41
có 1 cách khác nhanh hơn, đơn giản hơn:
var s,s1:string;
i:byte;
begin
write('nhap xau can ktra s: ');readln(s);
s1:='';
for i:=length(s) downto 1 do s1:=s1+s[i];
if s1=s then write('xau nhap vao la doi xung') else write('xau nhap vao ko fai la xau doi xung');
readln;
end.

jdkhang
26-09-2010, 23:02
Cải tiến:


Program Palindrome;
Uses Crt;
Var s : String;
lens, i : Byte;
isP8e : Boolean;

BEGIN
Clrscr;

Write('Nhap chuoi can kiem tra tinh doi xung: ');
Readln(s);

lens := length(s);
isP8e := True;

For i := 1 to lens div 2 do
Begin
If s[i] <> s[lens + 1 - i] then
Begin
isP8e := False;
break;
End;
End;

If isP8e then
Writeln('Day la chuoi doi xung')
else
Writeln('Day vua nhap khong la chuoi doi xung');


Readln;

END.


Bài viết biểu thức thì:
Viết phương trình 3 đường thẳng tạo thành tam giác. Sau đó kết hợp với điều kiện lập thành hệ bất phương trình. Rồi chuyển biểu thức trong toán sang biểu thức trong Pascal.

wsrvnar
27-09-2010, 18:29
Thank hai bạn nhi`u lắm. cách viết chương trình bằng tạo xâu đảo ngược của bạn mekun đã được nêu trong Tin học 11 rồi, mình cũng đã biết

lehang_gb1
30-09-2010, 16:26
Bai 8a)
(y>=abs(x)) and (y<=1)

mini_bestboy
01-10-2010, 13:36
có 1 cách khác nhanh hơn, đơn giản hơn:
var s,s1:string;
i:byte;
begin
write('nhap xau can ktra s: ');readln(s);
s1:='';
for i:=length(s) downto 1 do s1:=s1+s[i];
if s1=s then write('xau nhap vao la doi xung') else write('xau nhap vao ko fai la xau doi xung');
readln;
end.

Cách này chưa chắc nhanh hơn ( cả hai đều O(n) ) mà lại tốn thêm 1 biến nữa ^^
Mình nghĩ làm theo cách bạn wsrvnar nhưng chạy x tới (s div 2) là được rồi, không cần x chạy đến length(s) đâu ! Sẽ nhanh hơn dc 1 chút đó !