Trừ d, tất cả các câu lệnh đều không hợp lệ: a Giá trị đầu phải nhỏ hơn gi¸ trÞ cuèi; b C¸c gi¸ trÞ ®Çu vµ gi¸ trÞ cuèi ph¶i lµ sè nguyªn; c ThiÕu dÊu hai chÊm khi g¸n gi¸ trÞ ®Çu; d Thõ[r]
(1)Bµi M¸y tÝnh và chương trình máy tính C©u hái vµ bµi tËp Khi soạn thảo văn trên máy tính và yêu cầu chương trình tìm kiếm cụm từ văn và thay cụm từ khác, thực chất ta đã yêu cầu máy tính thực lệnh gì? Có thể thay đổi thứ tự lệnh đó mà không thay đổi kết không? Trong ví dụ rô-bốt, thay đổi thứ tự hai lệnh chương trình, rô-bốt có thực công việc nhặt rác không? Hãy xác định vị trí cña r«-bèt sau thùc hiÖn xong lÖnh “H·y quÐt nhµ” vµ ®a c¸c lÖnh để rô-bốt trở lại vị trí ban đầu mình Hãy cho biết lí cần phải viết chương trình để điều khiển máy tính Tại người ta phải tạo các ngôn ngữ lập trình có thể điều khiÓn m¸y tÝnh b»ng ng«n ng÷ m¸y? Chương trình dịch làm gì? Hãy cho biết các bước cần thực để tạo các chương trình máy tính Hướng dẫn trả lời Khi soạn thảo văn trên máy tính và yêu cầu chương trình tìm kiếm cụm từ văn và thay cụm từ khác, thực chất ta đã yªu cÇu m¸y tÝnh thùc hiÖn rÊt nhiÒu lÖnh Cã thÓ m« t¶ c¸c lÖnh víi c¸c mức độ chi tiết khác Dưới đây mô tả lệnh theo trËt tù thùc hiÖn viÖc thay thÕ mét côm tõ t×m ®îc: Sao chÐp côm tõ cÇn t×m vµo bé nhí (ta gäi ®©y lµ côm tõ 1) Sao chÐp côm tõ sÏ thay thÕ côm tõ t×m ®îc vµo bé nhí (côm tõ 2) T×m côm tõ v¨n b¶n Xãa côm tõ t×m ®îc v¨n b¶n Sao chÐp côm tõ vµo vÞ trÝ trá v¨n b¶n Dưới đây mô tả cách chi tiết hơn: Sao chÐp d·y kÝ tù cÇn t×m vµo bé nhí (d·y 1) Sao chÐp d·y kÝ tù sÏ thay thÕ d·y kÝ tù t×m ®îc vµo bé nhí (d·y 2) Đặt trỏ trước kí tự đầu tiên văn Sao chép dãy kí tự (tính từ vị trí trỏ sang phải) có độ dài dãy kí tù cÇn t×m vµo bé nhí (d·y 3) So sánh dãy và dãy Nếu dãy không trùng với dãy 1, chuyển đến lÖnh Xãa d·y v¨n b¶n Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (2) Sao chÐp d·y vµo vÞ trÝ trá so¹n th¶o v¨n b¶n Di chuyÓn trá sang ph¶i mét kÝ tù vµ quay l¹i lÖnh Qua các lệnh liệt kê theo thứ tự nói trên, dễ thấy có thể thay đổi thứ tự thực vài lệnh (1 và 2), nói chung việc thay đổi thứ tự c¸c lÖnh sÏ kh«ng cho kÕt qu¶ mong muèn Nếu thay đổi thứ tự hai lệnh chương trình điều khiển rô-bốt, rôbốt không thực công việc nhặt rác vì rô-bốt không đúng hướng và có thể không tới vị trí có rác, thực việc nhặt rác vị trí không có rác, Ví dụ, thay đổi thứ tự lệnh “Tiến bước” và lệnh “Quay trái, tiến bước”, tác dụng hai lệnh này là “Quay trái và tiến bước” Khi đó rô-bốt nhặt rác vị trí không có rác Nói chung, các lệnh điều khiển rô-bốt hay chương trình cần đưa theo thứ tự xác định cho ta đạt kết mong muốn Trong số ít trường hợp, ta có thể đưa các lệnh khác nhau, đạt kết Ch¼ng h¹n, vÝ dô vÒ r«-bèt, thay cho hai c©u lÖnh ®Çu tiªn, ta cã thÓ điều khiển rô-bốt đến đúng vị trí có rác các lệnh sau: “Quay trái, tiến bước” và “Quay phải, tiến bước” “Quay phải, tiến bước”, “Quay trái, tiến bước” và “Quay trái, tiến bước” Trong số ít các trường hợp khác, việc thay đổi thứ tự vài câu lệnh cho kết đúng nh yªu cÇu Tuy nhiên, là nguyên tắc chung, việc thay đổi thứ tự các câu lệnh không cho kết đúng Có thể liên hệ với thứ tự các bước thuật to¸n Bµi VÞ trÝ míi cña r«-bèt sau thùc hiÖn xong lÖnh “H·y quÐt nhµ” lµ vÞ trÝ có thùng rác (ở góc đối diện) Ta có nhiều cách khác để đưa hai lệnh để rô-bốt trở lại vị trí ban đầu mình, các cách đó là hai lệnh “Quay trái, tiến bước” và “Quay trái, tiến bước” Lí do: Điều khiển máy tính tự động thực các công việc đa dạng và phức tạp mà lệnh đơn giản không đủ để dẫn Tuy ng«n ng÷ m¸y còng lµ mét lo¹i ng«n ng÷ lËp tr×nh, nhng ë ®©y chóng ta hiÓu ng«n ng÷ lËp tr×nh lµ ng«n ng÷ lËp tr×nh bËc cao Trong ng«n ng÷ máy thị biểu diễn các số nhị phân và Ngôn ngữ máy khó đọc và khó sử dụng, ngôn ngữ máy là ngôn ngữ nhÊt mµ bé vi xö lÝ cã thÓ nhËn biÕt vµ thùc hiÖn mét c¸ch trùc tiÕp Ngoµi yếu điểm chính các chương trình viết ngôn ngữ máy là phụ thuéc vµo phÇn cøng m¸y tÝnh Các ngôn ngữ lập trình bậc cao phát triển để khắc phục các yếu điểm tr©n cña ng«n ng÷ m¸y Ng«n ng÷ lËp tr×nh sö dông c¸c côm tõ tù nhiªn nªn dÔ nhí, dÔ häc vµ kh«ng phô thuéc vµo phÇn cøng m¸y tÝnh Chương trình dịch là chương trình có chức chuyển đổi chương trình viết ngôn ngữ lập trình thành chương trình thực trên máy tính Như vậy, chương trình dịch chuyển đổi tệp gồm các dòng lệnh ®îc so¹n th¶o thµnh tÖp cã thÓ ch¹y trªn m¸y tÝnh GV: Ph¹m TuÊn Anh Lop8.net (3) Hai bước để tạo các chương trình máy tính là (1) viết chương trình theo ngôn ngữ lập trình và (2) dịch chương trình thành ngôn ngữ máy để máy tính hiểu và kết là tệp tin có thể thực trên máy tính Lưu ý rằng, đây là hai bước lập trình và là phÇn cña c«ng viÖc gi¶i quyÕt bµi to¸n b»ng m¸y tÝnh Bµi Lµm quen víi Ng«n ng÷ lËp tr×nh C©u hái vµ bµi tËp H·y cho biÕt c¸c thµnh phÇn c¬ b¶n cña mét ng«n ng÷ lËp tr×nh Ta có thể viết các chương trình các câu lệnh có các chữ cái tiếng ViÖt, ch¼ng h¹n “rÏ tr¸i”, ®îc kh«ng? T¹i sao? Tên chương trình là gì? Cho biết khác biệt từ khóa và tên, cách đặt tên chương trình Trong số các tên sau đây người viết chương trình đặt chương tr×nh Pascal, tªn nµo lµ hîp lÖ vµ tªn nµo kh«ng hîp lÖ: a, Tamgiac, 8a, Tam giac, beginprogram, end, b1, abc? Hãy cho biết các phần chính cấu trúc chương trình và vai trò chúng Trong các phần đó, phần nào là quan trọng nhất? Hãy cho biết chương trình Pascal sau đây có hợp lệ không, sao? a) Chương trình begin end b) Chương trình begin program CT_thu; writeln('Chao cac ban'); end Hướng dẫn trả lời C¸c thµnh phÇn c¬ b¶n ng«n ng÷ lËp tr×nh gåm b¶ng ch÷ c¸i vµ c¸c quy t¾c để viết các câu lệnh (cú pháp) có ý nghĩa xác định, cách bố trí các câu lệnh, cho có thể tạo thành chương trình hoàn chỉnh và chạy trên máy tính Lưu ý các quy tắc nhắc đến đây bao gồm các thuật ng÷ chuyªn m«n lµ có ph¸p vµ ng÷ nghÜa Xem SGK, Môc 2, Bµi 2 Không Các cụm từ sử dụng chương trình (từ khóa, tên) phải viÕt b»ng c¸c ch÷ c¸i b¶ng ch÷ c¸i cña ng«n ng÷ lËp tr×nh C¸c ng«n ngữ lập trình phổ biến có bảng chữ cái là bảng chữ cái tiếng Anh và các kí hiệu khác, đó không có các chữ cái có dấu tiếng ViÖt Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (4) Lưu ý câu hỏi bài là “viết chương trình các câu lệnh ” Điều này không có nghĩa là chương trình không thể có các chữ cái có dÊu cña tiÕng ViÖt (hay cña mét ng«n ng÷ kh¸c) nh lµ d÷ liÖu d¹ng v¨n cần xử lí Các chữ có dấu đó ngôn ngữ lập trình xử lý mã kí tự tương ứng các bảng mã ASCII mở rộng Ví dụ chương trình Pascal sau ®©y hoµn toµn hîp lÖ: begin program CT_thu; writeln(' Chµo c¸c b¹n'); end Tên chương trình là dãy các chữ cái hợp lệ lấy từ bảng chữ cái cña ng«n ng÷ lËp tr×nh Tõ kho¸ cña mét ng«n ng÷ lËp tr×nh (hay cßn ®îc gọi là từ dành riêng) là tên dùng cho các mục đích sử dụng ngôn ngữ lập trình quy định, không dùng cho bất kì mục đích nào kh¸c Người lập trình có thể đặt tên cách tùy ý phải tuân thủ các quy tắc ngôn ngữ lập trình chương trình dịch, đó (1) Hai đại lượng khác phải có tên khác nhau; (2) Tên không trùng víi c¸c tõ kho¸ C¸c tªn hîp lÖ: a, Tamgiac, beginprogram, b1, abc, tªn kh«ng hîp lÖ: 8a (b¾t ®Çu b»ng sè), Tam giac (cã dÊu c¸ch), end (trïng víi tõ khãa) Xem SGK, Môc 4, Bµi a) Chương trình là chương trình Pascal đầy đủ và hoàn toàn hợp lệ, mặc dù chương trình này chẳng thực điều gì Phần thiết phải có chương trình là phần thân chương trình đảm bảo hai từ begin vµ end (cã dÊu chÊm) b) Chương trình là chương trình Pascal không hợp lệ vì câu lệnh khai báo tên chương trình program CT_thu; nằm phần thân chương trình.\ Bài Chương trình máy tính Vµ D÷ LIÖU C©u hái vµ bµi tËp H·y nªu Ýt nhÊt mét lÝ cho thÊy sù cÇn thiÕt ph¶i ph©n chia d÷ liÖu thµnh c¸c kiÓu! H·y nªu Ýt nhÊt hai kiÓu d÷ liÖu vµ mét phÐp to¸n cã thÓ thùc hiÖn ®îc trên kiểu liệu, phép toán đó không có nghĩa trên kiểu liệu Cho dãy chữ số 2010 Dãy chữ số đó có thể thuộc kiểu liệu nào? GV: Ph¹m TuÊn Anh Lop8.net (5) Cho hai xâu kí tự “Lớp” và “8A” Hãy thử định nghĩa “phép toán” có thể thực trên hai xâu kí tự đó H·y ph©n biÖt ý nghÜa cña c¸c c©u lÖnh Pascal sau ®©y: Writeln('5+20=','20+5'); vµ Writeln('5+20=',20+5); Hai lệnh sau có tương đương với không? Tại sao? Writeln('100'); vµ Writeln(100); Viết các biểu thức toán đây với các kí hiệu Pascal: a a c b d b ax bx c c a (b 2) x d (a b)(1 c)3 ChuyÓn c¸c biÓu thøc ®îc viÕt Pascal sau ®©y thµnh c¸c biÓu thøc to¸n: a (a+b)*(a+b)-x/y b b/(a*a+c) c a*a/(2*b+c)*(2*b+c) d 1+1/2+1/2*3+1/3*4+1/4*5 Hãy xác định kết các phép so sánh sau đây: a 15 ≥ b (20 15)2 ≠ 25 c 112 = 121 d x > 10 3x ViÕt c¸c phÐp so s¸nh Bµi tËp víi c¸c kÝ hiÖu Pascal 10.Nêu số ví dụ tương tác người và máy tính chương trình hoạt động Hướng dẫn trả lời V× d÷ liÖu vµ c¸c thao t¸c xö lÝ d÷ liÖu rÊt ®a d¹ng, lÝ dÔ nhËn thÊy nhÊt là việc phân chia liệu thành các kiểu giúp xác định các phép xử lí (phép to¸n) cã thÓ thùc hiÖn trªn mçi kiÓu d÷ liÖu Ngoµi viÖc ph©n chia kiÓu d÷ liÖu cßn cho biÕt c¸c gi¸ trÞ cã thÓ (ph¹m vi) cña d÷ liÖu, gióp cho viÖc quản lý tài nguyên máy tính (đặc biệt là nhớ trong) cách hiệu qu¶ Cã thÓ nªu c¸c vÝ dô sau ®©y: Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (6) a Dữ liệu kiểu số và liệu kiểu xâu kí tự Phép cộng định nghĩa trªn d÷ liÖu sè, nhng kh«ng cã nghÜa trªn d÷ liÖu kiÓu x©u b D÷ liÖu kiÓu sè nguyªn vµ d÷ liÖu kiÓu sè thùc PhÐp chia lÊy phÇn nguyªn vµ phÐp chia lÊy phÇn d cã nghÜa trªn d÷ liÖu kiÓu sè nguyªn, nhng kh«ng cã nghÜa trªn d÷ liÖu kiÓu sè thùc D·y ch÷ sè 2010 cã thÓ thuéc kiÓu d÷ liÖu sè nguyªn, sè thùc hoÆc kiÓu xâu kí tự Tuy nhiên, để chương trình dịch Turbo Pascal hiểu 2010 là liệu kiểu xâu, chúng ta phải viết dãy số này cặp dấu nháy đơn (’) var a: real; b: integer; begin writeln('123'); writeln(123); a:=2010; b:=2010; end Cho hai xâu kí tự “Lớp” và “8A” Có thể định nghĩa nhiều “phép toán” trên tËp hîp c¸c d÷ liÖu kiÓu x©u Ch¼ng h¹n phÐp ghÐp: Líp + 8A = Líp8A LÖnh Writeln('5+20=','20+5'); in mµn h×nh hai x©u ký tù '5+20' vµ '20+5' liÒn nhau: 5+20 = 20+5, cßn lÖnh Writeln('5+20=',20+5); in mµn h×nh x©u ký tù '5+20' vµ tæng cña 20+5 nh sau: 5+20=25 Hai lệnh Writeln('100'); và Writeln(100); không tương ®¬ng víi v× mét lÖnh in mµn h×nh x©u ký tù biÓu diÔn sè 100 cßn lÖnh in mµn h×nh sè 100 C¸c biÓu thøc Pascal: a a/b+c/d b a*x*x+b*x+c c 1/x-a/5*(b+2) d (a*a+b)*(1+c)*(1+c)*(1+c) Các biểu thức toán tương ứng: a (a b)2 b b a c c a2 (2b c) x y 2 d 1 2.3 3.4 4.5 KÕt qu¶ cña c¸c phÐp so s¸nh: GV: Ph¹m TuÊn Anh Lop8.net (7) a §óng b Sai c §óng d Đúng x > 2.5; ngược lại, phép so sánh có kết sai a) 15-8>=3; b) (20-15)*(20-15)<>25; c) 11*11=121; d) x>103*x 10.Một số ví dụ tương tác người và máy tính chương trình hoạt động: thông báo kết tính toán hay trạng thái hoạt động chương trình, nhập liệu, tạm ngừng chương trình Xem SGK, Mục 4, Bài Bµi Sö DôNG biÕn TRONG CH¦¥NG TR×NH C©u hái vµ bµi tËp BiÕn lµ g×? H·y cho biÕt phÐp g¸n gi¸ trÞ cho mét biÕn lµ g×, cho vÝ dô vµ gi¶i thÝch Khai báo biến gồm gì? Hãy thử mô tả hoạt động máy tính thực lệnh khai báo biến chương trình Gi¶ sö A ®îc khai b¸o lµ biÕn víi kiÓu d÷ liÖu sè thùc, X lµ biÕn víi kiÓu d÷ liÖu x©u C¸c phÐp g¸n sau ®©y cã hîp lÖ kh«ng? a) G¸n sè nguyªn cho biÕn A b) G¸n sè 3242 cho biÕn X c) G¸n x©u ‘3242’ cho biÕn X d) G¸n x©u ‘Ha Noi’ cho biÕn A Nªu sù kh¸c gi÷a biÕn vµ h»ng vµ cho mét vµi vÝ dô vÒ biÕn vµ h»ng Giả sử ta đã khai báo Pi với giá trị 3.14 Có thể gán lại giá trị 3.1415 cho Pi phần thân chương trình không? Tại sao? Trong Pascal, khai báo nào sau đây là đúng? a) var tb: real; b) var 4hs: integer; c) const x: real; d) var R = 30; Hãy liệt kê các lỗi có thể chương trình đây và sửa lại cho đúng: var a,b:= integer; const c:= 3; begin a:= 200 Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (8) b:= a/c; write(b); readln end Hãy cho biết kiểu liệu các biến cần khai báo dùng để viết chương trình để giải các bài toán đây: a) Tính diện tích S hình tam giác với độ dài cạnh a và chiều cao tương ứng h (a và h là các số tự nhiên nhập vào từ bàn phÝm) b) TÝnh kÕt qu¶ c cña phÐp chia lÊy phÇn nguyªn vµ kÕt qu¶ d cña phÐp chia lÊy phÇn d cña hai sè nguyªn a vµ b Gi¶ sö cÇn lËp danh s¸ch c¸c b¹n líp vµ ghi l¹i ®iÓm thi m«n Tin häc cña mçi b¹n (®iÓm chØ lµ sè nguyªn) vµ tÝnh ®iÓm trung b×nh m«n Tin häc toàn lớp Nếu cần viết chương trình, em cần sử dụng biến nào cho mçi b¹n? 10.Viết chương trình tính diện tích và chu vi đường tròn có bán kính r, đó r là số nguyên dương nhập từ bàn phím Hướng dẫn trả lời Xét mặt lập trình, biến đại lượng dùng để lưu trữ liệu và liệu biến lưu trữ có thể thay đổi thực chương trình Xét mÆt lu tr÷ d÷ liÖu, cã thÓ xem biÕn lµ “tªn” cña mét vïng nhí ®îc dµnh sẵn để lưu liệu suốt quá trình thực chương trình Gán giá trị cho biến thực chất là lưu liệu tương ứng vào vùng nhớ đặt tên và dành riêng cho biến Việc thực các tính toán và xử lí với biến có nghĩa là thực tính toán và xử lí với liệu gán đó Gi¶ sö X ®îc khai b¸o lµ biÕn víi kiÓu d÷ liÖu sè nguyªn vµ X ®îc g¸n d÷ liệu là số Sau khai báo, chương trình dành riêng vùng nhớ nào đó cho biến X, và gán cho X thì vùng nhớ đó lưu liệu Lệnh ghi X mµn h×nh cã nghÜa lµ ghi sè mµn h×nh Lưu ý Khi vùng nhớ khai báo để lưu liệu làm giá trị biến, vùng nhớ đó không phép sử dụng vào mục đích khác Do vậy, mét nh÷ng kÜ n¨ng lËp tr×nh lµ sö dông cµng Ýt biÕn cµng tèt, nhÊt lµ trường hợp việc sử dụng nhớ bị hạn chế Nhưng với công nghệ nay, nhớ máy tính đã có dung lượng lớn nên vấn đề hạn chế sử dụng biến chương trình đã không còn là vấn đề cấp thiết ViÖc khai b¸o biÕn gåm: Khai b¸o tªn biÕn vµ khai b¸o kiÓu d÷ liÖu cña biÕn Khi khai báo biến, ngoài việc tên biến đưa vào danh sách các đối tượng quản lí, máy tính (thông qua chương trình dịch) xác định kiểu biến và dành vùng nhớ có độ lớn thích hợp với phạm vi kiểu biến để lưu giá trị biến Ví dụ, để lưu các giá trị là số nguyên, khai GV: Ph¹m TuÊn Anh Lop8.net (9) báo biến kiểu byte, máy tính dành vùng nhớ có độ lớn byte, khai báo biến kiểu nguyên, máy tính dành vùng nhớ có độ lớn byte, hoÆc vïng nhí byte ®îc dµnh cho biÕn ®îc khai b¸o víi kiÓu sè thùc, Nhê thÕ viÖc sö dông bé nhí sÏ hiÖu qu¶ h¬n Ngoµi m¸y tÝnh sÏ biết áp dụng các phép toán thích hợp giá trị biến §¸p ¸n: a) Hîp lÖ; b) Kh«ng hîp lÖ; c) Hîp lÖ; d) Kh«ng hîp lÖ Mặc dù cùng phải khai báo trước có thể sử dụng chương tr×nh, sù kh¸c gi÷a biÕn vµ h»ng lµ ë chç gi¸ trÞ cña h»ng kh«ng thay đổi suốt quá trình thực chương trình, còn giá trị biến thì có thể thay đổi thời điểm thực chương trình Không thể gán lại giá trị 3.1415 cho Pi phần thân chương trình vì giá trị không thay đổi suốt quá trình thực chương trình a) Hîp lÖ; b) Kh«ng hîp lÖ v× tªn biÕn kh«ng hîp lÖ; c) Kh«ng hîp lÖ v× h»ng ph¶i ®îc cho gi¸ trÞ khai b¸o; d) c) Kh«ng hîp lÖ v× biÕn kh«ng gán giá trị khai báo, cách gán giá trị không đúng cú pháp Các lỗi chương trình: (1) Thừa dấu dòng (chỉ cần dấu hai chÊm); (2) Thõa dÊu hai chÊm ë dßng (víi h»ng chØ cÇn dÊu b»ng); (3) ThiÕu dÊu chÊm phÈy ë dßng 4; (4) Khai b¸o kiÓu d÷ liÖu cña biÕn b kh«ng phï hîp: Khi chia hai sè nguyªn, kÕt qu¶ lu«n lu«n lµ sè thùc, cho dï cã chia hết hay không Do đó cần phải khai báo biến b là biến có kiểu liệu sè thùc C¸ch khai b¸o hîp lý: a) C¸c biÕn a vµ h lµ kiÓu sè nguyªn; biÕn S: kiÓu sè thùc b) C¶ bèn biÕn a, b, c vµ d lµ c¸c kiÓu sè nguyªn CÇn sö dông c¸c biÕn sau ®©y víi mçi häc sinh líp: Ten lµ biÕn kiÓu x©u, Diem lµ biÕn kiÓu sè nguyªn vµ Trungbinh lµ biÕn kiÓu sè thùc 10.Chương trình Pascal có thể sau đây: uses crt; var r: integer; C,S: real; begin clrscr; write('Nhap ban kinh r = '); readln(r); C:=2*Pi*r; S:=Pi*r*r; writeln(' Chu vi duong tron bang ',C:8:2); writeln('Dien tich hinh tron bang ',S:8:2); end Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (10) Bµi Tõ BµI TO¸N §ÕN CH¦¥NG TR×NH C©u hái vµ bµi tËp H·y chØ INPUT vµ OUTPUT cña c¸c bµi to¸n sau: a) Xác định số học sinh lớp cùng mang họ Trần b) Tính tổng các phần tử lớn dãy n số cho trước c) Tìm số các số có giá trị nhỏ n số đã cho Gi¶ sö x vµ y lµ c¸c biÕn sè H·y cho biÕt kÕt qu¶ cña viÖc thùc hiÖn thuËt to¸n sau: Bước x x + y Bước y x - y Bước x x - y Cho trước ba số dương a, b và c Hãy mô tả thuật toán giải ghi kết ba số đó có thể là ba cạnh tam giác hay không Cho hai biến x và y Hãy mô tả thuật toán đổi giá trị các biến nói trên để x và y có giá trị tăng dần Cho ba biến x, y và z Hãy mô tả thuật toán đổi giá trị các biến nói trên để x, y và z có giá trị tăng dần Hãy xem lại Ví dụ để tham khảo H·y m« t¶ thuËt to¸n tÝnh tæng c¸c phÇn tö cña d·y sè a1, a2, , an cho trước H·y m« t¶ thuËt to¸n nhËp n sè a1, a2, , an tõ bµn phÝm vµ ghi mµn hình số nhỏ các số đó Số n nhập từ bàn phím H·y m« t¶ thuËt to¸n gi¶i c¸c bµi to¸n sau: a) Đếm số các số dương dãy số A = {a1, a2, , an} cho trước b) Hãy mô tả thuật toán tính tổng các số dương dãy số A = {a1, a2, , an} cho trước Hướng dẫn trả lời §¸p ¸n: INPUT: Danh s¸ch hä cña c¸c häc sinh líp OUTPUT: Sè häc sinh cã hä TrÇn b) INPUT: D·y n sè OUTPUT: Tæng cña c¸c phÇn tö lín h¬n c) INPUT: D·y n sè OUTPUT: Sè c¸c sè cã gi¸ trÞ nhá nhÊt Sau ba bước, x có giá trị ban đầu y và y có giá trị ban đầu x, tức giá trị hai biến x và y hoán đổi cho a) M« t¶ thuËt to¸n: INPUT: Ba số dương a >0, b >0 và c >0 GV: Ph¹m TuÊn Anh Lop8.net (11) OUTPUT: Th«ng b¸o “a, b vµ c cã thÓ lµ ba c¹nh cña mét tam gi¸c” hoÆc th«ng b¸o “a, b vµ c kh«ng thÓ lµ ba c¹nh cña mét tam gi¸c” Bước 1: Tính a + b Nếu a + b ≤ c, chuyển tới bước Bước 2: Tính b + c Nếu b + c ≤ c, chuyển tới bước Bước 3: Tính a + c Nếu a + c ≤ b, chuyển tới bước Bước 4: Thông báo “a, b và c có thể là ba cạnh tam giác” và kết thóc thuËt to¸n Bước 5: Thông báo “a, b và c không thể là ba cạnh tam giác” và kÕt thóc thuËt to¸n Cã thÓ gi¶i bµi to¸n nµy b»ng c¸ch sö dông mét biÕn phô hoÆc kh«ng dïng biÕn phô ThuËt to¸n Sö dông biÕn phô z INPUT: Hai biÕn x vµ y OUTPUT: Hai biÕn x vµ y cã gi¸ trÞ t¨ng dÇn Bước 1: Nếu x ≤ y, chuyển tới bước Bước 2: z x Bước 3: x y Bước 4: y z Bước 5: Kết thúc thuật toán ThuËt to¸n Kh«ng sö dông biÕn phô (Xem Bµi tËp ë trªn) INPUT: Hai biÕn x vµ y OUTPUT: Hai biÕn x vµ y cã gi¸ trÞ t¨ng dÇn Bước 1: Nếu x ≤ y, chuyển tới bước Bước 2: x x + y Bước 3: y x y Bước 4: x x y Bước 5: Kết thúc thuật toán Trước hết, cần, ta hoán đổi giá trị hai biến x và y để chúng có giá trị tăng dần Sau đó so sánh z với x và z với y, sau đó thực các bước hoán đổi giá trị cần thiết (xem lại Ví dụ Bài 5, SGK) INPUT: Ba biÕn x, y vµ z OUTPUT: Ba biÕn x, y vµ z cã gi¸ trÞ t¨ng dÇn Bước 1: Nếu x ≤ y, chuyển tới bước Bước 2: z x, x y, y z (Sau bước này x và y có giá trị tăng dần.) Bước 3: Nếu y ≤ z , chuyển tới bước Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (12) Bước 4: Nếu z < x, t x , x z và z t, (với t là biến trung gian) và chuyển đến bước Bước 5: t y , y z và z t Bước 6: Kết thúc thuật toán Thuật toán tính tổng các phần tử dãy số A = {a1, a2, , an} cho trước INPUT: n vµ d·y n sè a1, a2, , an OUTPUT: Tæng S = a1 + a2 + + an Bước 1: S 0; i Bước 2: i i + Bước 3: Nếu i ≤ n, S S + và quay lại bước Bước 4: Thông báo S và kết thúc thuật toán Thuật toán tìm số nhỏ dãy n số a1, a2, , an cho trước Thuật toán này tương tự thuật toán tìm giá trị lớn dãy n số đã cho (xem Ví dụ 6, Bài 5) Điều khác biệt là thêm các bước nhập số n và dãy n sè a1, a2, , an INPUT: n vµ d·y n sè a1, a2, , an OUTPUT: Min = Min{ a1, a2, , an} Bước 1: Nhập n và dãy n số a1, a2, , an Bước 2: Gán Min a1; i Bước 3: i i + Bước 4: Nếu i > n, chuyển đến bước Bước 5: Nếu < Min, gán Min quay lại bước Trong trường hợp ngược lại, quay lại bước Bước 6: Ghi giá trị Min màn hình và kết thúc thuật toán a) Đếm số các số dương dãy số A = {a1, a2, , an} cho trước INPUT: n vµ d·y n sè a1, a2, , an OUTPUT: Soduong = Sè c¸c sè > Bước 1: Gán Soduong Bước 2: i i + Bước 3: Nếu i > n, chuyển đến bước Bước 4: Nếu > 0, gán Soduong Soduong +1 quay lại bước Trong trường hợp ngược lại, quay lại bước Bước 5: Thông báo giá trị Soduong và kết thúc thuật toán b) Tính tổng các số dương dãy số A = {a1, a2, , an} cho trước INPUT: n vµ d·y n sè a1, a2, , an GV: Ph¹m TuÊn Anh Lop8.net (13) OUTPUT: S = Tæng c¸c sè > d·y a1, a2, , an Bước 1: S 0; i Bước 2: i i + Bước 3: Nếu > 0, S S + ai; ngược lại, giữ nguyên S Bước 4: Nếu i ≤ n, và quay lại bước Bước 5: Thông báo S và kết thúc thuật toán Bµi C¢U LÖNH §IÒU KIÖN C©u hái vµ bµi tËp Em hãy nêu vài ví dụ các hoạt động ngày phụ thuộc vào ®iÒu kiÖn Hãy cho biết các điều kiện phép so sánh sau đây cho kết đúng hay sai: a) 123 lµ sè chia hÕt cho b) NÕu ba c¹nh a, b vµ c cña mét tam gi¸c tháa m·n c2 > a2 + b2 th× tam giác đó có góc tù (> 90o) c) 152 > 200 d) n! ≤ n2 víi mäi sè tù nhiªn n e) x2 < Hai người bạn cùng chơi trò đoán số Một người nghĩ đầu số tự nhiên nhỏ 10 Người đoán xem bạn đã nghĩ số gì Nếu đoán đúng, người đoán cộng thêm điểm, sai không céng ®iÓm Lu©n phiªn nghÜ vµ ®o¸n Sau 10 lÇn, ®îc nhiÒu điểm hơn, người đó thắng Hãy phát biểu các điều kiện trò chơi là gì? Hoạt động nào thực hiện, điều kiện đó thoả mãn? Hoạt động nào thực hiện, điều kiện đó không thoả mãn? Một trò chơi máy tính hứng thú các em nhỏ là hứng trứng Một trứng rơi từ vị trí ngẫu nhiên trên cao Người chơi dùng các phím mũi tên để điều khiển biểu tượng khay di chuyển theo chiều ngang để hứng trứng Nếu hứng trượt, trứng bị rơi, vỡ và người chơi tiếp tục di chuyển khay để hứng trứng kh¸c Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (14) Điều kiện để điều khiển khay trò chơi là gì? Hoạt động nào thực hiện, điều kiện đó thoả mãn? Hoạt động nào thực hiện, điều kiện đó không thoả mãn? Các câu lệnh Pascal sau đây viết đúng hay sai? a) if x:=7 then a=b; b) if x>5; then a:=b; c) if x>5 then; a:=b; d) if x>5 then a:=b; m:=n; e) if x>5 then a:=b; else m:=n; f) if n>0 then begin a:=0; m:=-1 end else c:=a; Sau mçi c©u lÖnh sau ®©y a) if (45 mod 3)=0 then X:=X+1; b) if X>10 then X:=X+1; giá trị biến X là bao nhiêu, trước đó giá trị X 5? Giả sử cần viết chương trình nhập số tự nhiên vào máy tính và ghi màn hình kết số đã nhập là số chẵn hay lẻ, chẳng hạn “5 là số lẻ”, “8 là số chẵn” Hãy mô tả các bước thuật toán để giải bài toán trên và viết chương trình Pascal để thực thuật toán đó Viết chương trình nhập sử dụng hai biến X và Y để lưu hai số nhập từ bàn phím, sau đó đổi giá trị các biến đó để X và Y có giá trị tăng dÇn (xem Bµi tËp 3, Bµi 5) Hãy mô tả thuật toán và viết chương trình nhập ba số thực a, b và c từ bàn phím vào máy tính, sau đó xếp và ghi các số đó màn hình theo thø tù t¨ng dÇn (xem Bµi tËp vµ thuËt to¸n VÝ dô 5, Bµi 5) 10 Hãy mô tả thuật toán và viết chương trình nhập ba số thực a, b và c từ bàn phím vào máy tính, sau đó kiểm tra ba số đó có thể là các cạnh tam giác đều, tam giác cân tam giác vuông hay không và ghi kết qu¶ mµn h×nh (xem Bµi 3, Bµi thùc hµnh 4) Hướng dẫn trả lời Có thể nêu nhiều vài ví dụ các hoạt động ngày phụ thuộc vào điều kiện Dưới đây là số ví dụ: Nếu đạt điểm tổng kết năm cao 8.5, em đạt danh hiệu “Học sinh giái” b) Nếu không cắm điện, máy tính để bàn em không hoạt động c) Nếu bị bệnh, em (cần phải) đến phòng khám để bác sĩ khám bệnh d) Nếu không tưới đủ nước đúng thời kì phát triển, lúa không cho thu ho¹ch cao §¸p ¸n: a) §óng; b) §óng; c) Sai; d) Sai; e) Sai, nÕu x ≥ a) GV: Ph¹m TuÊn Anh Lop8.net (15) Giả sử Điểm_1 là số điểm người thứ và Điểm_2 là số điểm người thứ hai, ngoài người thứ đầu số tự nhiên n < 10 Điều kiện trò chơi là người thứ hai đoán đúng số n Khi đó Điểm_2 cộng thêm 1; ngược lại, Điểm_2 giữ nguyên Tương tự, người thứ hai nghĩ số tự nhiên m, và điều kiện thứ hai là người thứ đoán đúng số m đó Khi đó Điểm_1 cộng thêm 1; ngược lại, Điểm_1 giữ nguyªn Điều kiện trò chơi là sau 10 lần, Điểm_1 > Điểm_2 thì người thứ tuyên bố thắng cuộc; ngược lại, người thứ hai thắng Trường hợp Điểm_1 = Điểm_2 thì không có người thắng và người thua Điều kiện để điều khiển khay trò chơi người chơi nhấn phím mũi tên Nếu người chơi nhấn phím , biểu tượng khay di chuyển sang phải đơn vị khoảng cách; phím nhấn, biểu tượng khay di chuyển sang trái Nếu phím khác ngoài hai phÝm mòi tªn trªn ®îc nhÊn, chiÕc khay vÉn gi÷ nguyªn vÞ trÝ §¸p ¸n: a) Sai (thõa dÊu hai chÊm); b) Sai (thõa dÊu chÊm ph¶y thø nhÊt); c) Sai (thõa dÊu chÊm ph¶y sau tõ then); d) §óng, nÕu phÐp g¸n m:=n không phụ thuộc điều kiện x>5; ngược lại, sai và cần đưa hai câu lệnh a:=b; m:=n; vµo gi÷a cÆp tõ khãa begin vµ end; e) Sai (thõa dÊu chÊm ph¶y thø nhÊt); f) §óng a) V× 45 chia hÕt cho 3, ®iÒu kiÖn ®îc tháa m·n nªn gi¸ trÞ cña X ®îc t¨ng lªn 1, tøc b»ng 6; b) §iÒu kiÖn kh«ng ®îc tháa m·n nªn c©u lÖnh kh«ng ®îc thùc hiÖn, tøc X gi÷ nguyªn gi¸ trÞ ThuËt to¸n: Bước Nhập số n Bước Nếu n chia hết cho 2, ghi màn hình “n là số chẵn”; ngược lại, ghi mµn h×nh “n lµ sè lΔ Bước Kết thúc thuật toán Chương trình Pascal: uses crt; var X,Y,Z: real; begin clrscr; write('Nhap so X = '); readln(Y); write('Nhap so Y = '); readln(Y); if X>Y then begin Z:=X; X:=Y; Y:=Z; writeln(X,’ ’,Y); readln end ThuËt to¸n: Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (16) Bước Nhập ba số A, B và C Bước Nếu A > B, X A, A B, B X Bước Nếu C > A, X A, A C, C X Bước Nếu C < B, X B, B C, C X Bước Ghi giá trị các biến theo thứ tự A, B và C và kết thúc thuật toán Chương trình Pascal: uses crt; var A, B, C, X: integer; begin clrscr; write('Nhap so A: '); readln(A); write('Nhap so B: '); readln(B); write('Nhap so C: '); readln(C); if A>B then begin X:=A; A:=B; B:=X end; if C<A then begin X:=A; A:=C; C:=X end; if C<B then begin X:=B; B:=C; C:=X end; writeln(A,' ',B,' ',C); readln; end 10 ThuËt to¸n: Bước Nhập ba số A, B và C Bước Nếu A + B < C B + C < A C + A < B, thông báo A, B và C không phải là ba cạnh tam giác và chuyển tới bước Bước Nếu A2 + B2 = C B2 + C2 = A2 C2 + A2 = B, thông báo A, B và C là ba cạnh tam giác vuông và chuyển tới bước Bước Nếu A = B và B = C, thông báo A, B và C là ba cạnh tam giác đều; ngược lại, A = B B = C A = C, thông báo A, B và C lµ ba c¹nh cña mét tam gi¸c c©n Bước Kết thúc thuật toán Chương trình Pascal: program Sap_xep; uses crt; var A, B, C, X: integer; begin clrscr; write('Nhap so A: '); readln(A); write('Nhap so B: '); readln(B); write('Nhap so C: '); readln(C); GV: Ph¹m TuÊn Anh Lop8.net (17) if (A+B<C) or (B+C<A) or (A+C<B) then writeln('Day khong la ba canh cua mot tam giac') else if (A*A=B*B+C*C) or (B*B=A*A+C*C) or (C*C=A*A+B*B) then writeln('Day la ba canh cua tam giac vuong') else if (A=B) and(B=C) and (A=C) then writeln('Day la ba canh cua tam giac deu') else if (A=B) or (B=C) or (C=A) then writeln('Day la ba canh cua tam giac can') else writeln('Day chi la ba canh cua tam giac thuong'); readln; end Bµi C¢U LÖNH lÆp C©u hái vµ bµi tËp Cho vài ví dụ hoạt động thực lặp lại sống hàng ngµy! Hãy mô tả các bước thuật toán để vẽ hình a) và b) sau đây: H×nh a) H×nh b) Thao tác lặp cần thực để có các hình trên và điều kiện để kết thúc thao tác đó là gì H·y cho biÕt t¸c dông cña c©u lÖnh lÆp! Chúng ta nói thực các hoạt động lặp, chương trình kiểm tra mét ®iÒu kiÖn Víi lÖnh lÆp for <biến đếm> := <giá trị đầu> to <giá trị cuối> <câu lÖnh>; cña Pascal, ®iÒu kiÖn cÇn ph¶i kiÓm tra lµ g×? Chương trình Pascal sau đây thực hoạt động nào? Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (18) var i: integer; begin for i:=1 to 1000 do; end Hãy mô tả thuật toán để tính tổng sau đây (n là số tự nhiên nhập vào tõ bµn phÝm): A= 1 1 1.3 2.4 3.5 n( n 1) C¸c c©u lÖnh Pascal cã hîp lÖ kh«ng, v× sao? a) for i:=100 to writeln(’A’); b) for i:=1.5 to 10.5 writeln(’A’); c) for i=1 to 10 writeln(’A’); d) for i:=1 to 10 do; writeln(’A’); e) var x: real; for x:=1 to 10 writeln(’A’); Mét sè ng«n ng÷ lËp tr×nh, vÝ dô Pascal, kh«ng cã s½n hµm tÝnh lòy thõa Hãy mô tả thuật toán và sử dụng câu lệnh lặp với số lần xác định trước để viết chương trình Pascal tính lũy thừa bậc n số nguyên X Viết chương trình Pascal nhập n số nguyên từ bàn phím và ghi màn hình số lớn các số đó Số n nhập vào từ bàn phím (Xem m« t¶ thuËt to¸n VÝ dô 6, Bµi 5.) 10.Viết chương trình Pascal nhập n số nguyên từ bàn phím và ghi màn hình số các số dương các số đó Số n nhập vào từ bàn phím (Xem Bµi tËp 5a, Bµi 5.) Hướng dẫn trả lời Có thể nêu nhiều vài ví dụ các hoạt động lặp Dưới đây là số ví dô: Hàng ngày em đặt đồng hồ báo thức lúc để dậy sớm tập thể dôc b) Hàng ngày (hoặc hàng tuần) bác lái xe khách lái xe để chuyên chở hành khách xuất phát từ thời gian và địa điểm định và theo tuyến đường đã xác định trước c) Mỗi lần khởi động, máy tính em thực cùng các hoạt động tự kiểm tra các thành phần máy tính, sau đó khởi động hệ điều hành theo trình tự đã quy định trước a) Có thể thấy, để vẽ hình a), thao tác chính cần thực là vẽ nửa đường tròn theo hướng định Ta gọi thao tác vẽ nửa đường tròn theo hướng A là vẽ nửa đường tròn có bán kính đơn vị điểm xác định, đường kính nối điểm đầu và điểm cuối nửa đường tròn vuông góc với hướng A và nửa đường tròn “cong hướng A” (hình ) Ta xét A là các hướng lên trên, xuống dưới, sang trái, sang phải a) GV: Ph¹m TuÊn Anh Lop8.net (19) Với các hướng, ta định nghĩa phép toán sau: lên trên + = sang trái, sang trái +1 = xuống dưới, xuống +1 = sang phải, sang phải +1 = lên trên Khi đó có thể mô tả các bước thuật toán để vẽ hình a) sau: H×nh H×nh Có thể mô tả các bước thuật toán để vẽ hình a) sau: Bước Xác định điểm bắt đầu vẽ là X Bước Đặt i = và đặt hướng = lên trên Bước Vẽ nửa đường tròn theo hướng đã đặt Bước i = i + Bước Nếu i > 4, chuyển bước 6; ngược lại, đặt hướng = hướng + và quay lại bước Bước Kết thúc thuật toán Lưu ý Khi trình bày thuật toán lần đầu tiên cho học sinh không nên định nghĩa các phép toán với các hướng mà nên liệt kê đủ bốn hướng thuËt to¸n b) Thuật toán tương tự trên Thao tác chính cần lặp lại là vẽ hình vuông Tại bước, giữ nguyên tâm hình vuông và thay đổi hướng vẽ gãc 30o Câu lệnh lặp có tác dụng làm đơn giản và giảm nhẹ công sức người viết chương trình! Chúng ta nói thực các hoạt động lặp, chương trình kiểm tra mét ®iÒu kiÖn Víi lÖnh lÆp for <biến đếm> := <giá trị đầu> to <giá trị cuối> <câu lÖnh>; Pascal, điều kiện cần phải kiểm tra chính là giá trị biến đếm lớn h¬n gi¸ trÞ cuèi NÕu ®iÒu kiÖn kh«ng ®îc tháa m·n, c©u lÖnh ®îc tiÕp tục thực hiện; ngược lại, chuyển sang câu lệnh chương trình Tuy có vòng lặp 1000 lần, chương trình Pascal nói trên không thực bất kì hoạt động nào Tuy nhiên đây là câu lệnh hợp lệ ThuËt to¸n tÝnh tæng A= 1 1 1.3 2.4 3.5 n( n 1) Bước Gán A 0, i Bước A i (i 2) Dương Đức Bằng - Tin - THCS Chũ - Lục Ngạn - Bắc Giang Lop8.net (20) Bước i i + Bước Nếu i ≤ n, quay lại bước Bước Ghi kết A và kết thúc thuật toán Trừ d), tất các câu lệnh không hợp lệ: a) Giá trị đầu phải nhỏ gi¸ trÞ cuèi; b) C¸c gi¸ trÞ ®Çu vµ gi¸ trÞ cuèi ph¶i lµ sè nguyªn; c) ThiÕu dÊu hai chÊm g¸n gi¸ trÞ ®Çu; d) Thõa dÊu chÊm ph¶y thø nhÊt, nÕu nh ta muốn lặp lại câu lệnh writeln(’A’)mười lần, ngược lại câu lệnh là hợp lệ; e) Biến x đã khai báo là biến có liệu kiểu số thực và vì không thể dùng để xác định giá trị đầu và giá trị cuối câu lệnh lÆp ThuËt to¸n: Bước Nhập các số n và x Bước A 1, i (A là biến lưu lũy thừa bậc n x) Bước ii + 1, A A.x Bước Nếu i < n, quay lại bước Bước Thông báo kết A là lũy thừa bậc n x và kết thúc thuật toán Chương trình Pascal có thể sau: var n,i,x: integer; a: longint; begin write('Nhap x='); readln(x); write('Nhap n='); readln(n); A:=1; for i:=1 to n A:=A*X; writeln(x,' mu ',n,' bang ',A); end ThuËt to¸n: Bước Nhập số n Bước A 32768 (gán số nhỏ có thể các số kiểu nguyên cho A), i1 Bước Nhập số thứ i và gán giá trị đó vào biến A Bước Nếu Max < A, Max A Bước ii + Bước Nếu i ≤ n, quay lại bước Bước Thông báo kết Max là số lớn và kết thúc thuật toán Chương trình Pascal có thể sau: uses crt; var n,i,Max,A: integer; begin GV: Ph¹m TuÊn Anh Lop8.net (21)