PDA

View Full Version : [Q] Co' 1 bài Pascal cần các huynh giúp đỡ !



phuong
05-12-2002, 13:18
Thế này :
Hãy mô phỏng chương trình minesweeper trong windows bằng Pascal. Yêu cầu: giao diện đồ họa, dùng mouse.

Co' lẽ đối với mấy huynh thì không khó ( quá dễ ) nhưng còn tiểu đệ thì..:o
Đừng chê tiểu đệ mà hãy giúp đệ " xóa mù" đi các huynh . Xin chân thành cảm ơn.

Mach2
07-12-2002, 15:57
"Mô phỏng" Minesweeper như bạn nói là gồm 2 phần: thuật toán và đồ hoạ. Về thuật toán thì chẳng có gì phức tạp (bởi vì chỉ "mô phỏng" thui mà), sinh ra một ma trận ô rùi random mìn vào là xong. Phần đồ hoạ trong Pascal tui quên rùi, nhưng mà có lẽ ko phức tạp lém, chỉ cần bạn biết xài mouse (cái ni có thể tham khảo trong box này, nhiều bài lém) và vẽ vài cái hình đơn giản (số và ô trắng, mìn,...) Có lẽ chuyện khó nhất (mà chắc ngoài yêu cầu của bạn) là thuật toán bắt máy dò mìn dùm mình (cái này có thể giúp mình biết được là bãi mìn đó có giải được ko, bởi vì theo kinh nghiệm chơi của tui thì có nhìu bãi ko giải được mà phải gỡ lụi)...

ureka
25-12-2002, 09:43
Tui cũng có một chương trình minesweeper giống như của window đến 90% đây. Bạn có thể download chạy thử. Tuy vậy code đồ hoạ của chương trình hơi dài, huynh đệ chịu khó đọc vậy.

beconkhatsua
27-12-2002, 21:02
Có phải học lớp 02CT3 không ?

phuong
30-12-2002, 14:38
Beconkhatsua có phải là Nguyễn Hữu Anh không dzậy? Đừng lan truyền cái vụ này rộng rãi à nha lol ! Thầy mà biêt tui ăn gian như dzậy thì....hichic :o :o

lovely
30-12-2002, 16:08
Chương trình đó bác down ở đâu vậy chỉ cho tôi với ...

ureka
30-12-2002, 19:44
Lovely !
Đây là chương trình tôi tự làm xong hồi năm 1998 lận. Không có download ở đâu hết.

phuong
02-01-2003, 14:02
Xin lỗi các bác nhưng sao tui down dzề hổng được. Nó ra file zip chứa 0 byte :)

real_time
15-12-2003, 21:10
chắc là lỗi rồi! nhưng cũng như march2 nói ko khó lắm mà sau khi đọc được chuyển mìn vào ma trận rồi muốn điền số thì bạn xét liên thông cấp tam của 1 điểm sẽ in được các số trên ma trận đó.
công việc đồ họa và với chuốt chẳng khó khăn gì
đây là vidu làm việc với chuột có một ít đồ họa bạn xem ở đó và cắt phần làm việc với chuột ra thực hiện tiếp là được

real_time
15-12-2003, 21:13
sao ko upload file lên diễn đàn được thế này?

readln
20-12-2003, 16:46
chao cac ban !
cac ban co the cho toi hoi lam cach nao de biet duoc so fibonaci thu n<voi n rat lon khoang 2000 chang han > duoc khong ?
ai lap tring duo ngay thi cang tot !!!
cam on

Huynh Phong
20-12-2003, 18:59
I call this type of design a "Fibonacci spiral" because the math used for it can be related to a Fibonacci sequence. An example of a Fibonacci sequence is 1,1,2,3,5,8,13,21,34,55,...
{-------------------------}
Dãy số Fibonaci là gì ? Nó có ứng dụng cho 1 việc nào đó không?...
Fibonaci có t/chất đặc biệt :
1. 2 số đầu tiên đều là 1
2. số kế tiếp = tổng của 2 số đứng trước nó...
{-------------------------}
Đây là bài toán dùng đệ quy, nhưng nhược điểm của phpháp đệ quy là đối với những con số n càng lớn, thì máy càng tính chậm, số n lớn quá sẽ bị hiện tượng stack overflow (tràn stack), dzậy ta không dùng phpháp đệ quy để giải.
Hãy dùng phpháp khác. VD:
{__________________}
Program Fibonaci;
Uses Crt;
Var N,L : integer; KQ,T1,T2: LongInt; Lg : String[10];
MaxX,MaxY :byte; { dung phat hien toa do lon nhat cua man hinh }
Procedure Show_KQ;
begin
{}Str(Kq,Lg);
{}if WhereX+Length(Lg)+1>MaxX then
{}begin
{}if WhereY<MaxY then Gotoxy(01,WhereY+1) else
{}begin Gotoxy(01,01); DelLine; Gotoxy(01,MaxY); end;
{}end;
{}Write(Kq,' ');
end;
Begin
ClrScr; MaxX:=WhereX; MaxY:=WhereY;
{ Lay so cot tren man hinh } Repeat Gotoxy(WhereX+1,WhereY); Inc(MaxX); Until MaxX<>WhereX;
Gotoxy(01,01);
{ Lay so dong tren man hinh }Repeat Gotoxy(WhereX,WhereY+1); Inc(MaxY); Until MaxY<>WhereY;
Gotoxy(01,01); Dec(MaxX); Dec(MaxY);
{ Nhap chi so N }
Repeat Write('Nhap N: '); Readln(N); if N<=0 then Writeln('Hay cho so N >0'); Until N>0;
L :=0; T1:=1;
Repeat
{}Inc(L); if L<2 then T2:=0; if (Odd(L)) then T2:=Kq else T1:=Kq;
Kq := T1+T2; Show_KQ;
Until L>=N;
Readkey;
end.
{___________________}
Nhưng với cách khai báo trên (KQ :LongInt), thì ta cũng chỉ tính toán đến mức tối đa là N=46 mà thôi. Vậy còn cách nào nữa để tính N>46 nhỉ ?. Ta phải nghĩ đến cách "chia để trị", xé nhỏ KQ ra (KQ := [KQ1+KQ2+..+KQn]) và dùng biến tạm T1, T2 là 1 string.

louiscom
20-12-2003, 20:33
Ai co kinh nghiem dzia Pas xin cho "de" chut y kien ve cach viet tro nay. reply as soon as pos.Thanks

NgamNgamcongtu
22-12-2003, 09:35
nói là chỉ cho mọi người sao không đowloa được hả bạn

louiscom
23-12-2003, 01:17
Ngâm cuu cong tu co y kien gi hay a ? Post len cho "de" dzoi moi nguoi tham khao . thanks

louiscom
23-12-2003, 01:21
còn ai có hứong thú với trò này không ?OẲN TÙ XÌ viết bằng Pascal đó, xin cho y kiến, sớm sớm nhạ Thank nhiệu

Huynh Phong
23-12-2003, 11:55
Đâu có gì là hứng thú dzà không hứng thú ?! Chỉ dùng mỗi một hàm Random() thôi mà.

pfiev
23-12-2003, 19:32
Về số fibonacci: tìm công thức của nó đi, hình như là (((sqrt5+1)/2)^n + ((sqrt5-1)/2)^n) / sqrt5 đó.

louiscom
25-12-2003, 22:42
huynh a , tat nhien la the rui, nhung em muon hoi la con cach nao hay hon khong ?nhung em cung thanks huynh nhieu.

jiSh@n
26-12-2003, 01:01
function Fibo(n:integer):integer;
var i,j,k:integer;
begin
i:=1;
j:=0;
for k:=1 to n do begin j:=i+1;i:=j-1;end;
Fibo:=j;
end;

dongsong
31-12-2003, 22:47
fibo hả, trước đây tớ chỉ dúng số nhỏ thui. còn muốn làm số lớn hả : Bạn viết cái hàm string+string đi. Thế là xong.

dongsong
31-12-2003, 22:59
string add(string sô1, string số2)
(B)
integer i:=0, carry :=0;
string kêtquả[MAXLENGHT];
Đảo ngược sô1.
Đảo ngược sô2
for (toàn bộ chiều dài của sô ngắn hơn)
(B)tong = so1[i] + so2[i] + carry - 2*'0'
carry = tong/10;
ketqua[i] = tong%10;
(E)
{phan còn lại của số dài chắc là bạn biết phải làm gì gùi hen}
add = ketqua;
(E)

dongsong
31-12-2003, 23:02
còn sót 1 chỗ : ketqua[i] = tong%10 + '0'; vì minh lưu bằng ki' tự mò .. hi` hi`

Huynh Phong
01-01-2004, 17:12
string add(string sô1, string số2)
(B)
integer i:=0, carry :=0;
string kêtquả[MAXLENGHT];
Đảo ngược sô1.
Đảo ngược sô2
for (toàn bộ chiều dài của sô ngắn hơn)
(B)tong = so1[i] + so2[i] + carry - 2*'0'
carry = tong/10;
ketqua[i] = tong%10;
(E)
{phan còn lại của số dài chắc là bạn biết phải làm gì gùi hen}
add = ketqua;
(E)
Đây là chương trình gì ?

jiSh@n
02-01-2004, 02:38
chắc là Pascal lai C wé :D

deepawarenesses
04-01-2004, 10:24
cai vu do hoa tui chiu trach nhiem cho,con thuat toan may bo giai quyet di.
Man hinh bao nhieu cung duoc,nhung chac xai co 256 mau la vua,con 16777216 thi hoi bi nhieu va cham du lam.
upload cai thuat toan cua you len di

tuanhv
12-01-2004, 10:42
Đơn giản thôi bạn viết chương trinh cộng hai số nguyên trước, sau đó áp dụng linh hoạt nó vào mà giải thôi, đàm bảo không khó.

tuanhv
12-01-2004, 10:45
À quyên bạn nên lấy hai file cộng với nhau là tốt nhất.

xyxy
20-01-2004, 11:01
Hello!Lâu ngày gặp lại !
mọi người có ai giải được bài độ trì hoãn của tôi không ?

bete
27-01-2004, 15:25
>> Đây là bài toán dùng đệ quy, nhưng nhược điểm của phpháp đệ quy là đối với
>> những con số n càng lớn, thì máy càng tính chậm, số n lớn quá sẽ bị hiện tượng
>> stack overflow (tràn stack), dzậy ta không dùng phpháp đệ quy để giải.

==> tui nghi~ la` co' the^? du`ng vo`ng la(.p cho da~y Fibonacci
Mi`nh bie^'t F_n = F_n-1 + F_n-2

kho*?i ta.o: F_n_tru_1 = 1; F_n_tru_2 = 1

loop ..........
F_n = F_n_tru_1 + F_n_tru_2
F_n_tru_2 = F_n_tru_1
F_n_tru_1 = Fn
end loop

Ne^'u ti'nh n=2000 thi` ma^'t khoa?ng 2000 la^`n la(.p

Vie^'t nhu* tre^n thi` de^~ hie^?u 1 ti'. Bo^` na`o tha^'y 2 ca'i le^.nh ga'n F_n_tru_1 & F_n_tru_2 coi bo^. ngu*'a ma('t thi` co' the^? thu*? (0 cha('c nhanh ho*n)

F_n = a + b
a = F_n

F_n = a + b
b = F_n

F_n = a + b
a = F_n

.............

(hoa'n đo^?i le^.nh ga'n F_n vo^ a hay b o*? mo^~i la^`n la(.p --> co' the^? xa`i 1 bie^'n ma` gia' tri. hoa'n đo^?i tu*`0 <-> 1, hay xe't ti'nh cha(~n le? cu?a counter, .....)

bete
27-01-2004, 15:35
Dda(ng xong ro^`i mo*'i tha^'y ca'i ba`i cu?a bo^` jiSh :(

Xin cho ho?i bo^` jiSh 1 ti':

i:=1;
j:=0;
for k:=1 to n do begin j:=i+1;i:=j-1;end;
Fibo:=j;
end;

gia? su*? n = 5:

i=1; j=0;

k=1:
j:=i+1 = 1+1 = 2
i:=j-1 = 2-1 = 1

k=2
j:=i+1 = 1+1 = 2
i:=j-1 = 2-1 = 1

k=3
j:=i+1 = 1+1 = 2
i:=j-1 = 2-1 = 1

k=4
j:=i+1 = 1+1 = 2
i:=j-1 = 2-1 = 1

k=5
j:=i+1 = 1+1 = 2
i:=j-1 = 2-1 = 1

Kho^ng bie^'t tui co' lo^.n cho^~ na`o 0 nhu*ng coi bo^. j se~ la` 2 & i se~ la` 1 hoa`i hoa`i !?!?

ngoalong
27-01-2004, 16:40
Mình có một bài mô phỏng mines khá hay (viết bằng Pascal,nhưng chỉ dùng 16 màu),còn có thể Save game được .Bạn nào muốn cóa mã nguồn thì liên lạc với mình theo địa chỉ kysithienlong_hp@yahooo.com

ptdx3
04-02-2004, 15:05
lam sao go duoc tieng viet trong trang web nay. va giai giup minh phuong trinh bac 3 bang pascal.

ngoalong
16-02-2004, 07:38
Trang web này hỗ trợ gõ tiếng việt trực tiếp nên bạn có thể gõ tiếng việt bình thường mà không cần chương trình hỗ trợ gõ tiếng việt nào cả.(Bấm phím F12 để bật tắt chế độ gõ tiếng việt)
Còn về giải phương trình bậc 3 bằng Pascal thì quan trọng là bạn phải có thuật toán để giải ,khi đã có thuật toán thì bạn có thể giải quyết dễ dàng mọi bài toán. ;)