PDA

View Full Version : Các anh giúp bé bài PASCAL lớp 11 này với



baBy_G_hl
06-03-2011, 13:07
Program Hovaten;
var tt:string[50];
begin
writeln('nhap ho va ten');
readln('tt');
writeln('chao ban ',tt,' rat vui dc lam quen');
readln
end.


Ví dụ nhập họ và tên bạn là NGuyễn Văn A nó hiện thông báo " chao ban Nguyen Van A..." Vậy các anh chỉ giúp em làm sao chỉ để nó hiện thông báo là " chao ban A..." có đc không ạ>..

pascalmen_9xpro
06-03-2011, 20:29
thj ta cho vong for dj nguoc ruj kiem tra bang pos taj vi tri co dau cach cuoi cung ruj copy taj vj trj pos+1, length(s)-pos kj tu la duoc

baBy_G_hl
07-03-2011, 05:54
Hix, anh huong dan them dc k ạ..

LkLight
07-03-2011, 12:27
Ví dụ như bạn nhập tên vào biến St
Code:

Var St,st1: string;
i : integer;

Begin
writeln('nhap ten');readln(st)
For i := length(sT) downto 1 do
if st[i] = ' ' then
st1 := copy(st,i + 1,length(st)-1); {code chư chắc chắn tại bỏ pascal lâu rồi}

Writeln('chao ban ',st1,' rat vui dc lam wen . .. .');
readln;
end.

baBy_G_hl
07-03-2011, 14:30
Em test thử rùi nhưng nó hiện Cả tên đệm...Vậy làm sao để nó hiện mỗi tên không ạ

grenadier1991
07-03-2011, 17:25
Thuật toán trên cơ bản dựa trên việc tìm dấu cách ' ' cuối cùng. Dùng for thì bởi vì sẽ quét toàn xâu nên sẽ tìm thấy dấu cách đầu tiên. Thử dùng While..Do xem:
Code

Var St,st1: string;
i : integer;

Begin
writeln('nhap ten');readln(st);
i:=length(st);
While st[i]<>' ' Do i:=i-1;
st1 := copy(st,i + 1,length(st)-i);
Writeln('chao ban ',st1,' rat vui dc lam wen . .. .');
readln;
end.

nbni
07-03-2011, 18:06
Mình có cách này ngắn,dễ hiểu nè:
var s,s1:string;
i:integer;
begin
readln(s);
s1:='';
for i:=length(s) downto 1 do
if s[i]<>' ' then s1:=s[i]+s1
else break;
write('chao ban',s1);
readln
end.

langkhachit
07-03-2011, 18:11
Mình có cách này ngắn,dễ hiểu nè:
var s,s1:string;
i:integer;
begin
readln(s);
s1:='';
for i:=length(s) downto 1 do
if s[i]<>' ' then s1:=s[i]+s1
else break;
write('chao ban',s1);
readln
end.

Cách này cũng đc, nhưng chắc để đảm bảo nên cắt cái ký tự trắng 2 biên đã hi?

nbni
07-03-2011, 21:55
mình chỉ cần cắt kí tự trắng ở cuối là ok rùi bạn
var s,s1:string;
i:integer;
begin
readln(s);
s1:='';
while s[length(s)]=' ' do delete(s,length(s),1);
for i:=length(s) downto 1 do
if s[i]<>' ' then s1:=s[i]+s1
else break;
write('chao ban ',s1);
readln
end.