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

Các thao tác trên ma trận

29 574 1

Đ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

Định dạng
Số trang 29
Dung lượng 773 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Ở ĐẦU Một chương trình tốt là chương trình chạy thông, kiểm soát các lỗi tốt, phòng ngừa, bẫy lỗi hiệu quả, dễ dàng và thân thiện với người dùng đồng thời mã nguồn có khả năng tái sử dụ

Trang 1

LÊ THẾ NAM

BÁO CÁO TỰ HỌC, TỰ NGHIÊN CỨU

CÁC THÁO TÁC TRÊN MA TRẬN

NGÀNH: SƯ PHẠM TIN HỌC LỚP: ĐHSTIN15L2

GIẢNG VIÊN HƯỚNG DẪN: Ths NGUYỄN THỊ THÙY LINH

Đồng Tháp, tháng 03 năm 2016

Trang 2

THÔNG TIN VỀ SINH VIÊN

Trang 3

ĐÁNH GIÁ CỦA GIẢNG VIÊN HƯỚNG DẪN

Trang 4

MỤC LỤC

CÁC THÁO TÁC TRÊN MA TRẬN 1

1 MỞ ĐẦU 5

2 NỘI DUNG ĐỀ TÀI 5

2.1 Đặt vấn đề 5

2.2 Phương pháp giải quyết vấn đề 6

2.3 Thiết kế và cài đặt thuật toán 6

2.4.Giới thiệu DEMO và hướng dẫn sử dụng 16

3 KẾT LUẬN 20

3.1 Kết quả đạt được 20

3.2 Hạn chế 24

3.3 Hướng phát triển 24

Trang 5

1 MỞ ĐẦU

Một chương trình tốt là chương trình chạy thông, kiểm soát các lỗi tốt, phòng ngừa, bẫy lỗi hiệu quả, dễ dàng và thân thiện với người dùng đồng thời mã nguồn

có khả năng tái sử dụng cao, …

Đó chỉ là một trong số những phần rất nhỏ mà em học được từ môn Kỹ thuật lập trình Để cho ra đời một chương trình, sản phẩm phần mềm cần có nhiều qui trình và vòng đời đan xen nhau từ khâu phân tích, thiết kế chương trình, lập trình, kiểm thử, viết tài liệu, … Trong mỗi khâu lại chia ra thành các công đoạn nhỏ đòi hỏi lập trình viên phải tuân thủ

Để đánh giá lại những kiến thức của bản thân được học về kỹ thuật lập trình

em quyết định chọn đề tài “các thao tác trên ma trận”, qua đề tài này em không

những được tìm hiểu sâu hơn về mặt lý thuyết mà còn được trực tiếp vận dụng những kiến thức đã được học trên lớp, những kiến thức đọc nâng cao vào trong một ứng dụng thực tế

2 NỘI DUNG ĐỀ TÀI

2.1 Đặt vấn đề

Khi cần lưu trữ một số lượng lớn các phần tử có cùng kiểu dữ liệu, chẳng hạn như cần lưu trữ 30 số nguyên được nhập từ bàn phím, ta có thể dùng 30 biến số nguyên riêng biệt để lưu trữ Tuy nhiên, cách trên có một số nhược điểm như sau:

• Có quá nhiều biến cần khởi tạo Để nhớ được hết các biến này là không đơn giản, đồng thời gây khó khăn cho việc quản lý các biến

• Phải thực hiện thủ công các thao tác với biến đó Do các biến là độc lập nên

ta không thể sử dụng các cấu trúc lặp để thao tác với nó

• Chương trình sẽ dài và việc nâng cấp cũng trở nên khó khăn

Do đó, việc nhóm các phần tử đó lại với một cái tên duy nhất sẽ khắc phục được những nhược điểm trên Các phần tử vẫn hoạt động độc lập, nhưng dưới một tên duy nhất, cùng với chỉ số (index) của nó để phân biệt với các phần tử khác

Lớp ĐHSTIN15L2 5

Trang 6

Khi mỗi phần tử của mảng có kiểu dữ liệu là một mảng khác, ta được mảng 2 chiều Khi đó, ngoài index của các phần tử trong mảng, mỗi phần tử trong các phần

tử đó cũng có index của nó Do đó để truy xuất đến từng phần tử nhỏ, ta sử dụng cả

2 chỉ số index để chỉ ra vị trí của nó trong mảng 2 chiều

Thông qua đề tài các “các thao tác trên ma trận” em sẽ giới thiệu một vài

thao tác cơ bản trên mảng 2 chiều (hay còn gọi là ma trận) như: khai báo, nhập, xuất, xóa, chèn các dòng hoặc cột, thêm dòng hoặc cột…

2.2 Phương pháp giải quyết vấn đề

- Nghiên cứu yêu cầu của bài toán

- Tìm hiểu mảng 2 chiều: khai báo, nhập, xuất, các thao tác cơ bản khác…

- Lập ý tưởng và viết chương trình bằng ngôn ngữ lập trình C++

- Kiểm thử chương trình và viết báo cáo

2.3 Thiết kế và cài đặt thuật toán

2.3.1 Phân tích yêu cầu

Nhập vào ma trận số thực cấp mxn Cài đặt các hàm thực hiện các thao tác trên ma trận:

- Xóa dòng k ( k nhập từ bàn phím)

- Xóa cột l ( l nhập từ bàn phím)

- Xóa dòng và cột chứa phân tử nhỏ nhất

- Nhập số nguyên dương k (k<m) và dãy có n số thực, chèn dãy đó vào dòng k

- Nhập số nguyên dương k (k<n) và dãy có m số thực, chèn dãy đó vào cột k

- Hoán vị các dòng sao cho tổng giá trị của từng dòng giảm từ trên xuống

2.3.2 Mô tả bài toán

Trang 7

Thao tác Đầu vào Đầu ra

Nhập ma trận Nhập m,n (số dòng, cột)

Nhập từng phần tử

Ma trạn cấp m x n

Xóa dòng Nhập dòng cần xóa k Xuất ra ma trận xóa dòng k

Xó cột Nhập cột cần xóa l Xuất ra ma trận xóa cột l

void XoaCot(float A[][max],

int m, int &n, int l)

Xóa cột thứ l trong ma trận A

void XoaDong(float A[]

[max], int &m, int n, int

k)

Xóa dòng thứ k trong ma trận A

void XoaD_C(float A[][max],

int &m, int &n)

Tìm phần tử nhỏ nhất trên ma trận và vóa dòng và cột chứa phần tử đó

void ChenDong(float A[]

[max],int &m,int n,int d)

Chèn thêm dòng d vào ma trận

void ChenCot(float A[]

[max],int m,int &n,int c)

Chèn thêm cột c vào ma trận

void SapXep(float A[][max],

int m, int n)

Tính tổng từng dòng và sắp sắp xếp ma trận giảm dần theo tổng từng dòng

Lớp ĐHSTIN15L2 7

Trang 8

void menu() Menu chương trình

int main() Chương trình chính

2.3.3.2 Xây dựng các hàm

2.3.3.2.1 Xóa cột l trong ma trận A

Giả sử ta cần xóa cột thứ l = 3 trong ma trận, ý tưởng như sau:

- Ta sẽ dời lần lượt các phần tử ở các cột sau cột l lên phía trước.

- Xóa cột cuối cùng trong ma trận

Trang 9

2.3.3.2.2 Xóa dòng k trong ma trận A

Giả sử ta cần xóa cột thứ k = 3 trong ma trận, ý tưởng như sau:

- Ta sẽ dời lần lượt các phần tử ở các dòng dưới dòng k lên phía trên

- Xóa cột cuối cùng trong ma trận

n ;

Trang 10

float Min=A[1][1];

for(int i = 1; i <= m; i++) for(int j = 1; j <= n; j++) if(A[i][j]<Min){

x=i;

y=j;}

for(int i=k;i<=m;i++) for(int j=1;j<=n;j++) A[i][j]=A[i+1][j];

Trang 11

for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) {

if(i<x && j>=y) A[i][j]=A[i][j+1];

else if(i>=x && j<y) A[i][j]=A[i+1][j];

else if(i>=x && j>=y) A[i][j]=A[i+1][j+1];

} m ;

Trang 12

2.3.3.2.4 Chèn thêm 1 dòng vào ma trân

Ý tưởng như sau:

- Nhập số dòng d cần chèn ( dòng nhập vào phải nhỏ hơn hoặc bằng dòng hiện tại và lớn hơn 1)

- Kiểm tra 1 ≤ d ≤ m nếu không thỏa sang in ra màn hình dòng muốn chèn không hợp lề , ngược lại tiếp tục

- Dời các phần tử từ dòng d xuống phía dưới và tăng thêm 1 dòng cuối

Trang 14

2.3.3.2.5 Chèn thêm 1 cột vào ma trân

Ý tưởng như sau:

Trang 15

2.3.3.2.6 Sắp xếp ma trận giảm dần theo tổng của từng dòng

Ý tưởng như sau:

- Tính tổng từng dòng của ma trận và lưu vào mảng B có thứ tự tương ứng

Trang 16

-Sắp xếp lại mảng B và ma trận A theo chiều giảm dần của tổng được lưu ở mảng B.

2.4.Giới thiệu DEMO và hướng dẫn sử dụng

2.4.1 Nhập dữ liệu:

Chương trình yêu cầu người dùng nhập vào số dòng m và cột n của ma trận Giới hạn số dòng và cột tối đa là 50 và phải lớn hơn 0 (0 < m,n ≤ 50), nếu người dùng nhập ngoài giới hạn này chương trình sẽ yêu cầu nhập lại m,n

t=A[i][d];

A[i][d]=A[j][d];

A[j][d]=t;

}}

b[j]=t;

Trang 18

Ví dụ: người dùng muốn chèn thêm vào ma trận 1 dòng tại vị trí dòng thứ 2:

- Chọn 4 <Enter>

- Nhập k = 2 <Enter>

- Nhập thêm các phần tử cần chèn vào (số phần tử bằng với số cột) <Enter>

- Chương trình xử lý và trả về kết quả và quay lại menu lựa chọn để thực hiện thao tác tiếp theo

Trang 19

Lớp ĐHSTIN15L2 19

Trang 20

3 KẾT LUẬN

3.1 Kết quả đạt được

3.1.1 Xóa một dòng ma trận

3.1.2 Xóa một cột ma trận

Trang 21

3.1.3 Xóa dòng và cột chứa phần tử nhỏ nhất

3.1.4 Chèn thêm dòng vào ma trận

Lớp ĐHSTIN15L2 21

Trang 22

3.1.5 Chèn thêm cột vào ma trận

Trang 23

3.1.6 Hoán vị các dòng sao cho tổng giá trị của từng dòng giảm từ trên xuống

Lớp ĐHSTIN15L2 23

Trang 24

3.2 Hạn chế

- Khai báo mảng 2 chiều trong chương trình bằng cấp phát tĩnh nên bị giới hạn số lượng phần tử nhất định, chiếm nhiều không gian bộ nhớ khi cấp phát cho mảng và chương trình thực hiện tương đối chậm Vì vậy không thể thực hiện đươc khi thao tác với ma trận có cấp m x n rất lớn được

3.3 Hướng phát triển

Trong giới hạn thời gian cho phép nên chưa thể tối ưu chương trình tốt hơn Nếu có thêm thời gian để nghiên cứu, em sẽ thực hiện chương trình với khai báo cấp phát động cho mảng 2 chiều và dùng con trỏ để chương trình thực hiện nhanh hơn và tối

ưu hơn

Trang 25

TÀI LIỆU THAM KHẢO

[1] PHẠM VĂN ẤT: “Kỹ thuật lập trình C: cơ sở và nâng cao” Nhà Xuất Bản Khoa Học Kỹ Thuật – 1996

[2] Sử Dụng Mảng Trong C++, RYE NGUYEN • 25/09/2014 22:02:42

http://www.stdio.vn/articles/read/72/su-dung-mang-trong-c

Lớp ĐHSTIN15L2 25

Trang 27

for(int i = 1; i <= m; i++) //Tim vi tri phan tu nho nhat

Trang 28

6 Hoán vị các dòng sao cho tổng giá trị của từng dòng giảm từ trên xuống

void SapXep(float A[][max], int m, int n)

Trang 29

if (b[i]<b[j]){

//Hoan vi trong mang B

t=A[i][k];

A[i][k]=A[j][k];

A[j][k]=t;

}}

}XuatMT(A,m,n);

}

Lớp ĐHSTIN15L2 29

Ngày đăng: 20/06/2016, 14:34

TỪ KHÓA LIÊN QUAN

w