Tải bản đầy đủ (.ppt) (36 trang)

bài giảng struct và bài toán kết nối dữ liệu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (282.88 KB, 36 trang )

www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Struct và
Struct và
Bài Toán Duyệt Danh Sách
Bài Toán Duyệt Danh Sách
Tìm Phần Tử Đầu Tiên
Tìm Phần Tử Đầu Tiên
1
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Người học sẽ đạt được

Trình bày được vai trò của việc xây dựng dữ liệu trong lập
trình?

Phân biệt và hiểu được kiểu dữ liệu căn bản và nâng cao trong
các ngôn ngữ lập trình

Trình bày và áp dụng được STRUCT trong việc xây dựng dữ
liệu mới

Áp dụng được bài toán duyệt danh sách tìm phần tử đầu tiên
trong việc tổ hợp dữ liệu từ các file khác nhau
2
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Dữ liệu và thuật giải



Chương trình = Thuật giải + Dữ liệu

Hai bộ môn liên quan đến Lập trình: Kỹ thuật lập trình (Thuật
giải) + Hệ thống thông tin (Dữ liệu)

Vị trí “Quản lí dự án” khi đi phỏng vấn luôn bị xoáy xâu vào 2
chủ đề căn bản về lập trình:

UML (Kỹ thuật thiết kế xây dựng các ĐỐI TƯỢNG + CHỨC
NĂNG)

CSDL (Kỹ thuật thiết kế xây dựng CSDL )
3
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Bài toán xây dựng Dữ liệu

Phải đảm bảo những yêu cầu sau:

“Giống thật”: Mô tả chính xác đối tượng và các mối quan
hệ ràng buộc của chúng

“Hiệu quả”: Nhanh, an toàn, dễ dàng mở rộng, …

“Giống thật”: Là một vấn đề nan giải  Các HTTT, Ngôn
ngữ lập trình đều hướng tới

Assembly  Ngôn ngữ C đơn giản  C++  Java, C# :

Càng ngày càng giúp LẬP TRÌNH VIÊN mô tả THẾ GIỚI
THỰC dễ dàng hơn

Các biến số  Các file dữ liệu CSDL (kiểu bảng)  XML:
Đưa ràng buộc vào để mô tả THẾ GIỚI THỰC
4
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Kiểu dữ liệu căn bản
Kiểu dữ liệu căn bản

Kiểu dữ liệu căn bản: Là các kiểu dữ liệu: Đơn giản, phổ
biến nhất  Được cài sẵn
Ví dụ: C có các kiểu cơ bản như: byte, int, char, float, double
(Không có các kiểu: string, list, set, …)
C#: Có thêm rất nhiều kiểu dữ liệu căn bản khác như: string, list,
hash, …
Câu hỏi: Thế giới thực phức tạp  Các kiểu cơ bản không bao
giờ đủ Làm thế nào đây ???
5
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Kiểu dữ liệu nâng cao
Kiểu dữ liệu nâng cao

Kiểu dữ liệu nâng cao: Cho phép người dùng tự định nghĩa
kiểu dữ liệu riêng cho mình


Ngôn ngữ lập trình càng mạnh  KHẢ NĂNG TỰ ĐỊNH
NGHĨA kiểu dữ liệu mới càng dễ dàng !!!

Ngôn ngữ C cung cấp 3 phương tiện căn bản nhất:

Struct (Tìm hiểu bài giảng này)

Mảng (Array)  Bài giảng tuần 5

Con trỏ  Bài giảng tuần 6

Ngôn ngữ C++, C#, Java lại cung cấp CLASS, KẾ THỪA, …
mạnh mẽ hơn (Môn Lập trình hướng đối tượng)
6
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Khai báo kiểu dữ liệu mới trong C

Dùng từ khóa typedef

Cách dùng:
typedef <Định nghĩa dữ liệu> Tên_dữ_liệu_mới;
typedef int MATK, MAKH;
typedef long SOTIEN;
/* now declare some objects */
MATK maTK;
SOTIEN s;
MAKH maKH;
www.hoasen.edu.vn

7
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Khái niệm về Struct (I)
Khái niệm về Struct (I)

Dữ liệu mô tả cùng một sự vật LUÔN ĐI VỚI NHAU  Bởi
vì chúng nói lên các thuộc tính khác nhau của sự vật

Ví dụ:

Tài khoản ngân hàng  mã số tài khoản, số tiền tài khoản,
mã số khách hàng, lãi suất  LUÔN ĐI VỚI NHAU

Sinh viên  Tên, ngày sinh, giới tính, khóa học, ngành
theo học LUÔN ĐI VỚI NHAU

Những thuộc tính của một sự vật LUÔN ĐI VỚI NHAU 
GOM LẠI  Kiểu dữ liệu mới = STRUCT  biểu diễn sự
vật đó !!!
8
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Định nghĩa Struct
Định nghĩa Struct

Trong ngôn ngữ C các thuộc tính sau mô tả cùng sự vật A:
Kiểu_dữ liệu_1 Tên_thuộc_tính_1


Kiểu_dữ_liệu_n Tên_thuộc_tính_n

Gom chúng lại thành kiểu dữ liệu mới struct A:
struct A
{
Kiểu_dữ liệu_1 Tên_thuộc_tính_1

Kiểu_dữ liệu_n Tên_thuộc_tính_n
} ;
9
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Ví dụ về Struct
Ví dụ về Struct

Tọa độ phẳng có 2 thuộc tính
int X, int Y
struct Toado
{
int X;
int Y;
} Hoặc
struct Toado
{
int X, Y;
}
10


Tài khoản có 4 thuộc tính:
masoTK, masoKH, sotienTK,
laisuat
struct Tai khoan
{
int masoTK;
int masoKH;
long sotienTK;
float laisuat;
}
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
11
Tênstruct.Tênbiếnthànhphần
Ví dụ:
sinhvien.hoten
sinhvien.diemtb
Truy xuất các phần tử struct
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Sử dụng Struct với biến số
Sử dụng Struct với biến số
struct Toado toado;
toado.X= 5;
toado.Y= 7;
VD: tính khoảng cách giữa 2
điểm a, b

float Dis( struct Toado a, struct
Toado b)
{
return sqrt((a.X-b.X)*(a.X-
b.X) + (a.Y-b.Y)*(a.Y-b.Y));
}
12
VD: nhập dữ liệu vào thuộc tính của
taikhoan từ tập tin
struct Taikhoan taikhoan;
void Duyet()
{
fscanf(fin,”%d\t%d \t%l\t%f”,
&taikhoan.maTK,
&taikhoan.maKH,
&tai.khoan.sotien,
&tai.khoan.laisuat);
}
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Struct dùng với typedef
Khai báo struct với typedef để có thể dùng như 1 kiểu dữ liệu
mới
typedef struct
{
int X,Y;
} TOADO;
TOADO a,b;
a.X=5; a.Y=6;

b.X=7; b.Y=5;
www.hoasen.edu.vn
13
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Lưu ý về Struct
Lưu ý về Struct

Struct  biểu diễn sự vật  Nhiều thuộc tính gộp thành

Thuộc tính của Struct : Kiểu dữ liệu đã được định nghĩa trước
(float, int, char, long, …) hoặc các kiểu dữ liệu mới định nghĩa
thêm. (Struct có thể nằm lồng trong Struct !!!)

Muốn gọi thuộc tính của Struct chỉ cần dùng phép toán CHẤM
(.)

Dùng typedef để rút ngắn lại cách gọi struct cũng như các
kiểu dữ liệu nâng cao khác
14
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Ví dụ nâng cao về Struct I
Ví dụ nâng cao về Struct I

Hãy xây dựng chương trình dạy HÌNH HỌC cho các bạn học
sinh cấp II


Cần mô tả các đối tượng: Điểm, Đoạn thẳng, Tam giác, …

Khai báo như sau:
typedef struct typedef struct typedef struct
{ { {
int X,Y; DIEM A,B; DIEM A,B,C;
}DIEM; }DoanThang; }TAMGIAC;
DIEM a,b,c; TAMGIAC ABC;
a.X=3; a.Y=7; b.X=4; b.Y=9; c.X=0; c.Y=9;
ABC.A = a; ABC.B = b; ABC.C = c;
15
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Ví dụ nâng cao về Struct II
Ví dụ nâng cao về Struct II

Hãy kiểm tra tam giác ABC có vuông góc Tại A không?
int VUONG_GOC_A(TAMGIAC ABC)
{
return (KCBP(ABC.A, ABC.B) + KCBP(ABC.A, ABC.C) ==
KCBP(ABC.C, ABC.B)) ;
}
/* KCBP= Khoảng cách bình phương */
float KCBP(DIEM a, DIEM b)
{
return (a.X –b.X)* (a.X –b.X) + (a.Y–b.Y)* (a.Y –b.Y);
}
}
16

www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

17

Chúng ta có thể truy xuất struct bằng cách sử dụng con trỏ chỉ
đến struct đó.

Truy xuất đến phần tử của con trỏ struct bằng toán tử –>
Con trỏ struct
Con trỏ struct
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

18
#include <conio.h>
#include <stdio.h>
struct SINHVIEN
{ char Hoten[15],
int Tuoi;
};
void main()
{ SINHVIEN *sv = new SINHVIEN;
printf(“Nhap ho ten:”);
gets(sv->Hoten);
printf(“Nhap tuoi: ”);
scanf(“%d”, &sv->Tuoi);
printf(“%20s %3d”, sv->Hoten, sv->Tuoi);
getch();
}

Con trỏ struct
Con trỏ struct
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

www.hoasen.edu.vn
19
typedef struct
{
int tuoi;
char ten[20];
} SINHVIEN;
SINHVIEN ds_sv[100];
Mảng struct
Khai báo
mảng struct:
100 sinhvien
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Bài Tập Điểm Cộng Về Nhà
Bài Tập Điểm Cộng Về Nhà
1. Hãy kiểm tra tam giác ABC có phải là tam giác
vuông không?
2. Haỹ tính diện tích, chu vi tam giác, …
3. Hãy xây dựng hình thoi, hình tròn, …

TẤT CẢ THẾ GIỚI HÌNH HỌC LỚP 7-8-9 đều có
thể mô phỏng được bằng STRUCT !!!
20

www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Bài toán tổ hợp dữ liệu
Bài toán tổ hợp dữ liệu

Bài toán: Ngân hàng ABC chứa danh sách các tài khoản trong
file taikhoan.txt theo đúng mô tả của coursework!!! Cứ sau
một thời gian, khắp nơi lại gửi về cho trung tâm được tổng hợp
thành 1 danh sách các giao dịch trong file giaodich.txt theo
đúng mô tả của coursework. Chúng ta giả sử thêm rằng
KHÔNG CÓ 2 giao dịch nào trong file giao dịch trùng tài
khoản. Hãy:
-
Trả về danh sách các giao dịch thành công/thất bại (rút ra
không lớn hơn số tiền  thành công) B1
-
Cập nhật lại danh sách các tài khoản với số tiền mới B2
21
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Bài toán B1
Bài toán B1

Input: giaodich.txt và taikhoan.txt

Output: giaodichthanhcong.txt
Minh định thuật giải


Duyệt Danh sách các giao dịch

Tại mỗi giao dịch ở bước xử lý

Duyệt Danh sách tìm phần tử đầu tiên của tài
khoản có mã tài khoản trùng với giao dịch đang xét

Căn cứ vào tài khoản đó xác định giao dịch có thất bại
hay không?

Viết giao dịch với trạng thái vào file
giaodichthanhcong.txt
22
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Bài toán B2
Bài toán B2

Input: taikhoan.txt và giaodichthanhcong.txt

Output: taikhoanUpdate.txt
Minh định thuật giải

Duyệt Danh sách các tài khoản

Tại mỗi tài khoản ở bước xử lý

Duyệt Danh sách tìm phần tử đầu tiên của giao
dịch thành công có mã tài khoản trùng với mã tài

khoản đang xét

Nếu không tìm thấy thì không cần update tài khoản
Còn không update lại tài khoản

Update tài khoản vào file taikhoanUpdate.txt
23
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Những điểm khác biệt
Những điểm khác biệt

Học cách dùng struct để biểu diễn tài khoản và giao dịch

Học cách vận dụng bài toán Duyệt danh sách vào bài toán
Duyệt danh sách tìm phần tử đầu tiên
www.hoasen.edu.vn
24
www.hoasen.edu.vn
Cùng Đại học Hoa Sen xây dựng tương lai

Duyệt danh sách tìm PT đầu tiên
Duyệt danh sách tìm PT đầu tiên

Đưa vào một biến mới:
int da_tim_thay;
da_tim_thay sẽ nhận giá trị 1 nếu chúng ta tìm thấy phần tử nao
đó thỏa mãn yêu cầu. Còn nếu chúng ta khong tìm thấy phần
tử nào thỏa điều kiện da_tim_thay sẽ nhận giá trị 0


www.hoasen.edu.vn
25

×