Tải bản đầy đủ (.pdf) (18 trang)

kỹ thuật lập trình C chuyên nghiệp phần 2 pot

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 (586.78 KB, 18 trang )

Phương pháp Heuristic


y Trong nhi

u
b
ài toán dùng
p
hương
p
háp th

-saisẽ d

n
đếnsố lượng thử quá lớn không chấpnhận được.


ế
y Heuristic chính là ướclượng v

khả năng d

n đ
ế
nlờigiải
củamộttrạng thái: phương pháp vét cạnnhưng có thêm tri
hứ
đi


ối
bộ
ê

h ớ
đíh
ê
t
hứ
c
đi

m, t
ối
ưucục
bộ
, nguy
ê
n

h
ư

ng
đí
c
h
, nguy
ê
n

lý sắpthứ tự,
í
d
y v
í
d
ụ:
Mộtembébị lạc đường về nhà, em nhớ nhà mình cao nhất
trong
khu
vực
em
sẽ
tìm
đến
tòa
nhà
cao
nhất
trong
vùng
em
trong
khu
vực
,
em
sẽ
tìm
đến

tòa
nhà
cao
nhất
trong
vùng
em
thấy, rồilạitiếptục ,
Giải
phương
trình
bậc
2
,
đoán
nghiệm
theo
Vi
-
ét
Giải
phương
trình
bậc
2
,
đoán
nghiệm
theo
Vi

ét
kiế
h
hiề
hiề
Tìm
kiế
mt
h
eo c
hiề
u sâu và c
hiề
u
rộng
rộng
y

thử
sai
theo
nguyên


cung
hay
chính

thử
y


thử
-
sai
theo
nguyên


cung
hay
chính

thử
-
sai kếthợplầnngược.
y
Ngược
với
tìm
kiếm
theo
chiều
sâu
tìm
kiếm
theo
chiều
y
Ngược
với

tìm
kiếm
theo
chiều
sâu
,
tìm
kiếm
theo
chiều
rộng mang hình ảnh củavếtdầu loang.
Giảithu

t
A
*

Phươn
g
p

p
trí tu

nhân t

o
g
pp



y
"
Dạy
"
máy
tính
để

"
trí
thông
minh
"
như
con
người
y
Dạy
máy
tính
để

trí
thông
minh
như
con
người
bắtchướckhả năng "suy luận" của con người.


dụ
:
bài
toán
đong
nước

3
bình
A
B

C

dung

dụ
:
bài
toán
đong
nước
,

3
bình
A
,
B

,

C

dung
tích 5, 8, và 13 lít. Làm sao đong được 11 lít nướctrong
bình
C?
Bình
C
ban
đầu
đầy
nước
bình
C?
Bình
C
ban
đầu
đầy
nước
.
Mộtsố phương pháp chuyểngiao
tri thức
1. Biểudiễntri thức
2
Hệ

i

2
.
Hệ
c
h
uy
ê
ng
i
a
3. Máy học
MM
ảả
ng ng

ArrayArray
MM
ảả
ng ng
ArrayArray
Phạm Thế Bảo
Trường
Đạihọc Khoa họcTự nhiên Tp HCM
Trường

Đại

học

Khoa


học

Tự

nhiên

Tp
.
HCM
MảMả
AA
Mả
ng
Mả
ng
––
A
rray
A
rray
 MộtMộtsốsố tínhtính chấtchất
Kh iKh i
bábá
ảả
tt
CC

Kh
a

iKh
a
i

o

om

ngm

ng
t
rong
t
rong
CC
 TruyTruy xuấtxuất cáccác thànhthành phầnphần
 TruyềnTruyền thamtham sốsố kiểukiểumảngmảng chocho hàmhàm

MộtMột
ốố
thth
tátá
ởở

MộtMột
s

s


th
ao
th
ao

c

ccơcơ s

s

 MảngMảng nhiềunhiềuchiềuchiều
MảMả
Mộ ố íh hấMộ ố íh hấ
Mả
ng
Mả
ng
––
Mộ
t s

t
í
n
h
c
hấ
t
Mộ

t s

t
í
n
h
c
hấ
t
ểể
ấấ
 MảngMảng làlà mộtmộtki

uki

ud

d

liệuliệucócó c

uc

utrúctrúc dodo ngườingườilậplập
trìnhtrình địnhđịnh nghĩanghĩa
DùDù
biểbiể
diễdiễ
áá
đốiđối

tt
dữdữ
liệliệ
ởở
dd
ộtột


ng

ng
biể
u
biể
u
diễ
n
diễ
nc
á
cc
á
c
đốiđối
t
ượng
t
ượng
dữdữ
liệ

u
liệ
u
ởở
d
ạng
d
ạng m
ột
m
ột
dãydãy cáccác thànhthành phầnphầncócó cùngcùng kiểukiểuvớivới nhaunhau ––kiểukiểucơcơ
sởsở
sởsở
 NNLTNNLT CC luônluôn chỉchỉđịnhđịnh mộtmộtkhốikhốinhớnhớ liênliên tụctụcchocho
m

tm

tbi
ế
nbi
ế
nki

uki

umản
g
mản

g
ộộ
gg
 KíchKích thướcthướccủacủamảngmảng đượcđượcxácxác địnhđịnh ngayngay khikhi khaikhai
báobáo vàvà khôn
g
khôn
g
baobao
g
iờ
g
iờ tha
y
tha
y
đ



i
gg
gg
yy
MảMả
Kh i bá CKh i bá C
Mả
ng
Mả
ng

––
Kh
a
i


o trong
CKh
a
i


o trong
C
tdftdf
kiể ơ ởkiể ơ ở
Tê kiểTê kiể
[[
Sốthà h hầSốthà h hầ
]]
t
ype
d
e
ft
ype
d
e
f
kiể

uc
ơ
s
ởkiể
uc
ơ
s


n
kiể
u

n
kiể
u
[[
Sốthà
n
h
p
hầ
n
Sốthà
n
h
p
hầ
n
]]

;;
kiểucủamỗi thành phầnkiểucủamỗi thành phần
hằ ố ố thà h hầhằ ố ố thà h hầ
kiểu

của

mỗi

thành

phầnkiểu

của

mỗi

thành

phần
hằ
ng s

, s


thà
n
h
p

hầ
n
hằ
ng s

, s


thà
n
h
p
hầ
n
tối đa của mảngtối đa của mảng
do lập trình viên đặt têndo lập trình viên đặt tên
typedeftypedef intint
A
INT[
A
INT[100100];];
////AINTAINT là kiểu mảng biểu diễn dãy gồm 100 thành phần intlà kiểu mảng biểu diễn dãy gồm 100 thành phần int
AINTAINT a;a; //a: //a: biếnbiếnkiểukiểu AINTAINT
MảngMảng
Ví dVí d
Mảng

Mảng

––



d



d

#define
SIZE
10
#define
SIZE
10
int a[5]; // a dãy gồm5 số nguyên
long int big[100]; // big: chiếm 400 bytes!
double d
[
100
]
;
//
d: chiếm 800 b
y
tes!
[]
//
y
long double v[SIZE];// v:10 long doubles
long double d[2.5];

long double d[0];
long double d[-4];
long do ble d[n]
long

do
u
ble

d[n]
;
MảngMảng
Ví dVí d
khởitrị cho 5
Mảng

Mảng

––


d



d

i
[5] {1020304050}
khởi


trị

cho

5

thành phần
i
nt a
[5]
=
{

10
,
20
,
30
,
40
,
50}
;
double d[100] = { 1.5, 2.7};
short primes[] = { 1, 2, 3, 5, 7, 11, 13};
long b[50] = { 0 };
2 thành phần
đầutiênđược
đầu


tiên

được

khởi trị, phần
còn lại: 0
compiler xác định
kích thước gồm 7
thành phần
cách nhanh nhất để
int i = 7;
const int
c=5;
thành

phần
cách

nhanh

nhất

để

khởi trị tất cả các
thành phần bằng 0
const

int

c

=

5;
int a[i];
double d[c];
short
primes[];
short
primes[];
MảngMảng
––
TruyTruy
xuấtxuất
cáccác
phầnphần
tửtử
 CácCác thànhthành phầnphầncủacủamảngmảng đượcđượctruytruy xuấtxuất thôngthông quaqua chỉchỉ sốsố
ủủ
húhú
00
ii
11
MảngMảng
TruyTruy
xuấtxuất
cáccác
phầnphần
tửtử

c

ac

ac

ngc

ng
00
s
i
zes
i
ze
11
 ThaoThao táctác truytruy xuấtxuất khôngkhông kiểmkiểmtratra giớigiớihạnhạncủacủachỉchỉ sốsố
nhưngnhưng
giágiá
trịtrị
khôngkhông
kiểmkiểm
soátsoát
đượcđược
nhưngnhưng
giágiá
trịtrị
khôngkhông
kiểmkiểm
soátsoát

đượcđược
int main()
{
0
a
{
int a[6];
int i = 7;
a[0] = 59;
0
1
2
a[0]

=

59;
a[5] = -10;
a[i/2] = 2;
a[6] = 0;
2
3
4
a[6]

=

0;
a[-1] = 5;
return 0;

5
}
T ề th ố Mả hhàT ề th ố Mả hhà
T
ruy

n
th
am s


Mả
ng c
h
o

m
T
ruy

n
th
am s


Mả
ng c
h
o


m

ThTh
ốố
kiểkiể
ảả
đđ
t ềt ề
hh
hàhà
hí hhí h
làlà
địđị
hỉhỉ

Th
am
Th
am s

s

kiể
u
kiể
um

ngm

ng

đ
ược
đ
ược
t
ruy

n
t
ruy

nc
h
oc
h
o

m

mc

n
h
c

n
h
làlà
đị
a

đị
ac
hỉ
c
hỉ
củacủaphầnphầntửtửđầuđầu tiêntiên trêntrên mảngmảng

SốSố
thànhthành
phầnphần
trongtrong
thamtham
sốsố
mảngmảng
cócó
thểthể
đểđể
trốngtrống

SốSố
thànhthành
phầnphần
trongtrong
thamtham
sốsố
mảngmảng
cócó
thểthể
đểđể
trốngtrống


 SốSố thànhthành phầnphầnthựcthựcsựsựđượcđượcsửsử dụngdụng phảiphảitruyềntruyền quaqua mộtmột
thamtham
sốsố
kháckhác
(vd(vd
::
size)size)
thamtham
sốsố
kháckhác
(vd(vd
::
size)size)
in
t

add e
l
e
m
e
n
ts(
in
t

a[],
in
t


s
iz
e)
t add_eeets( ta[], t s e)
{
int add_elements(int *p, int size)
{
Ví dụVí dụ


dụVí

dụ
#include <stdio.h>
id
(l [] i t)
1
primes
vo
id
sum
(l
ong
[]
,
i
n
t)
;

int main(void) {
long primes[6] = { 1, 2,
2
3
3, 5, 7, 11 };
sum(primes, 6);
printf("%li\n", primes[0]);
5
7
11
return 0;
}
11
a
void sum(long a[], int sz) {
int i;
long
total = 0;
sz
6
dùng để kiểmtra
long
total

=

0;
for(i = 0; i < sz; i++)
total += a[i];
a[0] total;

tổng đượclưu vào
dùng

để

kiểm

tra

giới hạn chỉ số
a[0]
=
total;
}
tổng

được

lưu

vào

phần tử đầu tiên
Chú ýChú ý
Chú

ýChú

ý
KhôKhô

thểthể
thth
hiệhiệ
áá
thth
tátá
héhé
ộiội
dd
ộtột
ảả

Khô
ng
Khô
ng
thểthể
th
ực
th
ực
hiệ
n
hiệ
nc
á
cc
á
c
th

ao
th
ao

c

cc

pc

pn
ội
n
ội
d
ung
d
ung m
ột
m
ột
m

ngm

ng
sang sang mảngmảng kháckhác
ChépChép
từngtừng
phầnphần

tửtử
mảngmảng
ChépChép
từngtừng
phầnphần
tửtử
mảngmảng
char A[3]={‘char A[3]={‘a’,’b’,’ca’,’b’,’c’};’};
char B[3];char B[3];
B = A; // ???B = A; // ???
for(for(intint ii=0; =0; ii<3; <3; ii++)++)
B[B[
ii
]A[]A[
ii
];];
B[B[
ii
]
=
A[]
=
A[
ii
];];
hoặchoặc chépchép khốikhốibộbộ nhớnhớ ((sẽsẽđượcđược đềđề cậpcậpsausau))

KhôngKhông
dùngdùng
phépphép

soso
sánhsánh
trựctrực
tiếptiếp
(==)(==)
nộinội
dungdung
trongtrong
haihai

KhôngKhông
dùngdùng
phépphép
so

so

sánhsánh
trựctrực
tiếptiếp
(==)

(==)

nộinội
dung

dung

trongtrong

haihai
mảngmảng
Phé
p
Phé
p
so so sánhsánh
(
A==B
)
so
(
A==B
)
so sánhsánh đ



achỉchỉ haihai vùn
g
vùn
g
nhớnhớ màmà A A vàvà B B
pp
()()
ịị
gg
chỉchỉđếnđến
Một ố th tá ởMột ố th tá ở
Một

s


th
ao

c cơ s
ởMột
s


th
ao

c cơ s

 NhậpNhập
ấấ
 Xu

tXu

t
 ThêmThêm mộtmột thànhthành phầnphầndữdữ liệuliệu
 LoạiLoạibỏbỏ mộtmột thànhthành phầnphầndữdữ liệuliệu

TìmTìm
kiếmkiếm

TìmTìm

kiếmkiếm
 SắpSắpxếpxếp
MảngMảng
Nhậ dữ liệNhậ dữ liệ
Mảng

Mảng

––
Nhậ
p
dữ

liệ
u
Nhậ
p
dữ

liệ
u
v
oid ReadData(int a[], int size)
{
int
i;
duyệt qua tất cả các
int
i;
f

o
r
(
i =
0;
i <
s
iz
e;
i++
)
phần tử
o( 0; s e; )
{
printf(“Nhap thanh phan %d: ”, i);
scanf(“%d”, &a[i]);
}
}
}
nh
ập
dữ li

u cho a
[
i
]
ập ệ []
MảngMảng
X ấtdữ liệ àhìhX ấtdữ liệ àhìh

Mảng

Mảng

––
X
u
ất

dữ

liệ
u ra m
à
n

n
hX
u
ất

dữ

liệ
u ra m
à
n

n
h

void WriteData(int a[], int size)
{
i
i
i
nt
i
;
for(i = 0; i < size; i++)
for(i

=

0;

i

<

size;

i++)
printf(“%d ”, a[i]);
printf(“\n”);
}
MảngMảng
Nhậ ấtdữ liệNhậ ấtdữ liệ
Mảng

Mảng


––
Nhậ
p xu
ất

dữ

liệ
u
Nhậ
p xu
ất

dữ

liệ
u
#include <stdio h>
#include

<stdio
.
h>
void ReadData(int [], int );
v
oi
d
WriteData(int [], int );
void main()

{
int
a[100] n;
int
a[100]
,
n;
clrscr();
printf(“Nhap so thanh phan cua day: “);
scanf(“%d”, &n);
printf(“Nhap cac thanh phan cua day: “);
ReadData(a n);
ReadData(a
,
n);
printf(“Day vua nhap: \n“);
WriteData(a, n);
}

×