PDA

View Full Version : giúp em bài tập về kiểu xâu (lớp 11)



hoshino_terumi
13-01-2008, 20:52
Viết chương trình nhập từ bàn phím một xâu kí tự S và thông báo ra màn hình số lần xuất hiện củ mỗi chữ cái tiếng Anh trong S (không phân biệt chữ hoa hay chữ thường).
Mấy bác giúp em với! Nói thực cái môn này em dốt lém! hix

m2mpro
13-01-2008, 21:13
Dạo này bà con cứ đem bài tập lên diễn đàn hỏi suốt ấy nhỉ ! ^^
Bài này bạn chỉ cần xét từng kí tự thôi. Dùng hàm "in" đấy

jiSh@n
13-01-2008, 22:48
Dạo này bà con cứ đem bài tập lên diễn đàn hỏi suốt ấy nhỉ ! ^^
Bài này bạn chỉ cần xét từng kí tự thôi. Dùng hàm "in" đấy

Trong pascal ko co hàm nào tên "in" hết. "In" là 1 toán tử trên kiểu tập hợp.

mr_invincible
14-01-2008, 10:39
Hic các bạn cứ post toàn bài đơn giản lên hỏi mà chẳng chịu đọc trước gì cả. Mấy bài kiểu đó có đầy trong diễn đàn rồi. Kiểu này thì chẳng mấy chốc chỗ này loạn mất. Đề nghị các mod xóa hết các bài có nội dung trùng lặp.

m2mpro
14-01-2008, 11:55
Những bài này chỉ cần chút động não là ra . chứ không chó lắm đâu... ^^

mr_invincible
14-01-2008, 19:28
Những bài này chỉ cần chút động não là ra . chứ không chó lắm đâu... ^^

Phải đó, mấy bạn này chẳng chịu suy nghĩ gì mà đã đem ra hỏi rồi, không biết sau này mà phải học khó hơn thì như thế nào.
Mà hình như ở trên bạn viết nhầm rồi thì phải, không hiểu bạn định viết "chó" thật hay là khó

thuonghcm
14-01-2008, 21:28
chà chà...nhầm kiểu này dễ "mít lòng" quá ha...
VIỆT KIỀu ăngola nói :"chào chú" thành --->> "chào chó"

m2mpro
14-01-2008, 21:36
Ầy dà da.. thiệt tình xin lỗi, gõ nhầm "không khó" chứ "không chó" thì nguy ...

yandan
15-01-2008, 21:49
nhap tu ban phim mot xau. thay the tat ca cac cum ky tu 'anh' bang cum ky tu 'em' ai chi jum minh minh thanh kiu` ve ri mut'^^

mr_invincible
16-01-2008, 11:16
Cách làm:
While pos('anh',s)>0 do {Vẫn còn cụm kí tự anh trong xâu} do
begin
tg:=copy(s,1,pos('anh',s)-1); {Tạo biến trung gian để sửa lại xâu}
tg:=tg+'em';
tg:=tg+copy(s,pos('anh',s)+4,length(s)-pos('anh',s)-3); {Copy phần còn lại của xâu s vào biến tg}
s:=tg;
end;
Bài trên chưa được kiểm tra nên có gì sai sót mong bạn thông cảm.
Cách giải như trên theo tôi là đơn giản nhất. Có bạn nào có cách giải hay hơn mong các bạn đóng góp ý kiến.

m2mpro
16-01-2008, 11:36
Đây là cách giải của tôi:
While pos('anh',s)>0 do
begin
insert(s,'em',pos('anh',s));
delete(s,pos('anh',s),3);
end;
Có lẽ cũng tối ưu đấy

mk_mk_mk
16-01-2008, 14:58
xin hỏi :cái dấu {} co ý nghĩa gì ạ ???

hpmhoang_1993
16-01-2008, 17:16
{} là dấu khóa phần có trong dấu đó, tức là chương trình pascal sẽ cho qua và không thực hiện phần được đặt trong dấu {}

mr_invincible
16-01-2008, 21:07
{} là dấu khóa phần có trong dấu đó, tức là chương trình pascal sẽ cho qua và không thực hiện phần được đặt trong dấu {}

Nếu phần trong dấu {} bắt đầu bằng $ có nghĩa là đó là chỉ thị dịch, yêu cầu Pascal dịch chương trình theo những hướng dẫn đó, nếu không có các chỉ thị dịch này thì Pascal sẽ thực hiện dịch theo mặc định

hoshino_terumi
17-01-2008, 19:40
em ko biết làm mới phải hỏi chứ có phải là ko suy nghĩ đâu. sao ko pác nào giúp em chứ? hix

mr_invincible
17-01-2008, 21:43
Bước 1: Đổi tất cả các chữ cái thành chữ hoa hết (dùng upcase: upcase(ch) (ch:char) cho kí tự viết hoa của ch, nếu ch không là chữ cái thì ch upcase(ch)=ch. VD: upcase('a')='A'; upcase('A')='A'; upcase('-')='-';
Bước 2: Duyệt lần lượt các kí tự của xâu, nếu là chữ cái (có thể dùng điều kiện: pos(s[i],'ABCDE...XYZ'>0) thì bắt đầu duyệt toàn bộ xâu, mỗi lần gặp 1 kí tự giống kí tự đó thì tăng số lần xuất hiện của kí tự đó.
Tuy nhiên làm như trên thì với xâu 'aAaa' sẽ in ra 4 số 4 (mỗi chữ a xuất hiện 4 lần). Nên nếu không muốn vậy thì tạo thêm 1 mảng đánh dấu các kí tự đã xét, nếu chưa xét thì mới tìm số lần xuất hiện

spy10b
21-01-2008, 12:27
program xau_S;
uses crt;
var S:String;
ch:char;
i:byte;
begin
clrscr;
write('Nhap xau:');readln(S);
while S<>'' do
begin
i:=0;ch:=S[1];
while pos(ch,S)<>0 do
begin
i:=i+1;
delete(S,1,1)
end;
writeln(ch,':',i,' lan');
end;
end;
readln
end.

nhox_kute_baby
08-12-2009, 20:41
e chả hiểu gì về mấy cái thể loại này cả

vothan16
13-12-2009, 16:54
tiện thể giúp mình trong bài tâpk kiểm tra luôn
câu1: Viết một chương trình nhập vào một xâu từ bàn phím đưa ra màn hình xâu sau khi đã xoá kí tự đầu xâu ?
Câu 2: Viết chương trình cho phép nhập vào 1 xâu kí tự chuyển kí tự đầu và kí tự cuối trong xâu thành chữ hoa và in chúng ra màn hình?

nhokdragon94
13-12-2009, 17:49
Câu 1:
Dùng detele(S,1,1) rùi sau đóa xuất S
Cau 2:
Dùng hàm in hoa(wên mất hàm này là ntn ùi) sau đóa xuất ra

ndvd1992
21-12-2009, 21:31
tiện thể giúp mình trong bài tâpk kiểm tra luôn
câu1: Viết một chương trình nhập vào một xâu từ bàn phím đưa ra màn hình xâu sau khi đã xoá kí tự đầu xâu ?
Câu 2: Viết chương trình cho phép nhập vào 1 xâu kí tự chuyển kí tự đầu và kí tự cuối trong xâu thành chữ hoa và in chúng ra màn hình?

câu 1 :
write('nhap xau : ');
Readln(s);
delete(s,1,1);
delete(s,length(s),1);
writeln('xau moi:',s);
readln
end.

Câu 2 :
write('nhap xau : ');
readln(s);
upcase(s[1]);
upcase(s[length(s)]);
writeln('xau moi: ' ,s);
readln
end.



có gì sai põ qua nhé

DJKenny.Black
21-12-2009, 21:41
em là 1 mem rất ham mê học pascal !!!!!!!!!!!
em vô đây để học hỏi thêm ở mọi người

tan0579
03-03-2010, 20:02
tui thì làm khác cơ chắc đúng 100%
program Phan_biet;
uses crt;
var s:string;
d:array[1..26] of integer;
i,n:integer;
begin
clrscr;
wrute('Nhap chuoi: ');readln(s);
for i:=1 to length(s) do
if (upcase(s[i])>='A') and (upcase(s[i])<='Z') then
d[ord(upcase(S[i]))-ord('A')+1]:=d[ord(upcase(S[i]))-ord('A')+1]+1;
for i:=1 to 26 do
if d[i]>0 then
writeln('So lan xuat hien cua ',chr(i+ord('A')-1,' la: ',d[i];
readln
end.
nếu có sai thì nói lại mình pót lại nhe
Thấy hay thì thanks nhe các Bạn !!! Thân

ZeroKnight93
06-03-2010, 12:01
Tui không hiểu mấy bài của bạn do bạn dùng câu lệnh ord nên tui đưa ra 1 bài như thế này:
Program bt;
Uses crt;
Var i,j,n,x:integer;
a,b:string;
Begin
clrscr;
Writeln('Nhap xau a:');
Readln(a);
x:=length(a);
b:='ABCDEFGHIJKLMNOUPQRWTSVXYZ';{Khởi tạo 1 xâu có 26 kí tự in hoa}
For i:=1 to x do a[i]:=upcase(a[i]);
For j:=1 to 26 do
Begin
n:=0:
If b[j]=a[i] then n:=n+1;
If n>=1 then writeln('Ki tu ',b[j],' xuat hien ',n,' lan');
End;
Readln
End.
Đây là tui không sử dụng 1 chút kiến thức ngoài lề nào ngoài những kiến thức đã được học trên SGK lớp 11 nên có thể sẽ có 1 chút sai sót. Bạn nào thấy chỗ sai hãy pm mình để mình có thể sửa đổi lại. Thank

tomatoxanh
13-03-2010, 13:06
Mình xin sửa lại thế này:
k:= pos('anh',s);
While k>0 do
begin
delete(s,k,3);
insert(s,'em',k));
k:= pos('anh',s);
end;

mini_bestboy
13-03-2010, 21:10
Tui không hiểu mấy bài của bạn do bạn dùng câu lệnh ord nên tui đưa ra 1 bài như thế này:
Program bt;
Uses crt;
Var i,j,n,x:integer;
a,b:string;
Begin
clrscr;
Writeln('Nhap xau a:');
Readln(a);
x:=length(a);
b:='ABCDEFGHIJKLMNOUPQRWTSVXYZ';{Khởi tạo 1 xâu có 26 kí tự in hoa}
For i:=1 to x do a[i]:=upcase(a[i]);
For i:=1 to x do
For j:=1 to 26 do
Begin
n:=0:
If b[j]=a[i] then n:=n+1;
If n>=1 then writeln('Ki tu ',b[j],' xuat hien ',n,' lan');
End;
Readln
End.
Đây là tui không sử dụng 1 chút kiến thức ngoài lề nào ngoài những kiến thức đã được học trên SGK lớp 11 nên có thể sẽ có 1 chút sai sót. Bạn nào thấy chỗ sai hãy pm mình để mình có thể sửa đổi lại. Thank

Thiếu 1 dòng For đã in đậm phía trên :)