Tải bản đầy đủ (.pptx) (22 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (331.18 KB, 22 trang )

Chương 3
NHẬP MÔN TIN HỌC
NGÔ QUANG THẠCH


5/8/21
5/8/21


NỘI DUNG

Khái niệm cấu trúc dữ 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 trên mảng

Sắp xếp mảng
Tìm kiếm trong mảng

5/8/21

2


Khái niệm cấu trúc dữ liệu

Các kiểu dữ liệu CƠ BẢN: Integer, Real, Char, Boolean,..
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 giá trị này được đặt trong ngoặc đơn ( )

5/8/21

3


CÁCH KHAI BÁO

Cách khai báo
TYPE <tên kiểu liệt kê> = (<danh sách giá trị kiểu liệt kê>) ;

Ví dụ:
TYPE Days  = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ;
Colors =(Red, Yellow, Green, White, Blue, Black) ;

5/8/21

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');

                          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

5


KIỂU MẢNG

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.

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.

5/8/21

6



KHAI BÁO MẢNG
Cú pháp:
TYPE <Tên mảng> = ARRAY [chỉ số] OF <Kiểu dữ liệu>;

VAR <Biến mảng>:<Tên mảng>;
Hoặc khai báo trực tiếp:
VAR <Biến mảng> : ARRAY [chỉ số] OF <Kiểu dữ liệu>;

Ví dụ:
TYPE Mangnguyen = Array[1..100] of Integer;
VAR A: Mangnguyen;
hoặc:
VAR A: Array[1..100] of Integer;

5/8/21

7


Truy xuất các phần tử của mảng

Mỗ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 [ ].

VAR A : ARRAY [1..10] OF integer;
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
A[1]

5/8/21


A[2]

A[3]

A[4]

A[5]

A[6]

8

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 một giá trị vào phần tử

5/8/21

9


Ví dụ: Viết chương trình nhập vào giá trị ngun 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.

5/8/21


10


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.

5/8/21

11


SẮP XẾP MẢNG

Thuật toán chọn trực tiếp


Coi phần tử đầu tiên là số nhỏ nhất



Đ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ố. Nếu có phần tử thứ i nào đó nhỏ hơn nó thì
đổi chỗ của phần tử ấy cho nó. Như vậy sau khi duyệt xong
dãy số, phần tử đầu tiên là phần tử nhỏ nhất


For i := 1 to n - 1 do
For j := i +1 to n do
if A[ i ] >A[ j ] then
Begin



Lặp lại thuật toán lần lượt với các phần tử thứ 2, thứ 3 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]

7

6

8


9

5

6

7

8

9

5

5

7

8

9

6

7>6 => hoán đổi 2 số
J=3, so sánh A[i] với A[j]
6<8 nên khơng làm gì
J=4, so sánh A[i] với A[j]
6<9 nên khơng làm gì
J=5, so sánh A[i] với A[j]

6>5 => hoán đổi 2 số

Kết quả sau lần 1: 5, 7, 8, 9, 6

5/8/21

13


Sắp xếp Mảng A
Lần 2: i:=2

5

7

8

9

6

J=3, so sánh A[i] với A[j]
7<8 nên khơng làm gì
J=4, so sánh A[i] với A[j]
7<9 nên khơng làm gì
J=5, so sánh A[i] với A[j]

5


7>6 => hoán đổi 2 số

Kết quả sau lần 2: 5, 6, 8, 9, 7

5/8/21

14

6

8

9

7


Sắp xếp Mảng A
Lần 3: i:=3

5

6

8

9

7


J=4, so sánh A[i] với A[j]
8<9 nên khơng làm gì
J=5, so sánh A[i] với A[j]

5

8>7 => Hoán đổi 2 số

Kết quả sau lần 3: 5, 6, 7, 9,8

5/8/21

15

6

7

9

8


Sắp xếp Mảng A
Lần 3: i:=4 (cuối)

5

6


7

9

8

J=5, so sánh A[i] với A[j]

5

9>8 => Hoán đổi 2 số

Kết quả sau lần 4: 5, 6, 7, 8, 9

5/8/21

16

6

7

8

9


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




5/8/21

Gán vị trí thứ i là 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 := 1 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 trong mang’);

18


Bài tập

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ử.

Ý 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];

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{In kết quả ra màn hình}
Writeln(‘Phan tu lon nhat cua mang: ’, Max);
Readln;
End.
5/8/21

20


Bài tập

Viế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ử.

Ý 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

5/8/21

21


Thank You !


5/8/21
5/8/21



×