CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

24 2.2K 16
CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

Đ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

Hướng dẫn ôn tập Lập trình Pascal cơ bản CÁC BÀI TẬP VỀ BIẾNKIỂU DỮ LIỆU BT_02_13 Nhập vào 3 cạnh a, b, c của tam giác ABC. a) Tính diện tích tam giác. b) Tính độ dài các đường cao c) Tính độ dài các đường trung tuyến d) Tính bán kính đường tròn ngoại tiếp. HƯỚNG DẪN a) Tính diện tích theo công thức Hê-rông: )cp)(bp)(ap(pS −−−= với )cba( 2 1 p ++= b) Tính đường cao ứng với cạnh a theo công thức: a S2 hah 2 1 S aa =⇒= c) Tính độ dài đường trung tuyến ứng với cạnh a theo công thức: 2 ac2b2 m 4 ac2b2 m 222 a 222 2 a −+ =⇒ −+ = d) Tính bán kính đường tròn ngoại tiếp theo công thức: S4 abc R R4 abc S =⇒= Đã có công thức thì lập trình không còn là chuyện lớn. Sau đây là chương trình mẫu, trong đó các biến có ý nghĩa : a, b, c là các cạnh; ha, hc, hb là các đường cao; ma, mb, mc là các trung tuyến tương ứng với các cạnh; S, p, R lần lượt là diện tích, nửa chu vi, bán kính đường tròn ngoại tiếp. program BT_02_13; var a, b, c, ha,hb,hc, ma,mb,mc, S,p,R : real; begin write('Nhap 3 canh cua tam giac '); readln(a,b,c); p := (a+b+c)/2; S := sqrt(p*(p-a)*(p-b)*(p-c)); R := (a*b*c)/(4*S); ha := 2*S/a; hb := 2*S/b; hc := 2*S/c; ma := sqrt(2*sqr(b)+2*sqr(c)-sqr(a))/2; mb := sqrt(2*sqr(a)+2*sqr(c)-sqr(b))/2; mc := sqrt(2*sqr(a)+2*sqr(b)-sqr(c))/2; Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 1 Hướng dẫn ôn tập Lập trình Pascal cơ bản writeln('Thong tin ve tam giac: '); writeln('Dien tich S = ', S:0:5); writeln('Ban kinh duong tron ngoai tiep R = ', R:0:5); writeln('Do dai cac duong cao: '); writeln(' xuong canh a: ha = ', ha:0:5); writeln(' xuong canh b: hb = ', hb:0:5); writeln(' xuong canh c: hc = ', hc:0:5); writeln('Do dai cac duong trung tuyen:'); writeln(' xuong canh a: ma = ', ma:0:5); writeln(' xuong canh b: mb = ', mb:0:5); writeln(' xuong canh c: mc = ', mc:0:5); readln; end. BT_02_06: Nhập 2 số thực x,y, tính rồi in ra màn hình biểu thức: )yxarctg( 22 e )ycosx(sinln + + Yêu cầu kết quả viết với độ rộng 8 cột, có 3 chữ số phần thập phân. HƯỚNG DẪN Ta sẽ dùng 3 biến x, y, z kiểu real, x,y để lưu 2 số nhập vào, z lưu kết quả biểu thức. Phần khai báo biến như sau: var x,y,z : real; Phần nhập dữ liệu: ta viết thông báo nhập dữ liệu rồi nhập x,y bằng lệnh readln: writeln('Nhap 2 so thuc x,y '); readln(x,y); Phần tính kết quả: ta dùng lệnh gán giá trị của biểu thức (đã viết ở BT_02_05) cho z: z := (ln(sqr(sin(x))+sqr(cos(x))))/(exp(arctan(x+y))); Phần in kết quả: ta viết z ra màn hình bằng lệnh writeln, có dùng khuôn dạng output z:8:3 theo yêu cầu của đề (độ rộng 8, 3 chữ số thập phân). Nội dung chương trình mẫu: program BT_02_06; var x,y,z : real; begin writeln('Nhap 2 so thuc x,y '); readln(x,y); z := (ln(sqr(sin(x))+sqr(cos(x))))/(exp(arctan(x+y))) writeln('Ket qua bieu thuc: ', z:8:3); readln; end. Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 2 Hướng dẫn ôn tập Lập trình Pascal cơ bản BT_02_07: Lập chương trình tính chu vi diện tích đường tròn theo bán kính của nó. HƯỚNG DẪN Ta cần nhập vào bán kính R của đường tròn rồi tính chu vi diện tích của nó theo công thức toán: R2C π= 2 RS π= . Hằng số π được định nghĩa sẵn trong Pascal với tên chuẩn là pi. Ta cần khai báo 3 biến thực R, C S. Thực hiện việc nhập R rồi tính C, S theo các công thức trên. Sau đó in ra chúng. Chương trình mẫu: program BT_03_07; var r,c,s : real; begin writeln('Chuong trinh tinh chu vi va dien tich hinh tron.'); write('Nhap vao ban kinh r = '); readln(r); c := 2 * pi * r; s := pi * sqr(r); writeln('Chu vi C = ',c:0:4); writeln('Dien tich S = ',s:0:4); readln; end. BT_02_08: Lập trình tính diện tích hình thang khi cho 2 đáy đường cao. HƯỚNG DẪN Dữ liệu vào lưu trong là 3 biến a, b, h lần lượt là các cạnh đường cao của hình thang. Biến s lưu diện tích của hình thang tính theo công thức: 2 h)ba( + . Lệnh thực hiện việc tính là lệnh gán: s := (a+b)*h/2; Chương trình mẫu: program BT_02_08; var a,b,s,h: real; begin writeln('Chuong trinh tinh dien tich hinh thang. '); write('Nhap 2 canh va duong cao '); readln(a,b,h); s := (a+b)*h/2; writeln('Dien tich la S = ',s:0:5); readln; end. Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 3 Hướng dẫn ôn tập Lập trình Pascal cơ bản CÁC BÀI TẬP VỀ CẤU TRÚC ĐIỀU KHIỂN VD_03_02 Viết chương trình giải phương trình bậc nhất ax+b=0. HƯỚNG DẪN Thuật toán có được theo cách giải trong môn toán: Nếu a<>0 thì có một nghiệm là x= - b/a, ngược lại (a=0) thì nếu b<>0 thì vô nghiệm, ngược lại (b<>0) thì có mọi số đều là nghiệm. Rõ ràng là chúng ta có thể dùng lệnh if, trong trường hợp này <câu lệnh> của if lại là một lệnh if: readln(a,b );{ nhập hệ số } if a=0 then if b=0 then writeln('Moi so thuc deu la nghiem') else writeln('Phuong trinh vo nghiem') else writeln('Phuong trinh co nghiem duy nhat x = ',-b/a:0:5); Toàn văn chương trình: program VD_03_02; var a,b : real; begin writeln('Chuong trinh giai phuong trinh bac nhat ax+b=0 '); writeln('Nhap hai he so '); readln(a,b); if a=0 then if b=0 then writeln('Moi so thuc deu la nghiem') else writeln('Phuong trinh vo nghiem') else writeln('Phuong trinh co nghiem duy nhat x = ',-b/a:0:5); readln; end. VD_03_03 Giải phương trình bậc hai ax 2 + bx + c = 0; HƯỚNG DẪN Ta cũng có thuật toán theo kiến thức môn toán: ac4bΔ 2 −= Nếu ∆<0 thì phương trình vô nghiệm. Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 4 Hướng dẫn ôn tập Lập trình Pascal cơ bản Nếu ∆=0 thì phương trình có nghiệm kép a b x 2 −= . Nếu ∆>0 thì phương trình có 2 nghiệm a b x 2 2,1 ∆±− = . Toàn văn chương trình: program VD_03_03; var a, b, c, d : real; x1, x2 : real; begin writeln('Chuong trinh giai phuong trinh bac hai a*x*x+b*x+c=0'); write('Nhap he so a,b,c: '); readln(a,b,c); d := sqr(b) - 4*a*c ; if d<0 then writeln('Phuong trinh vo nghiem.'); if d=0 then writeln('Phuong trinh co nghiem kep: x = ',-b/(2*a):0:5 ); if d>0 then begin x1 := (-b + sqrt(d))/(2*a); x2 := -b/a - x1 ; writeln('Phuong trinh co 2 nghiem phan biet:'); writeln('x1 = ',x1:0:5); writeln('x2 = ',x2:0:5); end; readln; end. VD_03_06 Tính tổng các số tự nhiên từ 1 đến n với n nhập từ bàn phím. HƯỚNG DẪN Trong toán ta có công thức tổng quát: 2 1)n(n n 2 1 s n + =…++= nên cách giải quyết đơn giản là thay n vào công thức để tính kết quả. Tuy nhiên không phải lúc nào ta cũng có công thức tổng quát tính theo công thức tổng quát không phải lúc nào cũng hiệu quả nhất nên ta tìm một cách giải quyết khác: Sn có thể định nghĩa một cách truy hồi như sau: n; S S 0. s 1-nn 0 += = Từ đó ta có thể tính sn bằng cách cho tăng dần i từ 1 đến n tính si = si-1+ i. Sau quá trình đó i=n ta được sn là kết quả cần tính. program VD_03_06; var n, s, i : integer; begin Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 5 Hướng dẫn ôn tập Lập trình Pascal cơ bản writeln('Chuong trinh tinh tong cac so tu 1 den n.'); write('Cho n = '); readln(n); s := 0; for i := 1 to n do s := s + i; writeln('Ket qua: ',s); readln; end. VD_03_07: Dãy số Fibônaxi được định nghĩa như sau:    ≥∀+= == 3)n( fff 1f 1,f 2-n1-nn 21 Viết chương trình in ra các số Fibônaxi với từ 1 đến 20. HƯỚNG DẪN Ta dễ dàng tìm ra cách tính: cho i chạy từ 3 đến 20 rồi tính fi theo định nghĩa: fi=fi - 1 +fi -2 . Đặt biến f0, f1, f2 đại diện cho fi, fi -1 , fi -2 ứng với mỗi giá trị của i, thế thì ta có thể viết đoạn chương trình tính như sau: f1 := 1; f2 := 1; for i := 3 to n do begin f0 := f1 + f2; writeln('F',i,' = ',f0); f2 := f1; f1 := f0; end; Trong đoạn chương trình này, i là biến đếm chạy từ 3 đến n. Câu lệnh f0:=f1+f2; để tính fi theo công thức truy hồi. Hai câu lệnh tiếp tính giá trị của f1, f2 dùng để tính phần tử tiếp theo: rõ ràng để tính fi+1 thì f2:=fi-1 (=f1) f1:=fi(=f0). Rõ ràng cách tính này đơn giản hơn sử dụng công thức tổng quát rất nhiều: (                   − −         + = nn n f 2 51 2 51 5 1 ). Toàn văn chương trình: program VD_03_07; const n = 20; var i, f0, f1, f2 : integer; begin writeln('Chuong trinh tinh cac so Fibonaxi tu 1 den ',n); f1 := 1; f2 := 1; writeln('F1 = 1'); writeln('F2 = 1'); Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 6 Hướng dẫn ôn tập Lập trình Pascal cơ bản for i := 3 to n do begin f0 := f1 + f2; writeln('F',i,' = ',f0); f2 := f1; f1 := f0; end; readln; end. VD_03_08 Tính a n với a là số thực n là số nguyên dương. HƯỚNG DẪN Trong chương 2 ta đã biết tính a b với a là số thực dương b bất kỳ theo công thức ln(a))*(b exp e a blnab == . Tuy nhiên công thức không thể tính khi a≤0. Ta tính bằng cách khác như sau: Với n nguyên dương đặt t n = a n , ta có công thức truy hồi sau:    = = .a t t 1 t 1-nn 0 Như vậy cho i chạy từ 1 đến n tính công thức trên ta sẽ tính t n . Cấu trúc for dùng cài đặt rất thích hợp. Đoạn chương trình như sau: t := 1; for i := 1 to n do t := t * a; Biến t đại diện cho ti ứng với mỗi i trong lệnh for. Trong câu lệnh t := t * a; biến t ở bên trái là ti, giá trị t ở bên phải là giá trị trước đó của t, tức là ti -1 . Câu lệnh viết đúng theo công thức truy hồi. Xong vòng for i=n t chính là giá trị tn = an. Ta thông báo kết quả. Toàn văn chương trình: program VD_03_08; var n,i : integer; a,t : real; begin writeln('Chuong trinh tinh a^n, a thuc, n tu nhien.'); write('Nhap a va n: '); readln(a,n); t := 1; for i := 1 to n do t := t * a; writeln('Ket qua : ',t:0:5); readln; end. VD_03_09 Lập trình tính giai thừa của một số nguyên n (do giới hạn lưu trữ số nguyên cho n<8). Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 7 Hướng dẫn ôn tập Lập trình Pascal cơ bản HƯỚNG DẪN Giai thừa của n: n! = 1.2…n (tích các số tự nhiên từ 1 đến n). Không có công thức tổng quát để tính n! nhưng ta có công thức truy hồi sau:    = = )!n.(n-n! ! 1 10 Đặt g n =n!, theo công thức trên ta có:    = = .ngg 1g 1-nn 0 như vậy tương tự VD_03_06 VD_03_08 ta cũng có chương trình tính như sau: program VD_03_09; var n, i, g : integer; begin writeln('Chuong trinh tinh n! '); write('Nhap (n<8): '); readln(n); g := 1; for i := 1 to n do g := g * i; writeln('Ket qua: ',n,'! = ',g); readln; end. VD_03_10 Tính gần đúng số e theo công thức chuỗi: n! 1 . 3! 1 2! 1 1! 1 1e +++++= với n nguyên nhập từ bàn phím. HƯỚNG DẪN Ta có thể dựa trên chương trình tính giai thừa ở trên để tính một cách tường minh theo công thức trên. Tuy nhiên cách ấy không ổn vì hàm giai thừa tăng rất nhanh theo n, nếu n quá lớn thì không thể tính được. Đặt n! 1 . 3! 1 2! 1 1! 1 1e n +++++= n! 1 r n = , ta có công thức truy hồi:        += == == − .ree n r n 1 .rr 1.r 1,e n1-nn 1n 1-nn 00 từ đó ta có thể viết đoạn chương trình tính dùng vòng lặp for như sau: Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 8 Hướng dẫn ôn tập Lập trình Pascal cơ bản e := 1; r := 1; for i := 1 to n do begin r := r / i; e := e + r; end; Toàn văn chương trình: program VD_03_10; var n,i : integer; e,r : real; begin writeln('Chuong trinh tinh gan dung e.'); write('Nhap n : '); readln(n); e := 1; r := 1; for i := 1 to n do begin r := r / i; e := e + r; end; writeln('Ket qua : ',e:0:10); readln; end. VD_03_14: Lập trình giải bài toán cổ: “Trăm trâu trăm cỏ, trâu đứng ăn 5, trâu nằm ăn 3, lải nhải trâu già 3 con 1 bó. Hỏi bao nhiêu trâu đứng, trâu nằm, trâu già”. HƯỚNG DẪN Đặt td là số trâu đứng, tn là số trâu nằm, tg là số trâu già thoả mãn bài toán. Thế thì td, tn, tg là các số nguyên dương thoả mãn:      =++ =++ 100 3 35 100 tg tntd tgtntd Từ phương trình thứ hai ta có 5td≤100 3tn≤100, suy ra 1≤ td ≤ 20 1≤ tn ≤ 33. Số trâu già: tg=(100-td-tn) phải chia hết cho 3 (vì số bó cỏ bọn trâu già ăn là số nguyên, bằng tg div 3). Như vậy ta cần tìm các số td trong khoảng 1 20 tn trong khoảng 1 33 sao cho: tg =(100 - td - tn) chia hết cho 3 5*td + 3*tn + tg div 3 = 100. Toàn văn chương trình: program VD_03_14; var td,tn,tg : integer; begin writeln('Giai bai toan tram trau tram co.'); for td := 1 to 20 do for tn := 1 to 33 do begin tg := 100 - td -tn; if (tg mod 3=0) and (5*td + 3*tn + (tg div 3)=100) then Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 9 Hướng dẫn ôn tập Lập trình Pascal cơ bản begin writeln('Mot dap so la: '); writeln('Trau dung: ',td); writeln('Trau nam: ',tn); writeln('Trau gia: ',tg); end; end; readln; end. VD_03_16 Dân số hiện nay khoảng 75 triệu, tỉ lệ tăng tự nhiên là 1.7%. Hỏi sau bao nhiêu năm nữa thì dân số đạt xấp xỉ 100 triệu? HƯỚNG DẪN Đặt s n là dân số (tính theo đơn vị triệu) sau n năm tính từ thời điểm hiện tại. Ta có: .1,7%s ss 75s 1-n1-nn 0    += = (dân số năm sau bằng dân số năm trước cộng thêm lượng tăng tự nhiên). n là số năm cần tìm nếu n là số tự nhiên bé nhất thoả mãn sn≥100. Ta thấy rằng để tính trực tiếp n thì không dễ dàng nhưng chúng ta có thể sử dụng phương pháp lặp. Nghĩa là chúng ta tăng dần n (bắt đầu từ 0) tính sn theo công thức trên cho đến khi sn≥100. Đoạn chương trình như sau: n:= 0; s:= 75; repeat n := n + 1; s := s + s*0.017; until s>=100; Toàn văn chương trình: program VD_03_16; var n : integer; s : real; Begin n := 0; s := 75; repeat n := n + 1; s := s + s*1.7%; until s>=100; writeln('Dan so hien nay la 75 trieu. Ti le tang 1.7%.'); writeln('Sau ',n,' nam thi dan so dat 100 trieu.'); readln; End. Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 10 [...]... nội ngoại tiếp tam giác theo 3 cạnh c) Tính thể tích đường chéo hình hộp chữ nhật theo 3 kích thước BT_04_03: Viết một hàm tính số ước số của một số nguyên BT_04_04: Viết một hàm tính ước chung lớn nhất của hai số nguyên Nguyễn Thanh Tùng - Khoa CNTT, Đại học Sư phạm Hà Nội 15 Hướng dẫn ôn tập Lập trình Pascal cơ bản CÁC BÀI TẬP VỀ MẢNG 1 CHIỀU 2 CHIỀU BÀI TẬP 1 Nhập vào một số n (5 . Hướng dẫn ôn tập Lập trình Pascal cơ bản CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU BT_02_13 Nhập vào 3 cạnh a, b, c của tam giác ABC Nội 15 Hướng dẫn ôn tập Lập trình Pascal cơ bản CÁC BÀI TẬP VỀ MẢNG 1 CHIỀU VÀ 2 CHIỀU BÀI TẬP 1 Nhập vào một số n (5<=n<=10) và n phần tử của dãy

Ngày đăng: 07/09/2013, 16:10

Hình ảnh liên quan

Nhập 2 số thực x,y, tính rồi in ra màn hình biểu thức: - CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

h.

ập 2 số thực x,y, tính rồi in ra màn hình biểu thức: Xem tại trang 2 của tài liệu.
Lập trình tính diện tích hình thang khi cho 2 đáy và đường cao. - CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

p.

trình tính diện tích hình thang khi cho 2 đáy và đường cao Xem tại trang 3 của tài liệu.
Dữ liệu vào lưu trong là 3 biến a,b,h lần lượt là các cạnh và đường cao của hình thang - CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

li.

ệu vào lưu trong là 3 biến a,b,h lần lượt là các cạnh và đường cao của hình thang Xem tại trang 3 của tài liệu.
BT_04_01: Viết chương trình con tính chu vi và diện tích của hình chữ nhật. - CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

04.

_01: Viết chương trình con tính chu vi và diện tích của hình chữ nhật Xem tại trang 15 của tài liệu.
for i: =1 to m-1 do {mỗi cột có m phần tử, vì bảng có m dòng} for j := i+1 to m do - CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

for.

i: =1 to m-1 do {mỗi cột có m phần tử, vì bảng có m dòng} for j := i+1 to m do Xem tại trang 19 của tài liệu.
Ví dụ 1. Tìm phần tử nhỏ nhất và lớn nhất của mảng 2 chiều và đổi chỗ chúng cho nhau: procedure exchange; - CÁC BÀI TẬP VỀ BIẾN VÀ KIỂU DỮ LIỆU

d.

ụ 1. Tìm phần tử nhỏ nhất và lớn nhất của mảng 2 chiều và đổi chỗ chúng cho nhau: procedure exchange; Xem tại trang 19 của tài liệu.

Từ khóa liên quan

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

Tài liệu liên quan