YOMEDIA
Bài giảng Nhập môn Tin học: Chương 3 - Ngô Quang Thạch
Chia sẻ: Phong Phong
| Ngày:
| Loại File: PPTX
| Số trang:22
65
lượt xem
2
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
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.
AMBIENT/
Chủ đề:
Nội dung Text: 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à 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];
7/5/18 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;
7/5/18 20
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
ERROR:connection to 10.20.1.100:9315 failed (errno=111, msg=Connection refused)
ERROR:connection to 10.20.1.100:9315 failed (errno=111, msg=Connection refused)
Đang xử lý...