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.
Chương NHẬP MÔN TIN HỌC NGÔ QUANG THẠCH ngoquangthach@yahoo.com 5/8/21 5/8/21 NỘI DUNG Khái niệm cấu trúc liệu Kiểu mảng (ARRAY) Khái niệm Khai báo mảng Truy nhập vào mảng Thao tác mảng Sắp xếp mảng Tìm kiếm mảng 5/8/21 Khái niệm cấu trúc liệu Các kiểu liệu CƠ BẢN: Integer, Real, Char, Boolean, Ngoài kiểu đơn, Pascal cho phép người lập trình tự đặt kiểu vô hướng cách tự liệt kê giá trị kiểu vô hướng phải khai báo định nghĩa kiểu Danh sách giá trị đặt ngoặc đơn ( ) 5/8/21 CÁCH KHAI BÁO Cách khai báo TYPE = () ; Ví dụ: TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; Colors =(Red, Yellow, Green, White, Blue, Black) ; 5/8/21 VÍ DỤ: TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; VAR i : Integer ; BEGIN Write('Nhập số từ tương ứng cho ngày:'); Readln(i) ; Case Days(i) of Sun: writeln('Ngày Chủ nhật'); Mon: writeln('Ngày thứ hai'); Tue: writeln('Ngày thứ ba'); Wed: writeln('Ngày thứ tư'); Thu: writeln('Ngày thứ năm'); Fri: writeln('Ngày thứ sáu'); Sat: writeln('Ngày thứ bảy'); Else writeln('Nhập sai'); end; Readln; END 5/8/21 KIỂU MẢNG Một MẢNG liệu tập hợp số hữu hạn phần tử, giống biến có kiểu MẢNG tổ chức theo trật tự xác định Số phần tử mảng khai báo từ định nghĩa mảng 5/8/21 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; VAR A: Mangnguyen; hoặc: VAR A: Array[1 100] of Integer; 5/8/21 Truy xuất phần tử mảng Mỗi phần tử mảng truy xuất thông qua Tên Biến Mảng với số mảng dấu ngoặc vuông [ ] VAR A : ARRAY [1 10] OF integer; Ví dụ tên biến mảng A, viết A[7], ta hiểu phần tử thứ mảng A A[1] 5/8/21 A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] Khai báo mảng VAR A : ARRAY [1 10] OF integer; Gán giá trị cho mảng: A[1]:= 10; {gán giá trị 10 cho phần tử thứ 1} Readln(A[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} Đọc giá trị vào phần tử 5/8/21 Ví dụ: Viết chương trình nhập vào giá trị nguyên cho 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 begin Writeln(‘Phần tử thứ ’,i ); Readln(a[i]); end; END 5/8/21 10 Ví dụ: Viết chương trình xuất giá trị 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 Writeln(‘Phần tử thứ a[’, i,’]=’, a[i] ); END 5/8/21 11 SẮP XẾP MẢNG Thuật toán chọn trực tiếp Coi phần tử số nhỏ Đem phần tử so sánh với số cịn lại dãy số Nếu có phần tử thứ i nhỏ đổi chỗ phần tử cho Như sau duyệt xong dãy số, phần tử phần tử nhỏ For i := to n - For j := i +1 to n if A[ i ] >A[ j ] then Begin Lặp lại thuật toán với phần tử thứ 2, thứ vv Tam := A[i]; A[i] := A[j]; A[j] := Tam; End; 5/8/21 12 Sắp xếp Mảng A Lần 1: i:=1 J=2, so sánh A[i] với A[j] 9 5 7>6 => hoán đổi số J=3, so sánh A[i] với A[j] 6 hoán đổi số Kết sau lần 1: 5, 7, 8, 9, 5/8/21 13 Sắp xếp Mảng A Lần 2: i:=2 J=3, so sánh A[i] với A[j] 7 hoán đổi số Kết sau lần 2: 5, 6, 8, 9, 5/8/21 14 Sắp xếp Mảng A Lần 3: i:=3 J=4, so sánh A[i] với A[j] 87 => Hoán đổi số Kết sau lần 3: 5, 6, 7, 9,8 5/8/21 15 Sắp xếp Mảng A Lần 3: i:=4 (cuối) J=5, so sánh A[i] với A[j] 9>8 => Hoán đổi số Kết sau lần 4: 5, 6, 7, 8, 5/8/21 16 Tìm kiếm mảng Ý tưởng: Duyệt qua phần tử a[i], với i chạy từ tới N: Nếu a[i]=Số cần tìm 5/8/21 Gán vị trí thứ i vị trí cần tìm Dừng lặp (gọi lện Break) 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 := To n Do If (A[i] = X) then Begin ViTri := i; Break; End; If (ViTri >0) then Write(X, ‘Vi tri thu’, ViTri ) 5/8/21 Else Write(X,‘Khong co mang’); 18 Bài tập Viết chương trình nhập vào mảng, tìm giá trị lớn mảng chứa số nguyên gồm N phần tử Ý tưởng: - Cho số lớn số đầu tiên: Max:=a[1] - Duyệt qua phần tử a[i], với i chạy từ tới N: Nếu a[i]>Max thay Max:=a[i]; 5/8/21 19 Uses Crt; Var A: ARRAY[1 50] Of Integer; N,i,Max:Integer; Begin {Nhập giá trị vào mảng} Write(‘Nhap N=’); Readln(N); For i:=1 To N Do Begin Write(‘A[‘,i,’]=’); Readln(A[i]); End; {Tìm phần tử lớn nhất} Max:=A[1]; For i:=2 To N Do If Max Hoán đổi số Kết sau lần 3: 5, 6, 7, 9,8 5/8/21 15 Sắp xếp Mảng A Lần 3: i:=4 (cuối) J=5,