Bài giảng Cơ sở lập trình: Chương 8 - Các cấu trúc dữ liệu khác. Nội dung chính trong chương này gồm có: Cấu trúc (struct), cấu trúc với bảng dữ liệu, một số thao tác với struct, truyền struct cho hàm, trả về struct, cấu trúc lồng nhau, tập tin (file),... Mời các bạn cùng tham khảo.
Trang 1v 1.0 - 11/2012
Các cấu trúc dữ liệu khác
Trang 4Nội dung
1 Cấu trúc
2 Tập tin
Trang 5Cấu trúc
struct
Đây là lý thuyết cấu trúc theo Lập trình Cấu trúc (sử dụng ngôn ngữ C#),
Trang 6Cấu trúc
• Tập hợp các biến được tham chiếu bởi cùng một tên
• Khai báo một cấu trúc chỉ như một cái “khuôn” (không được cấp phát bộ
nhớ)
• Các cấu trúc được khai báo trong class Program và ngoài các hàm
• Các khai báo biến (variable declarations) có thể có bất kỳ kiểu gì ngoại
trừ kiểu struct đang được khai báo
• Mỗi biến được gọi là một thành viên hay trường
• Trong C#, khai báo một struct nghĩa là định nghĩa ra một kiểu
Trang 7! public int modelnumber;
! public int partnumber;
! public float cost;
};
Part p1, p2, p3;
Trang 8Sử dụng
• Bộ nhớ không được cấp phát cho khai báo struct, mà chỉ cấp phát cho các
khai báo biến
• Một biến kiểu struct được cấp phát trên stack
• Khi khai báo biến, các thành phần không được khởi gán giá trị
• Các thành phần chỉ có thể được truy xuất một khi đã được gán dữ liệu
• Toán tử dấu chấm được dùng để truy xuất thành phần của struct
static void Main(){
12
XY
Trang 9! public int year;
public int month;
public int day;
Trang 10Một số thao tác
Date[] dates = new Date[10];
Trang 11Truyền struct cho hàm
static void PrintDate(Date d)
Trang 12! Console.Write("Enter a year : ");
! d.year = int.Parse(Console.ReadLine());
! Console.Write("Enter a month : ");
! d.month = int.Parse(Console.ReadLine());
! Console.Write("Enter a day : ");
! d.day = int.Parse(Console.ReadLine());
Trang 13Cấu trúc lồng nhau
nó
struct Range
{
! public Date start;
! public Date end;
};
struct Date
{
! public int year;
public int month;
public int day;
! Date end;! ! // error
};
Range r;
r.start.year = 1776;
Trang 14Tập tin
File
Trang 15Tập tin văn bản
• Có hai loại tập tin
• Tập tin nhị phân
• Tập tin văn bản
• Namespace System.IO cung cấp hai lớp StreamWriter và
StreamReader để ghi và đọc các tập tin văn bản
• Cả hai lớp này đều làm việc với ký tự Unicode
• Các bước cần thiết để làm việc với tập tin nhị phân :
• Mở tập tin
• Đọc/ghi tập tin
• Đóng tập tin
Trang 16Close() Hàm này đóng tập tin và giải phóng các tài nguyên
Flush() Hàm này thực hiện ghi dữ liệu trong bộ đệm vào tập tin và
xoá sạch bộ đệm ghiNewLine Thuộc tính chỉ ký tự xuống dòng và về đầu dòngWrite() Hàm này ghi dữ liệu ra tập tin và không xuống dòngWriteLine() Hàm này ghi dữ liệu ra tâp tin có xuống dòng
Trang 17Ví dụ
static void Main( string [] args)
{
// Mở tập tin
StreamWriter writer = new StreamWriter ("reminders.txt");
if (writer == null ) return ; // error
// Ghi dữ liệu vào tập tin
writer.WriteLine("Don’t forget Mother’s Day this year "); writer.WriteLine("Don’t forget these numbers:");
for ( int i = 0; i < 10; i++)
Trang 18Peek() Hàm này trả ra ký tự tiếp theo mà không thay đổi vị trí đầu
đọc Trả ra giá trị -1 để báo kết thúc tập tin
Read() Hàm đọc dữ liệu từ tập tin
ReadBlock() Hàm đọc một số lượng ký tự xác định từ tập tin và ghi vào
bộ đệmReadLine() Hàm đọc một dòng ký tự và trả ra một chuỗi ký tự stringReadToEnd() Hàm đọc tất cả ký tự từ vị trí hiện tại đến cuối tập tin và trả
về một chuỗi ký tự duy nhất
Trang 19Ví dụ
static void Main( string [] args)
{
// Mở tập tin
StreamReader reader = new StreamReader ("reminders.txt");
if (reader == null ) return ;
// Đọc từng dòng văn bản trong tập tin
string input = null ;
while ((input = reader.ReadLine()) != null )
Trang 20Tổng kết
Trang 21Cơ sở lập trình
• Cái cốt lõi là tư duy lập trình chứ không phải là ngôn ngữ
• Cấu trúc điều khiển
• Biểu thức điều kiện
• Biến, hằng, kiểu dữ liệu
• Hàm (chia nhỏ chương trình lớn)
Trang 22Tư duy lập trình là
tư duy của máy tính
Cách máy tính thực hiện chương trình
Trang 23Cảm ơn sự chú ý
Câu hỏi ?