1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo kỹ thuật lập trình thư viện tiện ích ma trận

16 39 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo kỹ thuật lập trình thư viện tiện ích ma trận
Tác giả Dương Thu Trang
Người hướng dẫn Thầy Vũ Thành Nam
Trường học Hanoi University of Science and Technology
Chuyên ngành Applied Mathematics and Computer Science
Thể loại Báo cáo môn học
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 16
Dung lượng 521,04 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đảm bảo các quy tắc trong chương trình ..... Giới thiệu sơ qua về bài toán Thư viện ma trận cho phép tổng hợp lại các bài toán con của ma trận để truy xu ất, ứng dụng vào thực hiện chư

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

Viện Toán ứng dụng và tin học

Gi ảng viên hướng dẫn: Th ầy Vũ Thành Nam

B ộ môn:

Vi ện:

K ỹ thuật lập trình Toán ứng dụng và tin học

H ọ và tên:

MSSV:

Dương Thu Trang

20200625

HÀ N ỘI, 8/2022

Trang 2

M ỤC LỤC

Chương 1: Mô tả cấu trúc chương trình 2

1.Gi ới thiệu sơ qua về bài toán 2

2.Cách thức thực hiện 2

3.Mã nguồn 3

Chương 2: Kỹ thuật lập trình để có chương trình tốt 7

1.Phân tích yêu cầu của đề tài 7

2.Thiết kế 7

3 Đảm bảo các quy tắc trong chương trình 7

4.Kỹ thuật làm việc với biến 7

Chương 3: Các tình huống kiểm thử 8

1.L ập trình phòng ngừa 8

2.Kiểm thử 11

Chương 4:Tổng kết 15

Trang 3

CHƯƠNG 1: MÔ TẢ CẤU TRÚC CHƯƠNG TRÌNH

1 Giới thiệu sơ qua về bài toán

Thư viện ma trận cho phép tổng hợp lại các bài toán con của ma trận để truy

xu ất, ứng dụng vào thực hiện chương trình một cách nhanh chóng, tiện lợi hơn Trong bài báo cáo môn Kỹ thuật lập trình, em xin trình bày 3 bài toán cơ bản sau: Cộng 2 ma trận, Trừ hai ma trận, Nhân hai ma trận Đồng thời cập nhật thêm một số tính năng giúp chương trình hoạt động hiệu quả hơn với người dùng

2 Cách thức thực hiện

• Ngôn ngữ lập trình lựa chọn: C#

• Chủ đề lựa chọn: Chủ đề 1 ( Xây dựng thư viện về ma trận )

• Kỹ thuật lập trình sử dụng: Lập trình hướng cấu trúc

• Input dữ liệu: nhập từ bàn phím

• Output dữ liệu: hiển thị trên màn hình

3 Mã nguồn của chương trình ( đã kèm chú thích)

4 using System;

5

6 //Dương Thu Trang 20200625

7 namespace thư_viện

8 {

9 class Matran

10 {

11 // Cac thuoc tinh

12 private int So_Hang;

13 private int So_Cot;

14 private int[,] MT;

15 // Phuong thuc khoi tao

16 public Matran(int sh, int sc)

17 {

18 this.So_Hang = sh;

Trang 4

19 this.So_Cot = sc;

20 this.MT = new int[sh, sc];

21 }

22 // Phuong thuc Nhap ma tran

23 public void NhapMT()

24 {

25 Console.Write("\n\t Nhap so hang cua ma tran: ");

26 this.So_Hang = int.Parse(Console.ReadLine());

27 Console.Write("\n\t Nhap so cot cua ma tran: ");

28 this.So_Cot = int.Parse(Console.ReadLine());

29 for (int i = 1; i <= this.So_Hang; i++)

30 for (int j = 1; j <= this.So_Cot; j++)

31 {

32 Console.Write("\n\t - Nhap phan tu thu A[" + i + "," +

j + "]: ");

33 this.MT[i, j] = int.Parse(Console.ReadLine());

34 }

35 }

36 // Tim kiem phan tu ma tran

37 public int Tim_Kiem(int x)

38 {

39 for (int i = 1; i <= this.So_Hang; i++)

40 for (int j = 1; j <= this.So_Cot; j++)

41 if (this.MT[i, j] == x)

42 { return i;}

43

44 return 0;

45 }

46 // Cap nhat phan tu

47 public void CapNhat(int m, int n, int pos)

48 {

49 this.MT[m, n] = pos;

50 }

51 // Cong 2 ma tran

52 public Matran Cong2MT(Matran a, Matran b)

53 {

54 Matran c = new Matran(this.So_Hang, this.So_Cot);

55 if (a.So_Hang == b.So_Hang && a.So_Cot == b.So_Cot)

56 {

57 for (int i = 0; i < this.So_Hang; i++)

58 {

59 for (int j = 0; j < this.So_Cot; j++)

60 {

61 c.MT[i, j] = a.MT[i, j] + b.MT[i, j];

62 }

63 }

64 }

65 else

66 {

67 Console.WriteLine("\n\t Khong cong duoc !!! \n");

68 }

69 return c;

70 }

71 // Tru 2 ma tran

72 public Matran Hieu2MT(Matran a, Matran b)

73 {

74 Matran c = new Matran(this.So_Hang, this.So_Cot);

75 if (a.So_Hang == b.So_Hang && a.So_Cot == b.So_Cot)

76 {

77 for (int i = 0; i < this.So_Hang; i++)

78 {

79 for (int j = 0; j < this.So_Cot; j++)

80 {

81 c.MT[i, j] = a.MT[i, j] - b.MT[i, j];

82 }

Trang 5

83 }

84 }

85 else

86 {

87 Console.WriteLine("\n\t Khong tru duoc !!!");

88 }

89 return c;

90 }

91 // Tich 2 ma tran

92 public Matran Tich2MT(Matran a, Matran b)

93 {

94 Matran c = new Matran(this.So_Hang, this.So_Cot);

95 if (a.So_Cot != b.So_Hang)

96 {

97 Console.Write("\n\t ERROR: Khong thuc hien dc phep

nhan !!!");

98 }

99 else

100 {

101 for (int i = 0; i < this.So_Hang; i++)

102 for (int j = 0; j < this.So_Cot; j++)

103 {

104 c.MT[i, j] = 0;

105 for (int k = 0; k < b.So_Hang; k++)

106 {

107 c.MT[i, j] += a.MT[i, k] * b.MT[k, j];

108 }

109 }

110 }

111 return c;

112 }

113 // Xuat Ma tran

114 public void XuatMT()

115 {

116 Console.WriteLine("\t Ma tran: \n");

117 for (int i = 1; i <= this.So_Hang; i++)

118 {

119 for (int j = 1; j <= this.So_Cot; j++)

120 {

121 Console.Write("\t" + this.MT[i, j] + " ");

122 }

123 Console.WriteLine();

124 }

125 }

126 public void Menu(out byte chon)

127 {

128 Console.Clear();

129 Console.WriteLine("\n\t|| BAI TOAN MA TRAN || ");

130 Console.WriteLine( "\t|| -||");

131 Console.WriteLine("\t|| 1 Nhap Ma Tran ||");

132 Console.WriteLine("\t|| 2 Cap nhap phan tu Ma Tran

||");

133 Console.WriteLine("\t|| 3 Tong hai Ma tran ||");

134 Console.WriteLine("\t|| 4 Hieu hai Ma tran ||");

135 Console.WriteLine("\t|| 5 Tich hai Ma Tran ||");

136 Console.WriteLine("\t|| 6 Xuat Ma Tran ||");

137 Console.WriteLine("\t|| 0 Quay ve Menu chinh ||");

138

Console.WriteLine("\t|| ||\n");

139 Console.Write("\n\tNHAP LUA CHON: ");

140 chon = byte.Parse(Console.ReadLine());

141 Console.ReadKey();

142 }

143 // Main

Trang 6

144 static public void Main()

145 {

146 Matran M1 = new Matran(50, 50);

147 Matran M2 = new Matran(50, 50);

148 Matran M3 = new Matran(50, 50);

149 byte chon;

150 int pos;

151 int h, c, n;

152 //int[,] a;

153 do

154 {

155 var output = new Matran(50, 50);

156 output Menu(out chon);

157 switch (chon)

158 {

159 case 1:

160 M1.NhapMT();

161 break;

162 case 2:

163 Console.Write("\n\t Nhap vi tri phan tu can cap nhat \n");

164 Console.Write("\t\tHang: ");

165 h = int.Parse(Console.ReadLine());

166 Console.Write("\n\t\t Cot: ");

167 c = int.Parse(Console.ReadLine());

168 Console.Write("\n\t\t Gia tri: ");

169 n = int.Parse(Console.ReadLine());

170 if (M1.Tim_Kiem(n) == -1)

171 {

172 Console.Write("\n\t KET QUA TIM KIEM KHONG HOP LE !!!");

173 }

174 else

175 {

176 Console.Write("\n\t Nhap gia tri moi:

");

177 pos = int.Parse(Console.ReadLine());

178 M1.CapNhat(h, c, pos);

179 }

180 Console.ReadLine();

181 break;

182 case 3:

183 Console.WriteLine("\n\t Nhap ma tran 1: ");

184 M1.NhapMT();

185 Console.WriteLine("\n\t Nhap ma tran thu 2:

");

186 M2.NhapMT();

187 Console.WriteLine("\t Tong hai ma tran la:

");

188 M3.Cong2MT(M1, M2);

189 M3.XuatMT();

190 Console.ReadLine();

191 break;

192 case 4:

193 Console.WriteLine("\n\t Nhap ma tran thu 1:

");

194 M1.NhapMT();

195 Console.WriteLine("\n\t Nhap ma tran thu 2:

");

196 M2.NhapMT();

197 Console.WriteLine("\t Hieu hai ma tran la:

");

198 M3.Hieu2MT(M1, M2);

199 M3.XuatMT();

200 Console.ReadLine();

Trang 7

201 break;

202 case 5:

203 Console.WriteLine("\n\t Nhap ma tran thu 1:

");

204 M1.NhapMT();

205 Console.WriteLine("\n\t Nhap ma tran thu 2:

");

206 M2.NhapMT();

207 Console.WriteLine("\n\t Tich 2 Ma tran la:

");

208 M3.Tich2MT(M1, M2);

209 M3.XuatMT();

210 Console.ReadLine();

211 break;

212 case 6:

213 M1.XuatMT();

214 Console.ReadLine();

215 break;

216 case 0:

217 Console.Clear();

218 break;

219 default:

220 Console.Write("\n KHONG CO LUA CHON

NAY !!!");

221 break;

222 }

223 } while (chon != 0);

224

225 }

226 }

227 }

Trang 8

CHƯƠNG 2: KỸ THUẬT LẬP TRÌNH ĐỂ CÓ

CHƯƠNG TRÌNH TỐT

1 Phân tích yêu cầu của đề bài

- Đã xác định được các thủ tục cần có, xác định input,output phù hợp

- Chia các thủ tục rõ ràng, rành mạch dễ hiểu

2 Thiết kế:

- Thiết kế top-down, dễ tìm kiếm, các thủ tục được phân tách riêng thành các hàm, dễ sửa lỗi

- Các biểu thức được viết ngắn gọn, diễn đạt theo cách thông thường

- Cấu trúc mã nguồn sử dụng hàm trắng phù hợp, căn lề hợp lý, trình bày toán

tử rõ ràng

3 Đảm bảo các quy tắc trong chương trình:

- Nhất quán:

• Nhất quán trong cách đặt tên, tên có nội dung mô tả

• Nhất quán trong việc dùng các biến cục bộ và toàn cục

- Khúc chiết:

• Mỗi chương trình con có nhiệm vụ rõ ràng

• Chương trình con đủ ngắn

- Rõ ràng : Có chú thích nhất quán, rõ ràng ở từng thủ tục

- Bao đóng: Đảm bảo không thay đổi giá trị của biến chạy trong thân vòng lặp, hàm trả về duy nhất 1 giá trị của hàm

4 Kỹ thuật làm việc với biến: Khai báo, đặt tên, sử dụng kiểu dữ liệu, khởi tạo, biến trung gian

Trang 9

CHƯƠNG 3: CÁC TÌNH HUỐNG KIỂM THỬ

I L ập trình phòng ngừa:

1 Đổi nhập ma trận từ bàn phím sang nhập từ file txt, cài thêm exception

K ết quả thu được: Warning Dòng lệnh StreamReader có thể trả về statement trống

X ử lý lỗi:

Cách 1: Cải tiến đoạn code Cài đặt kiểm tra file input, nếu có lỗi dừng chương trình, hiển thị thông báo lỗi trên màn hình

Trang 10

Cách 2:trả về dạng nhập từ bàn phím ban đầu

2 L ỗi không biên dịch được: sai sót do thiếu hàm Main static

Trang 11

X ử lý: chỉnh sửa hàm Main thành static

3 Ki ểm thử đoạn code phòng ngừa ngoại lệ

Trang 12

II Ki ểm thử

1. Kiểm thử lệnh:

- Đảm bảo mỗi lệnh đều được thực thi một lần trong chương trình

- Không bị thừa code

Nhập ma trận

Trang 13

Xuất ma trận

Cập nhật phần tử ma trận

Trang 14

Tổng 2 ma trận

Tích 2 ma tr ận

Hiệu 2 ma trận

2.Ki ểm thử giá trị biên

-Với phép cộng trừ ma trận, phải đảm bảo ma trận A và ma trận B cùng dạng, nếu 2 ma trận không cùng dạng, dừng chương trình, hiển thị thông báo trên màn hình, trả về lỗi như sau:

Trang 16

CHƯƠNG 4: TỔNG KẾT

Bài báo cáo của em đã vận dụng các kiến thức học được từ học phần Kỹ thuật lập trình,

k ết hợp với thực hành cá nhân để ứng dụng hiểu sâu hơn về môn học

Tự đánh giá bài tập:

- Ưu điểm:

• Thực hiện được project cá nhân, áp dụng các kỹ thuật lập trình được dạy

• Thực hành kiểm thử, gỡ lỗi, tự cải tiến được đoạn code cần dùng

- Nhược điểm:

• Chưa tối ưu hoá được chức năng người dùng ( ví dụ nhập từ file, lưu kết quả ra file)

• Chưa tối ưu hoá được bài làm do trình độ có hạn

Đồng thời, thông qua học phần này và sự hướng dẫn của thầy, em cũng đã nắm rõ hơn

và định hướng phát triển công việc cho bản thân: đó là phát triển theo hướng BA, đi từ thực hành làm project, bao gồm hiểu cả kiểm thử,gỡ lỗi- đã có trong học phần này

Em xin trân trọng cảm ơn!

Ngày đăng: 22/09/2022, 15:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w