![]() |
| |||||||
| Đăng Ký | Quên mật khẩu | Hỏi/Ðáp | Thành Viên | Lịch | Tìm Kiếm | Bài Trong Ngày | Ðánh Dấu Ðã Ðọc |
|   |
![]() |
| | Ðiều Chỉnh | Xếp Bài |
| | #1 (permalink) |
| Búa Đá ![]() Tham gia: Mar 2008 Đến từ: Huế
Bài: 63
Điểm: 2/2 bài viết
| dùng mảng 1 chiều nhé các anh : nhập vào 1 mảng nào đó với số phần tử tùy,giá trị tùy ý -hãy thực hiện chèn x vào vị trí vt . hãy xóa phần tử tại vị trí vt -giả sử mảng sắp xếp theo chiều tăng dần, chèn 1 phần tử x vào sao cho vẫn đảm bảo thứ tự tăng dần, - hãy thực hiện xóa phần tử x trong dãy số - giả sử có 2 mảng a và b sắp theo thứ tự tăng dần thực hiện trộn hai mảng a và b nhưng vẫn đảm bảo thứ tự tăng dần giúp em thanks all |
| | |
| | #2 (permalink) |
| Gà Con ![]() Tham gia: Nov 2007
Bài: 2
Điểm: 0/0 bài viết
| Mình ko có học Pascal nhưng mình sẽ đưa ra cách giải: -để chèn x vào vị trí Vt thì bạn phải dời các phần tử từ V(t)->V(n) "qua phải" tức là V(n+1)=V(n) , V(n)=V(n-1) ,....., V(t+1)=V(t) . Sau đó bạn gán V(t)=x. -Để xóa phần tử tại vị trí V(t) thì bạn dịch chuyển các phần tử từ V(t+1)->V(n) "qua trái" tức là V(t)=V(t+1) ,......, V(n)=V(n+1). -Để chèn x vào mảng sao cho vẫn đảm bảo tăng dần thì bạn chỉ cần so sánh x với từng phần tử trong mảng theo thứ tự từ "trái" qua "phải" hoặc ngược lại để tìm vị trí V(t) sau đó chèn x vào vị trí V(t). (Để giảm số lần so sánh bạn nên so sánh với phần tử ở giữa mảng có vị trí V(n/2) (nhớ lấy giá trị nguyên) ). -Xóa phần tử X trong dãy số là tổng hợp 2 cách trên nên mình để bạn tự suy nghĩ. -Để trộn 2 mảng tăng dần mình sẽ giả sử: 2 mảng cần trộn là A và B có số phần tử tương ứng là x và y Mảng sau khi trộn là C có số phần tử là n=x+y; Mình sẽ làm như sau Mình sẽ viết code bằng ngôn ngữ C mình nghĩ nó cũng tương tự pascal)int a=b=i=0; //Trong C mảng đánh số từ 0 chứ ko phải từ 1 như //trong pascal while(i<n) //Chắc bạn biết đến vòng lặp này { //Câu lệnh if này gần giống trong Pascal if(a == x) //Dấu này "==" là dấu so sánh bằng C(i) = B(b); //Đây là phép gán chứ ko phải dấu bằng. else if(b == y) C(i)=A(i); else if(A(a)<B(b)) { C(i)=A(x); a=a+1; //Biểu thức này nghĩa là tăng giá trị của a lên 1 } else { C(i)=B(y); y=y+1; } i=i+1; } *Cách của mình trên đây chỉ là tham khảo thay đổi nội dung bởi: hungson215, 29-04-2008 lúc 09:20. |
| | |
| | #5 (permalink) |
| Rìu Sắt ![]() | Bài này có trong sách bài tập tin 11 thì phải. Có ngó qua một tí nhưng dạng này chán lắm. Chiều mình còn thì học kì toán hơn 10 h rồi. Mình làm nhanh vậy. Code: {Có hai mẩng a[m], b[n]}
i:= 1;
j:= 1;
l:= 1;
do
if a [i] < b[j] then
begin
c[l]:= a [i];
inc(l);
while i < m do inc (i) {tang bien i mot don vi}
end
else
begin
c[l]:= b [j];
inc(l);
while j < n do inc (j) {tang bien j mot don vi}
end;
until l=m+n;{co the thay dieu kien thanh i=n and j=m} |
| | |
| | #7 (permalink) |
| Rìu Sắt ![]() | |
| | |
| Thành viên đã cám ơn bài viết này của thienthan: | so_0_lanh_lung (10-05-2008) |
| | #8 (permalink) |
| Búa Đá ![]() Tham gia: Mar 2008 Đến từ: Huế
Bài: 63
Điểm: 2/2 bài viết
| Hỏi về xâu : về xóa kí tự trắng ở đầu cuối và giữa... tại sao ta không cho chạy từ 1 -- > length(st) nếu s[i] = #32 thì delete(st,i,1); có nghĩa là nó chạy gặp kí tự trắng thì Xóa..... mà phải dùng WHILE xóa đầu Xóa đuôi,,rồi POS để xóa giữa |
| | |
| | #9 (permalink) |
| Búa Đá ![]() Tham gia: Mar 2008 Đến từ: Huế
Bài: 63
Điểm: 2/2 bài viết
| hỏi thêm câu nữa nè tại sao ta viết thế này là đúng xóa hết kí tự trống đầu Code: While s[1] = #32 do delete(st,1,1); Code: While s[i] = #32 do
begin
delete(st,i,1);
inc(i);
end;
__________________ Một buổi tối đẹp trời. Cô gái gọi điện cho cậu trai đang tán tỉnh mình : "Anh ơi... Nhà em đi hết cả rùi... Anh đến ngay nhé... Không có ai ở nhà đâu... !". Cậu trai hí hửng vội vàng phóng xe đến nhà cô bạn, bấm chuông, 5 phút... 10 phút... 15 phút... Sau nửa tiếng bấm chuông, anh mới nhận ra, đúng là... "KHÔNG CÓ AI Ở NHÀ THẬT". potay..^^! |
| | |
| | #10 (permalink) |
| Búa Gỗ Đôi ![]() Tham gia: Dec 2007
Bài: 27
Điểm: 6/3 bài viết
| cái trên mới là xóa 1 ký tự trắng vì nó chỉ xét có 1 mình s[1] thôi nếu s[1] = " " thì xóa s1. còn cái dưới mới là xóa tất cả ký tự trắng vì nó quét tất cả các s[i] (i=1,...,n), gặp thằng s[i] nào là " " thì xóa ngay. |
| | |
| | #11 (permalink) | |
| Rìu Sắt ![]() | Trích:
Code: repeat
if s[i]=#32 then delete(s,i,1) else inc(i)
until i>length(s){Thông cảm chỗ này mình viết vội nên hơi nhầm} Code: for i=1 to length(s) do if s[i]=#32 then begin delete(s,i,1) dec(i) end thay đổi nội dung bởi: thienthan, 12-05-2008 lúc 19:29. Lý do: Viết nhầm | |
| | |
| Thành viên đã cám ơn bài viết này của thienthan: | so_0_lanh_lung (12-05-2008) |
| | #12 (permalink) | |
| Rìu Bạc ![]() Tham gia: Dec 2007
Bài: 323
Điểm: 55/37 bài viết
| Trích:
@to gico2107 : giải thích của bạn sai hoàn toàn, đoạn mã 1 sẽ xóa hết kí tự trắng ở đầu xâu. Còn đoạn thử 2 không xóa đc hết kí tự trắng ở đầu xâu, có thể giải thích đơn giản như sau: Nếu xâu của bạn có 5 kí tự trắng đánh dấu là abcde ban đầu s[1] là kí tự trắng a, vì a là kí tự trắng nến xóa a dẫn đến s[1] trở thành kí tự trắng b tăng i lến 1 tức i=2 mà hiện tại s[2] là kí tự trắng c và tiếp tục xét và xóa, như vậy nó bỏ qua kí tự trắng b. Tóm lại đoạn code 2 cứ cách một kí tự lại xóa một kí tự trắng, code sai, thậm chí bạn nhập vào 1 chuỗi nhứ sau: a s d f g h (bắt đầu là 1 kí tự trắng và sau đó là xen kẽ nhau 1 kí tự thường và 1 kí tự trắng) code vẫn hoạt động và xóa hết kí tự trắng.
__________________ -_::Tin Học là chia sẻ ::_- http://cnttk1a.hnsv.comChào mừng các bạn đến diễn đàn lớp tui! | |
| | |
| | #13 (permalink) | |
| Rìu Bạc ![]() Tham gia: Dec 2007
Bài: 323
Điểm: 55/37 bài viết
| Trích:
Mà cách dùng for đúng là một hạ sách luôn phải chạy đủ số vòng lặp mà xâu thì không nhiều kí tự trắng đến vậy, nói chung là cách while là ổn nhất rồi.
__________________ -_::Tin Học là chia sẻ ::_- http://cnttk1a.hnsv.comChào mừng các bạn đến diễn đàn lớp tui! | |
| | |
| Thành viên đã cám ơn bài viết này của Mr_Dolphin: | so_0_lanh_lung (12-05-2008) |
| | #14 (permalink) | |
| Rìu Sắt ![]() | Trích:
Nếu dùng while mà dùng pos thì còn chậm hơn nhiều do bản chất pos cũng chứa for rồi. Nhưng nó không tận dụng phần đầu đã xóa thì không còn kí tự trắng nữa. Kiểu gì cũng phải kiểm tra mỗi vị trí ít nhất một lần thì mới biết nó có là #32 không. Nhưng nếu dùng pos và while thì nó sẽ kiểm tra tới vài lần gây lãng phí không cần thiết. | |
| | |
| Thành viên đã cám ơn bài viết này của thienthan: | so_0_lanh_lung (12-05-2008) |
| | #15 (permalink) |
| Búa Đá ![]() Tham gia: Mar 2008 Đến từ: Huế
Bài: 63
Điểm: 2/2 bài viết
| giải thích hộ em bài này..tìm số từ trong 1 câu ca dao được nhập từ bàn phím Code: Program Dem_Tu;
{$V-}
Var
St:String;
Function Sochu(Dong:String):Integer;
Var
dem,i:Integer;
Begin
Dem:=0;
i:=1;
Repeat
While ((UpCase(Dong[i]) < 'A') Or (UpCase(Dong[i]) > 'Z'))
And (I <=Length(Dong)) Do
i:=i+1;
If i <= Length(Dong) Then
Dem:=Dem + 1;
While ((UpCase(Dong[i]) >= 'A') And (UpCase(Dong[i]) <= 'Z'))
And (I <=Length(Dong)) Do
i:=i+1;
Until i > Length(Dong);
Sochu:=Dem;
End;
{---------------------------}
BEGIN
Write('-Nhap mot cau ca dao tuc ngu: ');
Readln(St);
Writeln('-Cau nay co: ',Sochu(St),' tu');
Readln
END.
__________________ Một buổi tối đẹp trời. Cô gái gọi điện cho cậu trai đang tán tỉnh mình : "Anh ơi... Nhà em đi hết cả rùi... Anh đến ngay nhé... Không có ai ở nhà đâu... !". Cậu trai hí hửng vội vàng phóng xe đến nhà cô bạn, bấm chuông, 5 phút... 10 phút... 15 phút... Sau nửa tiếng bấm chuông, anh mới nhận ra, đúng là... "KHÔNG CÓ AI Ở NHÀ THẬT". potay..^^! |
| | |