Bài giảng Nhập môn tin học - Chương 3 - Ngô Quang Thạch

pptx 22 trang Hùng Dũng 05/01/2024 370
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nhập môn tin học - Chương 3 - Ngô Quang Thạch", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pptxbai_giang_nhap_mon_tin_hoc_chuong_3_ngo_quang_thach.pptx

Nội dung text: Bài giảng Nhập môn tin học - Chương 3 - Ngô Quang Thạch

  1. Chương 3 NHẬP MÔN TIN HỌC NGÔ QUANG THẠCH ngoquangthach@yahoo.com 1/9/20241/9/2024
  2. NỘI DUNG vKhái niệm cấu trúc dữ liệu vKiể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 vSắp xếp mảng vTìm kiếm trong mảng 1/9/2024 2
  3. Khái niệm cấu trúc dữ liệu vCác kiểu dữ liệu CƠ BẢN: Integer, Real, Char, Boolean, vNgoà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 giá trị này được đặt trong ngoặc đơn ( ) 1/9/2024 3
  4. CÁCH KHAI BÁO vCách khai báo TYPE = ( ) ; vVí dụ: TYPE Days = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; Colors =(Red, Yellow, Green, White, Blue, Black) ; 1/9/2024 4
  5. 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'); 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. 1/9/2024 5
  6. KIỂU MẢNG vMộ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. vMẢ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. 1/9/2024 6
  7. 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; 1/9/2024 7
  8. Truy xuất các phần tử của mảng vMỗi phần tử 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 [ ]. vVAR 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] vVí 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 1/9/2024 8
  9. vKhai báo mảng VAR A : ARRAY [1 10] OF integer; vGá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ử § Readln(A[1]); 1/9/2024 9
  10. vVí 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 ); Readln(a[i]); end; END. 1/9/2024 10
  11. vVí 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. 1/9/2024 11
  12. SẮP XẾP MẢNG vThuật toán chọn trực tiếp § Coi phần tử đầu tiên là số nhỏ nhất For i := 1 to n - 1 do For j := i +1 to n do § Đem phần tử đầu tiên đó so sánh lần lượt với các số còn lại trong dãy số. if A[ i ] >A[ j ] then Nếu có phần tử thứ i nào đó nhỏ hơn Begin nó thì đổi chỗ của phần tử ấy cho nó. Tam := A[i]; Như vậy sau khi duyệt xong dãy số, phần tử đầu tiên là phần tử nhỏ nhất A[i] := A[j]; A[j] := Tam; § Lặp lại thuật toán lần lượt với các End; phần tử thứ 2, thứ 3 vv 1/9/2024 12
  13. vSắp xếp Mảng A 7 6 8 9 5 vLầ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 5 => hoán đổi 2 số 5 7 8 9 6 Kết quả sau lần 1: 5, 7, 8, 9, 6 1/9/2024 13
  14. vSắp xếp Mảng A 5 7 8 9 6 vLần 2: i:=2 J=3, so sánh A[i] với A[j] 7 6 => hoán đổi 2 số Kết quả sau lần 2: 5, 6, 8, 9, 7 1/9/2024 14
  15. vSắp xếp Mảng A 5 6 8 9 7 vLần 3: i:=3 J=4, so sánh A[i] với A[j] 8 7 => Hoán đổi 2 số Kết quả sau lần 3: 5, 6, 7, 9,8 1/9/2024 15
  16. vSắp xếp Mảng A 5 6 7 9 8 vLầ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 1/9/2024 16
  17. 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) 1/9/2024 17
  18. 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’); END. 1/9/2024 18
  19. Bài tập vViế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à số đầu tiên: Max:=a[1]. - Duyệt qua các phần tử a[i], với i chạy từ 2 tới N: Nếu a[i]>Max thì thay Max:=a[i]; 1/9/2024 19
  20. 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<A[i] Then Max:=A[i]; {In kết quả ra màn hình} Writeln(‘Phan tu lon nhat cua mang: ’, Max); Readln; End. 1/9/2024 20
  21. Bài tập vViết chương trình nhập vào một mảng, tính giá trị trung bình của một mảng chứa các số nguyên gồm N phần tử. vÝ tưởng: -Tính tổng các giá trị a[i], với i chạy từ 1 tới N - Giá trị trung binh = tổng / N 1/9/2024 21
  22. 1/9/20241/9/2024