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

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

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 (414.58 KB, 16 trang )

Tậ ti Nhị hâTậ ti Nhị hâ
Tậ
p
ti
n
Nhị
p

n
Tậ
p
ti
n
Nhị
p

n
CáCá
hếhế
độđộ
ởở
tậtậ
titi
hịhị
hâhâ


c

cc
hế


c
hế
độđộ
m

m

tậ
p
tậ
p
ti
n
ti
nn
hị
n
hị
phâ
n
phâ
n::
 “rb”“rb” ::mởmở chỉchỉđọcđọc

“b”“b”
hihi
(hi(hi
đèđè
lêlê
tậtậ

titi
ũũ
h ặh ặ
tt
ớiới
ếế
tậtậ


w
b”“
w
b”
::g
hi
g
hi
(
g
hi(
g
hi
đèđè

n

n
tậ
p
tậ

p
ti
n
ti
nc
ũ
c
ũ
h
o

c
h
o

c
t
ạo
t
ạom
ới
m
ới
n
ế
un
ế
u
tậ
p

tậ
p
tintin khôngkhông cócó trêntrên đĩa)đĩa)


ab
”“
ab

::
ghighi
nốinối
vàovào
cuốicuối
tậptập
tintin

abab
::
ghighi
nốinối
vàovào
cuốicuối
tậptập
tintin

 “rb+”“rb+” :: đọc/ghiđọc/ghi TậpTập tintin phảiphảicócó trêntrên đĩađĩa

“b+”“b+”
::

tạotạo
mớimới
tậptập
tintin
chocho
phépphép
đọcđọc
ghighi


w
b+”“
w
b+”
::
tạotạo
mớimới
tậptập
tintin
chocho
phépphép
đọcđọc
ghighi

 “ab+”“ab+” :: đọc,đọc, ghighi vàovào cuốicuốitậptập tintin TạoTạomớimớitậptập tintin nếunếu
tậptập
tintin
chưachưa
cócó
trêntrên

đĩađĩa
tậptập
tintin
chưachưa
cócó
trêntrên
đĩađĩa

Đ hi tậ ti Nhị hâĐ hi tậ ti Nhị hâ
Đ
ọc g
hi

tậ
p
ti
n
Nhị
p

n
Đ
ọc g
hi

tậ
p
ti
n
Nhị

p

n
 freadfread() : () : đọcđọc
size_tsize_t frea
d
frea
d
( void *( void *PtrPtr, , size_tsize_t ItemSizeItemSize, ,
size_tsize_t NumItemNumItem, FILE * , FILE * fpfp ););
freadfread đọcđọcNumItemNumItem khốikhốidữdữ liệuliệu, , mỗimỗikhốikhốicócó kíchkích thướcthước
ItemSizeItemSize t

t

f
p
f
p
vàvà chứachứavàovào vùn
g
vùn
g
nhớnhớ xácxác đ

nhđ

nh bởibởiPtrPtr
pp
gg

ịị
freadfread trảtrả vềvề sốsố khốikhốidữdữ liệuliệu đọcđọc đượcđược
NếuNếucócó lỗilỗihoặchoặcEOF EOF thìthì giágiá trịtrị trảtrả vềvề nhỏnhỏ hơnhơnNumItemNumItem
 fwritefwrite() : () : ghighi
itit
fitfit
(tid*(tid*
PtPt
itit
It SiIt Si
s
i
ze_
t
s
i
ze_
t
f
wr
it
e
f
wr
it
e
(
cons
t
vo

id

*(
cons
t
vo
id

*
Pt
r
Pt
r, , s
i
ze_
t
s
i
ze_
t
It
em
Si
ze
It
em
Si
ze,,
size_tsize_t NumItemNumItem, FILE * , FILE * fpfp ););
fwritefwrite ghighi khốikhối((NumItemNumItem x x ItemSizeItemSize) ) xácxác dịnhdịnh bởibởiPtrPtr rara fp.fp.


ChépChép
33
mụcmục
từtừ
tậptập
tintin
filenamefilename
vàovào
vùngvùng
nhớnhớ
trỏtrỏ
bởibởi
ptrptr

ChépChép
33
mụcmục
từtừ
tậptập
tintin
filenamefilename
vàovào
vùngvùng
nhớnhớ
trỏtrỏ
bởibởi
ptrptr
ptrptr
fpfpÆÆfilenamefilename

ptrptr
Ctỏ FILECtỏ FILE
C
on
t
r


FILEC
on
t
r


FILE
MộtMột
tậtậ
titi
khikhi
ởở
đđ
ảả
lýlý
thôthô
ộtột
t ỏt ỏ

MộtMột
tậ
p

tậ
p
ti
n
ti
nsausau
khikhi
m

m

đ
ược
đ
ượcqu

nqu

n
lýlý
thô
ng
thô
ng quaqua m
ột
m
ột
concon
t
r

ỏt
r

FILEFILE
 KhiKhi mởmở tậptập tintin (wb,(wb, rb),rb), concon trỏtrỏ FILEFILE chỉchỉđếnđến đầuđầutậptập tintin
 KhiKhi mởmở tậptập tintin (ab),(ab), concon trỏtrỏ FILEFILE chỉchỉđếnđếncuốicuốitậptập tintin
 ConCon trỏtrỏ FILEFILE chỉchỉđếnđếntừngtừng bytebyte trongtrong tậptập tintin nhịnhị phânphân
 SauSau mỗimỗilầnlần đọcđọctậptập tin,tin, concon trỏtrỏ FILEFILE sẽsẽ didi chuyểnchuyển điđimộtmột
sốsố
bytebyte
bằngbằng
kíchkích
thướcthước
(byte)(byte)
củacủa
khốikhối
dữdữ
liệuliệu
đọcđọc
đượcđược
sốsố
bytebyte
bằngbằng
kíchkích
thướcthước
(byte)(byte)
củacủa
khốikhối
dữdữ
liệuliệu

đọcđọc
đượcđược

fseekfseek
(),(),
fseekfseek
(),

(),

 CácCác hằnghằng dùngdùng trongtrong didi chuyểnchuyển con con trỏtrỏ FILEFILE
#define#define
SEEK SETSEEK SET
00
#define#define
SEEK
_
SETSEEK
_
SET
00
#define #define SEEK_CURSEEK_CUR 11
#define #define SEEK_ENDSEEK_END 22
 intint fseekfseek( FILE *( FILE *fpfp, long , long intint offset, offset, intint whence );whence );
fseekfseek didi chuyểnchuyển con con trỏtrỏ fpfp đếnđếnvịvị trítrí offset offset theotheo mốcmốc whence whence
 offset: offset: khoảngkhoảng cáchcách (byte) (byte) cầncầndidi chuyểnchuyển tínhtính từtừ vịvị trítrí hiệnhiệntạitại. .
ềề
ốố
ềề
ầầ

(offset > 0: (offset > 0: điđiv

v

p
hía
p
hía cu

icu

itậptập tin, offset < 0: tin, offset < 0: ngượcngượcv

v

đ



utậptập
tin)tin)

whence:whence:
SEEK SET:SEEK SET:
tínhtính
từtừ
đầuđầu
tậptập
tintin


whence:whence:
SEEK
_
SET:

SEEK
_
SET:

tínhtính
từtừ
đầuđầu
tậptập
tintin
SEEK_CUR: SEEK_CUR: tínhtính từtừ vịvị trítrí hiệnhiệnhànhhành củacủa con con trỏtrỏ
SEEK_END: SEEK_END: tínhtính từtừ cuốicuốitậptập tintin
 fseekfseek trảtrả vềvề: 0 : 0 nếunếu thànhthành côngcông, <>0 , <>0 nếunếudidi chuyểnchuyểncócó lỗilỗi
ft llft ll
()()
àà
id()id()
ft
e
llft
e
ll
()

()
v

à
v
à
rew
i
n
d()
rew
i
n
d()
idid
đặtđặt
l il i
ịị
títí
t ỏt ỏ
ềề
đầđầ
tậtậ
titi
 rew
i
n
d
rew
i
n
d


đặtđặt
l

il

i
v

v

t
r
ít
r
í
con con
t
r
ỏt
r

v

v

đầ
u
đầ
u
tậ

p
tậ
p
ti
n.
ti
n.
void rewind ( FILE
*
void rewind ( FILE
*
fpfp
););
void

rewind

(

FILE

void

rewind

(

FILE

fpfp

););
tươngtương đươngđương vớivới fseekfseek ( ( fpfp, 0L, SEEK_SET);, 0L, SEEK_SET);
 ftellftell trảtrả vềvề vịvị trítrí offset offset hiệnhiệntạitạicủacủa con con trỏtrỏ
long long intint ftellftell ( FILE * ( FILE * fpfp ););
NếuNếucócó lỗilỗi, , ftellftell trảtrả vềvề 1L1L
Ví dVí d
á đị hkí h h ớ ậ iá đị hkí h h ớ ậ i


d
ụ:


d
ụ: x
á
c
đị
n
h


c
h
t
h
ư

c t


p t
i
n.x
á
c
đị
n
h


c
h
t
h
ư

c t

p t
i
n.
////
kh ikh i
bábá
biếbiế
NN
thậthậ

//


//

kh
a
ikh
a
i

o

o
biế
n
biế
nc
N
nc
N
n
thậ
n
thậ
n
if (if (
ff
ff
((
Fil NFil N
““
bb

”)) N ULL )”)) N ULL )
1.1.
if

(

if

(

f
p
f
p= =
f
open
f
open
(

(

Fil
e
N
ame
Fil
e
N
ame,


,

r
b
r
b


)

)
==
N ULL

)”

)

)
==
N ULL

)
2.2. fprintffprintf( ( stderrstderr, “Cannot open %s, “Cannot open %s\\n”, n”, FileN ameFileN ame ););
ll
3.3. e
l
see
l

se
4.4. {{
fkfk
((
ff
N )N )
5.5.
f
see
kf
see
k
(

(

f
p
f
p, 0, SEEK_E
N
D
)
;, 0, SEEK_E
N
D
)
;
6.6. FileSizeFileSize = = ftellftell( ( fpfp ););
7.7.

p
rintf
p
rintf( “File size : %d bytes( “File size : %d bytes
\\
n “, n “, FileSizeFileSize ););
8.8. fclosefclose( ( fpfp ););
9.9. }}
V

V

tr
í
tr
í
con con trỏtrỏ: : f
g
et
p
osf
g
et
p
os
()

()
vàvà
ịị

gpgp
()()
ffssetposetpos()()
 vớivới cáccác tậptập tin tin cócó kíchkích thướcthướccựccựclớnlớn fseekfseek vàvà ftellftell sẽsẽ bịbị
giớigiớihạnhạnbờibờikíchkích thướcthướccủacủa offset.offset.
 DùngDùng
intint fgetposfgetpos ( FILE *( FILE *fpfp, , fpos_tfpos_t *position);*position);
intint fsetposfsetpos ( FILE *( FILE *fpfp, const , const fpos_tfpos_t *position);*position);
Xó à đổitê tậ tiXó à đổitê tậ ti

a v
à

đổi


n
tậ
p
ti
n

a v
à

đổi


n
tậ

p
ti
n
ThTh
hiệhiệ
áá

Th
ực
Th
ực
hiệ
n
hiệ
nxo
á
xo
á
intint
remove(const char
*
filename);remove(const char
*
filename);
intint
remove(const

char

filename);remove(const


char

filename);

đổiđổi
têntên
tậptập
tintin

đổiđổi
têntên
tậptập
tin

tin

intint rename(const char *rename(const char *oldnameoldname, const char *, const char *newnamenewname););
Chú ý khi là iệ ớitậ tiChú ý khi là iệ ớitậ ti
Chú

ý

khi


m v
iệ
c v
ới


tậ
p
ti
n
Chú

ý

khi


m v
iệ
c v
ới

tậ
p
ti
n
KhiKhi
ởở
tậtậ
ti filti fil
tậtậ
titi
àà
hảihải
ằằ

ùù
thth

KhiKhi
m

m

tậ
p
tậ
p
ti
n
fil
ename,
ti
n
fil
ename,
tậ
p
tậ
p
ti
n
ti
n n
à
yn

à
y
phảiphải
n

mn

mc
ù
ngc
ù
ng
thưthư
mụcmụccủacủachươngchương trìnhtrình hoặchoặc
 phảiphải cungcung cấpcấp đầyđầy đủđủ đườngđường dẫndẫn đếnđếntậptập tintin
vdvd: C:: C:\\baitapbaitap\\taptin.dattaptin.dat
viếtviếtnhưnhư thếthế nàonào? ?
fpfp = = fopenfopen( “C:( “C:\\baitapbaitap\\taptin.dat”, “taptin.dat”, “rbrb” );” );
SAI RỒISAI RỒI
ìì
óó
kýký
tt
đặđặ
biệtbiệt
‘‘
\\
’’
êê
iếtiết

đúđú
ẽẽ
làlà
 v
ì
v
ì
c
ó
c
ó
kýký
tựtự
đặ
c
đặ
c
biệtbiệt
‘‘
\\



n
ê
nn
ê
nv
iết
v

iết
đú
ng
đú
ng s

s

làlà
::
fpfp = = fopenfopen( “C:( “C:\\\\baitapbaitap\\\\taptin.dat”, “taptin.dat”, “rbrb” );” );
ThamTham
sốsố
dòngdòng
lệnhlệnh
chươngchương
trìnhtrình
ThamTham
sốsố
dòngdòng
lệnhlệnh
chươngchương
trìnhtrình
 KhiKhi gọigọichạychạymộtmộtchươngchương trìnhtrình, , chúngchúng tata cócó thểthể cungcung cấpcấp cáccác
ốố
thamtham s

s

tạitại dòngdòng lệnhlệnh gọigọichươngchương trìnhtrình

víví dụdụ: dir A:: dir A:\\*.c /w*.c /w

copy
”“
A:

copy
”“
A:
\\
*c

*c

vàvà

/w
”“
/w

làlà
haihai
thamtham
sốsố
điềuđiều
khiểnkhiển
chươngchương
copy
,
A:copy

,
A:
\\
*
.
c

*
.
c

vàvà
/w

/w

làlà
haihai
thamtham
sốsố
điềuđiều
khiểnkhiển
chươngchương
trìnhtrình

commandcommand

line argumentsline arguments

commandcommand


line

arguments
.
line

arguments
.
 CácCác thamtham sốsố dòngdòng lệnhlệnh đượcđược thamtham chiếuchiếu qua qua haihai đốiđốisốsố khaikhai
báobáo
trongtrong
hàmhàm
main.main.
báobáo
trongtrong
hàmhàm
main.main.
 main
(
main
(
intint ar
g
car
g
c
,
char *
,

char * ar
g
var
g
v
[

]

)[

]

)
((
gg
,,
gg
[])[])
{ }{ }
 argcargc: argument coun
t
: argument coun
t
 argvargv: argument vector: argument vector
Th ố dò lệ hTh ố dò lệ h
ídíd
Th
am s




ng
lệ
n
h

Th
am s



ng
lệ
n
h

––
v
í

d
ụv
í

d

 // // addint.caddint.c ÆÆ addint.exeaddint.exe
1.1. void main (void main (intint argcargc, char * , char * argvargv [ ])[ ])
2.2.

{{
2.2.
{{
3.3. intint res = 0;res = 0;
44
printfprintf
(

Program %s(

Program %s
\\
n

n

argvargv
[0]);[0]);
4
.
4
.
printfprintf
(

Program

%s(

Program


%s
\\
n
,
n
,
argvargv
[0]);[0]);
5.5. for ( for ( intint ii = 1; = 1; ii< < argcargc; ; ii++ )++ )
66
res +
=
res +
=
atoiatoi
((
argcargc
[[
ii
]);]);
6
.
6
.
res

+

res


+

atoiatoi
((
argcargc
[[
ii
]);]);
7.7. printfprintf (“ %d(“ %d\\n”, res );n”, res );
88
}}
8
.
8
.
}}

G:G:
\\
>>
addintaddint
33
21562156
2121

G:G:
\\
>>
addintaddint

3

3

––
2

1

5

6

2

1

5

6

2

12

1
1212
ĐệĐệ
quyquy


RR
ecursionecursion
ĐệĐệ
quyquy
RR
ecursionecursion
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
Thu

t toán đ



q
u
y
Thu

t toán đ


q
u
y
 LàLà mởmở rộngrộng cơcơ bảnbảnnhấtnhấtcủacủa kháikhái niệmniệmthuậtthuậttoántoán

TưTư
tưởngtưởng
giảigiải
bàibài
toántoán
bằngbằng
đệđệ
quyquy
làlà
đưađưa
bàibài
toántoán
ậ ệ qyậ ệ qy

TưTư
tưởngtưởng
giảigiải

bàibài
toántoán
bằngbằng
đệđệ
quyquy
làlà
đưađưa
bàibài
toántoán
hiệnhiệntạitạivềvề mộtmộtbàibài toántoán cùngcùng loại,loại, cùngcùng tínhtính chấtchất
(đồng(đồng
dạng)dạng)
nhưngnhưng
ởở
cấpcấp
độđộ
thấpthấp
hơnhơn
quáquá
trìnhtrình
nàynày
(đồng(đồng
dạng)dạng)
nhưngnhưng
ởở
cấpcấp
độđộ
thấpthấp
hơnhơn
,,

quáquá
trìnhtrình
nàynày
tiếptiếptụctụcchocho đếnđếnkhikhi bàibài toántoán đượcđược đưađưavềvề mộtmộtcấpcấp độđộ
màmà
tạitại
đóđó
cócó
thểthể
giảigiải
đượcđược
TừTừ
cấpcấp
độđộ
nàynày
tata
lầnlần
ngượcngược
màmà
tạitại
đóđó
cócó
thểthể
giảigiải
đượcđược

TừTừ
cấpcấp
độđộ
nàynày

tata
lầnlần
ngượcngược
đểđể giảigiải cáccác bàibài toántoán ởở cấpcấp độđộ caocao hơnhơnchocho đếnđếnkhikhi giảigiải
xongxong
bàibài
toántoán
banban
đầuđầu
xongxong
bàibài
toántoán
banban
đầuđầu

 VíVí dụdụ::
 địnhđịnh nghĩanghĩagiaigiai thừathừa:: n!=n*(nn!=n*(n 11)!)! vớivới00!=!=11
 DãyDãy FibonacciFibonacci::ff
00
==11,, ff
11
==11vàvà ff
nn
=f=f
nn 11
+f+f
nn 22
∀∀n>n>11
ếế
 DanhDanh sáchsách liênliên k

ế
tk
ế
t

Phạm Thế Bảo
 MọiMọithuậtthuật toántoán đệđệ quyquy gồmgồm0202 phầnphần::
 Ph

nPh

ncơcơ sởsở::
LàLà cáccác trườngtrường hợphợp khôngkhông cầncầnthựcthựchiệnhiệnlạilạithuậtthuậttoántoán (không(không
y
êu
y
êu c

uc

u
g
ọi
g
ọi đệđệ
q
u
y)q
u
y)


Nế
u
Nế
uthuậtthuật toántoán đệđệ
q
u
yq
u
y
khôn
g
khôn
g
cócó
p
h

n
p
h

n
yy
gg
qy)qy)
qyqy
gg
pp
nàynày thìthì sẽsẽ bịbị lặplặpvôvô hạnhạnvàvà sinhsinh lỗilỗi khikhi thựcthựchiệnhiện ĐôiĐôi lúclúc gọigọi

làlà trườngtrường hợphợpdừngdừng
ầầ
 Ph

nPh

n đệđệ quyquy::
LàLà phầnphầntrongtrong thuậtthuậttoántoán cócó yêuyêu cầucầugọigọi đệđệ quy,quy, yêuyêu cầucầu
hh
hiệhiệ
h ậh ậ
áá
ởở
ộộ
ấấ
độđộ
hấhấ
hh
t
h
ựct
h
ực
hiệ
n
hiệ
nt
h
u


tt
h
u

tto
á
nto
á
n
ởở
m

tm

tc

pc

p
độđộ
t
hấ
pt
hấ
p
h
ơn
h
ơn
Phạm Thế Bảo

Các lo

i đ


q
u
y
Các lo

i đ


q
u
y
ạ ệ qyạ ệ qy
CóCó 0303 loạiloại đệđệ quyquy::
đ iđ i
1.1. ĐệĐệ quyquy
đ



i
::
LàLà loạiloại đệđệ quyquy màmà trongtrong mộtmộtcấpcấp đệđệ quyquy chỉchỉ cócó duyduy nhấtnhất
ộtột
lờilời
ii

đệđệ
ốố
ấấ
thấthấ
m
ột
m
ột
lờilời
gọ
i
gọ
i
đệđệ
quyquy xu

ngxu

ng c

pc

p
thấ
p
thấ
p
VíVí dụdụ::
íhíh
iiii

hừhừ
i.i. T
í
n
h
T
í
n
h
g
i
a
i
g
i
a
i
t
hừ
at
hừ
a
giaiThua(intgiaiThua(int n){n){
if(n==if(n==00))
giaiThuagiaiThua ==11;;
elseelse giaiThua=giaiThua= n*giaiThua(nn*giaiThua(n 11));;
}}
Phạm Thế Bảo

×