1. Trang chủ
  2. » Công Nghệ Thông Tin

Ebook tự học lập trình pascal (tập 2) phần 2 bùi việt hà (chủ biên)

86 239 5
Tài liệu được quét OCR, nội dung có thể không chính xác

Đ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

Thông tin cơ bản

Định dạng
Số trang 86
Dung lượng 0,91 MB

Nội dung

Trang 1

§3 KIEU DU LIEU MANG 1 a) Sai vì 5 và & khơng cùng kiểu

b) Sai vì 3.4 và 4.8 khơng phải là kiểu đếm được c) Sai vi thiếu kiểu chỉ dẫn

Trang 2

Phén 2 HUGNG DAN 61 c: atray[1 2] of real; d, dx, dy, x, y: real; Begin Clrser; Writeln(’Giai hé phuong trình tuyến tính hai ẩn:): Writeln° a11xta12y=c1); Writeln(’ a21x+a22y=c2), Writeln(nhập các hệ số của hệ phương trinn.’); Wnte(a11='); ReadIn(a[1,1]); Write(‘a12='}; Readln(a[1,2|), Wnite(‘c1='); Readin(c[1]); Write(a21=}, ReadIn(a[2,1]); Wnte(a22='); Readln(a[2,2]); Write(‘c2='); Readin(c[2)): d:=af1,1]"af2,2] - a[2,1] * a[1,2]; dx:=¢[1)*a[2,2] - c[2] * af 1,2]; dy:=af1 ,1]*c{2] - a[2,1] * [1]; lf d=0 then Writeln(Hệ vơ nghiệm hoặc vơ số nghiệm) Else Begin X:=dx/d; y:=dy/d;

Trang 3

62 Pascal danh cho hoc sinh ¡,Ƒ byte; Begin Clrscr; For t:=1 to 10 do For j:=2 to 9 do aff, j]:=Ÿ], Writeln(Bảng cứu chương:); Writeln; For i:=1 to 10 do For j:=2 to 9 do Write(j:4, ‘x’, i:2, '=’, a[ij]): thết 80 cột tự động xuống hàng) Readin(); End

4 Var a: array(1 9, 1 9] of byte;

5 Khơng Vì khi tính tốn ta chỉ cần một giá trị trung gian

6 Program P2306; Var N, a, §, í: integer;

tb: real Begin

Writeln( Tính trung bình cộng của N số nguyên:);

Trang 4

Phần 2 HƯỚNG DẪN 63 tb:12:2); Readln; End 7 Program P2307; Uses crt; Var ch: char, Begin Cfrscr

For ch:='A’ to '2' do Wnte(ch:2), Writeln; For ch:= ‘a’ to '2' do Write(ch:2); Writeln; Writeln;

For ch:= '2Z' downto ‘A’ do Write(ch:2); Writetn;

Trang 6

Phần 9 HƯỚNG DAN 65 For a:=1 to 9 do For b:=0 to 9 do For c:=0 to 9 do lí (a*a*a + b*b*b + c*c*c =100”a +10°b+c) then Writeln(a:1, b:1, ¢:4); Readin; End 11 Program P2311; Var n, it word: Begin Write(Nhập số nguyên dương n:); Readln(n); i=n div 7; Writeln( Từ 1 đến n cĩ, i:5, 'số chia hết cho 7.); Readin; End 42 Program P2312; Var n, i: word: Begin

Write(Nhập số nguyên dương n:), Readln(n); For i:=1 ton do

Trang 7

66 Pascal danh cho hoc sinh

Begin

Write('Tinh gid trị đa thức:

Writeln P(x) = a,x" + + a,x"+ + a,xÌ + a;;

Writeln(Nhập bậc n của đa thức:); Readln(n); Writeln('Nhập các hệ số của đa thức:'; For i:=n downto 0 do Begin Write(‘al’, 1:2, ]}E) Readln(a[i]); End; Write('Nhập giá trị của biến x:); Readln(); p:=a[o]; x_muti:=1; For i:=1 ton do Begin X†mu_i:=xtmu_Ì*X; p:=p†a[lÏx_mu_ì; End; Writeln( Giá trị của đa thức là p(x)=, p:12:2), Readln; End 14 Program P2314; Var i, n: real a: array[1 100] of real; Begin

Write(Nhập độ dài của dây số:); Readin(n); Writeln('Nhập các phần tử của dãy số:);

Trang 10

Phần 9 HƯỚNG DẪN _ 69 j:=afi-1]; Repeat Inc(]}: nt:=true; For k:=2 to j div 2 do If ; mod k=0 then nt:=false: Until nt; a[lÌ:=j, End;

Writeln(Mảng N số nguyên tố đấu tiền: ')};

For i:=1 to n do Write(a[i):8);

Readin; End

23 a) Ta chứng minh a[n,n]=0 (1) bằng qui nạp tiến

theo n

Với n=1 ta cĩ a[1,1]=0 vì là phần tử gĩc trái dưới

Giả sử (1) đúng đến n, ta phải chứng minh (1) đúng

với n+1, nghĩa là a[n+1,n+1]=0

Thực vậy, khi điền phần tử a[n+1, n+1] ta để ý rằng các phần tử đã điền ở cột thứ n+1, tức là các phần tử dạng afk, n+1], k=1, 2, n khơng thể là số 0 được vì trên các hàng thứ k (k=1, 2, .n) đã cĩ a[k,k]=0; tương tự như vậy:

các phần tử đã điền ở hàng thứ n+1 dạng a[n+1,k], (k=1,

2, n), cũng khơng thể bằng 0 vì trên các cột thứ k (k=1,

2, n) đã cĩ các phần tử đường chéo a[k, k}=0 Như vậy số 0 chính là số nguyên khơng âm nhỏ nhất chưa được điền trên hàng thứ n+1, và cột thứ n+1 Do đĩ a[n+1,

Trang 11

70 Pascal danh cho hoc sinh Vay (1) dung vdi moi n= 1 2,

b) Dé ching minh aii, j) = aj, i] (2) ta để ý rằng trường

hdp i>j thi afi, i) = afi, i] la hién nhién, nhu vay ta chi can ching minh (2) cho i # j Knéng mat tinh téng quat ta gia

sử i>j, tức là phần tử a[j, ¡] được điển trước phần tv afi, j] Ta chitng minh ali, j] =alj, i] (2), i>j bằng qui nạp tiến theo thứ tự điển các phần tử

Với j=1, ¡=2 rõ ràng a[2, 1] = alt, 2]

Giá sử (2) đúng đến al[ij] và i>j+1, ta phải chứng minh (2)

đúng với afi,j+1], nghia la afi,j+1] =alj+1, i]

Ta để ÿ rằng khi điển phần tử a[j+1, i] ta phải xét tập hợp A tat ca các số nguyên dạng a[K, i, k=1, ,j và a[j+1, {], I=1 i-1 là các phần tử đã điền trước a[j+1, i] nằm trên hàng thứ j+1 và cột thứ K: sau đĩ chọn a[j+1, ¡] là số nguyên khỏng âm nhỏ nhất khơng trùng với số nào trong tap A

Khi điền phần tử ali, j+1] ta phải xét tập hợp B các số nguyên đã điền trên hàng thứ ¡ và cột thứ j+1, đĩ là các số

dang ali, K]Ị, k1 j và aÍ[, j+1}, !=1 i-1 Nhưng theo giả thiết

quí nạp ta cĩ a[K, i]=a[i, KỊ, Vk=1 j và a[j+1, !Ị =a|l, j+1],

vlI=1 i-1 Do đĩ tập A trùng với tập B và vì vậy all j+1] cũng chính lã số nguyên khơng âm nhỏ nhất khơng trùng

với sð nào trong tập A vậy a[i, ¡+1] =a[j+1 i]

Vậy (2) đúng vi>j c) Program P2323c;

Var a: array[1 100, 1 100] of byte;

Trang 12

Phản 9 HƯỚNG DẪN 71 Begin Write(Nhập kích thước của mảng hai chiều NxN, N=); Readln(n), For i:=1 lo n do For j:=1 to n do Begin b=0 (Bat dau kiểm tra từ số nguyên nhỏ nha!) Repeat d:=False,

Ifj>1 then For k:=1 fo j-tdo /hang If afi, kKJ=b then d:=TRUE; fel dung)

Trang 13

72 Pascal danh cho hoc sinh Gotoxy(28, 4), Write(3); Gotoxy(5, 6) Write(1): Gotoxy(5, 8); Write(2): Gotoxy(5,10); Write(3): For i:=1 to 3 do For j:=1 to 3 do Begin

Goloxy(9”j-1 2*i+4); Read(ali j]);

Gotoxy(9"j-1, 2+4), ClrEol, Write{afi j}:6) End; Readln; End 25 a) ce Hel 5 3 ” Dữ liệu được nhập theo từng hàng, c8 su 12 hết hàng này đến hàng khác Ví dụ '13 14) 15 16 | thứ tự nhập liệu với Nz4 h) 1| 5 |9 | 134 218 |10114 _bu liệu được nhập theo từng cột Ta _3 |7 |11|1ỗ hết cột này đến cột khác Ví dụ thứ tự ¡4! 8 Ì12| 16 | nhập liệu với N=4 _——

hi fa)a 7 | Dir ligu dude nhap theo đường chéo

3 | 5 8 | song song với đường chéo phụ, hếu ep or 1 đường chéo nào đến đường chéo khác,

| 6 an nhưng chỉ nhập một nửa trên của mảng

Trang 15

74 Pascal danh cho hoc sinh

$4 LENH LAP FOR

1 Program P2401;

Var |: byte: {la chỉ số chạy)

p:=word:’ {p la tich sd)

Begin

p:=1; (gia tri dau của tích] For (=1 to 1Ơdo = fchoichay tir 1 dén 10)

p:=p'I, flan lot nhadn i vao pÌ Write('1*2° *10='.p); Readin; End 2 Đúng Tuy nhiên vịng For đầu khơng cĩ tác dụng 3 Program P2403; Uses Crt; Var t: byte; j: byte; chỉ số của hàng bà của cội) Begin

ClrS€T; /xod màn hình, đãi con trỏ uề gĩc trái trên)

Trang 16

Phản 2 HƯỚNG DAN 75

4 Program P2404;

Var a: array[1 100] of integer;

n, |: byte; (hich thutde mang 0à chỉ số các phan be} Ss: word; Begin & Write(Nhập kích thước của mảng 1 chiều: n =); Readin(n); Writeln(Nhập các phần tử của mảng:),

S:z0; {gia tri dau ctia tong}

For i:=1 to n do/thực hiện lần lượi từng phần tửi Begin

Write(a[, I:2:, ‘J='); Readin(afi); — /nháp! If a[i]<O then /mốu a/¡/ án thì cơng dồn bình)

S:=S+sar(a[ll); (phương của afi} vao S} End; Wrieln(S= S:5); tui! S ra màn hình) Readin; End 5 Program P2405;

Const a: array[1 10] of shortin = (-1, 0,5, 4, -8, 2, 4, 0, 5, 1);

Var i: Byte; (chỉ số các phần tử măng)

amax, amin: ShortinÌ; (chứa gia trị max va min cia mang}

Begin

amax:=a[1], amin:=a[1]; {cho amax=amin=a(1}}

Fort:=2to10do /lần hượi so sánh uới 9 số sau)

Begin

Trang 17

76 Pascal danh cho hoc sinh

amay:=alÌÌ: (aax bằng phần tử lớn hơn đĩi

If amin>a[t] then /néi amin lin hon}

Trang 18

Phần 2 HUGNG DAN 77 End;

Writeln('S6 cac $6 duong |a:’ sd): Writeln('S6 cac s6 am {a:’, sa); Writeln(Số các số khơng là”, sk); Readln; End 7 Lãm tương tự P2408 a For i:=1 to 10 do s1:=st+afl, i}: b Fori:=1 to 5 do Forj:=1 to 10 do s2:=s2+sqr(a[2"t, jf}; c Fori:=1 to 10 do For j:=1 to 10 do lí (afi, jJ>=4 and afi, {)<=6) then S3:=S3+1; 8 Tương tự P2406 For i:=1 to 10 do For j:=1 to 10 do

If (afi, j] mod 2 = 0) then sc:=sctsqr(ali, j)) Else sl:=sl+sqr(ali, j))*afi, JÌ:

9 Program P2409;

Uses Crt;

Var a: aray[A’ 'Z' (mang bộ đếm)

ch: char; thiên nhap ki te]

i: byte: chỉ số của lan gé phím)

Begin Clrscr

For ch:='A' to 'Z do a[ch]:=0, lxĩa bộ đệm)

Trang 19

78 Pascal danh cho hoc sinh

For i:=1 to 100 do; fthuc hién 100 lan} Begin

ch:=Readkey; /nháp kí tự uào ch khéng can gé Enter) ch:= Upcase(ch); /déi chữ thường thành chit hoa}

a[ch]:=a[ch]+1; ¿đếm số lần gõ phím ch)

End; ,

Writeln( Trong 100 lấn gð kí tự vừa rồi, số lần xuất'

+hiện của các kí tự là:;

For ch:=A' to '2' do (kiểm tra bộ đếm tir ‘A’ dén Z7) lf a[chJ]>0 then_ (Nếu ch cĩ xuᆠhiện)

Trang 24

Phén 2 HUGNG DAN 83 End; x0:=x-1:x:=x0; End; Gotoxy(5*x,y); Write(s); Readln; End 17 Program P2417; - Var n, i: byte; S: real; _ Begin - Write(Nhập số n:); Readln(n); S:=2n*1; For i:=n Downfo 1 do s:=1/s + 2"i-; $:=1/s; Writeln(‘s=', $:12:10); Readln; End 18 Program P2418; Var n, i, a, b, c: integer: Begin Write('Tính số hạng thứ n của dãy Fibonaci Nhập n' Readln(n); a:=-1;

b:=0; (thêm hai số hạng đầu để tính c1) For i:=1 ton do

Trang 27

86 Pascal danh cho hoc sinh

20 a) N div 2 b) N div 3

c) N div 6 |

d) N div 3 +N div 5 -N div 15

§5 THUAT TOAN TIM MIN, MAX

1 Program P2501;

Const a:array{1 10] of shortint=(0, 1, 2, 3, 4, -1, -2, -3, -4, 5); Var amin: shortint; {chita gia tri nhé nhat cia day}

t byte; {chi sé'cua dé y}

Begin

amin:= a[1]; {cho amin bằng phần từ đầu tiên)

For Ì:=2 †o 10 do /so œmản uới các phần tử khác của dãy)

líamin>a[i] /nấ: cịn phần tử nào nhé hon amin}

Then amin:=ali]; {thi thay amin bang plan tt do}

Writeln(‘amin=', amin); Readin;

End

2 Tương tự bài trên

3 Hướng dẫn: Tìm phần tử nhỏ nhất của dãy, đổi nĩ

về vị trí đầu tiên Sau đĩ tìm phần tử nhỏ nhất của dãy con

cịn lại

Program P2503;

Const a:array[1 10] of shortint=(0, 1, 2, 3, 4, -1, -2, -3, -4, 5);

Trang 28

Phản 2 HUONG DAN 87

imin: byte; = /danh déu vi tri amin}

atg: shortint; /chiza gia tri trung gian khỉ đổi chỗ cdc phan tu}

Begin

imin:=1; /œƒ17 coi !à nhỏ nhất)

For i:=2 to 10 do {so oớt các phần tử cịn lại) if afimin]> a{i] then /»ếu cịn phân tử nhỏ hơn)

imin:=i; {thi đánh dấu phần tử đĩ) atg:=a[f]; a[1]:=a[imin); (d6i gid trị nhỏ nhất oê đầu dã y) a[imin]:=atg; imin:=2; For i:=3 to 10 do

If afimin]>ali] then imin:zi;

Writeln(Phần tử nhỏ thứ 2 của dãy là:, a[imìn]);

Readln; End

4 Tương tự bài 3

5 Hướng dẫn: Tìm phàn tử nhỏ nhất của dãy, đổi nĩ

về vị trí thứ nhất Sau đĩ tìm phần tử lớn nhất của dãy con cịn lại, đổi nĩ về vị trí thứ hai Sau đĩ tìm phần tử lớn nhất của dãy con cịn lại

Program P2505;

Const a:array[1 10] of shortint=(0, 1, 2, 3, 4, -1, -2, -3, 4, 5); Var i, imin: byte;

atg: shortint; Begin

Trang 29

88 Pascal danh cho hoc sinh For i:=2 to 10 do lfa[imin]>a[i] then imin:=i; atg:=a[‘]; a(1] := afimin]; a[imin] := atg; imin:=2 For i:=3 to 10 do lf a[imin]>a[ï] then imin:=i; atg:=a(2]; a[2]:= a[imin]; a[imin]:=atg; imin:=3; For i:=4 to 10 do

if a[imin]>a{i] then imin:=i;

Writeln(Phần tử nhỏ thứ ba của dấy là:, a[imin]);

Readin; i

End

6, Tương tự bài 5 7 Program P2507;

Var a: array[1 100] of shortint;

Trang 30

Phần 2 HƯỚNG DAN 89 For j:=1 to n-1 do /tim cdc gid tri nhỏ thứ =1, 2, 3 của day} Begin imin:=J; For i:=j+1 to n do

f afimin}>a[i} then imin:=i;

atg:=aÏÏ] a[i|Ea[imin]; a[imin]=atg: End; For i:=1 to n do Writeln(‘af’, i:2, ‘J=", afi}:4); Readin; End 8 Program P2508; Const a:array[1 10] of shortint=(-8, -5, 7, -4, 0, 2, 5, 9, -1,3); Var i, d: byte; Begin d:=abs(a[2}-a(1)); For i:=3 to 10 do If d<abs(a[i]-a[i-1]) then d:=abs(ali]-a[i-1]); Writeln(Khoảng cách lớn nhất là”, d); Readin; End 9 Hướng dẫn: Sắp xếp dã y theo thứ tự tăng dần Sau đĩ lấy phần tử nằm "ở giữa"

Const a:array[1 10] of shortint=(-8, -5, 7, -4, 0, 2, §, 9, -1,3);

Var i,j, imin, ig: byte; atg: shortint; Begin

Trang 31

90 Pascal danh cho hoc sinh Begin imin:=1; For i:=|+1 to 16 do lf a[Imin]>a[] then imin:=i; atg:=afj); a[j]:=a{imin]; a[imin]:=atg; End;

ig:=(10+1) div 2; (chỉ uào giữa dã y) Writeln(Phần tử ở 'giữa nhất là:, a[ig]): Readln; End 10 Program P2510; Uses Crt; Var a:array [1 100] of integer; n,1j,k,kmax,id:byte; Begin ` ©lrscr,

Write(Nhập độ dài của dãy : );Readln(n);

Trang 32

Phần 9 HƯỚNG DẪN 91 while a[i]Fa[j] do inc(j); k:=|-i; tf k>kmax then Begin kmax:=k; id:=i; End; End; -

Writeln(Dãy con liền nhau cực đại các phần tử

- +'bằng nhau của dãy”),

For ï=id to id+kmax-1 do Wrle(alï]4); - Readhn; End 11 Program P2511; Var n, i, us: word; Begin Write ( Nhập n: ); Readln(n); For ¡:= 1 to n - 1 dø If n mod i = 0 then us:=i; If us<>0 then

Writeln(' Ước số thực sự lớn nhất cúa n là: ', us)

Trang 33

92 Pascal danh cho hoc sinh

For i:= n downto 2 do lÝn mod i = 0 then us:=i;

If us<>0 then Writeln(‘udc s6 nhé nhất của n' +’khéng phai don vi [a:’ us)

Else Writeln(Khơng cĩ ước số thực sy’); Readln; End 13 Program P2513cach1; Var b, a: array{1 100] of integer; n, i, j, imin: byte: atg: integer; Begin Write(Nhập độ dài của dây n= ); Readln(n); For ì:=1 to n do Begin Write(a{[, ì:2, ‘}='); ReadIn(ali)); End; For j:=fton-1do {sap xép lai day 1} Begin Imin:=j;

For i:= j+1 ton do

Trang 34

Phần 9 HƯỚNG DẪN 93 (=; {chi véo phan tt cusi day 2}

Fort:=2 tondo f{xet cac phan ur con lai cua day 1}

If afi]>bfj] then /néue con phan tử lớn hơn) Begin

blj+]:=ali); /thi ghi tid vao day 2)

j= Jt (chi vao phan tu cudi day 2} End; For i:=1 to j do Write (bfi}:8); Readln; End 13 Program P2513cach2;

Var a, b: array [1 100] oÝ integer; k, n, i,j, imin: byte; atg: integer; T: boolean: Begin Wrile(Nhập độ dài của dãy n = '}, Readln(n); For i:=1 to n do Begin Write(‘af’, ï:2, ]=} Readln(ali)); End; b{1]:=a{1]:

jet ichép ol qua day b}

Trang 35

94 Pascal danh cho hoc sinh

lf not T then (nếu khơng trùng uới các phán Begin / sử của b thì điện tiếp uào bị b[j+1]:= a[Ï; j:= j+1; End: End; End: Fori:=1toj-1do {sap xếp lại dãy bị Begin Imin: = i; For k:= i+1 to j do lf b[imin] >b[k] then imin:=k; atg:= ali]; a[}=alimin]; a[imin]:= atg; End; For i:=1 to j do White (b[i]:8); Readln; End 14 Program P2514;

Var a, b: array[1 100] of integer;

c: array [1 100] of byte; /madng dém} 7, Lj kK, cmax: byte;

T: Boolean; Begin

Write (' Nhap dé dai clia day n="); Readin(n):

For i:=1 ton do Begin

Trang 36

Phần 2 HUGNG DAN 95 End; b{1}= a[1]: d[1]= 1; PA For i:=2 to n do Begin T:=false; For k:=1 to j do If afi] = b[k] then Begin _ T:=True; c[k} = c[k}+1; End; lf not T then Begin bij+ 1) = afi]; J:= j+1; eff] = 1; End; End; cmax:= c[1]} /tim gia tri duoc lép nhiều nhất) For i:=1 to j do

If c{i]> cmax then cmax:= c[i);

For i:=1 toj do /sodt gi số lần lặp của từng số) if c[] = cmax then (nếu số lần lặp là lớn nhất)

Writeln (bli); {thi liét ké sé d6 ra} Readln;

Trang 37

96 Pascal danh cho hoe sinh 15 a) Program P2515a: Const a: array [1 3, 1 4] of integer = ((1,2,3,4), (5,6,7,8), (9,10, 11, 12)); Var h: array[1 3] of integer; amin: integer; i, j: byte; Begin For t:=1 to 3 do Begin amin:=afi,1|:

For J:=1 to 4 do {tin phan nữ nho nhat cua hang if if afi,j] < amin then amin:= ali,j}:

Trang 39

98 Pascal danh cho hoc sinh 17 Program P2517;

Const a: array(1 8] of integer = (1, 4, 2, 5, -1, 7, 2, 5): Var b: array(1 8] of integer; i, j: byte; Begin For i:=1 to 10 do Begin For j:=1 to 8 do Write (afj}: 10); Whiten; For j:=1 to 7 do bfj]:= alj+t] - aff]; b[8}:= af] - af8], For j:= 1 to 8 do aljj:= bij]; End; Readln; End 18 Program P2518;

Trang 40

Phần 9 HƯỚNG DẪN 99 Writeln (a{, imin:2, ‘]=', a[imin]); Readln; End 419 Program P2519; Const a: array[1 10] of real = (1.1, 1.2, 1.3, 1.4, 1.5, 0.6, 4.7, -0.8, -0.2, 1); Var i, imin: byte;

Ke, Kemin: real: Begin

Kemin:= abs(a[1] - round(a[1})); imin:=1;

For i:=2 to 10 do Begin

Ke:= abs(alt] - round(ali]));

lf (Kemin > Ke) then Begin Kermin:= Ke; imin:= i; End; End; Writeln (Phần tử đứng "gần" một số nguyên nhất' +' là: a[,imin.,}Ƒ, a[imin]:4: 1); Readln; End 20 Program 2520 Const a: array[1 10] of real = (1.1, 1.2, 1.3, 1.4, 1.5, 0.6, 4.7, -0.8, 0.2, 1); Var i, imax: byte;

Ngày đăng: 04/12/2015, 02:28

TỪ KHÓA LIÊN QUAN