hoa cuong có thì sử dụng – thích thì lao vào

35 6 0
hoa cuong có thì sử dụng – thích thì lao vào

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

– Dữ liệu phải được đóng gói: Người lập trình chỉ biết kiểu dữ liệu qua tên gọi và ngữ nghĩa của nó mà. không quan đến tổ chức vật lý[r]

(1)

1

(2)

2

Chương 1:

(3)

3

Định nghĩa phép toán danh sách đặc

• Định nghĩa

• Cách biểu diễn phép toán danh sách đặc

- Khởi tạo danh sách

(4)

4 1 Mảng (Array) – Định nghĩa

• Định nghĩa: Mảng cấu trúc bao gồm thành phần kiểu liệu, thành phần

gọi phần tử xác định qua số

Trong C/C++ khai báo:

elem a[spt];

Trong elem kiểu phần tử (element type); spt số phần tử

Ví dụ:

int a[10]; //mảng a gồm 10 phần tử kiểu int

(5)

5 Tổ chức lưu trữ

• Mảng quản lý địa nhớ máy tính phần tử bố trí liên số

• Chính dãy liệu lưu trữ mảng gọi danh sách đặc

0

(6)

6 Truy xuất

• Truy xuất mảng: Truy xuất qua phần tử mảng theo số i

Trong C/C++:

<tên mảng>[i] Bằng cách tính địa chỉ:

@a + i * sizeof(elem)

Ví dụ: a[3] truy xuất đến địa chỉ: 1000+3*21000 1006

0

a

(7)

7

Ví dụ

• Viết đoạn chương trình cộng dồn n giá trị mảng vào a[0]

for (i=1; i<n; i++) a[0] = a[0]+a[i]; Viết lại

t = a[0];

for (i=1; i<n; i++) t = t+a[i];

(8)

8 Mảng nhiều chiều

• Là mảng bao gồm phần tử có kiểu mảng

vd: int a[3][4];

Vd: viết hàm tìm max mảng số nguyên

0

a

3

(9)

9

int max( int a[ ], int n) {

int m = a[0];

for (int i=1; i<n; i++) if (a[i]>m)

m = a[i]; return m;

(10)

10

void main() {

int b[3][4] = { { 7, 12, 6, 8}, { 32, 17, 21, 23},

{ 1, 5, 35, 32}};

int a[] = {9, 7, 18, 6, 1, 3, 2, 5, 11, 4};

printf("\nMax cua b: %d", max(b[0], 12)); printf("\nMax cua a: %d", max(a, 10));

printf("\nMax : %d", max(a+5, 5)); }

0

b

3

(11)

11 Con trỏ?

• Con trỏ: Là kiểu liệu dang địa nhớ máy tính

• Biến trỏ: Lưu trữ địa vùng nhớ máy tính

• Khai báo:

<type> *<pointer_var> Ví dụ:

float *pa, a, b;

pa

(12)

12

Các phép tốn

• Tốn tử &:

Lấy địa đối tượng &<object>

Ví dụ:

float *pa, a, b; pa = &a;

*pa a

(13)

13

Các phép tốn

• Tốn tử *:

Truy xuất đến vùng nhớ mà trỏ trỏ đến *<pointer>

Ví dụ:

float *pa, a, b; pa = &a;

*pa = 5;

*pa a

pa

(14)

14

Mảng trỏ

• Mảng quản lý địa • Con trỏ lưu địa

Vì vậy, số tình trỏ đồng với mảng ngược lại

Ví dụ:

int a[10], *pa; pa = a;

0

a

3

(15)

15 Mảng trỏ - tt

*pa = 5;  a[0]=5

pa = &a[5];

*pa = 7;  a[5]=7

0

a

3

pa

5

0

a

3

pa

(16)

16 Phép toán +, -, ++,

• Phép +/-: Tăng hay giảm n đơn vị trỏ <pointer> = <pointer> + n

<pointer> += n n số nguyên

• Phép ++/ : Tăng hay giảm đơn vị trỏ <pointer> ++

++<pointer> Ví dụ:

(17)

17

Ví dụ:

pa = a;

pa = pa+3;

0

a

3

pa

5

0

a

3

pa

(18)

18

*pa=1;  a[3]=1 *(pa+4) =  a[7]=2 *(a+4) =  a[4]=9 pa[5] =  a[8]=6

a++; // Sai, a không thay đổi

0

a

3

pa

(19)

19

Cấp phát/thu hồi nhớ

• Cấp phát nhớ động

– C: hàm malloc()

(void *)malloc(int size)

Cấp vùng nhớ có size byte trả địa vùng nhớ cấp phát

– C++: toán tử new

new <type>[size]

[size] thành phần nhiệm ý

Cấp vùng nhớ có size phần tử trả địa vùng nhớ cấp phát

(20)

20

Cấp phát/thu hồi nhớ - tt

• Thu hồi nhớ

– C: hàm free()

void free(<pointer>)

– C++: toán tử delete

delete [size]<type>

[size] thành phần nhiệm ý Thu hồi vùng nhớ mà trỏ trỏ đến

(21)

21

Chuỗi ký tự (String)

• Định nghĩa: Là dãy ký tự chọn lọc

• Cài đặt: Dựa mảng ký tự, có cách cài đặt

– Cách 1: Sử dụng byte để lưu chiều dài chuỗi (Pascal sử dụng cách này)

Ví dụ chuỗi “TIN HOC”

S[8]=‘A’  S=“TIN HOC”

S[2]=‘A’  S=“TAN HOC”

#7 T I N

0

H O C

(22)

22 –Cách 2: Sử dụng ký tự đặc biệt làm

ký tự kết thúc chuỗi (C/C++ sử dụng cách này).

Ví dụ chuỗi “TIN HOC”

‘\0’: kí tự có mã ASCii 0

S[1]=‘A’  S=“TAN HOC”

T I N

0

H O C

5

(23)

23 Các thao tác chuỗi

• Sao chép chuỗi (strcpy) • So sánh chuỗi (strcmp) • Chiều dài chuỗi (strlen) • Ghép chuỗi (strcat)

(24)

24

VD chép chuỗi

void strcpy(char s1[], char s2[]) {

int i = 0;

while (s2[i] != ‘\0’) {

s1[i] = s2[i]; i++;

}

(25)

25

VD chép chuỗi – viết lại

void strcpy(char s1[], char s2[]) {

int i = 0;

while (s1[i] = s2[i]) i++;

(26)

26

VD chép chuỗi – viết lại lần cuối

void strcpy(char *s1, char *s2) {

while (*s1++ = *s2++); }

• Ghép s2 vào cuối s1

void strcat(char *s1, char *s2) {

while (*s1) s1++;

(27)

27

Ghép chuỗi – viết theo 2

void strcat(char s1[], char s2[]) {

int i = 0, j=0;

while (s1[i]) i++;

(28)

28 Đổi chuỗi thành số

int atoi(char *s) {

int P = 0; while (*s)

P = P*10 + *s++ -’0’; return P;

(29)

29

So sánh chuỗi

int strcmp(char *s1, char *s2) {

while (*s1 == *s2 && *s1) {

s1++; s2++; }

(30)

30

Trừu tượng hóa liệu

• Thiết kế cấu trúc liệu cần đạt tính trừu tượng hóa liệu:

– Dữ liệu phải đóng gói: Người lập trình biết kiểu liệu qua tên gọi ngữ nghĩa mà

khơng quan đến tổ chức vật lý

– Che chắn tốt: Người lập trình truy xuất đến thơng qua thao tác (hàm) mà kiểu liệu cung cấp

(31)

31

Ví dụ: Thiết kế kiểu tập hợp

#define MAX … // người sử dụng xác định #define N (MAX/8+1)

typedef unsigned char taphop[N];

//============== Tao tap rong ========= void taprong(taphop s)

{

int i;

for (i=0; i<N; i++) s[i] = 0;

(32)

32

//========== Dua phan tu x vao tap hop s void thempt(taphop s, int x)

{

s[x/8] = s[x/8] | (1<<(x%8)); }

//========== Loai phan tu x khoi tap hop s void loaipt(taphop s, int x)

{

unsigned char k = 1<<(x%8); s[x/8] = s[x/8] & ~k;

(33)

33

//========== Kiem tra phan tu x thuoc tap hop s int thuocve (taphop s, int x)

{

return s[x/8] & (1<<(x%8)); }

//========== Hội tap hop

void hoi(taphop a, taphop b, taphop c) {

int i;

for (i=0; i<N; i++) c[i] = a[i] | b[i]; }

(34)

34 Ví dụ: Tìm số ngun tố<=n

#include <iostream.h> #include <iomanip.h> #define MAX 10000

#include "TAPHOP.CPP" void main()

{

int n, i, k; taphop s;

cout<<"\nNhap n:"; cin>>n;

taprong(s);

for (i=2; i<=n; i++) thempt(s, i);

i = 2;

while (i*i<=n) {

k = i*i;

while (k<=n) {

loaipt(s, k); k = k+i; }

do

i++;

while (!thuocve(s, i)); }

cout<<"\nKet qua:\n"; for (i=2; i<=n; i++)

if (thuocve(s, i))

(35)

Ngày đăng: 27/04/2021, 18:26

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan