Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
129,5 KB
Nội dung
CHỦ ĐỀ KIỂU MẢNG Số tiết: 03 (Tiết 21+22+23) I Nội dung chủ đề: - Các thao tác mảng chiều; - Thời lượng: tiết II Mục tiêu Kiến thức: HS hệ thống kiến thức kiểu mảng chiều: - Khái niệm mảng chiều; - Cấu trúc khai báo mảng chiều; - Nhập, xuất mảng chiều; - Sắp xếp mảng chiều; Kĩ năng: Giúp học sinh thành thạo kĩ - Thực khai báo mảng chiều trực tiếp gián tiếp; - Nhập, xuất mảng chiều; - Sắp xếp mảng chiều theo chiều tăng dần, giảm dần; - Thực tính tốn mảng Thái độ: Rèn luyện tính cẩn thận, tỉ mỉ để tránh sai lầm đáng tiếc làm điểm kiểm tra III Mô tả mức độ nhận thức, biên soạn câu hỏi tập Bảng mô tả chuẩn đánh giá Nội dung Nhận biết Thông hiểu Vận dụng Khai báo mảng Mô tả: HS viết cấu trúc Mơ tả: HS lấy ví dụ khai Mơ tả: HS biết tìm khai báo chiều khai báo mảng chiều báo mảng chiều khai báo cho trước Ví dụ :.Viết cấu trúc khai báo Ví dụ 2: Khai báo mảng gồm N số Ví dụ 3: Những khai báo sau mảng chiều (trực tiếp nguyên (N≤ 500) (theo cách: trực đúng? gián tiếp) tiếp gián tiếp) Type Arrayr=array[1 200] of real; Arrayr=array[byte] of real; Arrayb=array[-100 0]ofboolean; Nhập xuất Mô tả: HS biết nhập mảng Mô tả: HS biết in mảng vừa nhập mảng chiều chiều hình theo chiều ngang, Ví dụ 4: Viết chương trình nhập chiều dọc theo thứ tự từ vào mảng gồm n phần tử lên nguyên Ví dụ 5: Viết chương trình nhập vào mảng gồm n phần tử ngun In mảng hình theo chiều ngang, dọc theo thứ tự ngược lại Sắp xếp mảng Mô tả: HS hiểu cách xếp chiều mảng chiều thuật tốn tráo đổi Ví dụ 6: Viết chương trình nhập vào mảng gồm n phần tử nguyên Sắp xếp mảng cho theo thứ tự Vận dụng nâng cao tăng dần Tính tốn Mơ tả: HS tìm phần tử lớn Mơ tả: HS biết sử dụng linh hoạt Mô tả: HS biết cách tính tổng Mơ tả: HS biết cách mảng chiều mảng nhập từ cấu trúc lặp kiểu mảng để làm phần tử mảng thỏa mãn điều đếm xem mảng bàn phím tập Ví dụ 7: Viết chương trình nhập Ví dụ 8: Viết chương trình nhập Ví dụ 9: Viết chương trình nhập thỏa mãn điều kiện vào mảng gồm n phần tử vào mảng gồm n phần tử vào mảng gồm n phần tử cho trước ngun Tìm phần tử lớn ngun Tính tổng tất phần nguyên Tính tổng phần tử Ví dụ 10: Viết chương mảng vị trí phần tử lớn tử mảng kiện có phần tử chẵn tổng phần tử lẻ trình nhập vào mảng mảng gồm n phần tử nguyên Đếm xem mảng có phần tử chia hết cho Lý thuyết tập: Kiểu mảng chiều: Mảng chiều dãy hữu hạn phần tử kiểu Mảng đặt tên phần tử có số Để mơ tả mảng chiều cần xác định kiểu phần tử cách đánh số phần tử Để người lập trình xây dựng sử dụng kiểu mảng chiều, ngơn ngữ lập trình có quy tắc, cách thức cho phép xác định: • Tên kiểu mảng chiều; • Số lượng phần tử; • Cách khai báo biến mảng; • Cách tham chiếu đến phần tử a, Khai báo Khai báo biến mảng chiều có dạng: _ Cách Khai báo trực tiếp biến mảng chiều: Var :array[kiểu số] of ; _ Cách Khai báo gián tiếp biến mảng qua kiểu mảng chiều: Type = array[kiểu số] of ; Var : ; Trong đó: • Kiểu số thường đoạn số nguyên liên tục có dạng n1…n2 với n1, n2 biểu thức nguyên xác định số đầu số cuối ( n1≤ n2); • Kiểu phần tử kiểu phần tử mảng Tham chiếu tới phần tử mảng chiều xác định tên mảng với số, viết cặp ngoặc [ ] Ví dụ khai báo mảng sau: Type AI = array[1 10] of integer; AC = array[1 10] of char; Color = (red, blue, green, white, black); Var A, B, C : AI; X, Y: AC; MM: array[Color] of boolean; Ví dụ: Ta xét tốn nhập vào nhiệt độ (trung bình) ngày tuần, tính đưa hình nhiệt độ trung bình tuần số lượng ngày tuần có nhiệt độ cao nhiệt độ trung bình tuần Ta dùng bảy biến thực để lưu trữ nhiệt độ ngày tuần Thuật toán cụ thể sau: Program nhietdo_tuan; Uses crt; Var t2, t3, t4, t5, t6, t7, CN, TB: real; Dem: integer; Begin Clrscr; Writeln(‘Nhap vao nhiet cua ngay: ‘); Readln(t2, t3, t4, t5, t6, t7, CN); TB: = (t2 + t3 + t4 + t5 + t6 + t7 + CN)/7; Dem : = 0; If t2 > TB then Dem: = Dem + 1; If t3 > TB then Dem: = Dem + 1; If t4 > TB then Dem: = Dem + 1; If t5 > TB then Dem: = Dem + 1; If t6 > TB then Dem: = Dem + 1; If t7 > TB then Dem: = Dem + 1; If CN > TB then Dem: = Dem + 1; Writeln(‘Nhiet trung binh cua tuan la : ‘, TB:4:2); Writeln( ‘So nhiet cao hon nhiet trung binh la:’,Dem); Readln End Khi cần giải toán với N ngày ( N lớn ) cách làm tương tự khơng đòi hỏi khối lượng khai báo lớn, mà đoạn chương trình tính tốn dài Để giải vấn đề đó, ta sử dụng kiểu liệu mảng chiều để mơ tả liệu Chương trình giải toán tổng quát với N ngày Pascal sau: Program Nhietdo_N_ngay; Const Max = 366; { gia thiet N lon nhat la 366} Type mang = array[1 Max] of Real; Var nhietdo: mang; Dem, i, N : integer; Tong, TB : real; Begin Write(‘nhap so ngay:’); readln(N); Tong: = 0; For i: = to N Begin Write(‘ Nhap nhiet ngay’, i, ‘ : ‘); Readln(nhietdo[i]); Tong: = Tong + nhietdo[i]; End; Dem: = 0; TB : = Tong/N; For i: = to N If nhietdo[i] > TB then Dem: = Dem + 1; Writeln (‘Nhiet trung binh’, N, ‘ngay:’, TB:8:3); Writeln(‘So nhiet cao hon TB: ‘, Dem); Readln End BÀI TẬP: Bài 1: Viết chương trình nhập vào dãy số nguyên dương không 100 số tìm phần tử lớn dãy số nguyên Lời giải: Trước phần cấu trúc rẽ nhánh với câu lệnh if-then làm tốn tìm số lớn hai, ba bốn số Nhưng mở rộng dãy số có nhiều số để tìm phần tử lớn dãy phương pháp ta làm hồn tồn tương tự với tốn trước khác dãy có nhiều số ta dùng kiểu mảng để thuật toán ngắn gọn Thuật toán cụ thể sau: Program tim_max; Uses crt; Var A: array[1 100] of integer; Max, i, N: integer; Begin Clrscr; Write(‘ Nhap so phan tu cua day N = ‘); Readln(N); For i: = to N Begin Writeln(‘Phan tu thu ‘, i, ‘ la: A[’, i, ‘]=’); Readln(A[i]); End; Max : = A[1]; For i: = to N If A[i] > Max then Max : = A[i]; Writeln (‘Phan tu lon nhat cua day la:’,Max); Readln End Nếu tốn tìm phần tử nhỏ dãy cách làm hồn tồn tương tự Program tim_min; Uses crt; Var A: array[1 100] of integer; Min, i, N: integer; Begin Clrscr; Write(‘ Nhap so phan tu cua day N = ‘); Readln(N); For i: = to N Begin Writeln(‘Phan tu thu ‘, i, ‘ la: A[’, i, ‘]=’); Readln(A[i]); End; Min : = A[1]; For i: = to N If A[i] < Min then Min : = A[i]; Writeln (‘Phan tu nho nhat cua day la:’,Min); Readln End * Sắp xếp phần tử mảng theo trật tự tăng giảm ví dụ bổ ích cho việc xử lý toán liên quan đến mảng Sau trình bày số phương pháp xếp mảng qua ví dụ Giả sử ta có dãy liệu (số ngun, số thực, kí tự,…) chứa mảng Sau số ví dụ số phương pháp xếp mảng số nguyên Việc phần tử mảng số ngun ví dụ, mảng số thực mảng xâu kí tự Phương pháp xếp theo thứ tự tăng dần Đầu tiên đem phần tử thứ so sánh với phần tử lớn đem đổi chỗ giá trị hai phần tử so sánh Kết sau lượt giữ GTNN Tiếp theo vòng 2, đem phần tử thứ hai so sánh với phần tử Cách làm tiếp tục phần tử cuối Bài 2: Viết chương trình nhập vào dãy số nguyên dương không 100 số xếp dãy số theo thứ tự khơng giảm Bài giải: Program sap_xep; Uses crt; Var A: array[1 100] of integer; N, i, j, t: integer; Begin Clrscr; Write(‘Nhap so luong phan tu cua day so: N= ‘); Readln(N); For i:= to N Begin Write(‘ Nhap phan tu thu ‘, i, ‘: A[‘, i, ‘]=’); Readln(A[i]); End; For i: = to N - For j:= i + to N If A[i] > A[j] then Begin t:= A[i]; A[i]: = A[j]; A[j]: = t; End; Writeln(‘ Day so sau sap xep la : ‘); For i: = to N Write(A[i]: 6); Readln End Nếu thay đổi đề tập thành xếp số dãy theo thứ tự khơng giảm cách làm hồn tồn tương tự Ta so sánh số với số lại dãy nhỏ đem đổi chỗ hai số so sánh với Kết sau phép so sánh giữ giá trị lớn Tiếp theo ta lấy số thứ hai so sánh với số Cứ làm số cuối dãy Cụ thể thuật tốn xếp theo thứ tự khơng giảm sau: Program sap_xep; Uses crt; Var A: array[1 100] of integer; N, i, j, t: integer; Begin Clrscr; Write(‘Nhap so luong phan tu cua day so: N= ‘); Readln(N); For i:= to N Begin Write(‘ Nhap phan tu thu ‘, i, ‘: A[‘, i, ‘]=’); Readln(A[i]); End; For i: = to N - For j:= i + to N If A[i] < A[j] then Begin t:= A[i]; A[i]: = A[j]; A[j]: = t; End; Writeln(‘ Day so sau sap xep la : ‘); For i: = to N Write(A[i]: 6); Readln End Bài 3: Nhập dãy số từ bàn phím Hãy viết chương trình nhập số a liệt kê tất số dãy lớn a Lời giải: Program bai_3; Uses Crt ; Var B : Array[1 100] of Real; a : Real ; N, i : Byte ; BEGIN Clrscr ; Write ('Nhap so luong phan tu cua day so : N= ') ; Readln(N) ; For i := To N Do Begin Write (‘ Nhap phan tu thu ‘ , i, ‘ : B[‘, i, ‘]=’) ; Readln( B[i] ) ; End ; Write (' Nhap so thuc a : ') ; Readln(a) ; Writeln (' Cac phan tu cua day lon hon a la : ') ; For i:= to N If B[i]>a then write(B[i]:8:2); Readln END Bài 4: Viết chương trình nhập dãy số nguyên từ bàn phím: a, Tính tổng số dương dãy số b, Tính tổng bình phương số chẵn dãy số số số chẵn dãy số Lời giải: a, Với toán ta hồn tồn làm theo cách dùng vịng lặp for-do mà không cần dùng đến mảng chiều Tuy nhiên số lượng phần tử dãy số lớn việc dùng mảng tối ưu nhiều Chương trình ngắn gọn đẹp Thuật toán sau: Program so_duong; Uses crt; Var A: array[1 100] of integer; N, i, S: integer; Begin Clrscr; Write(‘Nhap so luong phan tu cua day so: N= ‘); Readln(N); For i:= to N Begin Write(‘ Nhap phan tu thu ‘, i, ‘: A[‘, i, ‘]=’); Readln(A[i]); End; S:=0; For i: = to N If A[i] > then S: = S + A[i]; Writeln(‘ Tong cac so duong cua day la: S= ‘, S); Readln End b, Thuật toán sau: Program so_chan; Uses crt; Var A: array[1 100] of integer; N, i, j, S: integer; Begin Clrscr; Write(‘Nhap so luong phan tu cua day so: N= ‘); Readln(N); For i:= to N Begin Write(‘ Nhap phan tu thu ‘, i, ‘: A[‘, i, ‘]=’); Readln(A[i]); End; S:=0; j:= 0; For i: = to N If A[i] mod = then Begin S: = S + sqr(A[i]); j: = j + 1; end; Writeln(‘ Tong binh phuong cac so chan cua day la: ‘, S); Writeln(‘So cac so chan cua day la: ‘, j ); Readln End Bài 5: Viết chương trình tính tổng bình phương số âm mảng gồm N phần tử Ý tưởng: Duyệt qua tất phần tử A[i] mảng: Nếu A[i]0 then write(a[i],' '); readln; End Bài 8: Nhập vào dãy số nguyên bất kỳ, in hình số khác dãy số uses crt; var a:array [1 1000] of longint; i,k,m,n:longint; Begin clrscr; Repeat Write('Ban hay nhap so phan tu cua day:');Readln(n); if n0; For i:=1 to n begin Write('Ban hay nhap so thu ',i,':');Readln(a[i]); end; Writeln('Cac so khac day la:'); For i:=1 to n begin m:=0; For k:=1 to i-1 if a[i]=a[k] then begin m:=1;break;end; if m=0 then Write(a[i],' '); end; Readln; End ... biến mảng> :array [kiểu số] of ; _ Cách Khai báo gián tiếp biến mảng qua kiểu mảng chiều: Type = array [kiểu số] of ; Var : ;... tử mảng kiện có phần tử chẵn tổng phần tử lẻ trình nhập vào mảng mảng gồm n phần tử nguyên Đếm xem mảng có phần tử chia hết cho Lý thuyết tập: Kiểu mảng chiều: Mảng chiều dãy hữu hạn phần tử kiểu. .. hoạt Mơ tả: HS biết cách tính tổng Mô tả: HS biết cách mảng chiều mảng nhập từ cấu trúc lặp kiểu mảng để làm phần tử mảng thỏa mãn điều đếm xem mảng bàn phím tập Ví dụ 7: Viết chương trình nhập Ví