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

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

abluediamond


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ụ:
Kiểm tra: 2 + 4 + 3 = 9 (đúng)

Thì ra là vậy, dùng thêm ví dụ về số thì mới hiểu được, chứ cái phần tổng quát thì =)). Mà cho ta hỏi cái "i" với "<---" là cái gì vậy, lệnh gán à.

Tính tổng các số nguyên dương chẵn trong dãy số.

Bây giờ ta mới biết có -0 trong máy tính =)).

INPUT : dãy số nguyên $A1,A2,A3,...,An$.
OUTPUT : $\sum_{A = 1}^n A$ (A là nguyên dương chẵn).

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.

Ví dụ :

Mã:
A = 2, 4, 6
N = 11

i < -1.S < -0
i <= N => Ko thực hiện B2
S < -S + A_i = 0 + A_1 = 0 + 2 = 2
i <= N => ko thực hiện B2
S < -S + A_i = 4 + A_2 = 2 + 4 = 6
i <= N => ko thực hiện B2
S < -S + A_i = 8 + A_3 = 6 + 6 = 12
i > N => thông báo S = 12 rồi kết thúc câu chuyện

Có vài chỗ chưa hiểu lắm, giải đáp giùm ta nhá
bike.gif
.
 
L

lamdetien36

Thì ra là vậy, dùng thêm ví dụ về số thì mới hiểu được, chứ cái phần tổng quát thì =)). Mà cho ta hỏi cái "i" với "<---" là cái gì vậy, lệnh gán à.



Bây giờ ta mới biết có -0 trong máy tính =)).



Có vài chỗ chưa hiểu lắm, giải đáp giùm ta nhá
bike.gif
.
i là một biến, còn "<--" là phép gán :D
$A_i$ là phần tử thứ i của dãy số A :D
Còn phần thuật toán thì ngươi cần gì viết cái ví dụ ra :))
Mà ta sửa lại phần thuật toán chút:
INPUT : dãy số nguyên A1,A2,A3,...,An.
OUTPUT : ∑nA=1A (A là nguyên dương chẵn).

B1. i <-- 1. S <-- 0.
B2. Nếu i > N thì thông báo S rồi kết thúc.
B3. Nếu $A_i$ chẵn thì S <-- S + $A_i$
B4. i <-- i + 1. Quay lại bước 2.
Phải xét thêm điều kiện $A_i$ chẵn nữa, nếu không thì số lẻ nó cũng cộng dồn vào mất :D

Mà còn chỗ nào chưa hiểu thì cứ nói đi, ta sẽ cố gắng giải thích :D Giờ đi học thêm đã :p
 
A

abluediamond


i là một biến, còn "<--" là phép gán :D
$A_i$ là phần tử thứ i của dãy số A :D
Còn phần thuật toán thì ngươi cần gì viết cái ví dụ ra :))
Mà ta sửa lại phần thuật toán chút:
Phải xét thêm điều kiện $A_i$ chẵn nữa, nếu không thì số lẻ nó cũng cộng dồn vào mất :D

Mà còn chỗ nào chưa hiểu thì cứ nói đi, ta sẽ cố gắng giải thích :D Giờ đi học thêm đã :p

Mã:
A = 2, 4, 6
N = 11

i < -1.S < -0
i <= N => Ko thực hiện B2
S < -S + A_i = 0 + A_1 = 0 + 2 = 2
i <= N => ko thực hiện B2
S < -S + A_i = 4 + A_2 = 2 + 4 = 6
i <= N => ko thực hiện B2
S < -S + A_i = 8 + A_3 = 6 + 6 = 12
i > N => thông báo S = 12 rồi kết thúc câu chuyện

Sao lại -S nhỉ. Chả nhẽ trong phần tử i đầu thì -1 . S thì nó ra -S. Rồi còn <= là dấu lớn hơn hoặc bằng hả.

Tưởng mi ko học thêm chứ. Học thêm môn gì thế, Lịch Sử + Văn + Địa nâng cao à =)).
 
L

lamdetien36

Mã:
A = 2, 4, 6
N = 11

i < -1.S < -0
i <= N => Ko thực hiện B2
S < -S + A_i = 0 + A_1 = 0 + 2 = 2
i <= N => ko thực hiện B2
S < -S + A_i = 4 + A_2 = 2 + 4 = 6
i <= N => ko thực hiện B2
S < -S + A_i = 8 + A_3 = 6 + 6 = 12
i > N => thông báo S = 12 rồi kết thúc câu chuyện
Sao lại -S nhỉ. Chả nhẽ trong phần tử i đầu thì -1 . S thì nó ra -S. Rồi còn <= là dấu lớn hơn hoặc bằng hả.

Tưởng mi ko học thêm chứ. Học thêm môn gì thế, Lịch Sử + Văn + Địa nâng cao à =)).
Hiển thị bị lỗi ấy mà =)) Chỗ đó là dấu gán, tức là S <-- S + $A_i$
Còn dấu <= là nhỏ hơn hoặc bằng đó :D
 
A

abluediamond

Chém thêm 1 bài nữa rồi đi ngủ :)).............................

Tìm GTLN của dãy số, đồng thời chỉ ra vị trí của nó trong dãy số.

Mã:
INPUT: Dãy A_1, A_2, A_3,...A_n
OUTPUT: Giá trị lớn nhất của dãy số

B1. Max <--- A_1.n <--- 1.
B2. n <--- n + 1
B3. Nếu n > N thì thông Max rồi chỉ vị trí rồi kết thúc
B4. Nếu A_n > max thì max <--- A_n rồi chỉ vị trí vả kết thúc
B5. Quay lại 2

À còn nữa này, tại sao phải cho A nhân với biến n. Cho thêm 1 ví dụ cụ thể về số đi =)). Và còn chỉ ra vị trí là sao, có phải khi tìm max rồi thì ghi thêm đúng ko :D.
 
Last edited by a moderator:
L

lamdetien36

Chém thêm 1 bài nữa rồi đi ngủ :)).............................



À còn nữa này, tại sao phải cho A nhân với biến n. Cho thêm 1 ví dụ cụ thể về số đi =)). Và còn chỉ ra vị trí là sao, có phải khi tìm max rồi thì ghi thêm đúng ko :D.
Nhân đâu mà nhân, dấu . phân cách 2 phép gán thôi mà :D
À mà trong khi viết thuật toán và cả khi viết chương trình không nên dùng 2 biến có tên giống nhau, chỉ khác chữ thường chữ hoa, vì dễ gây nhầm lẫn, và trên hết là dễ bị trừ điểm :))
Về bài này:
- Tìm max và chỉ ra vị trí, tức là chỉ ra số i mà A_i = max :D
- Bài này có thể dùng thêm 1 biến nữa lưu vị trí của GTLN:
Mã:
B1. i <-- 1. max <-- A_1. vitri <-- 1.
B2. i <-- i + 1.
B3. Nếu i > N thì thông báo max và vitri rồi kết thúc.
B4. Nếu A_i > max thì max <-- A_i và vitri <-- i.
B5. Quay lại bước 2.
- Hoặc cũng có thể dùng trực tiếp biến max để lưu vị trí.
Mã:
B1. i <-- 1. max <-- 1
B2. i <-- i + 1.
B3. Nếu i > N thì thông báo A_max và max rồi kết thúc.
B4. Nếu A_i > A_max thì max <-- i.
B5. Quay lại bước 2.
- Hoặc một cách nữa là tìm max sau đó tìm i từ 1 -> N, nếu A_i = max thì thông báo i ra.
Mã:
B1. i <-- 1. max <-- A_1
B2. i <-- i + 1.
B3. Nếu i > N thì tới bước 6.
B4. Nếu A_i > max thì max <-- A_i.
B5. Quay lại bước 2.
B6. i <-- 1.
B7. i <-- i + 1.
B8. Nếu i > N thì kết thúc thuật toán.
B9. Nếu A_i = max thì thông báo i.
B10. Quay lại bước 7.
Ví dụ thuật toán 1:

A = (3, 4, 2). N = 3

i <-- 1. max <-- $A_1$ = 3. vitri <-- 1.
i <-- i + 1 = 1 + 1 = 2.
i <= N ==> bỏ qua bước 3.
$A_i$ = $A_2$ = 4 > max ==> max <-- $A_i$ = 4. vitri <-- i = 2
i <-- i + 1 = 2 + 1 = 3.
i <= N ==> bỏ qua bước 3.
$A_i$ = $A_3$ = 2 < max ==> bỏ qua bước 4.
i <-- i + 1 = 3 + 1 = 4
i > N ==> thông báo phần tử lớn nhất là max = 4, nằm ở vị trí vitri = 2.

Kiểm tra lại: $A_2 = 4$ là giá trị lớn nhất của dãy (đúng)
 
A

abluediamond

Tiếp nhá
3cool_shame.gif
.

Kiểm tra một số có phải số nguyên tố hay không.

INPUT: Số $A_n$
OUTPUT : $A_n$ là số nguyên tố hoặc hợp số

B1. $A_n$ <--- n.
B2. Cho n/b trong khoảng từ 2 đến n - 1
B3. Nếu a chia hết b trong khoảng từ 2 đến n - 1 thì n là hợp số. Kết luận và kết thúc.
B4. Nếu a không chia hết b trong khoảng từ 2 đến n - 1 thì n là số nguyên tố. Kết luận và kết thúc


Còn mấy cái nguyên tố ngẫu nhiên, định lí Fermat nhỏ nữa,...thì sao nhỉ
6cool_smile.gif
.
 
Last edited by a moderator:
L

lamdetien36

Tiếp nhá
3cool_shame.gif
.






Còn mấy cái nguyên tố ngẫu nhiên, định lí Fermat nhỏ nữa,...thì sao nhỉ
6cool_smile.gif
.
Thuật toán cần được trình bày rõ hơn nữa :D
Mà ngươi cũng nhầm một chút, phần INPUT, OUTPUT chỉ là số nguyên N thôi, nên bước 1 trong thuật toán nguơi viết cũng bỏ đi, không cần đâu :D
Sửa lại thế này :D
INPUT: Số nguyên duơng N.
OUTPUT: N là số nguyên tố hay hợp số.

Thuật toán:
B1. i <--- 1.
B2. i <--- i + 1.
B3. Nếu i >= N thì thông báo N là số nguyên tố rồi kết thúc.
B4. Nếu N chia hết cho i (N mod i = 0) thì thông báo N là hợp số rồi kết thúc.
B5. Quay lại bước 2.
Đúng ra thì chỉ cần xét i >= sqrt(N) thì kết thúc rồi, không cần tới N - 1 đâu :D

Còn mấy cái nguyên tố ngẫu nhiên, định lí Fermat nhỏ nữa,...thì sao nhỉ
6cool_smile.gif
.


Không hiểu =))

Mà giờ nên tiếp tục phần thuật toán hay chuyển sang viết chuơng trình nhỉ :-?
 
B

biobaby

Chuyển sang viết chuơng trình ạ!!!!!!!
......................................................................................................
 
L

lamdetien36

Phần 4:
VIẾT CHƯƠNG TRÌNH PASCAL ĐƠN GIẢN

I. NHẮC LẠI CÚ PHÁP CỦA NNLT PASCAL:
1) Cấu trúc chương trình:
- Phần khai báo:
+ Tên chương trình: program <tên chương trình>;
+ Khai báo thư viện: uses <danh sách các thư viện, phân cách bởi dấu, >;
+ Khai báo biến: var <tên biến> : <kiểu dữ liệu>;
+ Khai báo hằng: const <tên hằng> = <giá trị>;
- Phần thân: Có dạng như sau:
Mã:
Begin
    <câu lệnh 1>;
    <câu lệnh 2>;
    <câu lệnh 3>;
    ...
    <câu lệnh n>;
End.
Trong đó câu lệnh có thể là câu lệnh đơn (chỉ gồm 1 lệnh duy nhất) hoặc câu lệnh ghép (là một khối gồm nhiều câu lệnh, được đặt trong một begin..end)
2) Các kiểu dữ liệu:
- Số nguyên: byte, integer, word, longint...
- Số thực: real, extended...
- Ký tự: char.
- Xâu ký tự: string.
- Record: do người lập trình tự định nghĩa (Tin 11 only :D)
3) Phép gán:
Cú pháp
Mã:
<tên biến> := <giá trị>;
II. CẤU TRÚC RẼ NHÁNH: được thể hiện bằng câu lệnh điều kiện.
Câu lệnh điều kiện trong Pascal có cú pháp:
- Dạng thiếu: IF <điều kiện> THEN <câu lệnh>;
- Dạng đủ: IF <điều kiện> THEN <câu lệnh 1> ELSE <câu lệnh 2>;
Các từ khóa and, or:
- Từ khóa andor kết hợp nhiều phép so sánh đơn giản lại với nhau thành phép so sánh phức hợp.
- Từ khóa and tạo ra phép so sánh đúng khi và chỉ khi tất cả các phép so sánh thành phần đều đúng.
- Từ khóa or tạo ra phép so sánh đúng khi có ít nhất một phép so sánh thành phần đúng.
III. MỘT SỐ VÍ DỤ:
1) Viết chương trình in ra dòng chữ "Chao Cac Ban".
Mã:
program bai1;
begin
    write('Chao Cac Ban');
    readln
end.
2) Viết chương trình nhập vào 2 số nguyên a, b rồi in ra tổng của chúng.
Mã:
program bai2;
var
    a, b: integer;
begin
    write('Nhap A, B: '); readln(a, b);
    write('Tong Cua Chung La ', a + b);
    readln
end.
3) Viết chương trình nhập vào 2 số nguyên a, b. In ra màn hình kết quả a/b (nếu thực hiện được)
Mã:
program bai3;
var
    a, b: integer;
begin
    write('Nhap A, B: '); readln(a, b);
    if b <> 0 then
        write('Ket Qua: ', a / b : 0 : 6)
    else
        write('Khong Thuc Hien Duoc');
    readln
end.
IV. BÀI TẬP:
1) Viết chương trình tìm số lớn nhất trong 3 số nguyên a, b, c nhập từ bàn phím.
2) Viết chương trình kiểm tra 3 số a, b, c có phải độ dài 3 cạnh trong tam giác không.
Từ từ mình sẽ ra thêm :D

Mà có nên post thêm BT về lệnh lặp để phục vụ cho Tin 11 không nhỉ :-?
 
A

abluediamond

Chưa rành thuật toán mà chuyển sang chương trình rồi sao =)). Mà sao ngươi chả ghi một cái quy tắc nào về viết thân chương trình, lỡ người khác vào thì có biết cách trình bày không
7cool_waaaht.gif
.

Viết chương trình tìm số lớn nhất trong 3 số nguyên a, b, c nhập từ bàn phím.

Mã:
program wahtthehell;
var
    a, b, c: integer;
begin
    write('Nhap a, b, c: '); readln(a, b, c);
    if a > b and a > c then write('A lon nhat');
    if b > a and b > c then write ('B lon nhat');
    if c > a and c > b then write('C lon nhat');
    readln
end.

2) Viết chương trình kiểm tra 3 số a, b, c có phải độ dài 3 cạnh trong tam giác không.
Cái này nếu ta làm thêm dấu "-" thì phải viết thêm 1 trường hợp nữa phải ko
2cool_sad.gif
.

Mã:
program fileinthehole
var
    a, b, c: integer;
begin
    write('Nhap a, b, c: '); readln(a, b, c);
    if a < b + c or a > b - c then write('a, b, c la canh cua tam giac');
    if b < a + c or b > a - c then write(' a, b, c la canh cua tam giac');
    if c < b + a or c > b - a then write(' a, b, c la canh cua tam giac');
    readln
end.
 
Last edited by a moderator:
L

lamdetien36

Chưa rành thuật toán mà chuyển sang chương trình rồi sao =)). Mà sao ngươi chả ghi một cái quy tắc nào về viết thân chương trình, lỡ người khác vào thì có biết cách trình bày không
7cool_waaaht.gif
.



Mã:
program wahtthehell;
var
    a, b, c: integer;
begin
    write('Nhap a, b, c: '); readln(a, b, c);
    if a > b and a > c then write('A lon nhat');
    if b > a and b > c then write ('B lon nhat');
    if c > a and c > b then write('C lon nhat');
    readln
end.
Cái này nếu ta làm thêm dấu "-" thì phải viết thêm 1 trường hợp nữa phải ko
2cool_sad.gif
.

Mã:
program fileinthehole
var
    a, b, c: integer;
begin
    write('Nhap a, b, c: '); readln(a, b, c);
    if a < b + c or a > b - c then write('a, b, c la canh cua tam giac');
    if b < a + c or b > a - c then write(' a, b, c la canh cua tam giac');
    if c < b + a or c > b - a then write(' a, b, c la canh cua tam giac');
    readln
end.
Tại ta không biết phải viết cái quy tắc thân chương trình như thế nào :D Thành ra giờ chỉ có nói ra thông qua ví dụ thôi :D
Mà ngươi chú ý cái này nhé:
Các biểu thức được nối với nhau bởi and, or (hoặc xor nữa) thì bắt buộc phải có ngoặc.
Ví dụ, bài 1 thì ngươi phải sửa các điều kiện lại thành thế này:
Mã:
(a > b) and (a > c)
Còn bài 2 thì ngươi sai cmnr :|
3 số a, b, c tạo thành 1 tam giác <=> (a + b > c) and (b + c > a) and (c + a > b)
Phải có cả 3 điều kiện cùng thoả mãn, nên phải dùng phép and. Và điều kiện (a < b - c) là không cần thiết :D
À mà ngươi thiếu ; sau program ở bài 2 nhé ;;)
 
A

abluediamond


Tại ta không biết phải viết cái quy tắc thân chương trình như thế nào :D Thành ra giờ chỉ có nói ra thông qua ví dụ thôi :D
Mà ngươi chú ý cái này nhé:
Các biểu thức được nối với nhau bởi and, or (hoặc xor nữa) thì bắt buộc phải có ngoặc.
Ví dụ, bài 1 thì ngươi phải sửa các điều kiện lại thành thế này:
Mã:
(a > b) and (a > c)
Còn bài 2 thì ngươi sai cmnr :|
3 số a, b, c tạo thành 1 tam giác <=> (a + b > c) and (b + c > a) and (c + a > b)
Phải có cả 3 điều kiện cùng thoả mãn, nên phải dùng phép and. Và điều kiện (a < b - c) là không cần thiết :D
À mà ngươi thiếu ; sau program ở bài 2 nhé ;;)

Thế này thì ngươi đáng tội rồi, từ nay ghi cái nào mới thì thêm ví dụ đê
byebye.gif
.

Bài khác
byebye.gif
.
 
L

lamdetien36

Thế này thì ngươi đáng tội rồi, từ nay ghi cái nào mới thì thêm ví dụ đê
byebye.gif
.

Bài khác
byebye.gif
.
Thử bài này đi: Một gia đình trong 1 tháng dùng hết N kWh điện. Tính tiền điện gia đình đó phải trả, biết rằng:
- 100 kWh đầu trả với giá 1000 đ/kWh.
- 50 kWh tiếp theo trả với giá 1100 đ/kWh.
- 50 kWh tiếp theo trả với giá 1300 đ/kWh.
- Phần còn lại trả với giá 1450 đ/kWh.
Bài này thuộc dạng IF THEN kinh điển :D
Mà nếu ngươi muốn luyện thêm phần thuật toán thì viết luôn thuật toán bài này đê :))
 
Last edited by a moderator:
L

lamdetien36

Mọi người làm thử bài này luôn đi :D
Nhập từ bàn phím số nguyên dương N. Tìm cách phân tích N thành tổng 2 số a, b sao cho $a^2.b$ là lớn nhất.
Bài này khá là hay đấy ;;) Những ai đang lớp 11 có thể dùng for/while/repeat, nhưng mà lớp 8 thì chỉ được dùng if then ;;)
 
L

lamdetien36

Thêm 1 bài này nữa :D
Nhập vào 3 số a, b, c. Kiểm tra xem 3 số đó có phải là 3 cạnh của 1 tam giác hay không. Nếu có thì kiểm tra tiếp xem tam giác đó có cân / đều / vuông không, ở mỗi trường hợp, thiết lập công thức tính diện tích và áp dụng.
Tức là nếu là TG cân thì áp dụng công thức tính diện tích tam giác cân, TG đều thì dùng công thức tính diện tích tam giác đều, ... :D
 
A

abluediamond


Thử bài này đi: Một gia đình trong 1 tháng dùng hết N kWh điện. Tính tiền điện gia đình đó phải trả, biết rằng:
- 100 kWh đầu trả với giá 1000 đ/kWh.
- 50 kWh tiếp theo trả với giá 1100 đ/kWh.
- 50 kWh tiếp theo trả với giá 1300 đ/kWh.
- Phần còn lại trả với giá 1450 đ/kWh.
Bài này thuộc dạng IF THEN kinh điển :D
Mà nếu ngươi muốn luyện thêm phần thuật toán thì viết luôn thuật toán bài này đê :))

5cool_big_smile.gif
5cool_big_smile.gif


program tinhtiendien;
var
A: integer;
S: real;
begin
write('Nhap Luong Dien Tieu Thu: '); readln(A);
if A <= 100 then S:= A * 550 else
if A <= 150 then S:= 100 * 550 + (A - 100) * 1100 else
if A <= 200 then S:= 100 * 550 + 50 * 1100 + (A - 150) * 1470 else
if A > 200 then S:= 100 * 550 + 50 * 1100 + 50 * 1470 + (A - 200) * 1600;

S := S * 110 / 100;


write('Tien Dien Phai Tra: ', S : 0 : 4);
readln
end.
Chuẩn rồi đó :D
~lamdetien36
 
Last edited by a moderator:
A

abluediamond

Thêm 1 bài này nữa :D
Nhập vào 3 số a, b, c. Kiểm tra xem 3 số đó có phải là 3 cạnh của 1 tam giác hay không. Nếu có thì kiểm tra tiếp xem tam giác đó có cân / đều / vuông không, ở mỗi trường hợp, thiết lập công thức tính diện tích và áp dụng.
Tức là nếu là TG cân thì áp dụng công thức tính diện tích tam giác cân, TG đều thì dùng công thức tính diện tích tam giác đều, ... :D

Tìm mãi không biết công thức tính diện tích tam giác cân nên đành áp dụng cách tính diện tích thông thường vậy =)).
Mã:
Program whatthehenta;

Var 
     a, b, c: integer;
     Dientich: real;

Begin

    Writeln('Nhap a, b, c: '); readln(a, b, c);
    If (a + b > c) and (b + c > a) and (c + a > b) then 
    write('a, b, c la canh cua 1 tam giac'); else
   If (a = b) or (b = c) or (c = a) then 
    write('tam giac do la tam giac can'); else S:= (a*b/2) or (b*c/2) or (c*a/2)
   If a = b = c 
   then write('tam giac do la tam giac deu'); else Dientich:= (a*a)*(exp(ln(a)*1/3)/4)
readln;
end.
 
Last edited by a moderator:
L

lamdetien36

Tìm mãi không biết công thức tính diện tích tam giác cân nên đành áp dụng cách tính diện tích thông thường vậy =)).
Mã:
Program whatthehenta;

Var 
     a, b, c: integer;
     Dientich: real;

Begin

    Writeln('Nhap a, b, c: '); readln(a, b, c);
    If (a + b > c) and (b + c > a) and (c + a > b) then 
    write('a, b, c la canh cua 1 tam giac'); else
   If (a = b) or (b = c) or (c = a) then 
    write('tam giac do la tam giac can'); else S:= (a*b/2) or (b*c/2) or (c*a/2)
   If a = b = c 
   then write('tam giac do la tam giac deu'); else Dientich:= (a*a)*(exp(ln(a)*1/3)/4)
readln;
end.
Lần này lại sai tùm lum rồi :(
- Điều kiện phức hợp phải có ngoặc, và không tồn tại kiểu điều kiện a = b = c.
- IF THEN ELSE sai hết rồi.
- Hình như công thức sai mất rồi.
Sửa lại thế này :D
Mã:
var
    a, b, c, p: real;
begin
    writeln('Nhap A, B, C: '); readln(a, b, c);
    if (a + b > c) and (b + c > a) and (c + a > b) then
    begin
        writeln('Day La Tam Giac');
        if (a = b) or (b = c) or (c = a) then 
        begin
            writeln('Day La Tam Giac Can');
            if (a = b) and (b = c) then
            begin
                writeln('Day La Tam Giac Deu');
                writeln('Dien Tich: ', a * a * sqrt(3) / 4 : 0 : 4);
            end
            else
            begin
                writeln('Dien Tich: ');
                if (a = b) then
                    writeln(sqrt(a * a - c * c / 4) * c : 0 : 4)
                else if (a = c) then
                    writeln(sqrt(a * a - b * b / 4) * b : 0 : 4)
                else
                    writeln(sqrt(b * b - a * a / 4) * a : 0 : 4);
            end
        end
        else if (a*a=b*b+c*c) or (b*b=a*a+c*c) or (c*c=a*a+b*b) then
        begin
            writeln('Day La Tam Giac Vuong');
            writeln('Dien Tich: ');
            if (a * a = b * b + c * c) then
                writeln(b * c / 2 : 0 : 4)
            else if (b * b = a * a + c * c) then
                writeln(a * c / 2 : 0 : 4)
            else
                writeln(a * b / 2 : 0 : 4);
        end
        else
        begin
            writeln('Day La Tam Giac Thuong');
            writeln('Dien Tich: ');
            p := (a + b + c) / 2;
            writeln(sqrt(p * (p - a) * (p - b) * (p - c)));
        end;
    end
    else writeln('Day Khong Phai Tam Giac');
    readln
end.
Bài này chủ yếu chỉ để luyện IF THEN thôi :D Chứ thực ra các trường hợp chỉ cần dùng 1 công thức Heron, vì kết quả nó như nhau cả :))
 
A

abluediamond


Lần này lại sai tùm lum rồi :(
- Điều kiện phức hợp phải có ngoặc, và không tồn tại kiểu điều kiện a = b = c.
- IF THEN ELSE sai hết rồi.
- Hình như công thức sai mất rồi.
Sửa lại thế này :D
Mã:
var
    a, b, c, p: real;
begin
    writeln('Nhap A, B, C: '); readln(a, b, c);
    if (a + b > c) and (b + c > a) and (c + a > b) then
    begin
        writeln('Day La Tam Giac');
        if (a = b) or (b = c) or (c = a) then 
        begin
            writeln('Day La Tam Giac Can');
            if (a = b) and (b = c) then
            begin
                writeln('Day La Tam Giac Deu');
                writeln('Dien Tich: ', a * a * sqrt(3) / 4 : 0 : 4);
            end
            else
            begin
                writeln('Dien Tich: ');
                if (a = b) then
                    writeln(sqrt(a * a - c * c / 4) * c : 0 [B]:[/B] 4)
                else if (a = c) then
                    writeln(sqrt(a * a - b * b / 4) * b : 0 : 4)
                else
                    writeln(sqrt(b * b - a * a / 4) * a : 0 : 4);
            end
        end
        else if (a*a=b*b+c*c) or (b*b=a*a+c*c) or (c*c=a*a+b*b) then
        begin
            writeln('Day La Tam Giac Vuong');
            writeln('Dien Tich: ');
            if (a * a = b * b + c * c) then
                writeln(b * c / 2 : 0 : 4)
            else if (b * b = a * a + c * c) then
                writeln(a * c / 2 : 0 : 4)
            else
                writeln(a * b / 2 : 0 : 4);
        end
        else
        begin
            writeln('Day La Tam Giac Thuong');
            writeln('Dien Tich: ');
            p := (a + b + c) / 2;
            writeln(sqrt(p * (p - a) * (p - b) * (p - c)));
        end;
    end
    else writeln('Day Khong Phai Tam Giac');
    readln
end.
Bài này chủ yếu chỉ để luyện IF THEN thôi :D Chứ thực ra các trường hợp chỉ cần dùng 1 công thức Heron, vì kết quả nó như nhau cả :))

Sao rắc rối thế =)), còn bài 2 nữa, ngươi làm luôn rồi qua bài khác =)).

Mà dấu : trong bài dùng để làm gì thế.
 
Last edited by a moderator:
Status
Không mở trả lời sau này.
Top Bottom