Tin học Bài tập về xâu

danhlopbh123

Học sinh mới
Thành viên
23 Tháng tư 2018
2
0
1
24
Đắk Lắk
Thpt Buôn hồ
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Viết chương trình pascal :cho 1 xâu S, viết thủ tục in ra các chữ số trong xâu
Mình đang phân vân là in tất cả các chữ số trong xâu hay in ra các số đã xuất hiện trong xâu
bạn nào giải đc in ra các số đã xuất hiện trong xâu thì mình xin cảm ơn
 

Sơn Nguyên 05

Banned
Banned
Thành viên
26 Tháng hai 2018
4,478
4,360
596
Hà Tĩnh
MT
Viết chương trình pascal :cho 1 xâu S, viết thủ tục in ra các chữ số trong xâu
Mình đang phân vân là in tất cả các chữ số trong xâu hay in ra các số đã xuất hiện trong xâu
bạn nào giải đc in ra các số đã xuất hiện trong xâu thì mình xin cảm ơn
Các chữ số trong xâu thì theo tớ là mỗi chữ số chỉ được đếm và in một lần thôi.
 

son_gohan

Học sinh
Thành viên
1 Tháng tư 2017
69
55
36
bạn có thể viết chương trình k
Bạn tham khảo nhé:
program chusoxau;
uses crt;
var xau1:string;
procedure timso(var xau1:string);
var i,j,len1,len2:integer;xau2,xau3:string;
begin
xau2:='0123456789';
xau3:='';
len1:=length(xau1);
len2:=length(xau2);
for i:=1 to len1 do
begin
for j:=1 to len2 do
begin
if xau1=xau2[j] then
begin
xau3:=xau3+xau2[j]+' ';
DELETE(xau2, j, 1);
len2:=len2-1;
end;
end;
end;
writeln(xau3);
end;
begin
xau1:='thaylat4133eoson12dien983meo321bon45682913'; // Bạn khai báo xâu bất kỳ
writeln(xau1);
timso(xau1);
readln;
end.
Bạn có thể chạy thử chương trình tại đây:
http://tpcg.io/XFMbid
 
  • Like
Reactions: danhlopbh123

son_gohan

Học sinh
Thành viên
1 Tháng tư 2017
69
55
36
Giúp mik bài này với mấy ad
@son_gohan
Câu 1:
a) Để nhập xâu bạn dùng lệnh readln(tenxau), xuất xâu dùng writeln(tenxau)
b) Ý câu này là đếm số lượng ký tự khác nhau trong xâu phải không bạn?
c) Để tính độ dài xâu bạn dùng lệnh length(tenxau).

Câu 2:
Câu này bạn có thể dùng vòng lặp for để tính:
S:=0
for i:=1 to 50 do
S:=S+i;
Sau đó xuất kết quả của S ra màn hình.
 

Fairy Piece

Học sinh
Thành viên
22 Tháng ba 2018
162
88
46
22
Tiền Giang
THPT Chuyên Tiền Giang
mình cũng xin góp vào một thuật toán
sum=0;so=0;
chạy i từ 1->độ dài của xâu
nếu nó ko là kí tự '+' thì so=so*10+ord(xau)-48
ngược lại
begin
sum=sum+so;
so=0;
end;
ko biết như vậy có đúng ko:)
 

son_gohan

Học sinh
Thành viên
1 Tháng tư 2017
69
55
36
Mink ko hiểu từ dòng số 7 đến 16 giúp mk nha
Từ dòng 7 đến 16 mình cho vào vòng lặp while do để tìm trong dãy những ký tự là dấu cộng
while i<length(xauA) do // biến i chạy từ 1 cho đến nhỏ hơn độ dài xâu để tìm ký tự là dấu cộng: bởi vì giữa 2 dấu cộng là 1 số
begin
if(xauA='+') then // nếu ký tự hiện tại là dấu cộng thì mình sẽ cộng vào tổng S số giữa 2 dấu cộng đó
begin
sohientai:=copy(xauA,j,i-j); // mình dùng hàm copy để sao chép ký tự là số vào biến sohientai;
// ví dụ: xauA=1+2+3+4... Khi i=2 và j=1 xauA[2]='+' do đó lệnh ở trên sẽ là: sohientai:=copy(xauA,1,2-1)=ký tự '1' trong xâu A.
val(sohientai,giatriso,code); // mình dùng hàm này để đổi lấy giá trị integer của biến xâu sohientai ở trên để có thể cộng vào tổng, lệnh này sẽ gán giá trị đó vào biến giatriso
S:=S+giatriso;
j:=i+1; // Khi tìm được 1 dấu '+' thì ta phải tăng j lên 1 đơn vị để đánh dấu lại vị trí mới
end;
i:=i+1; // tăng i lên 1 đơn vị do trong vòng lặp while do
end;
 

son_gohan

Học sinh
Thành viên
1 Tháng tư 2017
69
55
36
Bạn cho mink hỏi TB của xâu với mảng có j khác nhau z
Ở trên mình nhầm nên chương trình không thể chạy được:
Câu 2:
Câu này bạn có thể dùng vòng lặp for để tính:
S:=0
for i:=1 to 50 do
S:=S+i;
Sau đó xuất kết quả của S ra màn hình.

Do xâu là các ký tự với dạng dữ liệu là string nên ta không thể cộng như kiểu Integer được. Phải tìm cách đổi string đó về dạng số để có thể cộng.
Còn đối với mảng, thường ta hay làm là mảng số nguyên nên ta có thể cộng như bình thường.
 

son_gohan

Học sinh
Thành viên
1 Tháng tư 2017
69
55
36
hoaithuong14102016@gmail.com
Còn phần từ dòng 20 đến dòng 22 là để cộng số cuối cùng trong xâu. Do trong vòng lặp whilte do chỉ có thể cộng số giũa 2 ký tự '+'. Nên mình phải dùng 1 lần nữa ở ngoài vòng lặp để cộng thêm vào số cuối cùng.
Bài này mình cũng phải thử lại, chỉnh sửa nhiều lần để có thể ra đáp án đúng.
 

ka1412

Học sinh chăm học
Thành viên
24 Tháng mười một 2017
874
730
121
Hà Nội
CNN | Life
mình cũng xin góp vào một thuật toán
sum=0;so=0;
chạy i từ 1->độ dài của xâu
nếu nó ko là kí tự '+' thì so=so*10+ord(xau)-48
ngược lại
begin
sum=sum+so;
so=0;
end;
ko biết như vậy có đúng ko:)
Mình hiểu ý của bạn nhưng dòng "so=so*10+ord(xau)-48" nghe sao sao ấy
 
  • Like
Reactions: son_gohan

hoaithuong14102016@gmail.com

Học sinh
Thành viên
2 Tháng mười 2017
33
12
31
23
Nam Định
thpt hai hậu a
Từ dòng 7 đến 16 mình cho vào vòng lặp while do để tìm trong dãy những ký tự là dấu cộng
while i<length(xauA) do // biến i chạy từ 1 cho đến nhỏ hơn độ dài xâu để tìm ký tự là dấu cộng: bởi vì giữa 2 dấu cộng là 1 số
begin
if(xauA='+') then // nếu ký tự hiện tại là dấu cộng thì mình sẽ cộng vào tổng S số giữa 2 dấu cộng đó
begin
sohientai:=copy(xauA,j,i-j); // mình dùng hàm copy để sao chép ký tự là số vào biến sohientai;
// ví dụ: xauA=1+2+3+4... Khi i=2 và j=1 xauA[2]='+' do đó lệnh ở trên sẽ là: sohientai:=copy(xauA,1,2-1)=ký tự '1' trong xâu A.
val(sohientai,giatriso,code); // mình dùng hàm này để đổi lấy giá trị integer của biến xâu sohientai ở trên để có thể cộng vào tổng, lệnh này sẽ gán giá trị đó vào biến giatriso
S:=S+giatriso;
j:=i+1; // Khi tìm được 1 dấu '+' thì ta phải tăng j lên 1 đơn vị để đánh dấu lại vị trí mới
end;
i:=i+1; // tăng i lên 1 đơn vị do trong vòng lặp while do
end;
Thanks
 
Top Bottom