• Khung trình chiếu

Bài tập: Tìm các tam giác bằng nhau từ các cạnh cho trước

Các mã nguồn được viết bằng ngôn ngữ Pascal
Gửi hồi đáp
Ảnh đại diện người dùng
huynhbuutam
Nhà sáng lập
Nhà sáng lập
Các bài viết: 112
Đã gia nhập lúc: T3 31 Th8, 2021 22:04
Địa điểm: Trường THCS Châu Lăng
Tên thật: Huỳnh Bửu Tâm

Bài tập: Tìm các tam giác bằng nhau từ các cạnh cho trước

Bài viết bởi huynhbuutam »

Tam giác được tạo thành từ 03 (ba) đoạn thẳng và thỏa mãn điều kiện tổng hai cạnh bất kỳ lớn hơn cạnh thứ ba. Hai tam giác khác nhau khi có ít nhất một cạnh có độ dài khác so với tam giác kia.
Viết chương trình tìm tất cả các cặp tam giác khác nhau có cùng chu vi từ 06 (sáu) đoạn thẳng cho trước.
- Input: Gồm 06 (sáu) số tự nhiên lớn hơn không, là độ dài của 06 (sáu) đoạn thẳng, mỗi giá trị cách nhau ít nhất một ký tự trắng.
- Output: Là các cặp tam giác khác nhau có cùng chu vi, mỗi cặp tam giác in trên một dòng theo dạng biểu thức. Trong trường hợp không tìm được thì thông báo “KHONG TIM DUOC”.
Chương trình ví dụ:

Mã: Chọn tất cả

Input: 48 49 60 65 70 71
Output:
Cap thu 1: 48+60+71=49+60+70
Cap thu 2: 48+65+71=49+65+70
Mã nguồn:

Mã: Chọn tất cả

Uses Crt;
Var mTest : Array[1..3] Of Byte;
	mData : Array[1..20] Of Integer;
	mResult : Array[1..3, 1..1000] Of Integer;
	Sl : Integer;
	X : Byte;

Function TG(a, b, c : Integer) : Boolean;
Begin
	TG := False;
	If (a + b > c) And
		(b + c > a) And
		(c + a > b)
	Then TG := True;
End;

Procedure Save(a, b, c : Integer);
Begin
	Inc(Sl);
	mResult[1, Sl] := a;
	mResult[2, Sl] := b;
	mResult[3, Sl] := c;
End;

Function CheckDup(a, b, c : Integer) : Boolean;
Var i : Integer;
Begin
	CheckDup := False;
	For i := 1 To Sl Do
		If (a = mResult[1, i]) And (b = mResult[2, i]) And (c = mResult[3, i]) Then CheckDup := True;
End;

Procedure Print;
Var k, i, j : Integer;
Begin
	k := 0;
	For i := 1 To Sl-1 Do
		For j := i+1 To Sl Do
			If mResult[1, i] + mResult[2, i] + mResult[3, i] =
				mResult[1, j] + mResult[2, j] + mResult[3, j]
			Then Begin
				Inc(k);
				Write('Cap thu ', k, ': ');
				Write(mResult[1, i], '+');
				Write(mResult[2, i], '+');
				Write(mResult[3, i]);
				Write('=');
				Write(mResult[1, j], '+');
				Write(mResult[2, j], '+');
				WriteLn(mResult[3, j]);
			End;
			
	If k = 0 Then WriteLn('KHONG TIM DUOC');
End;

Procedure Process;
Var i, j : Byte;
	a, b, c : Integer;
Begin
	For i := 1 To 2 Do
		For j := i+1 To 3 Do
			If (mTest[i] >= mTest[j]) Or (mData[mTest[i]] = mData[mTest[j]]) Then Exit;

	a := mData[mTest[1]];
	b := mData[mTest[2]];
	c := mData[mTest[3]];

	If TG(a, b, c) And (Not CheckDup(a, b, c)) Then Save(a, b, c);
End;

Procedure Test(k : Byte);
Var i : Byte;
Begin
	For i := 1 To X Do Begin
		mTest[k] := i;
		If k = 3 Then Process Else Test(k+1);
	End;
End;

Var i : Byte;
	Flag : Boolean;
Begin
	ClrScr;
	Sl := 0;
	Flag := True;
	X := 6;
	
	For i := 1 To X Do
	Begin
		Read(mData[i]);
		If mData[i] <= 0 Then Begin
			WriteLn('So thu ', i, ' khong hop le');
			Flag := False;
		End;
	End;
	ReadLn;
	If Flag Then Begin
		Test(1);
		Print;
	End;
	ReadLn;
End.
Gửi hồi đáp
  • Similar Topics
    Các hồi đáp
    Lượt xem
    Bài viết cuối