1. Trang chủ
  2. » Giáo án - Bài giảng

đếm ngược pascal(bt vòng lặp)

1 1.5K 5

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Vòng FORNguyễn Hiếu CườngVề sự hoạt động của cấu trúc lặp for Pascal là ngôn ngữ lập trình được dạy và sử dụng rộng rãi trong các trường học hiện nay. For là một trong ba cấu trúc lặp của ngôn ngữ Pascal , rất quen thuộc đối với những ai đã và đang lập trình bằng ngôn ngữ này. Tuy nó thật đơn giản nhưng qua kinh nghiệm giảng dạy tôi thấy không phải bạn học sinh nào cũng hiểu được rõ ràng cách thực hiện của cấu trúc đó. Ta hãy xem một số ví dụ: Ví dụ 1: n:=10; for i:= 1 to n do begin n:= 5; write (i:4); end; Đoạn chương trình này sẽ in ra màn hình kết quả là:1 2 3 4 5 6 7 8 9 10 Lý do là: Trình biên dịch chỉ xác định giá trị cuối (n) đúng một lần khi bắt đầu vào vòng lặp, vì thế trong quá trình lặp, việc thay đổi giá trị cuối không có ý nghĩa gì. Ví dụ 2a: n:=10; For i:=1 to 10 do begin write (i:4); i:=i+1; end; Đoạn chương trình này sẽ in ra màn hình kết quả là: 1 3 5 7 9 Ví dụ 2b: n:=10; for i:=1 to 10 do begin write(i:4); i:=i+2; end; Đoạn chương trình này sẽ lặp vô hạn.Hai đoạn chương trình 2a và 2b gần như giống nhau hoàn toàn, tại sao kết quả lại khác nhau nhiều như vậy?Rất nhiều bạn học sinh lý giải sự hoạt động của cấu trúc for thường cho rằng: for sẽ thực hiện chừng nào biến điều khiển (i) ≤ giá trị cuối (n). Nhưng thực chất lại là: for sẽ hoạt động đến khi biến điều khiển = giá trị cuối + 1 (trong trường hợp kiểu của biến điều khiển là nguyên, các kiểu logic hay ký tự cũng lý luận tương tự). Sự khác nhau này xem ra không có gì là lớn, nhưng trong nhiều trường hợp lại làm chúng ta không thể lý giải được tai sao chương trình cho kết quả như vậy. Trong hai ví dụ trên, chúng ta có thể dễ dàng thấy được kết quả của đoạn chương trình 2a nhưng còn đoạn 2b thì sao lại lặp vô hạn? Lý do chính là giá trị của i không bao giờ bằng 11 được.Bạn hãy thử làm và tìm hiểu thêm nhiều điều "kỳ quái" khác nữa. Và có lẽ những điều đó cũng làm cho việc học lập trình của chúng ta trở nên thú vị hơn. Chúc các bạn thành công và mong nhận được các ý kiến trao đổi. uses crt; var i,n:longint; begin clrscr; write('n= ');readln(n); for i:=n downto begin clrscr; writeln('dem nguoc ',i); delay(1000); end; write('het gio'); readln end 2/9/20101Lệnh điều kiện và vòng lặp Lệnh điều kiện và vòng lặp …if…elseif…else…end…if…elseif…else…endSwitch…endSwitch…endFor…endFor…endWhile…endWhile…end11ntnhut@hcmus.edu.vnntnhut@hcmus.edu.vnhắc lại file.mhắc lại file.m File .mFile .m ghi các dòng lệnh Matlab.ghi các dòng lệnh Matlab. Soạn thảo các file.m bằng MATLAB Editor hoặc bất Soạn thảo các file.m bằng MATLAB Editor hoặc bất kỳ trình soạn thảo văn bản nào.kỳ trình soạn thảo văn bản nào. Gõ tên file để thực thi nội dung các dòng lệnh trong Gõ tên file để thực thi nội dung các dòng lệnh trong file.file. Có 2 loại file.m:Có 2 loại file.m: ScriptsScripts, chỉ thực thi các dòng lệnh, không có tham số , chỉ thực thi các dòng lệnh, không có tham số truyền vào hay trả về một giá trị nào cả.truyền vào hay trả về một giá trị nào cả. FunctionsFunctions, có thể nhận tham số truyền vào và trả về giá trị , có thể nhận tham số truyền vào và trả về giá trị xuất.xuất.22 2/9/20102Câu lệnh IF … ELSE …Câu lệnh IF … ELSE … Cú pháp tổng quát:Cú pháp tổng quát:IF IF bieu_thuc_logicbieu_thuc_logicDoan_lenhDoan_lenhELSEIF ELSEIF bt_logicbt_logicDoan_lenhDoan_lenhELSEELSEDoan_lenhDoan_lenhENDEND Ví dụ:Ví dụ:if if delta<0delta<0disp(‘Pt vo nghiem’)disp(‘Pt vo nghiem’)elseif elseif delta == 0delta == 0disp(‘Pt co nghiem kep’)disp(‘Pt co nghiem kep’)--b/2/ab/2/aelseelsedisp(‘Pt co 2 nghiem pbiet’)disp(‘Pt co 2 nghiem pbiet’)((--bb--sqrt(delta))/2/asqrt(delta))/2/a((--b+sqrt(delta))/2/ab+sqrt(delta))/2/aendend33Câu lệnh IFCâu lệnh IF Câu lệnh Câu lệnh IFIF định giá trị định giá trị bieu_thuc_logicbieu_thuc_logic và thực và thực thi thi Doan_lenhDoan_lenh nếu nếu bieu_thuc_logicbieu_thuc_logic là là truetrue. .  Các từ khoá Các từ khoá ELSEIFELSEIF và và ELSEELSE là tuỳ chọn.là tuỳ chọn. Ứng với một Ứng với một IFIF là một là một ENDEND kết thúc kết thúc Doan_lenhDoan_lenh cuối cùng.cuối cùng.44 2/9/20103Câu lệnh IF lồng nhauCâu lệnh IF lồng nhauIF bt1IF bt1……IF bt2IF bt2……ENDENDENDENDVí dụVí dụ: a = input(‘a =’): a = input(‘a =’)disp(‘bạn vừa nhập 1 số’)disp(‘bạn vừa nhập 1 số’)if a > 0if a > 0disp(‘dương’)disp(‘dương’)if mod(a,2) ~= 0if mod(a,2) ~= 0disp(‘lẻ’)disp(‘lẻ’)elseelsedisp(‘chẵn’)disp(‘chẵn’)endendelseelsedisp(‘không dương’)disp(‘không dương’)endend55Biểu thức logic với ma trậnBiểu thức logic với ma trận Nếu Nếu A, B là con sốA, B là con số, , A==B A==B trả về true hay trả về true hay false theo đúng nghĩa của nófalse theo đúng nghĩa của nó Nếu Nếu A, B là các ma trậnA, B là các ma trận, , A==B A==B trả về ma trận trả về ma trận 0/1 các vị trí bằng nhau hoặc khác nhau tương 0/1 các vị trí bằng nhau hoặc khác nhau tương ứng giữa các phần tử của hai ma trận.ứng giữa các phần tử của hai ma trận.66 2/9/20104Biểu thức logic với ma trậnBiểu thức logic với ma trận Để tránh nhầm lẫn cho tất cả trường hợp, ta Để tránh nhầm lẫn cho tất cả trường hợp, ta dùng hàm dùng hàm isequal(A,B)isequal(A,B)  Các hàm logic khác làm việc trên ma trận:Các hàm logic khác làm việc trên ma trận: isempty(A)isempty(A), ma trận A có rỗng?, ma trận A có rỗng? all(A)all(A), tất cả phần tử đều khác 0?, tất cả phần tử đều khác 0? any(A)any(A), có phần tử khác 0?, có phần tử khác 0?77SwitchSwitchSWITCHSWITCH bt_xétbt_xétCASECASE tr_hợp1tr_hợp1,,doan_lenh1doan_lenh1CASECASE {tr_hợpA, tr_hợpB, tr_hợpC, .} {tr_hợpA, tr_hợpB, tr_hợpC, .} doan_lenh2doan_lenh2 OTHERWISEOTHERWISE,,doan_lenh3doan_lenh3ENDEND•• bt_xétbt_xét là hằng số hoặc chuỗi ký tựlà hằng số hoặc chuỗi chơng 3Các lệnh nhảy, vòng lặp và lệnh gọiTrong một chuỗi lệnh cần thực hiện thờng có nhu cần cần chuyển điều khiển chơng trình đến một vị trí khác. Có nhiều lệnh để thực hiện điều này trong 8051, ở chơng này ta sẽ tìm hiểu các lệnh chuyển điều khiển có trong hợp ngữ của 8051 nh các lệnh sử dụng cho vòng lặp, các lệnh nhảy có và không có điều khiển, lệnh gọi và cuối cùng là mô tả về một chơng trình con giữ chậm thời gian.3.1 Vòng lặp và các lệnh nhảy.3.1.1 Tạo vòng lặp trong 8051.Qúa trình lặp lại một chuỗi các lệnh với một số lần nhất định đợc gọi là vòng lặp. Vòng lặp là một trong những hoạt động đợc sử dụng rộng rãi nhất mà bất kỳ bộ vi sử lý nào đều thực hiện. Trong 8051 thì hoạt động vòng lặp đợc thực hiện bởi lệnh DJNZ thanh ghi, nhãn. Trong lệnh này thanh ghi đợc giảm xuống, nếu nó không bằng không thì nó nhảy đến địa chỉ đích đợc tham chiếu bởi nhãn. Trớc khi bắt đầu vòng lặp thì thanh ghi đợc nạp với bộ đếm cho số lần lặp lại. Lu ý rằng, trong lệnh này việc giảm thanh ghi và quyết định để nhảy đợc kết hợp vào trong một lệnh đơn.Ví dụ 3.1:Viết một chơng trình để: a) xoá ACC và sau đó b) cộng 3 vào ACC 10 lần.Lời giải:MOV A, #0 ; Xoá ACC, A = 0MOV R2, #10 ; Nạp bộ đếm R2 = 10 AGAIN: ADD A, #3 ; Cộng 03 vào ACCDJNZ R2, AGAIN ; Lặp lại cho đến khi R2 = 0 (10 lần)MOV R5, A ; Cắt A vào thanh ghi R5Trong chơng trình trên đây thanh ghi R2 đợc sử dụng nh là bộ đếm. Bộ đếm lúc đầu đợc đặt bằng 10. Mỗi lần lặp lại lệnh DJNZ giảm R2 không bằng 0 thì nó nhảy đến địa chỉ đích gắn với nhãn AGAIN. Hoạt động lặp lại này tiếp tục cho đến khi R2 trở về không. Sau khi R2 = 0 nó thoát khỏi vòng lặp và thực hiện đứng ngay dới nó trong trờng hợp này là lệnh MOV R5, A.Lu ý rằng trong lệnh DJNZ thì các thanh ghi có thể là bất kỳ thanh ghi nào trong các thanh ghi R0 - R7. Bộ đếm cũng có thể là một ngăn nhớ trong RAM nh ta sẽ thấy ở chơng 5.Ví dụ 3.2:Số lần cực đại mà vòng lặp ở ví dụ 3.1 có thể lặp lại là bao nhiêu?Lời giải:Vì thanh ghi R2 chứa số đếm và nó là thanh ghi 8 bit nên nó có thể chứa đợc giá trị cực đại là FFH hay 255. Do vậy số lần lặp lại cực đại mà vòng lặp ở ví dụ 3.1 có thể thực hiện là 256.3.2.1 Vòng lặp bền trong một vòng lặp.Nh trình bày ở ví dụ 3.2 số đếm cực đại là 256. Vậy điều gì xảy ra nếu ta muốn lặp một hành động nhiều hơn 256 lần? Để làm điều đó thì ta sử dụng một vòng lặp bên trong một vòng lặp đợc gọi là vòng lặp lồng (Nested Loop). Trong một vòng lặp lồng ta sử dụng 2 thanh ghi để giữ số đếm. Xét ví dụ 3.3 dới đây.Ví dụ 3.3:1 Hãy viết một chơng trình a) nạp thanh ghi ACC với giá trị 55H và b) bù ACC 700 lần.Lời giải:Vì 700 lớn hơn 256 (là số cực đại mà một thanh ghi vó thể chứa đợc) nên ta phải dùng hai thanh ghi để chứa số đếm. Đoạn mã dới đây trình bày cách sử dụng hai thanh ghi R2 và R3 để chứa số đếm.MOV A, #55H ; Nạp A = 55HMOV R3, #10 ; Nạp R3 = 10 số đếm vòng lặp ngoài NEXT: MOV R2, #70 ; Nạp R2 = 70 số đếm vòng lặp trong AGAIN: ` CPL A ; Bù thanh ghi ADJNZ R2, AGAIN ; Lặp lại 70 lần (vòng lặp trong)DJNZ R3, NEXTTrong chơng trình này thanh ghi R2 đợc dùng để chứa số đếm vòng lặp trong. Trong lệnh DJNZ R2, AGAIN thì mỗi khi R2 = 0 nó đi thẳng xuống và lệnh JNZ R3, NEXT đợc thực hiện. Lệnh này ép CPU nạp R2 với số đếm 70 và vòng lặp trong khi bắt đầu lại quá trình này tiếp tục cho đến khi R3 trở về không và vòng lặp ngoài kết thúc.3.1.3 Các Tự thiết kế đồng hồ đếm ngược trong PowerPoint thaygiaolang 30-09-2007, 14:25 Dùng đồng hồ đếm ngược mà thầy Thiên Hoàng đã giới thiệu (http://www.dayhocintel.org/diendan/showthread.php?t=818) thì rất tiện lợi. Nhưng nếu ta tự thiết được một đồng hồ ngay trong PP theo đúng ý của mình thì lý thú biết bao. Tôi xin gợi ý cách thực hiện : • Đầu tiên ta tạo ra một Textbox (để làm đồng hồ) theo cách làm bình thường. Định dạng Textbox đó theo ý mình muốn (Font, cỡ chữ, màu sắc, .) • Chọn Textbox, vào menu Draw -> Order -> Bring to Front để đảm bảo rằng Textbox này luôn nằm trên cùng. • Mở cửa sổ Visual Basic Editor (ALT+F11), chọn Insert -> Module rồi gõ vào (hoặc copy) các dòng sau đây : Const Slide_Number = 1 Const Thoi_Gian = 10 Sub Dem_Nguoc() Dim Ngung As Boolean, Dem As Integer, Gio_Cu As Single, Gio_Moi As Single, N As Integer Ngung = False Dem = Thoi_Gian Gio_Cu = Int(Timer) N = ActivePresentation.Slides(Slide_Number).Shapes.Cou nt ActivePresentation.Slides(Slide_Number).Shapes(N). TextFrame.TextRange.Text = Format(Dem, "00") Do While Not Ngung DoEvents Gio_Moi = Int(Timer) If Gio_Moi > Gio_Cu Then Dem = Dem - 1 Gio_Cu = Gio_Moi ActivePresentation.Slides(Slide_Number).Shapes(N). TextFrame.TextRange.Text = Format(Dem, "00") If Dem = 0 Then Ngung = True End If Loop End Sub Trong đó Slide_Number là thứ tự của Slide ta chứa đồng hồ, Thoi_Gian là thời gian đếm (có thể thay đổi 2 thông số này cho phù hợp) • Trở lại cửa sổ PP, nhấp chuột phải vào thanh công cụ rồi chọn Control Toolbox để hiện thanh công cụ này. • Chọn nút Command Button rồi vẽ nút lệnh vào vị trí tùy ý trên Slide • Nhấp chuột phải vào nút lệnh vừa tạo, chọn View Code • Trong cửa sổ hiện ra, gõ vào Dem_Nguoc (là tên của Macro trên) Như vậy là xong. Bây giờ trở lại PP chạy trình chiếu, nhấp chuột vào nút lệnh sẽ thấy đồng hồ hoạt động. Trên đây tôi chỉ trình bày những gợi ý cơ bản, các bạn có thể nghiên cứu, tìm tòi thêm để làm hoàn thiện chiếc đồng hồ của mình. Các bạn có thể tham khảo vì dụ trên file đính kèm. Tạo hiệu ứng lật sách cho bài trình diễn PowerPoint ITGAT.COM - Với thao tác dễ dàng, không đòi hỏi nhiều kỹ năng chuyên môn về thiết kế đồ hoạ là bạn đã có ngay một bài trình diễn (PP) thật độc đáo với Flip PowerPoint 1.2. Tham khảo và tải về bản FP dùng thử miễn phí với dung lượng 3.57MB tại địa chỉ http://www.a-pdf.com/ (hay http://www.mediafire.com/?g1h9njajksa3agz ), chương trình hổ trợ tốt các phiên bản PowerPoint 2000, 2003, 2007, 2010. * Gợi ý khai thác: 1. Trên giao diện tương tác chính nhấp nút Import PPT để đưa vào tập tin PP cần xử lý (chương trình cũng hỗ trợ Import các định dạng ảnh thông dụng). 2. Sử dụng thanh công cụ định dạng để xử lý lại các Slide trình diễn: phóng to, thu nhỏ, xoay, lật, cắt tuỳ biến, chuyển đen trắng . (thật chất lúc này FP hiểu các Slides của bài trình diễn của PP là các tập tin ảnh nên không hỗ trợ việc chỉnh sửa nội dung; việc này được tiến hành trực tiếp trên PowerPoint trước khi Import dữ liệu vào chương trình). 3.Nhấp chọn Page Layout để tiến hành chọn lựa cách trình bày trên giao diện hiển thị của Thoi gianThoi gian 012345678109

Ngày đăng: 27/04/2016, 18:16

Xem thêm: đếm ngược pascal(bt vòng lặp)

TỪ KHÓA LIÊN QUAN

w