Diễn Đàn Vật Lý | Thư Viện Vật Lý

CÁC KHOA HỌC KHÁC => TIN HỌC => Tác giả chủ đề:: tinhoc trong 05:50:07 PM Ngày 26 Tháng Tám, 2010

Đọc bản đầy đủ ở đây: http://thuvienvatly.com/forums/index.php?topic=3555



Tiêu đề: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 05:50:07 PM Ngày 26 Tháng Tám, 2010
chào mọi người!!!!!!! topic này lập ra nhằm trao đổi giúp đỡ nhau trong chương trình pascal lớp 11
 mọi ng ( có mìh trong đó nữa nghen ;;) ) có thắc mắc hoạt bài tập nào không giải được hoặc ko tìm ra lỗi khi chạy chương trình thì post lên mọi ng cùng chung tay giúp đỡ  ^-^
 P/s nói là pascal 11 nhưng cái gì có trong học đường thì mọi ng cứ hỏi (từ 11 trở xuống nhé em chưa học 12) ^-^ ^-^


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 06:32:36 PM Ngày 29 Tháng Tám, 2010
hình như chẳng ai có thắc mắc gì  =d>  ::)


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 09:06:49 AM Ngày 01 Tháng Chín, 2010
vi` mọi ng ko có thắc mắc j` nên tinhoc sẽ chỉ đưa ra tài liệu tham khảo thêm cho mọi ng nha  ^-^
 * các phím chức năng của pascal ( chắc cái này aj cũng bek  :D)
      + F2: lưu chương trình trong khi soạn thảo.
      + F3: tạo một file mới hoặc mở một file cũ.
      + F9: duyệt chương trình để kiểm tra lỗi
      + Ctrl+F9: chạy chương trình
      +Alt+F5: xem kết quả chạy chương trình
      +Alt + X: thoát khỏi màn hình soạn thảo chương trình pascal.
 * các từ khóa trong pascal ( giúp các bạn khi đặt tên ko bj trùng lặp và cũng dễ bek lỗi sai khi mà duyệt chương trình báo lỗi ở tên  [-O<)
       and, array, asm, begin, case, const, constructor, destructor, div, do, downto, else,
end, file, for, function, goto, if, implementation, in, inline, interface, label, mod, nil,
not, object, of, or, packed, procedure, program, record, repeat, set, shl, shr, string,
then, to, type, unit, until, uses, var, while, with, xor.
  *tiếp theo là các kiểu dữ liệu
         a/ kiểu nguyên số :
- byte: phạm vi biểu diễn 0 --> 255 ( chiếm 1 byte trong bộ nhớ)
- integer: phạm vi biểu diễn -32768 --> 32767 ( chiếm 2 byte trong bộ nhớ)
- shortint: phạm vi biểu diễn -128 --> 127 ( chiếm 1 byte trong bộ nhớ)
- word: phạm vi biểu diễn 0 --> 65535( chiếm 2 byte trong bộ nhớ)
- longint: phạm vi biểu diễn -2147483648 --> 2147483647 ( chiếm 4 byte trong bộ nhớ)
 hôm nay thế thôi tinhoc còn học bài hôm khác sẽ post típ  ^-^ ;;) ;;)


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 09:41:53 AM Ngày 01 Tháng Chín, 2010
tinhoc à, nếu chỉ viết như vậy thì không hấp dẫn người đọc đâu. Nếu bạn có thể viết các bài hướng dẫn lập trình cụ thể trong Pascal luôn thì topic này sẽ thu hút được nhiều người hơn đấy.


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 10:18:20 AM Ngày 01 Tháng Chín, 2010
tinhoc à, nếu chỉ viết như vậy thì không hấp dẫn người đọc đâu. Nếu bạn có thể viết các bài hướng dẫn lập trình cụ thể trong Pascal luôn thì topic này sẽ thu hút được nhiều người hơn đấy.
thì mọi ng phải thắc mắc hoặc iu cầu đề ntn thì mới làm bài hướng dẫn dc chứ anh.
với laj bài tập đó mọi ng phải tự làm trước khi nào bí wa' tìm ko ra lỗi hoặc bài khó wa' thì mới post lên mọi ng giúp đỡ để hiểu rõ và làm chứ ko phai dua đề lên để moi ng làm rồi mih chep vào ma ko hiểu tí j`.
vì pascal cần tư duy nhiều  [-O<


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 10:31:18 AM Ngày 01 Tháng Chín, 2010
Ý của mình là ta sẽ không phải làm theo kiểu giải bài tập, mà làm theo kiểu hướng dẫn học. Có thể lấy ví dụ các ý tưởng như sau:

Bài 1: Giới thiệu tổng quan về Pascal  (tại sao phải học nó?)

Bài 2: Giới thiệu công cụ cần có để học (ví dụ : Turbo Pascal, cách download, cài đặt, giới thiệu môi trường làm việc,...)

Bài 3: Viết chương trình đầu tiên (Hello, World!) --> giải thích cấu trúc cơ bản của 1 chương trình --> giải thích cách compile chương trình, cách chạy chương trình vừa viết.

Bài 4: Giới thiệu các kiểu biến

Bài 5: Giới thiệu các cấu trúc điều khiển, vòng lập,...

Bài 6: Giới thiệu cách viết các hàm, các chương trình con,...

v.v...
 
Bài XXX: Giới thiệu đồ họa trong Pascal ...

và xa hơn...

Bài YYY: Giới thiệu về Delphi,....

Trong mỗi bài, ta có thể đưa ra các ví dụ cụ thể để người đọc có thêm hứng thú. Ví dụ như là giải phương trình bậc 2, tính điểm học sinh, chơi bản nhạc, tạo các trò chơi nhỏ như đoán số, oảnh tù tì,...



 


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 11:03:23 AM Ngày 01 Tháng Chín, 2010
mấy thuật toán viet game hơi khó và dài dòng @@. em doc thj cung thấy ớn  :-\ :-\
cái đó khi nào em tìm hiểu rõ ràng rồi mới dám hướng dẫn ng khác.
 anh tranquynh nếu bek thì huong dan e vd nha'. tk


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Trần Triệu Phú trong 12:37:14 PM Ngày 01 Tháng Chín, 2010
Cái đầu tiên là sư đệ phải post lên chương trình viết và chạy Pascal.
còn cái mình muốn hỏi tí là hồi xưa chạy pascal hay bị lỗi 200 do máy nhanh quá. Khắc phục thế nào nhỉ, hồi xưa làm rồi ma wen mất, h hỏi lại để lỡ may ai gặp thì biết đừơng


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 04:33:13 PM Ngày 01 Tháng Chín, 2010
Lỗi đó dường như là lỗi Divide by zero. Ngày xưa, có 1 bản patch, chỉ cần copy vào thư mục cài đặt của Pascal là được. Mình nghĩ bây giờ với những phiên bản mới thì đã không còn lỗi đó nữa (không chắc chắn lắm vì hiện tại không còn dùng Pascal nữa).


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Trần Triệu Phú trong 05:58:09 PM Ngày 01 Tháng Chín, 2010
đúng rồi, lỗi đó bị hỉu nhầm là "Divide by zero" do tràn bộ nhớ với các máy có tốc độ trên 200Mh. H cũng k còn sài pascal nữa, hix, e đang ngâm và code cái Fortran


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 08:36:36 PM Ngày 01 Tháng Chín, 2010
thật tình là tinhoc ko rành và cũng khong giỏi những cái này cho lắm. tinhoc muốn học lập trình nhưng ko có thời gian  :-[ :-[ tinhoc lập topic này ra chỉ để giải thích cho các bạn cùng độ cấp lớp về những gì học trên lớp vì những gì trong sach thj` tinhoc hieu và chỉ viết các chương trình đơn giản trong học đường. ngoài ra tinhoc chưa tim hiểu hết pascal nên ko thể viết những chương trình khó được :(:( mong mọi ng thông cảm.
 mọi ng aj có bí quyết hoặc am hiểu nhiu` về pascal thj` rất mong mọi ng chia sẻ. [-O< [-O<
 Thanks!!!!!!
 


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 09:07:26 PM Ngày 01 Tháng Chín, 2010
các anh giúp em giải thích giùm em từng câu lệnh trong chương trình pascal viết game mini này vs. em nhìn ko hiểu  %-) %-)
 
Code:

uses crt;
var a:char;
    mx,my,i,d:byte;
    hx,hy:integer;
    score:integer;
    x,y:array[1..104] of byte;
    l:word;
const lbox=10; rbox=70;
      tbox=5; bbox=45;
      maxl=200;

Procedure DrawBox;
var i : byte;
Begin
  Textcolor(White);
  For i:=lbox-1 to rbox+1 do
    begin Gotoxy(i,tbox-1); write('x');
          Gotoxy(i,bbox+1); write('x');end;
  For i:=tbox-1 to bbox+1 do
    begin Gotoxy(lbox-1,i); write('x');
          Gotoxy(rbox+1,i); write('x');end;
end;

procedure win;
begin
     clrscr;
     textmode(150);
     gotoxy(25,13);
     textcolor(20);
     write('You are a Master with 70 point');
     readln;
     halt;
end;
procedure e;
var i : byte;
    t,b,l,r : byte;
Begin
  Textcolor(lightred);
  GotoXY(x[1],y[1]); Write('@'); Delay(500);
  GotoXY(x[1]-1,y[1]); Write('@');
  GotoXY(x[1]+1,y[1]); Write('@');
  GotoXY(x[1],y[1]-1); Write('@');
  GotoXY(x[1],y[1]+1); Write('@');
  Delay(500);
  t := tbox; r := rbox;
  b := bbox; l := lbox;
  Textcolor(LightGray);
  repeat;
  For i:=l to r do
    begin Gotoxy(i,t); write(':'); delay(1); end;
  For i:=t to b do
    begin Gotoxy(r,i); write(':'); delay(1); end;
  For i:=r downto l+1 do
    begin Gotoxy(i,b); write(':'); delay(1); end;
  For i:=b downto t+1 do
    begin Gotoxy(l,i); write(':'); delay(1); end;
  if l<r then l:=l+1; if t<b then t:=t+1; if b>t then b:=b-1; if r>l then r:=r-1;
  Until (l=r) and (t=b);
  t := tbox; r := rbox;
  b := bbox; l := lbox;
  repeat;
  For i:=l to r do
    begin Gotoxy(i,t); write(' '); delay(1); end;
  For i:=t to b do
    begin Gotoxy(r,i); write(' '); delay(1); end;
  For i:=r downto l+1 do
    begin Gotoxy(i,b); write(' '); delay(1); end;
  For i:=b downto t+1 do
    begin Gotoxy(l,i); write(' '); delay(1); end;
  if l<r then l:=l+1; if t<b then t:=t+1; if b>t then b:=b-1; if r>l then r:=r-1;
  Until (l=r) and (t=b);
  gotoxy(34,24);
  textcolor(LightRed);
  write('GAME OVER');
  gotoxy(30,1);
  textcolor(LightGreen);
  write('You ate ',d-3,' apples');
  gotoxy(30,2);
  write('You got ',score,' scores');
  readln;
  halt;
end;

begin
  randomize;
  d:=3;
  hx:=1;
  mx:=random(rbox-lbox+1)+lbox;
  my:=random(bbox-tbox+1)+tbox;
  x[1]:=40;
  y[1]:=25;
  textmode(1000);
  repeat
    textcolor(15);
    score:=0;
    clrscr;
    write('Choose Level (1..10) : ');readln(l);
  until l in[1..10];
  l:= maxl div l;
  textcolor(0);
  clrscr;
  repeat
    repeat
      textcolor(8);
      gotoxy(lbox-1,1); write('Developed by Augustine Bui');
      textcolor(Yellow);
      gotoxy(rbox-12,1); write('Apples : ',(d-3):5);
      Gotoxy(lbox-1,2); write('Speed : ',maxl-l);
      gotoxy(rbox-6-6,2);write('Scores : ',score:5);
      gotoxy(mx,my); textcolor(14);write('*');
      DrawBox;
      for i:= d+1 downto 2 do
        begin
          x[i]:=x[i-1];
          y[i]:=y[i-1];
        end;
      x[1]:=x[1]+hx;
      y[1]:=y[1]+hy;
      if (x[1]>rbox)or(x[1]<lbox)or(y[1]>bbox)or(y[1]<tbox) then e;
      For i:= d+1 downto 2 do
        if (y[1]=y[i]) and (x[1]=x[i]) then e;
      gotoxy(x[d+1],y[d+1]);textcolor(0); write(' '); (* Xoa Node duoi *)
      if (y[1]=my) and (x[1]=mx) then
        begin
          d:=d+1;
          sound(1000);
          delay(75);
          nosound;
          l:=l-2;
          gotoxy(x[1],y[1]);
          textcolor(LightGreen);
          write(#1); (* Ve Them 1 node dau *)
          score:=score + ((maxl-l)*10)div 10;
          mx:=random(rbox-lbox+1)+lbox;
          my:=random(bbox-tbox+1)+tbox;
        end;
      if d=78 then win;
      textcolor(LightGreen);
      gotoxy(x[1],y[1]);
      write('@');
      gotoxy(x[2],y[2]);
      write('c');
      textcolor(0);
      Gotoxy(1,1);
      delay(l);
    until keypressed;
    a:=readkey; if a= #0 then a:= readkey;
    case a of
      #75: if hx=0 then begin hx:=-1; hy:=0; end;
      #77: if hx=0 then begin hx:=1; hy:=0; end;
      #72: if hy=0 then begin hx:=0; hy:=-1; end;
      #80: if hy=0 then begin hx:=0; hy:=1; end;
      'd': d:=d+1;
    end;
  until a =#27;
end.
nguồn code http://softvnn.com/forum/showthread.php?t=178091
thanks moi ng!!!!


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 10:41:52 AM Ngày 02 Tháng Chín, 2010
1   uses    crt;
2
3   var    a:char;
4           mx,my,i,d:byte;
5         hx,hy:integer;
6         score:integer;
7         x,y:array[1..104] of byte;
8         l:word;
9   const    lbox=10; rbox=70;
10         tbox=5; bbox=45;
11         maxl=200;
12   //=================================================
13   Procedure DrawBox;
14      var i : byte;
15
16   Begin
17      
18      Textcolor(White);
19      
20      For i:=lbox-1 to rbox+1 do
21      
22         begin Gotoxy(i,tbox-1); write('x');
23            Gotoxy(i,bbox+1); write('x');end;
24      
25      For i:=tbox-1 to bbox+1 do
26      
27         begin Gotoxy(lbox-1,i); write('x');
28            Gotoxy(rbox+1,i); write('x');end;
29   end;
30   //=================================================
31
32   //=================================================
33   procedure win;
34
35   begin
36      clrscr;
37      textmode(150);
38      gotoxy(25,13);
39      textcolor(20);
40      write('You are a Master with 70 point');
41      readln;
42      halt;
43   end;
44   //=================================================
45
46
47
48   //=================================================
49   procedure e;
50
51      var i : byte;
52          t,b,l,r : byte;
53
54   Begin
55     Textcolor(lightred);
56       GotoXY(x[1],y[1]); Write('@'); Delay(500);
57     GotoXY(x[1]-1,y[1]); Write('@');
58     GotoXY(x[1]+1,y[1]); Write('@');
59     GotoXY(x[1],y[1]-1); Write('@');
60     GotoXY(x[1],y[1]+1); Write('@');
61     Delay(500);
62 
63      t := tbox; r := rbox;
64      b := bbox; l := lbox;
65     Textcolor(LightGray);
66
67
68     repeat;
69
70        For i:=l to r do
71             begin Gotoxy(i,t); write(':'); delay(1); end;
72
73        For i:=t to b do
74            begin Gotoxy(r,i); write(':'); delay(1); end;
75            
76         For i:=r downto l+1 do
77            begin Gotoxy(i,b); write(':'); delay(1); end;
78            
79         For i:=b downto t+1 do
80            begin Gotoxy(l,i); write(':'); delay(1); end;
81            
82         if l<r then l:=l+1; if t<b then t:=t+1; if b>t then b:=b-1; if r>l then r:=r-1;
83         
84      Until (l=r) and (t=b);
85   
86   
87     t := tbox; r := rbox;
88      b := bbox; l := lbox;
89      
90      
91      repeat;
92      
93         For i:=l to r do
94            begin Gotoxy(i,t); write(' '); delay(1); end;
95            
96         For i:=t to b do
97            begin Gotoxy(r,i); write(' '); delay(1); end;
98            
99         For i:=r downto l+1 do
100            begin Gotoxy(i,b); write(' '); delay(1); end;
101            
102         For i:=b downto t+1 do
103            begin Gotoxy(l,i); write(' '); delay(1); end;
104            
105         if l<r then l:=l+1; if t<b then t:=t+1; if b>t then b:=b-1; if r>l then r:=r-1;
106         
107      Until (l=r) and (t=b);
108      
109      
110      gotoxy(34,24);
111      textcolor(LightRed);
112      write('GAME OVER');
113      
114      gotoxy(30,1);
115      textcolor(LightGreen);
116      write('You ate ',d-3,' apples');
117      
118      gotoxy(30,2);
119      write('You got ',score,' scores');
120      readln;
121      halt;
122
123   end;
124   //=================================================
125
126
127
128
129   //=================================================
130   begin
131
132     randomize;
133      d:=3;
134      hx:=1;
135      mx:=random(rbox-lbox+1)+lbox;
136      my:=random(bbox-tbox+1)+tbox;
137      x[1]:=40;
138      y[1]:=25;
139      textmode(1000);
140      
141      
142      
143     repeat
144
145         textcolor(15);
146         score:=0;
147         clrscr;
148         
149         write('Choose Level (1..10) : ');readln(l);
150         
151      until l in[1..10];
152
153      l:= maxl div l;      
154      
155
156      textcolor(0);
157      clrscr;
158      
159      
160      repeat
161      
162         repeat
163         
164            textcolor(8);
165            gotoxy(lbox-1,1); write('Developed by Augustine Bui');
166            
167            textcolor(Yellow);
168            gotoxy(rbox-12,1); write('Apples : ',(d-3):5);
169            Gotoxy(lbox-1,2); write('Speed : ',maxl-l);
170            gotoxy(rbox-6-6,2);write('Scores : ',score:5);
171            
172            gotoxy(mx,my); textcolor(14);write('*');
173            
174            DrawBox;
175            
176            for i:= d+1 downto 2 do
177            
178               begin
179                 x:=x[i-1];
180                 y:=y[i-1];
181               end;
182               
183               
184            x[1]:=x[1]+hx;
185            y[1]:=y[1]+hy;
186          
187            if (x[1]>rbox)or(x[1]<lbox)or(y[1]>bbox)or(y[1]<tbox) then e;
188    
189            For i:= d+1 downto 2 do
190            
191               if (y[1]=y) and (x[1]=x) then e;
192               
193            gotoxy(x[d+1],y[d+1]);textcolor(0); write(' '); (* Xoa Node duoi *)
194         
195            if (y[1]=my) and (x[1]=mx) then
196               begin
197                  d:=d+1;
198                  sound(1000);
199                  delay(75);
200                  nosound;
201                  l:=l-2;
202                  gotoxy(x[1],y[1]);
203                  textcolor(LightGreen);
204                  write(#1); (* Ve Them 1 node dau *)
205                  score:=score + ((maxl-l)*10)div 10;
206                  mx:=random(rbox-lbox+1)+lbox;
207                  my:=random(bbox-tbox+1)+tbox;
208               end;
209            
210            
211            if d=78 then win;
212         
213            textcolor(LightGreen);
214            gotoxy(x[1],y[1]);
215            write('@');
216            gotoxy(x[2],y[2]);
217            write('c');
218            textcolor(0);
219            Gotoxy(1,1);
220            delay(l);
221            
222            
223            until keypressed;
224         
225         a:=readkey; if a= #0 then a:= readkey;
226         
227         case a of
228            #75: if hx=0 then begin hx:=-1; hy:=0; end;
229            #77: if hx=0 then begin hx:=1; hy:=0; end;
230            #72: if hy=0 then begin hx:=0; hy:=-1; end;
231            #80: if hy=0 then begin hx:=0; hy:=1; end;
232            'd': d:=d+1;
233         end;
234      
235      until a =#27;
236      
237      
238   end;
//=================================================


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 10:43:13 AM Ngày 02 Tháng Chín, 2010
Trước tiên, mình chia lại chương trình cho dễ đọc và đánh số các dòng lệnh cho dễ giải thích.

Theo link bạn đưa ra, đây là game con rắn ăn quả táo. Khi biết được ý tưởng của chương trình thì ta mới dễ dàng theo dõi. Người viết chương trình không hề có một ghi chú nào cả, nên người khác đọc vào rất khó hiểu.

Chương trình này vận dùng hầu hết tất cả các kỹ năng lập trình cơ bản (biến, mảng, vòng lập (for, repeat), điều kiện (if), lựa chọn (case of), đọc phím được nhấn, thủ tục (procedure), âm thanh (sound), tạm dừng chương trình (delay),…).

Việc giải thích một cách cận kẽ chương trình sẽ rất dài dòng, và đôi khi là không thể được vì có những chỗ ta không nắm được ý của tác giả. Ở đây, mình chỉ giải thích theo khả năng có thể. Bạn nghiên cứu thêm, có chi tiết nào không hiểu thì hãy hỏi để đào sâu hơn. Với những câu lệnh bạn không hiểu thì hãy nhớ đến… Google.


Cấu trúc chương trình:

Dòng 1-->11 : Khai báo biến và các hằng số.

Dòng 13-->29: thủ tục “drawbox”. Cái này dùng để vẽ một khung hình chữ nhật trên màn hình (cmd).

Dòng 33-->43 : thủ tục “win”. Cái này sẽ được gọi đến khi người chơi đã thắng. Có lẽ vì vậy mà nó có tên là “win”.

Dòng 49-->123 : thủ tục e. Cái này sẽ được gọi khi người chơi bị thua. “e” có lẽ là từ đầu tiên của “end” (kết thúc). Tác giả  không dùng tên “end” vì “end” từ khóa của ngôn ngữ lập trình.

Dòng 130 cho đến hết: thân chương trình chính.


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 10:46:32 AM Ngày 02 Tháng Chín, 2010
Phần 1 : Khai báo biến và hằng số

(Dòng 1) uses crt : sử dụng module crt của Pascal. Sử dụng module này để có thể gọi hàm xóa màn hình clrscr (dòng 36, 147,…).

(Dòng 3) khai báo biến a, kiểu ký tự. Biến a này sẽ được dùng để lưu trữ phím được gõ từ người chơi. Ví dụ như là thoát chương trình, di chuyển con rắn chạy lên xuống, chạy qua trái phải,… Biến a được dùng ở các dòng 255-->232.

(Dòng 4) mx, my là tọa độ của các trái táo. Các trái tạo sẽ được tạo một cách ngẫu nhiên (random) ở các dòng 135, 136, 206, 207.

(Dòng 4) i là một biến dùng để làm chỉ số chạy trong các vòng lập for. d là số quả táo con rắn ăn được.

(Dòng 5) hx, hy là độ dịch chuyển thêm của con rắn. Ví dụ, khi rắn dịch chuyển xuống dưới thì hx=0, hy=+1; lên trên thì hx=0, hy=-1; qua trái thì hx=-1, hy=0; qua phải thì hx=+1, hy=0. Hai biến này dùng ở dòng 227-->232

(Dòng 6) score là điểm số người chơi nhận được

(Dòng 7) khai báo x, y là các mảng có chứa tối đa 104 giá trị. Hai mảng này dùng để chứa tọa độ của các đốt tạo nên con rắn. Từ đó có thể di chuyển, xác định xem rắn có ăn được trái táo, hai có bị đụng vào tường hay không.

(Dòng 8) l là level (cấp bậc). Dùng để chứa cấp độ hiện tại của game. Có 10 cấp độ. Các cấp độ khác nhau ở tốc độ di chuyển của con rắn (l càng lớn, tốc độ càng nhanh).

(Dòng 9-->11) khai báo các hằng số. Các hằng số này gồm có vị trí của cái hộp (box) giới hạn phạm vi di chuyển của con rắn (lbox, rbox, tbox, bbox  sẽ tương ứng là left_, right, top, bottom (trái, phải, trên, dưới)). maxl=200 sẽ được dùng để tính tốc độ di chuyển của con rắn. Biến này sẽ có liên quan đến biến l ở trên.


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 10:48:21 AM Ngày 02 Tháng Chín, 2010
Phần 2 : Thủ tục Drawbox (dòng 13-->29)

Thủ tục này sẽ vẽ trên nền cmd một hình vuông có các cạnh giới hạn bởi lbox, rbox, tbox, bbox. Các cạnh này sẽ được đánh dấu bằng các dấu chéo “X”.

Đầu tiên tác giả chọn màu sẽ vẽ (màu trắng). Sau đó các vòng lập for sẽ vẽ các cạnh.

Phần 3 : Thủ tục win (dòng 33-->43)

Thủ tục này được gọi khi người chơi đã đạt đủ số điểm (78 điểm, dòng 211. Tuy nhiên dòng 40 lại ghi là 70 point???). Thủ tục này sẽ xóa màn hình, di chuyển con trỏ đến một vị trí nào đó, rồi hiện ra thông báo. Sau đó này chờ người dùng gõ vào một phím (ví dụ như người chơi muốn chơi tiếp thì gõ phím nào, người chơi muốn thoát thì gõ phím nào,…)


Phần 4 : Thủ tục e (dòng 49-->123)

Dòng 55 đến 61 sẽ vẽ ra 5 chữ “@” để tạo thành 1 dấu “+”. Có lẽ đây là tượng trưng cho con  rắn ??!
Dòng 63 đến 84 sẽ vẽ ra các dấu “:” lấp đầy hình chữ nhật giới hạn vùng di chuyển của con rắn.

Dòng 86 đến 107 sẽ xóa đi các dấu “:” vừa mới vẽ trước đó. Có lẽ ý tưởng ở đây là muốn tạo nên các hiệu ứng nhấp nháy.

Dòng 109-->121 sẽ hiện lên câu GAME OVER và thông báo số điểm. Sau đó nó chờ người chơi nhấn một phiếm (chơi tiếp hay thoát, giống như ở thủ tục win).

Như vậy, ta có thể hiểu rằng thụ tục e hoạt động như sau: khi người chơi bị thua, nó sẽ tạo hiệu ứng nhấp nháy trên nền cmd bằng các dấu “:”. Sau đó nó thông báo điểm và chờ xem người chơi có chơi tiếp hay nghỉ.


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 10:50:34 AM Ngày 02 Tháng Chín, 2010
Phần 5: Chương trình chính (phần còn lại)

Ở dòng 132, tác giả gọi hàm randomize để khởi động việc sử dụng các số ngẫu nhiên. Số trái táo đã ăn ban đầu được gán là 3 (không hiểu ý đồ gì???), con rắn sẽ được mặc định ban đầu là di chuyển sang phải (hx=1); tọa độ của trái táo sau đó sẽ được tạo một cách ngẫu nhiên, nhưng luôn ở trong phạm vi của cái hộp được định nghĩa bởi lbox, rbox,…

Dòng 137-138 có lẽ là gán tọa độ ban đầu cho đốt đầu tiên của con rắn.

Dòng 143-->151 : Bắt buộc người chơi phải chọn một level từ 1 đến 10.

Dòng 153 tính lại tốc độ di chuyển của con rắn ứng với level được chọn.

Dòng 160-->235 là thuật toán chính của game. Ở đây có 2 vòng lập repeat lồng vào nhau. Vòng lớn bên ngoài sẽ thoát khi người chơi nhấn phím có mã là #27 (là phím ESC, dòng 235).

Vòng lập nhỏ hơn, dòng 162-->233 sẽ xử lý xem con rắn có ăn được táo không, có chạm vào tường không, di chuyển con rắn, tạo các quả táo mới, tính điểm,…. Cụ thể như sau:

Dòng 164-->170 : Giới thiệu tác giả chương trình, thông báo số điểm hiện tại, số quả táo hiện tại.

Dòng 172 tạo ra một quả táo mới.

Dòng 174 vẽ khung giới hạn.

Dòng 176-->191 xác định xem con rắn có chạm tường không, nếu có thì dừng trò chơi và gọi thủ tục “e”.


Dòng 195-->208 xác định xem con rắn có ăn được trái táo không. Nếu có thì thông báo lại số điểm và tạo trái táo mới và vẽ thêm 1 đốt cho con rắn.

Dòng 211-->220: nếu số điểm đủ 78 thì người chơi thắng, gọi thủ tục win. (d=78, nhưng ban đầu d gán bằng 3. Như vậy  con rắn chỉ ăn có 75 trái táo thôi).

Dòng 223-->233: Chờ đọc phím được nhấn từ người chơi (di chuyển lên xuống, qua lại con rắn). Riêng dòng 232 không hiểu tác dụng là gì???


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 09:37:42 AM Ngày 03 Tháng Chín, 2010
cảm on a tranquynh đã giúp đỡ  ^-^ ^-^


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 10:14:35 PM Ngày 03 Tháng Chín, 2010
a tranquynh giúp em một bài nữa nhé  ^-^ ^-^
 hướng cho em cách viết code.
 Hãy tìm các số là số nguyên tố, nhưng lại được tạo thành từ hai số nguyên tố liên tiêp. bạn hãy tìm hết tất cả các số như vậy có 9 chữ số.
 P/s ghi chú Số có 9 chữ số là <= 999 999 999 lận đó.
nguồn đề: http://chuyenquangtrung.com.vn


Tiêu đề: Trả lời: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 09:00:18 AM Ngày 04 Tháng Chín, 2010
Hãy tìm các số là số nguyên tố, nhưng lại được tạo thành từ hai số nguyên tố liên tiêp.
nguồn đề: http://chuyenquangtrung.com.vn

Yêu cầu này không rõ ràng. Không kể đến các số nguyên tố đầu tiên (2,3,5,7), giả sử a, b là 2 số nguyên tố nào đó. Dễ thấy rằng (a+b), (a-b), a*b, a/b không thể là một số nguyên tố. Bởi vì:

*    (a+b) là số chẵn --> chia hết cho 2
*    (a-b) là số chẵn --> chia hết cho 2
*    a/b là số thập phân
*    a*b chia hết cho a và b

Cho nên yêu cầu "một số nguyên tố được tạo thành từ 2 số nguyên tố liên tiếp" thì thật không thể hiểu được từ "tạo thành" ở đây là gì?

 


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 10:47:44 AM Ngày 05 Tháng Chín, 2010
em cũng ko hiểu lắm cái đề anh ah`. đây em lấy nguốn cái đề đó trong này http://chuyenquangtrung.com.vn/forums/showthread.php?tid=2632  [-O<


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Trần Triệu Phú trong 11:08:56 AM Ngày 06 Tháng Chín, 2010
Hãy tìm các số là số nguyên tố, nhưng lại được tạo thành từ hai số nguyên tố liên tiêp.
nguồn đề: http://chuyenquangtrung.com.vn

Yêu cầu này không rõ ràng. Không kể đến các số nguyên tố đầu tiên (2,3,5,7), giả sử a, b là 2 số nguyên tố nào đó. Dễ thấy rằng (a+b), (a-b), a*b, a/b không thể là một số nguyên tố. Bởi vì:

*    (a+b) là số chẵn --> chia hết cho 2
*    (a-b) là số chẵn --> chia hết cho 2
*    a/b là số thập phân
*    a*b chia hết cho a và b

Cho nên yêu cầu "một số nguyên tố được tạo thành từ 2 số nguyên tố liên tiếp" thì thật không thể hiểu được từ "tạo thành" ở đây là gì?

 
Từ "tạo thành" theo mình nghĩ là  "ghép"
tức là tìm số nguyên tố dc ghép từ 2 số nguyên tố liên tiếp đó mà


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 11:44:10 AM Ngày 06 Tháng Chín, 2010
Thật ra mình có xem sơ qua cái link mà tinhoc kèm theo ở trên. Trong đó họ có nói rõ ràng yêu cầu (giống như TT.Phú giải thích) hơn là những gì tinhoc đã nói. tinhoc nếu như muốn các thành viên khác giúp bạn viết code thì đúng ra ngay từ đầu phải nên giải thích rõ ràng vấn đề. Không nên để mọi người vào một forum nào đó khác để đọc và giải thích lại vấn đề cho bạn hiểu.



Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 12:10:51 PM Ngày 06 Tháng Chín, 2010
Sẽ không tìm được số nào thỏa mãn các yêu cầu của bài toán này.

Theo yêu cầu bài toán, số nguyên tố cần tìm (ta gọi là C) được tạo thành 2 số nguyên tố liên tiếp (gọi là A, B và giả sử A<B)  sao cho C có 9 chữ số.

Để C có 9 chữ số, A không thể có quá 4 chỗ số. Bởi vì nếu A có hơn 5 chữ số thì B cũng sẽ có hơn năm chữ số, khi ghép lại, ta sẽ có một số có hơn 10 chữ số.

Vậy A<=9999.

Theo đó, B phải có nhiều hơn 4 chữ số. Nói cách khác B>=10000.

Điều kiện 2 số nguyên tố liên tiếp ở trên áp đặt rằng: nếu tồn tại số C thì C phải được tạo thành từ một số nguyên tố lớn nhất, nhưng nhỏ hơn 9999 (A) và một số nguyên tố nhỏ nhất nhưng lớn hơn 10000 (B). Nói cách khác, A là số nguyên tố gần giá trị 9999 nhất, và B là số nguyên tố gần giá trị 10000 nhất.

Ở đây mình không đi vào phần lập trình. Tham khảo các tài liệu có thể tìm được A=9973, B=10007. Số C sẽ là 997310007. Rất đáng tiếc, C không phải là số nguyên tố.

PS: mình không cho rằng đây là một câu đố mẹo và không có đáp án. Rất có thể, người ra câu đố đã không diễn đạt đúng ý cần hỏi.




Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Trần Triệu Phú trong 02:15:59 PM Ngày 06 Tháng Chín, 2010
Đúng vậy, bằng cách phân tích như trangquynh đã làm, thì bài toán thấy có vấn đề liền


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 03:00:57 PM Ngày 06 Tháng Chín, 2010
đúng rồi, lỗi đó bị hỉu nhầm là "Divide by zero" do tràn bộ nhớ với các máy có tốc độ trên 200Mh. H cũng k còn sài pascal nữa, hix, e đang ngâm và code cái Fortran

Fortran giờ rất hiếm người dùng, trừ những người làm khoa học  :.)).


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 07:13:48 PM Ngày 08 Tháng Chín, 2010
cảm ơn mọi ng giup đỡ  =d> =d>
mấy ngày vua roi máy của em bi hư  %-) %-) ma laj hư mấy cái em chưa bao giờ đụng tới  [-O< [-O<
 nen phai keu ong anh vào làm @@ gio thj ổn rồi nên onl típ  8-x 8-x


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Trần Triệu Phú trong 08:26:05 AM Ngày 09 Tháng Chín, 2010
hèn j thấy vắng bóng


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 03:39:57 PM Ngày 11 Tháng Chín, 2010
Chỗ đó theo mình nên sửa thành x:=x[i-1], y:=y[i-1]. Ý của 2 dòng này là gán tọa độ của nốt thứ (i-1) cho nốt thứ (i), tạo ra hiệu ứng thân con rắn di chuyển.

Nếu vẫn còn bị thông báo lỗi thì bạn nhớ copy thêm các thông báo đó cho mình biết. Như vậy sẽ giúp định hướng được lỗi là do yếu tố nào gây ra.


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 07:53:08 PM Ngày 14 Tháng Chín, 2010
em biết lí do sai rồi anh àh  [-O< [-O<.
 vì lúc em copy em cho vào chèn trích dẫn nên đáng lẽ ra
Code:
x[i]:=x[i-1];
thì nó laj thành
Trích dẫn
x:=[i-1];
thành ra sai. em vừa sửa lại là chèn code  ^-^


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: Colosseo trong 05:21:52 PM Ngày 16 Tháng Chín, 2010
Ở trên mình nhớ rõ là đã gõ x [i ] :=x[i-1], không hiểu sao lại mất [i ] ở 1 bên đi  :o. :P . Giờ mới hiểu là do không thể viết i trong dấu ngoặc vuông được, nó sẽ bị biến mất.  :o


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 08:12:48 AM Ngày 29 Tháng Chín, 2010
hôm nay rãnh rỗi post một số bài tập pascal thường gặp trong trường học các bài kiểm tra. mọi người làm thử xem nhá. (có hướng dẫn [-O<)
 Bài 1: nhập N tính tổng các số tự nhiên lẻ nhỏ hơn N. (ví dụ N=5, tổng sẽ là 1+3=4);
 hướng dẫn: -khai báo N
                 -gán giá trị đầu cho S
                 - sừ dụng vòng lặp, lặp từ mọi i có giá trị từ 1--> N
                 - kiểm tra i có phai la số lẻ hay ko
                 - tính S cộng dồn.
Bài 2: nhập vào một số N:
             - nếu N chẵn tính tổng 2+4+.....+N
             - nếu N lẻ tính tổng 1+3+....+N
 hướng dẫn: - khai báo N
                 - gán giá trị đầu cho S
                 - lặp mọi i từ 1-->N
                 - xét: nếu i chẵn cộng dồn S
                          nếu i lẽ cộng dồn S
 ở bài này có khi người ta cho N ko dc vượt quá giới hạn nào đó ví dụ như: nhập một số N với N < 100.
 mọi người suy nghĩ làm bài có giới hạn N< 10 thử nha  ^-^
P/s: 2 bài trước nhá. chúc mọi người học tốt.  :-h :x


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 08:05:19 PM Ngày 21 Tháng Mười, 2010
Cái đầu tiên là sư đệ phải post lên chương trình viết và chạy Pascal.
còn cái mình muốn hỏi tí là hồi xưa chạy pascal hay bị lỗi 200 do máy nhanh quá. Khắc phục thế nào nhỉ, hồi xưa làm rồi ma wen mất, h hỏi lại để lỡ may ai gặp thì biết đừơng
lâu rồi mới vào thý câu hỏi của anh TTP lâu ko có ngừ trả lời  :-\ nên sư mụi ( hok phải sư đệ à nha  ::)) xin phép trả lời sư huynh đây:
 lỗi báo khi ta dùng thư viện Crt ( bữa ở trường cũng bị dính hjc) . Khi khởi động lệnh crt thì một đoạn lệnh chạy để đo tốc độ máy phòng khi sử dụng lệnh delay và lỗi xảy ra vì máy quá nhanh làm tràn biến. Nói tóm lại lỗi này là co unit Crt nẳm trong turbo.tpl vậy nên để khắc phục chỉ cần down một patch turbo.tpl mới toanh về paste chồng lên tệp cũ là okay  ::) ::)
 mọi người down patch turbo.tpl  tại đây (http://www.mediafire.com/?45q298f0u58lk37)
 chúc mọi người vui vẻ!!!!!


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 08:18:46 PM Ngày 21 Tháng Mười, 2010
vô tâm wa' lâu nay ko đưa pascal cho pa` con tải về sử dụng  8-x 8-x thật tình sr
bây giờ chuộc lỗi đây
 PASCAL đây (http://www.mediafire.com/?5gapiuptinypgk8)  :D


Tiêu đề: Trả lời: topic tin học nơi học đường!! đặc biệt là pascal ^^
Gửi bởi: tinhoc trong 10:15:20 AM Ngày 03 Tháng Mười Hai, 2010
SẮP THI CỬ RỒI CÓ MỘT SỐ BÀI TẬP MỌI NGƯỜI CÙNG GIẢI NHÉ
  1. Tìm tất cả các số có 3 chữ số a,b,c sao cho tổng các lập phương của các chữ số bằng chính số đó.
               VD: abc = 100a + 10b + c = a3 + b3 + c3
                            ở đây: 100a nghĩa là a là đơn vị trăm
                                       10b nghĩa là b đơn vị nghìn
                                           c là đơn vị
  2. Nhập mảng hai chiều A gồm m hàng và n cột.
           a/ Tìm giá trị lớn nhất và nhỏ nhất trên mỗi hàng, mỗi cột cùng với vị trí ( dòng, cột) của giá trị này.
           b/ Tìm phần tử có giá trị lớn nhất và nhỏ nhất của mảng A cùng với vị trí( dòng cột) của hai phần tử này.
           c/ Trong mảng A có bao nhiêu phần tử bằng với phần tử lớn nhất của mảng.
  3. Viết chương trình nhập vào từ bàn phím một ma trận vuông và in ra màn hình tổng các phần tử trên đường chéo chính.
 Các bạn làm đi nhá. Có j` thắc mắc cứ nói mình và mọi ng trong 4rum sẽ giúp đỡ tận tình. m:)
P/s.  m:xCHÚC CÁC BẠN THI TỐT m:x
  Thanks!!!!