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
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
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.
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ó"
Ầy dà da.. thiệt tình xin lỗi, gõ nhầm "không khó" chứ "không chó" thì nguy ...
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.
Đâ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
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
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 :)
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.