• Khung trình chiếu

Bài tập: Tìm tổng số nguyên tố nhỏ nhất trong mảng 2 chiều

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: 113
Đã 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 tổng số nguyên tố nhỏ nhất trong mảng 2 chiều

Bài viết bởi huynhbuutam »

Viết chương trình nhập dữ liệu là các số nguyên dương vào bảng 5x5 như ví dụ minh họa dưới đây:

Mã: Chọn tất cả

1  2  3  4  5
6  7  8  9  10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Tính tổng các số nguyên tố có theo từng cột, từng hàng và theo 2 đường chéo. Ví dụ minh họa:

Mã: Chọn tất cả

1  2  3  4  5 = 10
6  7  8  9  10 = 7
11 12 13 14 15 = 24
16 17 18 19 20 = 36
21 22 23 24 25 = 23
|| || || || || \\
11 26 39 19 5    61
In ra giá trị nhỏ nhất trong các tổng vừa tìm được.
Chương trình minh họa:

Mã: Chọn tất cả

Moi ban nhap hang 1: 1 2 3 4 5
Moi ban nhap hang 2: 6 7 8 9 10
Moi ban nhap hang 3: 11 12 13 14 15
Moi ban nhap hang 4: 16 17 18 19 20
Moi ban nhap hang 5: 21 22 23 24 25
Ket qua tim duoc la: 5

Mã nguồn (Dùng mảng 1 chiều):

Mã: Chọn tất cả

Uses Crt;

Function SNT(N : LongInt) : Boolean;
Var i : LongInt;
Begin
	If N < 2 Then Exit(False);
	For i := 2 To N Div 2 Do
		If N Mod i = 0 Then Exit(False);
	Exit(True);
End;

Procedure NhapHang(Var mH : Array Of LongInt; H : LongInt);
Var i : Byte;
Begin
	Write('Moi ban nhap hang ', H, ': ');
	{ Khi sử dụng Array làm tham số trong chương trình con
	  Phần tử đầu tiên luôn bắt dầu từ 0
	  Ví dụ, nếu mảng đầu vào được khai báo là Array[5..8]
	  Thì khi vào chương trình con nó sẽ trở thành Array[1..4] }
	ReadLn(mH[0], mH[1], mH[2], mH[3], mH[4]);
	mH[5] := 0;
	For i := 0 To 4 Do
		If SNT(mH[i]) Then mH[5] := mH[5] + mH[i];
End;

Var Hang1, Hang2, Hang3, Hang4, Hang5, Hang6 : Array[1..6] Of LongInt;
	i : Byte;
	Min : LongInt;
Begin
	ClrScr;
	NhapHang(Hang1, 1);
	Min := Hang1[6];
	
	NhapHang(Hang2, 2);
	If Hang2[6] < Min Then Min := Hang2[6];
	
	NhapHang(Hang3, 3);
	If Hang3[6] < Min Then Min := Hang3[6];
	
	NhapHang(Hang4, 4);
	If Hang4[6] < Min Then Min := Hang4[6];
	
	NhapHang(Hang5, 5);
	If Hang5[6] < Min Then Min := Hang5[6];
	{ Tính tổng từng cột }
	For i := 1 To 5 Do
		Begin
			Hang6[i] := 0;
			If SNT(Hang1[i]) Then Hang6[i] := Hang6[i] + Hang1[i];
			If SNT(Hang2[i]) Then Hang6[i] := Hang6[i] + Hang2[i];
			If SNT(Hang3[i]) Then Hang6[i] := Hang6[i] + Hang3[i];
			If SNT(Hang4[i]) Then Hang6[i] := Hang6[i] + Hang4[i];
			If SNT(Hang5[i]) Then Hang6[i] := Hang6[i] + Hang5[i];
			If Hang6[i] < Min Then Min := Hang6[i];
		End;
	{ Tính tổng 2 đường chéo }
	Hang6[6] := 0;
	If SNT(Hang1[1]) Then Hang6[6] := Hang6[6] + Hang1[1];
	If SNT(Hang2[2]) Then Hang6[6] := Hang6[6] + Hang2[2];
	If SNT(Hang3[3]) Then Hang6[6] := Hang6[6] + Hang3[3];
	If SNT(Hang4[4]) Then Hang6[6] := Hang6[6] + Hang4[4];
	If SNT(Hang5[5]) Then Hang6[6] := Hang6[6] + Hang5[5];
	
	If SNT(Hang1[5]) Then Hang6[6] := Hang6[6] + Hang1[5];
	If SNT(Hang2[4]) Then Hang6[6] := Hang6[6] + Hang2[4];
	If SNT(Hang4[2]) Then Hang6[6] := Hang6[6] + Hang4[2];
	If SNT(Hang5[1]) Then Hang6[6] := Hang6[6] + Hang5[1];
	
	If Hang6[6] < Min Then Min := Hang6[6];
	
	Write('Ket qua tim duoc la: ', Min);
	ReadLn;
End.

Mã nguồn (Dùng mảng 2 chiều):

Mã: Chọn tất cả

Uses Crt;

Function SNT(N : LongInt) : Boolean;
Var i : LongInt;
Begin
	If N < 2 Then Exit(False);
	For i := 2 To N Div 2 Do
		If N Mod i = 0 Then Exit(False);
	Exit(True);
End;

Var A : Array[1..6, 1..6] Of LongInt;
	i, j : Byte;
	Min : LongInt;
Begin
	ClrScr;
	Min := -1;
	For i := 1 To 5 Do
		Begin
			Write('Moi ban nhap hang ', i, ': ');
			ReadLn(A[i, 1], A[i, 2], A[i, 3], A[i, 4], A[i, 5]);
			A[i, 6] := 0;
			For j := 1 To 5 Do
				If SNT(A[i, j]) Then A[i, 6] := A[i, 6] + A[i, j];
			If Min = -1 Then Min := A[i, 6]
			Else If A[i, 6] < Min Then Min := A[i, 6];
		End;
	
	{ Tính tổng từng cột }
	For i := 1 To 5 Do
		Begin
			A[6, i] := 0;
			For j := 1 To 5 Do
				If SNT(A[j, i]) Then A[6, i] := A[6, i] + A[j, i];
			If A[6, i] < Min Then Min := A[6, i];
		End;
	{ Tính tổng 2 đường chéo }
	A[6, 6] := 0;
	For i := 1 To 5 Do
		Begin
			If SNT(A[i, i]) Then A[6, 6] := A[6, 6] + A[i, i];
			If SNT(A[i, 5-i+1]) And (i <> 3) Then A[6, 6] := A[6, 6] + A[i, 5-i+1];
		End;
	
	If A[6, 6] < Min Then Min := A[6, 6];
	
	Write('Ket qua tim duoc la: ', Min);
	ReadLn;
End.
Gửi hồi đáp
  • Similar Topics
    Các hồi đáp
    Lượt xem
    Bài viết cuối