$\color{red}{\fbox{Tin Học 8}\text{Topic Ôn Thi Học Kỳ}}$

Status
Không mở trả lời sau này.
L

lamdetien36

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

:Mloa_loa: :Mloa_loa: Thông báo :Mloa_loa: :Mloa_loa:
Topic ôn thi Học kỳ môn Pascal, dành cho học sinh lớp 8.

MỤC LỤC:
Phần I - LÝ THUYẾT
Phần II - MỘT SỐ BÀI TẬP VỀ TÌM LỖI SAI VÀ CHUYỂN ĐỔI BIỂU THỨC.
Phần III - THUẬT TOÁN.
Phần IV - VIẾT CHƯƠNG TRÌNH PASCAL ĐƠN GIẢN.
 
Last edited by a moderator:
L

lamdetien36

Đối với học sinh thì môn Tin, hay chính xác hơn là Pascal, là một trong những môn khó xơi nhất. Vì vậy mình lập topic nhằm ôn tập lại các kiến thức cơ bản và luyện tập với một số đề thi học kỳ.
Dự kiến topic sẽ gồm các phần sau:

  1. Lý thuyết: định nghĩa ngôn ngữ lập trình, thuật toán,...
  2. Thiết lập thuật toán: cách xác định bài toán, cách xây dựng thuật toán và một số ví dụ
  3. Chuyển đổi các biểu thức từ Pascal -> biểu thức toán học và ngược lại.
  4. Viết các chương trình đơn giản: sử dụng biến, hằng, sử dụng câu lệnh điều kiện IF-THEN-ELSE.
Và nếu các bạn có bài nào muốn hỏi thì cứ việc post vào đây :D Lưu ý là các bài Bồi dưỡng thì đừng vào đây :D
 
L

lamdetien36

Ta mở hàng nhé :)).

Viết chương trình giải hệ phương trình bậc nhất hai ẩn.
Thi học kỳ tin 11 à :)) Ta thề ta hứa ta đảm bảo là lớp 8 không bao giờ ra bài này :))
Mã:
var
    a, b, c, d, e, f, dd, dx, dy: integer;
begin
    writeln('Nhap He So Phuong Trinh Thu Nhat: '); readln(a, b, c);
    writeln('Nhap He So Phuong Trinh Thu Hai : '); readln(d, e, f);
    dd := a * e - b * d;
    dx := c * e - b * f;
    dy := a * f - c * d;
    if dd <> 0 then
    begin
        writeln('X = ', dx / dd : 0 : 6);
        writeln('Y = ', dy / dd : 0 : 6);
    end
    else
    begin
        if (dx <> 0) or (dy <> 0) then
            writeln('He Vo Nghiem')
        else
            writeln('He Vo So Nghiem');
    end;
    readln
end.
 
L

lamdetien36

Phần 1:
LÝ THUYẾT

Sau đây là một số câu hỏi lý thuyết mà đề có thể ra:

1) Con người ra lệnh cho máy tính như thế nào ?
- Con người chỉ dẫn cho máy tính thực hiện công việc thông qua các lệnh.

2) Chương trình là gì ?
- Chương trình là một dãy các lệnh mà máy tính có thể hiểu và thực hiện được.

3) Tại sao cần phải viết chương trình ?
- Các công việc máy tính cần thực hiện rất phức tạp, đa dạng. Một lệnh không đủ để chỉ dẫn cho máy tính thực hiện. Vì vậy ta cần phải gộp nhiều lệnh lại thành một chương trình. Đồng thời nó giúp con người điều khiển máy tính một cách đơn giản, hiệu quả hơn.

4) Ngôn ngữ lập trình là gì ? Nêu vài ngôn ngữ lập trình mà em biết ?
- Ngôn ngữ lập trình là ngôn ngữ dùng để viết các chương trình máy tính.
- Một vài ngôn ngữ lập trình: C, C++, Java, Basic, Pascal, ...

5) Tại sao cần tạo ra NNLT trong khi có thể điều khiển máy tính bằng ngôn ngữ máy ?
- Ngôn ngữ máy là những dãy bit khô khan, khác xa ngôn ngữ tự nhiên nên khó nhớ, khó sử dụng.
- Vì vậy người ta tạo ra NNLT có thể sử dụng những từ có nghĩa, dễ nhớ, dễ hiểu.

6) NNLT gồm những phần nào ?
- Gồm Bảng chữ cái và Các quy tắc viết viết chương trình.

7) Phân biệt từ khóa và tên ?

v09z.png


8) Nếu cấu trúc chung của chương trình ?

Gồm
- Phần khai báo: phần này không bắt buộc phải có, nếu có thì gồm các lệnh để:

  • Khai báo tên chương trình
  • Khai báo các thư viện (chứa các lệnh viết sẵn có thể sử dụng trong chương trình)
  • Một số khai báo khác (khai báo biến, hằng, ..)
- Phần thân: bắt buộc phải có. Phần khai báo (nếu có) phải đặt trước phần này. Phần này gồm các câu lệnh máy tính cần thực hiện.


9) Biến là gì ? Hằng là gì ? Cách khai báo biến và hằng trong Pascal ?
- Biến và hằng là các đại lượng được đặt tên dùng để lưu trữ dữ liệu. Tuy nhiên giá trị của biến có thể thay đổi, còn giá trị của hằng được giữ nguyên trong suốt quá trình thực hiện chương trình.
- Cách khai báo biến: var <tên biến> : <kiểu dữ liệu>;
- Cách khai báo hằng: const <tên hằng> = <giá trị>;


10) So sánh biến và hằng ?
- Giá trị của biến có thể thay đổi, còn giá trị của hằng được giữ nguyên trong suốt quá trình thực hiện chương trình.


11) Thuật toán là gì ? Nêu các bước giải bài toán trên máy tính ?
- Thuật toán là dãy hữu hạn các thao tác cần thực hiện để giải một bài toán.
- Các bước giải bài toán trên máy tính:

  1. Xác định bài toán: xác định thông tin đã cho (INPUT) và thông tin cần tìm (OUTPUT)
  2. Mô tả thuật toán: tìm cách giải bài toán, mô tả bằng các lệnh cần thực hiện.
  3. Viết chương trình: dựa vào thuật toán ở trên, viết chương trình bằng một NNLT mà ta biết.


12) Cấu trúc rẽ nhánh dùng để làm gì, gồm những dạng nào ? Trong NNLT Pascal, cấu trúc rẽ nhánh được thể hiện như thế nào ?
- Cấu trúc rẽ nhánh dùng để chỉ thị cho máy tính thực hiện các hoạt động khác nhau theo một điều kiện cụ thể có được thỏa mãn hay không.
- Cấu trúc rẽ nhánh có 2 dạng: dạng thiếu và dạng đầy đủ.
- Trong Pascal, CTRN được thể hiện bằng câu lệnh điều kiện:

  • Dạng thiếu: IF <điều kiện> THEN <câu lệnh>
  • Dạng đầy đủ: IF <điều kiện> THEN <câu lệnh 1> ELSE <câu lệnh 2>
 
L

lamdetien36

Phần 2:
MỘT SỐ BÀI TẬP VỀ TÌM LỖI SAI VÀ CHUYỂN ĐỔI BIỂU THỨC.

I. TÌM LỖI SAI:
1) Trong các tên sau, tên nào sai, tên nào đúng (trong NNLT Pascal):
- a : đúng
- Tamgiac : đúng.
- 8a : sai vì tên không được bắt đầu bằng chữ số.
- Tam Giac : sai vì tên không được chứa dấu cách.
- beginprogram : đúng.
- end : sai vì trùng với từ khóa end.
- b1 : đúng.
- abc : đúng.
- Begin : sai vì trùng với từ khóa begin (trong NNLT Pascal không phân biệt chữ thường và chữ hoa, nên begin và Begin là một)
- ConstVar : đúng.
2) Chương trình sau có hợp lệ không ?
a)
Mã:
begin
end.
==> Hoàn toàn đúng, vì phần thân có đủ begin end, còn lệnh mà chưởng trình thực hiện là lệnh rỗng (không làm gì cả).
b)
Mã:
begin
    program a;
    write('Chao');
end.
==> Sai vì phần khai báo nằm trong phần thân ==> Sai cấu trúc chương trình.
c)
Mã:
program b;
    write('Chao');
end.
==> Sai vì không có begin để bắt đầu phần thân chương trình.
3) Các câu lệnh khai báo sau đúng hay sai:
a) var a: integer;
==> Đúng
b) var a = real;
==> Sai vì khai biến thì phải theo cú pháp var <tên biến> : <kiểu dữ liệu>;
c) const a = 3.14;
==> Đúng
d) const a: integer;
==> Sai vì phải khai báo giá trị cho hằng.
e) const a : 3.14;
==> Sai, phải thay dấu : thành dấu =

II. CHUYỂN ĐỔI BIỂU THỨC:
Đây chỉ là phần phụ để hỗ trợ cho việc viết chương trình sau này, nên mình chỉ cho vài ví dụ, các bài tập còn lại các bạn có thể tự làm :D Nếu muốn thì post lên đây mình kiểm tra cho :D
1) Chuyển từ toán sang Pascal:
$\dfrac{(10 + 2)^2}{(3 + 1)}$ ==> (10 + 2) * (10 + 2) / (3 + 1)
$a^2 + b - \sqrt{c^3} + 1,5$ ==> a*a + b - sqrt(c*c*c) + 1.5
$\dfrac{x}{y} + \dfrac{\dfrac{x^3}{y^2}}{\dfrac{3}{2}}$ ==> x/y + ((x*x*x)/(y*y))/(3/2)
2) Chuyển từ Pascal sang toán:
(1/x)/(x/y) + ((x*x*x)/(y*y))/(3/2*x) ==> $\dfrac{\dfrac{1}{x}}{\dfrac{x}{y}} + \dfrac{\dfrac{x^3}{y^2}}{\dfrac{3}{2}.x}$
(a - 1)/(a*a+a+1) - (3*(a+1)*(a+1))/(1 - a*a*a)-3/(a-1) ==> $\dfrac{a-1}{a^2+a+1}-\dfrac{3(a+1)^2}{1-a^3}-\dfrac{3}{a-1}$
Bài tập luyện tập: Chuyển các bất đẳng thức trong topic này sang Pascal :D
http://diendan.hocmai.vn/showthread.php?p=2428170#post2428170
Nếu có nhu cầu kiểm tra thì cứ inbox mình, mình check cho :D

Mai mình sẽ post tiếp phần 3 là một vài thuật toán cơ bản + cách lập thuật toán và phần 4 bài tập viết chương trình + dự đoán kết quả + tìm lỗi sai trong chương trình :D
 
A

abluediamond

Last edited by a moderator:
L

lamdetien36

3cool_shame.gif


Mã:
a/(b*c+1) + b/(a*c+1) + c/(a*b+1)<=2
Mã:
a/b + b/c + /a >= (a+b+c)/(3sqrt(a*b*c))
Cái thứ 3 ngươi chuyển sai rồi :D Trong pascal không có căn bậc ba :D
Phải chuyển thành lũy thừa 1/3, tức là $(abc)^{\dfrac{1}{3}}$ :D
Tuy nhiên trong Pascal cũng không có hàm lũy thừa với số mũ thực, nên phải chuyển thành: $e^{ln(abc).\dfrac{1}{3}}$ :D
Cái này viết trong Pascal là
Mã:
exp(ln(a*b*c)*1/3)
Tóm lại biểu thức đó viết lại là:
Mã:
a/b + b/c + c/a >= (a+b+c)/(exp(ln(a*b*c)*1/3))
Đau não vl @-)
 
L

lamdetien36

Tiếp khoảng cỡ 2 bài bình thường và 2 bài hại não nữa rồi mình sẽ chuyển sang phần thuật toán :D
Mọi người thử chuyển cái này đi :))
$$(a+b+c)\left(\dfrac{1}{a}+\dfrac{1}{b}+\dfrac{1}{c}\right)\ge 9+3\sqrt[3]{\left(\dfrac{(b-a)(c-b)(a-c)}{abc}\right)^2}$$
 
A

abluediamond

Tiếp khoảng cỡ 2 bài bình thường và 2 bài hại não nữa rồi mình sẽ chuyển sang phần thuật toán :D
Mọi người thử chuyển cái này đi :))
$$(a+b+c)\left(\dfrac{1}{a}+\dfrac{1}{b}+\dfrac{1}{c}\right)\ge 9+3\sqrt[3]{\left(\dfrac{(b-a)(c-b)(a-c)}{abc}\right)^2}$$

Bài tập buổi sáng
byebye.gif
.

Mã:
(a + b + c)*(1/a + 1/b + 1/c) >=  9 + 3*(exp(ln(((b - a)(c - b)(a - c)/(a*b*c))^2)*1/3))

Thuật toán nhanh và ngay
byebye.gif
.
 
Last edited by a moderator:
A

abluediamond

What the con hợi
ah.gif
. Bài khác đê tên Dâm Tặc kia
byebye.gif
.

Sao lâu thế, mi đi tán gái rồi à
look_down.gif
.
 
Last edited by a moderator:
A

abluediamond

L

lamdetien36

Phần 3:
THUẬT TOÁN


I. NHẮC LẠI LÝ THUYẾT

- Định nghĩa: Thuật toán là dãy hữu hạn các thao tác cần thực hiện theo một trình tự xác định để nhận được kết quả cần tìm từ những điều kiện cho trước.
- Các bước giải bài toán trên máy tính:

  1. Xác định bài toán: xác định thông tin đã cho (INPUT) và thông tin cần tìm (OUTPUT)
  2. Mô tả thuật toán: tìm cách giải bài toán, mô tả bằng các lệnh cần thực hiện.
  3. Viết chương trình: dựa vào thuật toán ở trên, viết chương trình bằng một NNLT mà ta biết.
II. CÁCH THIẾT LẬP MỘT THUẬT TOÁN:
Gồm xác định bài toán và mô tả thuật toán.

- Xác định bài toán: chỉ ra INPUT và OUTPUT, phần này thì các bạn cứ đọc đề kỹ, thấy cái nào đề đã cho thì nhét vào phần INPUT, còn phần đề yêu cầu tìm thì nhét vào OUTPUT, ví dụ:
Cho 3 số a, b, c. Tìm giá trị lớn nhất của chúng.
Input: 3 số a, b, c.
Output: giá trị lớn nhất của chúng.
- Mô tả thuật toán: phần này các bạn cứ thử làm bằng tay với một vài ví dụ, sau đó nhận xét cách mà mình làm, từ đó mô tả khái quát thành thuật toán. Ví dụ với bài toán nêu trên:
Thử với a = 3, b = 2, c = 5.
Ta thấy b < a, c > a ==> c lớn nhất.
Thứ với a = 2, b = 5, c = 1.
Ta thấy b > a, c < b ==> b lớn nhất.
Thứ với a = 2, b = 3, c = 5.
Ta thấy b > a, c > b ==> c lớn nhất.

Như vậy, cách ta làm là so sánh a, b tìm ra GTLN của chúng, sau đó so sánh giá trị tìm được với c, giá trị nào lớn hơn thì chính là GTLN của a, b, c.

Vậy thuật toán là:
B1. Nếu a > b thì max <-- a, ngược lại thì max <-- b (tìm GTLN của a, b)
B2. Nếu max < c thì max <-- c (so sánh gia trị max vừa tìm được với c)
B3. Thông báo max, kết thúc.
III. MỘT SỐ VÍ DỤ KHÁC.
1) Đổi giá trị 2 biến x, y.
INPUT: 2 biến x, y có giá trị tương ứng là a, b.
OUTPUT: 2 biến x, y có giá trị tương ứng là b, a.

Ta có thể làm như sau:
Mã:
B1. z <-- x. (z sẽ mang giá trị a)
B2. x <-- y. (x sẽ mang giá trị của b)
B3. y <-- z. (y sẽ mang giá trị của z, cũng tức là giá trị a)
Hoặc có thể làm như sau:
Mã:
B1. x <-- x + y (x sẽ mang giá trị a + b).
B2. y <-- x - y. (y sẽ mang giá trị a + b - b = a)
B3. x <-- x - y. (x sẽ mang giá trị a + b - y(hiện tại) = a + b - a = b)
Sau khi thực hiện 1 trong 2 thuật toán trên thì x, y sẽ đổi giá trị cho nhau.

2) Tìm GTLN của một dãy số.
INPUT: Dãy A gồm các số $A_1, A_2, ..., A_N (N > 0)$
OUTPUT: Giá trị lớn nhất trong các số $A_1, A_2, ... A_N$.

Thuật toán: tương tự như ví dụ tìm GTLN của 3 số, nhưng mở rộng ra cho N số.
Mã:
B1. max <-- A_1. i <-- 1.
B2. i <-- i + 1.
B3. Nếu i > N thì thông báo max rồi kết thúc thuật toán.
B4. Nếu A_i > max thì max <-- A_i. (so sánh giá trị max vừa tìm được với A_i)
B5. Quay lại bước 2.
Đó là 2 ví dụ cơ bản nhất về thuật toán.

Bài tập: Viết thuật toán
1) Tìm GTLN của dãy số, đồng thời chỉ ra vị trí của nó trong dãy số.
2) Tính tổng các số trong dãy số.
3) Tính tổng các số nguyên dương chẵn trong dãy số.
4) Kiểm tra một số có phải số nguyên tố hay không.
5) Tìm UCLN của 2 số a, b.
Chắc cũng đủ rồi, nếu muốn thì để mình post thêm vài bài nữa :D
 
A

abluediamond

5) Tìm UCLN của 2 số a, b.

Thế này đã được gọi là một thuật toán chưa
byebye.gif


Mã:
B1. Xét thương a/b nếu 
B2. Nếu a/b là A/B tối giản thì UCLN (a,b) a/A = b/B.
B3. Nếu a/b là số thập phân thì tìm dư R (R nguyên dương và < a), UCLN (b,a) = UCLN (a,R) (ULCN (b,a) = UCLN (a,b)
 
Last edited by a moderator:
L

lamdetien36

Thế này đã được gọi là một thuật toán chưa
byebye.gif


Mã:
B1. Xét thương a/b nếu 
B2. Nếu a/b là A/B tối giản thì UCLN (a,b) a/A = b/B.
B3. Nếu a/b là số thập phân thì tìm dư R (R nguyên dương và < a), UCLN (b,a) = UCLN (a,R) (ULCN (b,a) = UCLN (a,b)
Thiếu phần xác định INPUT, OUTPUT rồi :))
Về phần thuật toán thì cũng chưa đúng, vì để xác định A/B tối giản hay không thì phải tính được UCLN, trong khi UCLN là thứ cần phải tính :D
Thuật toán nó như thế này:
Mã:
INPUT: 2 số nguyên a, b.
OUTPUT: UCLN(a, b).
B1. Nếu b = 0 thì thông báo a rồi kết thúc. (Vì hiển nhiên UCLN(a, 0) = a)
B2. 
r <-- a mod b. 
a <-- b
b <-- r.
(Chuyển UCLN(a, b) thành UCLN(b, a mod b))
B3. Quay lại bước 1.
Nếu muốn thì dùng phép trừ cũng được :D hoặc rảnh rỗi nữa thì dùng UCLN nhị phân =))
 
A

abluediamond

Tính tổng các số trong dãy số.

Thế này chắc đúng chứ
byebye.gif
.

INPUT: dãy số nguyên $A_1, A_2, A_3,...,A_n$ .
OUTPUT: $\sum_{A=1}^n A$

B1. $A_1 + A_2 + A_3 + .... A_n = (A - 1) + n $ (Với A là số tự nhiên khác 0)

B2. $(A - 1) + n = \frac{A(A + 1)}{2}$ (Quy nạp)

B3. Thông báo $\sum_{A=1}^n A$ rồi kết thúc.

Đi ngủ cái đã, tối về làm tiếp =)).
 
Last edited by a moderator:
L

lamdetien36

Thế này chắc đúng chứ
byebye.gif
.



Đi ngủ cái đã, tối về làm tiếp =)).
Ko hiểu :D
Mà thuật toán chỉ là nêu ra cách thực hiện, còn phần chứng minh là không cần thiết, trừ khi được yêu cầu.
Thuật toán bài này:
Mã:
B1. i <-- 1. S <-- 0.
B2. Nếu i > N thì thông báo S rồi kết thúc.
B3. S <-- S + A_i. i <-- i + 1
B4. Quay lại bước 2.
Giải thích một chút:
Thuật toán trên thực hiện việc cộng dồn các số $A_i$ vào S. Tức là
$S = A_1 + A_2 + ... + A_N$
Hay S chính là tổng cần tính.
Ví dụ:
A = (2, 4, 3)
N = 3
$i <- 1. S <- 0$
$i <= N $==> không thực hiện bước 2.
$S <- S + A_i = 0 + A_1 = 0 + 2 = 2. i <- i + 1 = 2$
$i <= N$ ==> không thực hiện bước 2.
$S <- S + A_i = 2 + A_2 = 2 + 4 = 6. i <- i + 1 = 3$
$i <= N$ ==> không thực hiện bước 2.
$S <- S + A_i = 6 + A_3 = 6 + 3 = 9. i <- i + 1 = 4.$
i > N ==> thông báo S = 9 rồi kết thúc.
Kiểm tra: 2 + 4 + 3 = 9 (đúng)
 
Status
Không mở trả lời sau này.
Top Bottom