PDA

View Full Version : Một số bài tập Pascal



okmen910
01-01-2008, 16:35
Em có một số bài mà em khong nghĩ ra,mong các pác giúp em
Bài 1:"Dãy con"
Cho 2 dãy số thực A(1),A(2),...A(n) (1);B(1),B(2),...,B(m) (2).Dãy một được gọi là dãy con của dãy (2) nếu bỏ đi k phần (k>=0) trong (2) thì có dãy(1). Chẳng hạn:dãy 1,3,5 là dãy con của dãy o,1,2,1,4,3,5,7.Hãy nhập vào hai dãy và cho biết dãy (1) có phải là dãy con của (2) không?
Bài 2:"Dãy đoạn con" tương tự "dãy con" nhưng các phàn tử liên tiếp
Chẳng hạn:dãy 1,2,1 là dãy đoạn con của dãy 0,1,2,1,4,5,6,3;còn dãy 1,4,6 không là dãy đoạn con của nó.Hãy nhập vào hai dãy và cho biết dãy (1) có phải là dãy đoạn con của (2) không?
Bài 3:Cho một dãy số gồm N số tự nhiên được sinh ngẫu nhiên có giá trị trong khoảng [1..100],các phàn tử của dãy khác nhau từng đôi một và một số tự nhiên k được nhập từ bàn phím.Hãy tìm một "dãy con dài nhất liên tiếp nhau" sao cho tổng chia hết cho k.cho biết độ dài và vị trí bắt đầu dãy con tìm được
Ví dụ:Với dãy số 1,"3,4,2",7 (N=5) và k=3
kết quả :Độ dài của dãy con tìm được theo yêu cầu là 3, vị trí bắt đầu của dãy con tìm được là 2.
Bài 4:"Dãy răng cưa" là dãy giảm tăng hoặc tăng giảm.Ví dụ:1,4,2,7,3,8 hoặc 4,1,3,2,8,5,6 là dãy răng cưa.Nhập một dãy số nguyên,sau đó biến đổi nó để được một dãy răng cưa.

m2mpro
01-01-2008, 16:56
Bài 1:"Dãy con"
Cho 2 dãy số thực A(1),A(2),...A(n) (1);B(1),B(2),...,B(m) (2).Dãy một được gọi là dãy con của dãy (2) nếu bỏ đi k phần (k>=0) trong (2) thì có dãy(1). Chẳng hạn:dãy 1,3,5 là dãy con của dãy o,1,2,1,4,3,5,7.Hãy nhập vào hai dãy và cho biết dãy (1) có phải là dãy con của (2) không?
Bạn chỉ cần xét từng phần tử của dãy con với dãy lớn thôi, lưu ý: sau khi quét dãy con đến i thì dãy cha phải quét lại từ i-> n(để theo thứ tự). Nếu phát hiện ra tất cả các phần tử giống nhau thì thông báo.


Bài 2:"Dãy đoạn con" tương tự "dãy con" nhưng các phàn tử liên tiếp
Chẳng hạn:dãy 1,2,1 là dãy đoạn con của dãy 0,1,2,1,4,5,6,3;còn dãy 1,4,6 không là dãy đoạn con của nó.Hãy nhập vào hai dãy và cho biết dãy (1) có phải là dãy đoạn con của (2) không?
Cái này dùng đệ quy cho nhanh...



Bài 3:Cho một dãy số gồm N số tự nhiên được sinh ngẫu nhiên có giá trị trong khoảng [1..100],các phàn tử của dãy khác nhau từng đôi một và một số tự nhiên k được nhập từ bàn phím.Hãy tìm một "dãy con dài nhất liên tiếp nhau" sao cho tổng chia hết cho k.cho biết độ dài và vị trí bắt đầu dãy con tìm được
Ví dụ:Với dãy số 1,3,4,2,7 (N=5) và k=3
kết quả :Độ dài của dãy con tìm được theo yêu cầu là 3, vị trí bắt đầu của dãy con tìm được là 2.

Cái này chắc phải xét từng phần tử, cứ phần tử này rồi đến phần tử kia, cộng tổng lại rồi chia cho k ( xét hết mọi trường hợp ) có lẽ phải dùng quay lui...


Bài 4:"Dãy răng cưa" là dãy giảm tăng hoặc tăng giảm.Ví dụ:1,4,2,7,3,8 hoặc 4,1,3,2,8,5,6 là dãy răng cưa.Nhập một dãy số nguyên,sau đó biến đổi nó để được một dãy răng cưa.
Bài này trong topic [ Một số bài tập khá hay ] có đề cập đến là 'Dãy số đơn điệu, bạn qua đó xem

okmen910
01-01-2008, 17:07
đệ quy là gì vậy bạn.Mình chưa học phần đó

m2mpro
01-01-2008, 19:09
Một khái niệm X gọi là được định nghĩa đệ quy nếu trong định nghĩa của X có sử dụng ngay chính khái niệm X.
Ví dụ thường được sử dụng nhất:
ĐỊnh nghĩa phép toán giai thừa:
- Giai thừa của 1 là 1
- Giai thừa của n (n>1) là tích của n với giai thừa của n-1;
4! = 4*3! = 4*3*2! = 4*3*2*1! = 4*3*2*1
và định nghĩa người giàu:
- Ngừoi giàu là một kẻ bất lương hoặc có cha mẹ là người giàu.
Nói chung rất là khó định nghĩa được đệ quy là gì, nó có liên quan đến phần chương trình con và hầu như cuốn sách nào có phần chương trình con đều đề cập đến đệ quy.
Chúc bạn học tốt!

mr_invincible
01-01-2008, 19:27
[code]Bài 2:"Dãy đoạn con" tương tự "dãy con" nhưng các phàn tử liên tiếp
Chẳng hạn:dãy 1,2,1 là dãy đoạn con của dãy 0,1,2,1,4,5,6,3;còn dãy 1,4,6 không là dãy đoạn con của nó.Hãy nhập vào hai dãy và cho biết dãy (1) có phải là dãy đoạn con của (2) không?
Cái này dùng đệ quy cho nhanh...


Dùng đệ quy tuy viết cũng đơn giản nhưng tốn nhiều bộ nhớ và do đó không thể áp dụng với các bài toán có dữ liệu lớn. Do vậy, bạn không nên lạm dụng phương pháp này. Bài này tương tự bài tìm dãy tăng giảm mới có trong box Pascal này, nhưng có lẽ bài này đơn giản hơn. Ta cho một biến i chạy từ 1 đến số phần tử của dãy lớn, với mỗi i, xét xem i có bắt đầu một dãy giống như dãy kia không. Các bài khác cũng làm tương tự, không cần đến đệ quy hay quay lui gì cả

m2mpro
01-01-2008, 20:32
Nếu không dùng để quy thì có lẽ nên check i liên tiếp nhau để xác định đó là dãy liên tiếp.

okmen910
03-01-2008, 10:36
chext là gì vậy các anh.Thông cảm cho em ,em mới học pascal àh

okmen910
03-01-2008, 15:00
ai giúp em hướng dẫn kĩ hơn "bài 3"

okmen910
04-01-2008, 16:27
à không bài 4 không phải bài 3

mr_invincible
04-01-2008, 22:07
- Thứ nhất, bạn nên dùng chức năng sửa của diễn đàn, không nên viết nhiều câu liên tiếp như vậy, vừa gây rối topic, vừa dễ bị các moderator cảnh cáo.
- Thứ hai, về bài 4, có lẽ bạn phải tìm tất cả các cách đổi có thể được rồi kiểm tra xem cách biến đổi nào tạo dãy thành dãy răng cưa

okmen910
05-01-2008, 21:54
tại là thành viên mới nên chưa biết

mr_invincible
05-01-2008, 22:11
tại là thành viên mới nên chưa biết

Không sao đâu bạn, nhớ lần sau rút kinh nghiệm là được

hpmhoang_1993
13-01-2008, 17:33
sao không thấy ai code bài 1 hết vậy, tui cũng có bài tập như vậy đang hóc búa đây

mr_invincible
13-01-2008, 17:57
Biến l để lưu phần tử đã được xét đến trong dãy b
l:=1;
For i:=1 to n do
begin
j:=l;
While j<=m then
begin
If a[i]=a[j] then break;
inc(j);
end;
If j>m then {Dãy 1 không là dãy con của dãy 2, thoát}
else l:=j; {Phần tử thứ i của dãy 1 đã xuất hiện tại vị trí thứ j của dãy 2, đánh dấu lại}
end;

m2mpro
13-01-2008, 20:10
Bài của bạn mr_invincible không hiểu cho lắm, phần tử so snáh nào là phần tử của dãy a mà phần tử so sánh nào là phần tử của dãy b . ( hình như đang giải bài 1 thì phải )

mr_invincible
13-01-2008, 20:42
Bài của bạn mr_invincible không hiểu cho lắm, phần tử so snáh nào là phần tử của dãy a mà phần tử so sánh nào là phần tử của dãy b . ( hình như đang giải bài 1 thì phải )

Ờ thấy bạn hpmhoang_1993 hỏi nên tôi trả lời bài 1

okmen910
16-01-2008, 17:23
Bài 4:"Dãy răng cưa" là dãy giảm tăng hoặc tăng giảm.Ví dụ:1,4,2,7,3,8 hoặc 4,1,3,2,8,5,6 là dãy răng cưa.Nhập một dãy số nguyên,sau đó biến đổi nó để được một dãy răng cưa.

bài này em chép bị nhầm, đề là thế này
"Dãy răng cưa" là dãy giảm tăng hoặc tăng giảm.Ví dụ:1,4,2,7,3,8 hoặc 4,1,3,2,8,5,6 là dãy răng cưa.Nhập một dãy số nguyên, xuất ra dãy răng cưa dài nhất trong dãy số nguyên này

mr_invincible
16-01-2008, 21:05
Thì dùng vòng lặp từ 1 đến số phần tử của dãy, kiểm tra xem dãy răng cưa bắt đầu từ phần tử đó có lớn hơn độ dài dãy răng cưa lớn nhất tìm được không, nếu có thì gán độ dài lớn nhất của dãy răng cưa đã tìm được là độ dài dãy răng cưa vừa tìm được và lưu lại vị trí bắt đầu của nó
Xin lỗi tôi viết hơi khó hiểu

gameonline
18-01-2008, 11:58
e33333333333333333333333333333333333333

mr_invincible
18-01-2008, 19:54
e33333333333333333333333333333333333333

Trời, viết gì vậy bạn???

tamdan2008
20-12-2011, 17:45
có bạn nào có chương trình bài dãy răng cưa gửi lên đây cho mình với