Bài giảng Nhập môn Tin học: Chương 3 - Ngô Quang Thạch
Số trang: 22
Loại file: pptx
Dung lượng: 540.35 KB
Lượt xem: 12
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Nhập môn Tin học: Chương 3 do Ngô Quang Thạch biên soạn nhằm mục đích phục vụ cho việc giảng dạy. Nội dung bài giảng gồm: Khái niệm cấu trúc dữ liệu, kiểu mảng (ARRAY), sắp xếp mảng, tìm kiếm trong mảng. Mời các bạn cùng tham khảo bài giảng.
Nội dung trích xuất từ tài liệu:
Bài giảng Nhập môn Tin học: Chương 3 - Ngô Quang Thạch Chương 3 NHẬP MÔN TIN HỌC NGÔ QUANG THẠCH ngoquangthach@yahoo. com 1 7/5/18 NỘI DUNG v Khái niệm cấu trúc dữ liệu v Kiểu mảng (ARRAY) § Khái niệm § Khai báo mảng § Truy nhập vào mảng § Thao tác trên mảng v Sắp xếp mảng v Tìm kiếm trong mảng 7/5/18 2 Khái niệm cấu trúc dữ liệu v Các kiểu dữ liệu CƠ BẢN: Integer, Real, Char, Boolean,.. v Ngoài các kiểu đơn, Pascal cho phép người lập trình có thể tự đặt ra các kiểu vô hướng mới bằng cách tự liệt kê các giá trị của kiểu vô hướng mới và phải khai báo định nghĩa kiểu. Danh sách các 7/5/18 giá trị này được đặt trong ngoặc 3 CÁCH KHAI BÁO v Cách khai báo TYPE = () ; v Ví dụ: TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; Colors =(Red, Yellow, Green, White, Blue, Black) ; 7/5/18 4 VÍ DỤ: TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; VAR i : Integer ; BEGIN Write('Nhập số từ 0 . .6 tương ứng cho ngày:'); Readln(i) ; Case Days(i) of Sun: writeln('Ngày Chủ nhật'); 7/5/18 Mon: 5 writeln('Ngày thứ hai'); KIỂU MẢNG v Một MẢNG dữ liệu là một tập hợp số hữu hạn phần tử, giống như các biến có cùng kiểu. v MẢNG được tổ chức theo một trật tự xác định. Số phần tử của mảng được khai báo ngay từ khi định nghĩa ra mảng. 7/5/18 6 KHAI BÁO MẢNG Cú pháp: TYPE = ARRAY [chỉ số] OF ; VAR :; Hoặc khai báo trực tiếp: VAR : ARRAY [chỉ số] OF ; Ví dụ: TYPE Mangnguyen = Array[1..100] of Integer; 7/5/18 7 Truy xuất các phần tử của v Mỗi phần tửmảng của mảng được truy xuất thông qua Tên Biến Mảng cùng với chỉ số của mảng trong dấu ngoặc vuông [ ]. v VAR A : ARRAY [1..10] OF integer; A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] v Ví dụ tên biến mảng là A, khi viết A[7], ta hiểu nó là phần tử thứ 7 của mảng A 7/5/18 8 v Khai báo mảng VAR A : ARRAY [1..10] OF integer; v Gán giá trị cho mảng: § A[1]:= 10; {gán giá trị 10 cho phần tử thứ 1} § A[2]:= 15; {gán giá trị 15 cho phần tử thứ 2} § …. § A[10]:=100; {gán giá trị 100 cho phần tử thứ 10} v Đọc một giá trị vào phần tử 7/5/18 § 9 v Ví dụ: Viết chương trình nhập vào giá trị nguyên cho một mảng 10 phần tử: VAR a: array [1..10] of Integer;{khai báo mảng} i: Integer; {biến lặp} BEGIN FOR i:=1 to 10 do begin Writeln(‘Phần tử thứ ’,i ); 7/5/18 Readln(a[i]); 10 v Ví dụ: Viết chương trình xuất ra giá trị của một mảng 10 phần tử: VAR a: array [1..10] of Integer;{khai báo mảng} i: Integer; {biến lặp} BEGIN FOR i:=1 to 10 do Writeln(‘Phần tử thứ a[’, i,’]=’, a[i] ); END. 7/5/18 11 SẮP XẾP MẢNG v Thuật toán chọn trực tiếp § Coi phần tử đầu tiên là số nhỏ For i := 1 to n - 1 do nhất For j := i +1 to n do if A[ i ] >A[ j ] then Begin § Đem phần tử đầu tiên đó so sánh lần lượt với các số còn lại Tam := A[i]; trong dãy số. Nếu có phần tử A[i] := A[j]; thứ i nào đó nhỏ hơn nó thì đổi A[j] := Tam; chỗ của phần tử ấy cho nó. Như vậy sau khi duyệt xong End; dãy số, phần tử đầu tiên là 7/5/18 phần tử nhỏ nhất 12 v Sắp xếp Mảng A 7 6 8 9 5 v Lần 1: i:=1 J=2, so sánh A[i] với A[j] 6 7 8 9 5 7>6 => hoán đổi 2 số J=3, so sánh A[i] với A[j] 6 hoán đổi 2 số 5 7 8 9 6 Kết quả sau lần 1: 5, 7, 8, 9, 6 7/5/18 13 v Sắp xếp Mảng A 5 7 8 9 6 v Lần 2: i:=2 J=3, so sánh A[i] với A[j] 7 hoán đổi 2 số Kết quả sau lần 2: 5, 6, 8, 9, 7 7/5/18 14 v Sắp xếp Mảng A 5 6 8 9 7 v Lần 3: i:=3 J=4, so sánh A[i] với A[j] 87 => Hoán đổi 2 số Kết quả sau lần 3: 5, 6, 7, 9,8 7/5/18 15 v Sắp xếp Mảng A 5 6 7 9 8 v Lần 3: i:=4 (cuối) J=5, so sánh A[i] với A[j] 9>8 => Hoán đổi 2 số 5 6 7 8 9 Kết quả sau lần 4: 5, 6, 7, 8, 9 7/5/18 16 Tìm kiếm trên mảng Ý tưởng: - Duyệt qua các phần tử a[i], với i chạy từ 1 tới N: Nếu a[i]=Số cần tìm - Gán vị trí thứ i là vị trí cần tìm - Dừng lặp (gọi lện Break) 7/5/18 17 Ví dụ tìm kiếm: Var A:Array[1..10] of integer; X, n,i,ViTri: Integer; BEGIN Writeln(‘Nhap N=’); Readln(n); {Nhập giá trị vào mảng} Writeln(‘Nhap Gia tri can tim:’); Readln(X); For i:=1 To n Do Begin Write(‘A[‘,i,’]=’); Readln(A[i]); End; ViTri := 0; For i := 1 To n Do If (A[i] = X) then Begin ViTri := i; Break; End; If (ViTri >0) then Write(X, ‘Vi tri thu’, ViTri ) Else Write(X,‘Khong co trong mang’);18 7/5/18 Bài tập v Viết chương trình nhập vào một mảng, tìm giá trị lớn nhất của một mảng chứa các số nguyên gồm N phần tử. v Ý tưởng: - Cho số lớn nhất l ...
Nội dung trích xuất từ tài liệu:
Bài giảng Nhập môn Tin học: Chương 3 - Ngô Quang Thạch Chương 3 NHẬP MÔN TIN HỌC NGÔ QUANG THẠCH ngoquangthach@yahoo. com 1 7/5/18 NỘI DUNG v Khái niệm cấu trúc dữ liệu v Kiểu mảng (ARRAY) § Khái niệm § Khai báo mảng § Truy nhập vào mảng § Thao tác trên mảng v Sắp xếp mảng v Tìm kiếm trong mảng 7/5/18 2 Khái niệm cấu trúc dữ liệu v Các kiểu dữ liệu CƠ BẢN: Integer, Real, Char, Boolean,.. v Ngoài các kiểu đơn, Pascal cho phép người lập trình có thể tự đặt ra các kiểu vô hướng mới bằng cách tự liệt kê các giá trị của kiểu vô hướng mới và phải khai báo định nghĩa kiểu. Danh sách các 7/5/18 giá trị này được đặt trong ngoặc 3 CÁCH KHAI BÁO v Cách khai báo TYPE = () ; v Ví dụ: TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; Colors =(Red, Yellow, Green, White, Blue, Black) ; 7/5/18 4 VÍ DỤ: TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; VAR i : Integer ; BEGIN Write('Nhập số từ 0 . .6 tương ứng cho ngày:'); Readln(i) ; Case Days(i) of Sun: writeln('Ngày Chủ nhật'); 7/5/18 Mon: 5 writeln('Ngày thứ hai'); KIỂU MẢNG v Một MẢNG dữ liệu là một tập hợp số hữu hạn phần tử, giống như các biến có cùng kiểu. v MẢNG được tổ chức theo một trật tự xác định. Số phần tử của mảng được khai báo ngay từ khi định nghĩa ra mảng. 7/5/18 6 KHAI BÁO MẢNG Cú pháp: TYPE = ARRAY [chỉ số] OF ; VAR :; Hoặc khai báo trực tiếp: VAR : ARRAY [chỉ số] OF ; Ví dụ: TYPE Mangnguyen = Array[1..100] of Integer; 7/5/18 7 Truy xuất các phần tử của v Mỗi phần tửmảng của mảng được truy xuất thông qua Tên Biến Mảng cùng với chỉ số của mảng trong dấu ngoặc vuông [ ]. v VAR A : ARRAY [1..10] OF integer; A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] v Ví dụ tên biến mảng là A, khi viết A[7], ta hiểu nó là phần tử thứ 7 của mảng A 7/5/18 8 v Khai báo mảng VAR A : ARRAY [1..10] OF integer; v Gán giá trị cho mảng: § A[1]:= 10; {gán giá trị 10 cho phần tử thứ 1} § A[2]:= 15; {gán giá trị 15 cho phần tử thứ 2} § …. § A[10]:=100; {gán giá trị 100 cho phần tử thứ 10} v Đọc một giá trị vào phần tử 7/5/18 § 9 v Ví dụ: Viết chương trình nhập vào giá trị nguyên cho một mảng 10 phần tử: VAR a: array [1..10] of Integer;{khai báo mảng} i: Integer; {biến lặp} BEGIN FOR i:=1 to 10 do begin Writeln(‘Phần tử thứ ’,i ); 7/5/18 Readln(a[i]); 10 v Ví dụ: Viết chương trình xuất ra giá trị của một mảng 10 phần tử: VAR a: array [1..10] of Integer;{khai báo mảng} i: Integer; {biến lặp} BEGIN FOR i:=1 to 10 do Writeln(‘Phần tử thứ a[’, i,’]=’, a[i] ); END. 7/5/18 11 SẮP XẾP MẢNG v Thuật toán chọn trực tiếp § Coi phần tử đầu tiên là số nhỏ For i := 1 to n - 1 do nhất For j := i +1 to n do if A[ i ] >A[ j ] then Begin § Đem phần tử đầu tiên đó so sánh lần lượt với các số còn lại Tam := A[i]; trong dãy số. Nếu có phần tử A[i] := A[j]; thứ i nào đó nhỏ hơn nó thì đổi A[j] := Tam; chỗ của phần tử ấy cho nó. Như vậy sau khi duyệt xong End; dãy số, phần tử đầu tiên là 7/5/18 phần tử nhỏ nhất 12 v Sắp xếp Mảng A 7 6 8 9 5 v Lần 1: i:=1 J=2, so sánh A[i] với A[j] 6 7 8 9 5 7>6 => hoán đổi 2 số J=3, so sánh A[i] với A[j] 6 hoán đổi 2 số 5 7 8 9 6 Kết quả sau lần 1: 5, 7, 8, 9, 6 7/5/18 13 v Sắp xếp Mảng A 5 7 8 9 6 v Lần 2: i:=2 J=3, so sánh A[i] với A[j] 7 hoán đổi 2 số Kết quả sau lần 2: 5, 6, 8, 9, 7 7/5/18 14 v Sắp xếp Mảng A 5 6 8 9 7 v Lần 3: i:=3 J=4, so sánh A[i] với A[j] 87 => Hoán đổi 2 số Kết quả sau lần 3: 5, 6, 7, 9,8 7/5/18 15 v Sắp xếp Mảng A 5 6 7 9 8 v Lần 3: i:=4 (cuối) J=5, so sánh A[i] với A[j] 9>8 => Hoán đổi 2 số 5 6 7 8 9 Kết quả sau lần 4: 5, 6, 7, 8, 9 7/5/18 16 Tìm kiếm trên mảng Ý tưởng: - Duyệt qua các phần tử a[i], với i chạy từ 1 tới N: Nếu a[i]=Số cần tìm - Gán vị trí thứ i là vị trí cần tìm - Dừng lặp (gọi lện Break) 7/5/18 17 Ví dụ tìm kiếm: Var A:Array[1..10] of integer; X, n,i,ViTri: Integer; BEGIN Writeln(‘Nhap N=’); Readln(n); {Nhập giá trị vào mảng} Writeln(‘Nhap Gia tri can tim:’); Readln(X); For i:=1 To n Do Begin Write(‘A[‘,i,’]=’); Readln(A[i]); End; ViTri := 0; For i := 1 To n Do If (A[i] = X) then Begin ViTri := i; Break; End; If (ViTri >0) then Write(X, ‘Vi tri thu’, ViTri ) Else Write(X,‘Khong co trong mang’);18 7/5/18 Bài tập v Viết chương trình nhập vào một mảng, tìm giá trị lớn nhất của một mảng chứa các số nguyên gồm N phần tử. v Ý tưởng: - Cho số lớn nhất l ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Nhập môn Tin học Nhập môn Tin học Sắp xếp mảng Tìm kiếm trong mảng Cấu trúc dữ liệu Truy nhập vào mảngGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 301 0 0 -
Nhập môn Tin học căn bản: Phần 1
106 trang 288 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 145 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 139 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 135 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 135 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 99 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 70 0 0 -
49 trang 66 0 0
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ngô Công Thắng
8 trang 63 0 0