Giáo án lớp 8 môn Tin học - Bài 1: Máy tính và chương trình máy tính

doc 30 trang Người đăng phongnguyet00 Lượt xem 1230Lượt tải 0 Download
Bạn đang xem 20 trang mẫu của tài liệu "Giáo án lớp 8 môn Tin học - Bài 1: Máy tính và chương trình máy tính", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Giáo án lớp 8 môn Tin học - Bài 1: Máy tính và chương trình máy tính
Bài 1. 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 bản trên máy tính và yêu cầu chương trình tìm kiếm một cụm từ trong văn bản và thay thế bằng một cụm từ khác, thực chất ta đã yêu cầu máy tính thực hiện những lệnh gì? Có thể thay đổi thứ tự những lệnh đó mà vẫn không thay đổi kết quả được không?
Trong ví dụ về rô-bốt, nếu thay đổi thứ tự của hai lệnh trong chương trình, rô-bốt có thực hiện được công việc nhặt rác không? Hãy xác định vị trí mới của rô-bốt sau khi thực hiện xong lệnh “Hãy quét nhà” và đưa ra các lệnh để rô-bốt trở lại vị trí ban đầu của mình.
Hãy cho biết lí do cần phải viết chương trình để điều khiển máy tính.
Tại sao người ta phải tạo ra các ngôn ngữ lập trình trong khi 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 hiện để tạo ra các chương trình máy tính.
Hướng dẫn trả lời
Khi soạn thảo văn bản trên máy tính và yêu cầu chương trình tìm kiếm một cụm từ trong văn bản và thay thế bằng một 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 nhau. Dưới đây chỉ mô tả những lệnh cơ bản nhất 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ừ 1 trong văn bản. 
Xóa cụm từ 1 tìm được trong văn bản. 
Sao chép cụm từ 2 vào vị trí con trỏ trong văn bản. 
Dưới đây mô tả 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 con trỏ trước kí tự đầu tiên trong văn bản. 
Sao chép dãy kí tự (tính từ vị trí con trỏ sang phải) có độ dài bằng dãy kí tự cần tìm vào bộ nhớ (dãy 3). 
So sánh dãy 1 và dãy 3. Nếu dãy 3 không trùng với dãy 1, chuyển đến lệnh 8.
Xóa dãy 3 trong văn bản.
Sao chép dãy 2 vào vị trí con trỏ soạn thảo trong văn bản.
Di chuyển con trỏ sang phải một kí tự và quay lại lệnh 4.
Qua các lệnh liệt kê theo thứ tự nói trên, dễ thấy rằng có thể thay đổi thứ tự thực hiện của một vài lệnh (1 và 2), nhưng 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ự của hai lệnh trong chương trình điều khiển rô-bốt, rô-bốt sẽ không thực hiện được công việc nhặt rác vì rô-bốt sẽ không đi đúng hướng và có thể không đi tới vị trí có rác, hoặc thực hiện việc nhặt rác tại vị trí không có rác,.... Ví dụ, nếu thay đổi thứ tự của lệnh 1 “Tiến 2 bước” và lệnh 2 “Quay trái, tiến 1 bước”, tác dụng của cả hai lệnh này sẽ là “Quay trái và tiến 3 bước”. Khi đó rô-bốt sẽ nhặt rác tại 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 được đưa ra theo một thứ tự xác định sao cho ta đạt kết quả mong muốn. Trong một số ít trường hợp, ta có thể đưa ra các lệnh khác nhau, nhưng vẫn đạt kết quả. Chẳng hạn, trong 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 bằng các lệnh sau: “Quay trái, tiến 1 bước” và “Quay phải, tiến 2 bước” hoặc “Quay phải, tiến 2 bước”, “Quay trái, tiến 2 bước” và “Quay trái, tiến 4 bước”. Trong một số ít các trường hợp khác, việc thay đổi thứ tự của một vài câu lệnh vẫn cho kết quả đúng như yêu cầu. 
Tuy nhiên, như là một nguyên tắc chung, việc thay đổi thứ tự các câu lệnh sẽ không cho kết quả đúng. Có thể liên hệ với thứ tự các bước của thuật toán trong Bài 5.
Vị trí mới của rô-bốt sau khi 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 nhau để đưa ra hai lệnh để rô-bốt trở lại vị trí ban đầu của mình, một trong các cách đó là hai lệnh “Quay trái, tiến 5 bước” và “Quay trái, tiến 3 bước”. 
Lí do: Điều khiển máy tính tự động thực hiện các công việc đa dạng và phức tạp mà một lệnh đơn giản không đủ để chỉ dẫn. 
Tuy ngôn ngữ máy cũng là một loại ngôn ngữ lập trình, nhưng ở đâ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 mọi chỉ thị đều được biểu diễn bằng các con số nhị phân 0 và 1. Ngôn ngữ máy khó đọc và khó sử dụng, tuy vậy ngôn ngữ máy là ngôn ngữ duy 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 ra yếu điểm chính của các chương trình viết bằng 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 được 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 năng chuyển đổi chương trình được viết bằng ngôn ngữ lập trình thành chương trình thực hiện đượ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. 
Hai bước cơ bản để tạo ra 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 được và kết quả là tệp tin có thể thực hiện được trên máy tính. Lưu ý rằng, đây chỉ là hai bước cơ bản trong lập trình và chỉ là một phần của công việc giải quyết bài toán bằng máy tính.
Bài 2. 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 bằng các câu lệnh có các chữ cái của tiếng Việt, chẳng hạn “rẽ trái”, được không? Tại sao?
Tên trong chương trình là gì? Cho biết sự khác biệt từ khóa và tên, cách đặt tên trong chương trình.
Trong số các tên sau đây do người viết chương trình đặt trong mộ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 trong cấu trúc của mọi chương trình và vai trò của 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, tại sao?
a) Chương trình 1.
begin
end.
b) Chương trình 2.
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,... sao cho có thể tạo thành một chương trình hoàn chỉnh và chạy được trên máy tính. Lưu ý rằng 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 trong chương trình (từ khóa, tên) phải được viết bằng các chữ cái trong 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 hiện nay đều có bảng chữ cái là bảng chữ cái tiếng Anh và các kí hiệu khác, trong đó không có các chữ cái có dấu của tiếng Việt.
Lưu ý rằng câu hỏi trong bài là “viết chương trình bằng các câu lệnh...”. Điều này không có nghĩa là trong 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 bản cần xử lí. Các chữ có dấu đó sẽ được ngôn ngữ lập trình xử lý mã kí tự tương ứng trong 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 trong chương trình là dãy các chữ cái hợp lệ được 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 chỉ được dùng cho các mục đích sử dụng do ngôn ngữ lập trình quy định, không được dùng cho bất kì mục đích nào khác. 
Người lập trình có thể đặt tên một cách tùy ý nhưng phải tuân thủ các quy tắc của ngôn ngữ lập trình cũng như của chương trình dịch, trong đó (1) Hai đại lượng khác nhau phải có tên khác nhau; (2) Tên không được 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 2.
a) Chương trình 1 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 hiện điều gì cả. Phần nhất thiết phải có trong chương trình là phần thân chương trình được đảm bảo bằng hai từ begin và end. (có dấu chấm). 
b) Chương trình 2 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 3. 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í do 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 một kiểu dữ liệu, nhưng phép toán đó không có nghĩa trên kiểu dữ liệu kia.
Cho dãy chữ số 2010. Dãy chữ số đó có thể thuộc kiểu dữ liệu nào? 
Cho hai xâu kí tự “Lớp” và “8A”. Hãy thử định nghĩa một “phép toán” có thể thực hiện đượ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 nhau không? Tại sao?
Writeln('100'); và Writeln(100);
Viết các biểu thức toán dưới đây với các kí hiệu trong Pascal:
Chuyển các biểu thức được viết trong Pascal sau đây thành các biểu thức toán:
(a+b)*(a+b)-x/y
b/(a*a+c)
a*a/(2*b+c)*(2*b+c)
1+1/2+1/2*3+1/3*4+1/4*5
Hãy xác định kết quả của các phép so sánh sau đây:
15 - 8 ≥ 3
(20 - 15)2 ≠ 25
112 = 121
x > 10 - 3x
Viết các phép so sánh trong Bài tập 8 với các kí hiệu trong Pascal.
Nêu một số ví dụ về tương tác giữa người và máy tính khi 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í do dễ nhận thấy nhất là việc phân chia dữ 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 ra 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 của máy tính (đặc biệt là bộ nhớ trong) một cách hiệu quả.
Có thể nêu các ví dụ sau đây:
Dữ liệu kiểu số và dữ liệu kiểu xâu kí tự. Phép cộng được định nghĩa trên dữ liệu số, nhưng không có nghĩa trên dữ liệu kiểu xâu.
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, nhưng 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à dữ liệu kiểu xâu, chúng ta phải viết dãy số này trong 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 ra 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 ra 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 nhau vì một lệnh in ra màn hình xâu ký tự biểu diễn số 100 còn lệnh kia in ra màn hình số 100.
Các biểu thức trong Pascal:
a/b+c/d
a*x*x+b*x+c 
1/x-a/5*(b+2) 
(a*a+b)*(1+c)*(1+c)*(1+c) 
Các biểu thức toán tương ứng:
Kết quả của các phép so sánh:
Đúng.
Sai.
Đúng.
Đúng khi x > 2.5; ngược lại, phép so sánh có kết quả sai.
a) 15-8>=3; b) (20-15)*(20-15)25; c) 11*11=121; d) x>10-3*x.
Một số ví dụ về tương tác giữa người và máy tính khi chương trình hoạt động: thông báo kết quả tính toán hay trạng thái hoạt động của chương trình, nhập dữ liệu, tạm ngừng chương trình. Xem SGK, Mục 4, Bài 2.
Bài 4. 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 những gì? Hãy thử mô tả hoạt động của máy tính khi thực hiện lệnh khai báo một biến trong 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?
Gán số nguyên 4 cho biến A.
Gán số 3242 cho biến X.
Gán xâu ‘3242’ cho biến X.
Gán xâu ‘Ha Noi’ cho biến A.
Nêu sự khác nhau 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 một hằng Pi với giá trị 3.14. Có thể gán lại giá trị 3.1415 cho Pi trong phần thân chương trình được không? Tại sao?
Trong Pascal, khai báo nào sau đây là đúng?
var tb: real;
var 4hs: integer;
const x: real;
var R = 30;
Hãy liệt kê các lỗi có thể trong chương trình dưới đây và sửa lại cho đúng:
var a,b:= integer;
const c:= 3;
begin 	
 a:= 200	
 b:= a/c;	
 write(b);	
 readln	
end. 	
Hãy cho biết kiểu dữ liệu của 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 dưới đây:
Tính diện tích S của hình tam giác với độ dài một cạnh a và chiều cao tương ứng h (a và h là các số tự nhiên được nhập vào từ bàn phím).
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 trong 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 của toàn lớp. Nếu cần viết chương trình, em sẽ cần sử dụng những biến nào cho mỗi bạn?
Viết chương trình tính diện tích và chu vi đường tròn có bán kính r, trong đó r là một số nguyên dương được nhập từ bàn phím.
Hướng dẫn trả lời
Xét về mặt lập trình, biến đại lượng được dùng để lưu trữ dữ liệu và dữ liệu được biến lưu trữ có thể thay đổi trong khi thực hiện chương trình. Xét về mặt lưu 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 dữ liệu trong suốt quá trình thực hiện chương trình.
Gán giá trị cho một biến về thực chất là lưu dữ liệu tương ứng vào vùng nhớ được đặt tên và dành riêng cho biến. Việc thực hiện các tính toán và xử lí với biến có nghĩa là thực hiện tính toán và xử lí với dữ liệu được 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ố 5. Sau khi khai báo, chương trình sẽ dành riêng một vùng nhớ nào đó cho biến X, và khi gán 5 cho X thì vùng nhớ đó lưu dữ liệu 5. Lệnh ghi X ra màn hình có nghĩa là ghi số 5 ra màn hình.
Lưu ý. Khi một vùng nhớ được khai báo để lưu dữ liệu làm giá trị của một biến, vùng nhớ đó sẽ không được phép sử dụng vào mục đích khác. Do vậy, một trong 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à trong những trường hợp việc sử dụng bộ nhớ bị hạn chế. Nhưng với công nghệ hiện nay, bộ nhớ máy tính đã có dung lượng rất lớn nên vấn đề hạn chế sử dụng biến trong 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 được đư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) sẽ xác định kiểu của biến và dành một vùng nhớ có độ lớn thích hợp với phạm vi kiểu của biến để lưu giá trị của biến. Ví dụ, cũng để lưu các giá trị là số nguyên, khi khai báo biến kiểu byte, máy tính chỉ dành vùng nhớ có độ lớn 1 byte, nhưng khi khai báo biến kiểu nguyên, máy tính sẽ dành vùng nhớ có độ lớn 2 byte, hoặc vùng nhớ 6 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 ra máy tính sẽ biết áp dụng các phép toán thích hợp đối với giá trị của 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ù đều cùng phải khai báo trước khi có thể sử dụng trong chương trình, sự khác nhau giữa biến và hằng là ở chỗ giá trị của hằng không thay đổi trong suốt quá trình thực hiện chương trình, còn giá trị của biến thì có thể thay đổi được tại từng thời điểm thực hiện chương trình.
Không thể gán lại giá trị 3.1415 cho Pi trong phần thân chương trình vì giá trị của hằng không thay đổi trong suốt quá trình thực hiện 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ị khi khai báo; d) c) Không hợp lệ vì biến không được gán giá trị khi khai báo, cách gán giá trị cũng không đúng cú pháp.
Các lỗi trong chương trình: (1) Thừa dấu bằng ở dòng 1 (chỉ cần dấu hai chấm); (2) Thừa dấu hai chấm ở dòng 2 (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 dữ liệu số thực.
Cách khai báo hợp lý:
Các biến a và h là kiểu số nguyên; biến S: kiểu số thực.
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 trong 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.
Chương trình Pascal có thể như 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.
Bài 5. Từ BàI TOáN ĐếN CHƯƠNG TRìNH
Câu hỏi và bài tập
Hãy chỉ ra INPUT và OUTPUT của các bài toán sau:
Xác định số học sinh trong lớp cùng mang họ Trần.
Tính tổng của các phần tử lớn hơn 0 trong dãy n số cho trước.
Tìm số các số có giá trị nhỏ nhất trong 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 1. x ơ x + y
Bước 2. y ơ x - y
Bước 3. 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 quả ba số đó có thể là ba cạnh của một 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ủa 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ủa 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ụ 5 để 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 ra màn hình số nhỏ nhất các số đó. Số n cũng được nhập từ bàn phím.
Hãy mô tả thuật toán giải các bài toán sau:
Đếm số các số dương trong dãy số A = {a1, a2,.., an} cho trước. 
Hãy mô tả thuật toán tính tổng các số dương trong 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 trong lớp.
OUTPUT: Số học sinh có họ Trần.
INPUT: Dãy n số.
OUTPUT: Tổng của các phần tử lớn hơn 0.
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 của y và y có giá trị ban đầu của x, tức giá trị của hai biến x và y được hoán đổi cho nhau.
Mô tả thuật toán:
INPUT: Ba số dương a >0, b >0 và c >0.
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 5.
Bước 2: Tính b + c. Nếu b + c ≤ c, chuyển tới bước 5.
Bước 3: Tính a + c. Nếu a + c ≤ b, chuyển tới bước 5.
Bước 4: Thông báo “a, b và c có thể là ba cạnh của một 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 của một 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 1. 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 5.
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 2. Không sử dụng biến phụ (Xem Bài tập 2 ở 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 5.
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, nếu cần, ta hoán đổi giá trị hai biến x và y để chúng có giá trị tăng dần. Sau đó lần lượt so sánh z với x và z với y, sau đó thực hiện các bước hoán đổi giá trị cần thiết (xem lại Ví dụ 5 trong 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 3.
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 6.
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 6.
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ử của 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 ơ 0.
Bước 2: i ơ i + 1.
Bước 3: Nếu i ≤ n, S ơ S + ai và quay lại bước 2. 
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ỏ nhất trong dãy n số a1, a2, ..., an cho trước. Thuật toán này tương tự như thuật toán tìm giá trị lớn nhất trong 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 ơ 1.
Bước 3: i ơ i + 1.
Bước 4: Nếu i > n, chuyển đến bước 5.
Bước 5: Nếu ai < Min, gán Min ơ ai rồi quay lại bước 3. Trong trường hợp ngược lại, quay lại bước 3. 
Bước 6: Ghi giá trị Min ra màn hình và kết thúc thuật toán.
a) Đếm số các số dương trong 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ố ai > 0.
Bước 1: Gán Soduong ơ 0.
Bước 2: i ơ i + 1.
Bước 3: Nếu i > n, chuyển đến bước 5.
Bước 4: Nếu ai > 0, gán Soduong ơ Soduong +1 rồi quay lại bước 2. Trong trường hợp ngược lại, quay lại bước 2. 
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 trong dãy số A = {a1, a2,..., an} cho trước.
INPUT: n và dãy n số a1, a2,..., an.
OUTPUT: S = Tổng các số ai > 0 trong dãy a1, a2,..., an.
Bước 1: S ơ 0; i ơ 0.
Bước 2: i ơ i + 1.
Bước 3: Nếu ai > 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 2.
Bước 5: Thông báo S và kết thúc thuật toán.
Bài 6. CÂU LệNH ĐIềU KIệN
Câu hỏi và bài tập
Em hãy nêu một vài ví dụ về các hoạt động hằng ngày phụ thuộc vào điều kiện.
Hãy cho biết các điều kiện hoặc phép so sánh sau đây cho kết quả đúng hay sai:
123 là số chia hết cho 3.
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ó một góc tù (> 90o).
152 > 200.
n! ≤ n2 với mọi số tự nhiên n.
x2 < 1.
Hai người bạn cùng chơi trò đoán số. Một người nghĩ trong đầu một số tự nhiên nhỏ hơn 10. Người kia đoán xem bạn đã nghĩ số gì. Nếu đoán đúng, người đoán sẽ được cộng thêm 1 điểm, nếu sai sẽ không được cộng điểm. Luân phiên nhau nghĩ và đoán. Sau 10 lần, ai được nhiều điểm hơn, người đó sẽ thắng. 
Hãy phát biểu các điều kiện ở trò chơi là gì? Hoạt động nào sẽ được thực hiện, nếu điều kiện đó thoả mãn? Hoạt động nào sẽ được thực hiện, nếu điều kiện đó không thoả mãn?
Một trò chơi máy tính rất hứng thú đối với các em nhỏ là hứng trứng. Một quả trứng rơi từ một vị trí ngẫu nhiên trên cao. Người chơi dùng các phím mũi tên đ hoặc ơ để điều khiển một biểu tượng chiếc khay di chuyển theo chiều ngang để hứng quả trứng. Nếu hứng trượt, quả trứng bị rơi, vỡ và người chơi tiếp tục di chuyển khay để hứng quả trứng khác.
Điều kiện để điều khiển chiếc khay trong trò chơi là gì? Hoạt động nào sẽ được thực hiện, nếu điều kiện đó thoả mãn? Hoạt động nào sẽ được thực hiện, nếu điều kiện đó không thoả mãn?
Các câu lệnh Pascal sau đây được viết đúng hay sai?
if x:=7 then a=b;
if x>5; then a:=b; 
if x>5 then; a:=b; 
if x>5 then a:=b; m:=n; 
if x>5 then a:=b; else m:=n; 
if n>0 then begin a:=0; m:=-1 end else c:=a; 
Sau mỗi câu lệnh sau đây
if (45 mod 3)=0 then X:=X+1;
if X>10 then X:=X+1; 
giá trị của biến X sẽ là bao nhiêu, nếu trước đó giá trị của X bằng 5?
Giả sử cần viết chương trình nhập một số tự nhiên vào máy tính và ghi ra màn hình kết quả 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 của thuật toán để giải quyết bài toán trên và viết chương trình Pascal để thực hiện 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ủa 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 đó sắp xếp và ghi các số đó ra màn hình theo thứ tự tăng dần (xem Bài tập 8 và thuật toán trong Ví dụ 5, 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 đó kiểm tra ba số đó có thể là các cạnh của tam giác đều, tam giác cân hoặc tam giác vuông hay không và ghi kết quả ra 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 rất nhiều vài ví dụ về các hoạt động hằng ngày phụ thuộc vào điều kiện. Dưới đây là một số ví dụ:
Nếu đạt điểm tổng kết cả năm cao hơn 8.5, em sẽ đạt danh hiệu “Học sinh giỏi”.
Nếu không được cắm điện, máy tính để bàn của em sẽ không hoạt động được.
Nếu bị bệnh, em (cần phải) đi đến phòng khám để bác sĩ khám bệnh.
Nếu không được tưới đủ nước đúng thời kì phát triển, lúa sẽ không cho thu hoạch cao.
Đáp án: a) Đúng; b) Đúng; c) Sai; d) Sai; e) Sai, nếu x ≥ 1.
Giả sử Điểm_1 là số điểm của người thứ nhất và Điểm_2 là số điểm của người thứ hai, ngoài ra một người thứ nhất trong đầu một 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 cộng thêm 1; ngược lại, Điểm_2 được giữ nguyên. Tương tự, nếu người thứ hai nghĩ số tự nhiên m, và điều kiện thứ hai là người thứ nhất đoán đúng số m đó. Khi đó Điểm_1 được cộng thêm 1; ngược lại, Điểm_1 được giữ nguyên. 
Điều kiện ở trò chơi là sau 10 lần, nếu Điểm_1 > Điểm_2 thì người thứ nhất được 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 chiếc khay trong trò chơi người chơi nhấn phím mũi tên đ hoặc ơ. Nếu người chơi nhấn phím đ, biểu tượng chiếc khay sẽ di chuyển sang phải một đơn vị khoảng cách; nếu phím ơ được nhấn, biểu tượng chiếc khay sẽ di chuyển sang trái. Nếu một 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ị 5.
Thuật toán:
Bước 1. Nhập số n. 
Bước 2. Nếu n chia hết cho 2, ghi ra màn hình “n là số chẵn”; ngược lại, ghi ra màn hình “n là số lẻ”. 
Bước 3. 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:
Bước 1. Nhập ba số A, B và C. 
Bước 2. Nếu A > B, X ơ A, A ơ B, B ơ X. 
Bước 3. Nếu C > A, X ơ A, A ơ C, C ơ X. 
Bước 4. Nếu C < B, X ơ B, B ơ C, C ơ X. 
Bước 5. 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.
 Thuật toán:
Bước 1. Nhập ba số A, B và C. 
Bước 2. Nếu A + B < C hoặc B + C < A hoặc C + A < B, thông báo A, B và C không phải là ba cạnh của một tam giác và chuyển tới bước 5. 
Bước 3. Nếu A2 + B2 = C hoặc B2 + C2 = A2 hoặc C2 + A2 = B, thông báo A, B và C là ba cạnh của một tam giác vuông và chuyển tới bước 5. 
Bước 4. Nếu A = B và B = C, thông báo A, B và C là ba cạnh của một tam giác đều; ngược lại, nếu A = B hoặc B = C hoặ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 5. 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);
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 7. CÂU LệNH lặp
Câu hỏi và bài tập
Cho một vài ví dụ về hoạt động được thực hiện lặp lại trong cuộc sống hàng ngày!
Hãy mô tả các bước của 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 hiện để 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 rằng khi thực hiện 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 := to do ;
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 hiện hoạt động nào?
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 được nhập vào từ bàn phím):
A = 
Các câu lệnh Pascal có hợp lệ không, vì sao?
a) for i:=100 to 1 do writeln(’A’);
b) for i:=1.5 to 10.5 do writeln(’A’);
c) for i=1 to 10 do writeln(’A’);
d) for i:=1 to 10 do; writeln(’A’);
e) var x: real; for x:=1 to 10 do 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 của số nguyên X.
Viết chương trình Pascal nhập n số nguyên từ bàn phím và ghi ra màn hình số lớn nhất trong các số đó. Số n cũng được nhập vào từ bàn phím. (Xem mô tả thuật toán trong Ví dụ 6, Bài 5.) 
Viết c

Tài liệu đính kèm:

  • docGiai cac bai tap tin 8.doc