Bài tập tin học đại cương

145 158 0
Bài tập tin học đại cương

Đ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

TÔ VĂN NAM B ài tập TIN HQC BẠICưONG TMM PASCAL (Túi hàn lần thứ nhất) NHÀ X U Ấ T BẢN GIÁO DỤC Chương THUẬT TOÁN Một sơ tập có lời giải 1.1 Dùng sơ đổ khối mơ tá thuật tốn cho phép tính giá trị biếu thức sau : A = x" + y B= X + y+ A c = xy + A - B2 Lời g iả i : Sơ đ khơi có dạng hình 1.1 1.2 Võ sơ đổ khỏi mơ tả thuật tốn cho phép tính giá trị lớn cứa ba số a, h, c Lời g iả i : Bài tốn có hai lời giải Sơ đồ khói có dạng hình 1.2 hình 1.3 Bat dau n z Doc x,y >f A = x 2+y > B = x+y+A >t c = xy + A -B > In A, B, c Ket thuc Hình 1 Hình 1.2 Dung max = c _^ _ U ^ lm ax ĩ / Ket Ihuc Hình 1.3 1.3 Vẽ sơ đồ khối mò tả thuật tốn cho phép tìm giá trị lớn dãy số Lời g iả i : Sơ đồ khối có dạng hình 1.4 rmax = ĩ i = i +1 Hình 1.4 XI 1.4 Trình bày thuật tốn tìm mượn sách thư viện KHOA HỌC, biết tên tác giả, nhớ khơng xác tên sách L i g iả i : Thuật tốn có thê diễn đạt ngôn ngữ mỏ sau : Bước ỉ : Đến thư viện Khoa học, tìm đến tú phân loại sách theo tên tác giả Theo cách xếp thứ tự từ điển, tìm hộp phích có chữ trùng với chữ đầu tên tác giả Bước : Rút hộp phích theo thứ tự từ điển tìm tên tác giả Bước : Nếu khơng tìm thấy tên tác giả chuyển sang bước 10 Bước : Theo thứ tự từ điển, tìm tên sách tác giả Bước : Nếu khơng tìm thấy sách chuyển sang bước 10 Bước : Ghi lại tên sách, tên tác giả, mã sách vào phiếu mượn Rước : Đưa cho nhân viên thư viện, chờ trả lời Bước : Nếu trả lời khơng chuyển sang bước 10 Bước : Cầm sách sử dụng Bước 10 : Kết thúc 1.5 Tìm tất tổ hợp chập M N phần tử Lời g iải : Bước I : Đọc N M vào Bước : Gán C| = i với i = ,2 , , M Bước : Đưa dãy C | , c , , CM Bước : Với i = M , M - 1, , tìm i cho Cj * N - M + i Nếu tìm i sang bước 5, khòng sang bước Bước : Gán Cj = C| + 1, Cj = Cj_| + với j = i + , i + , , M Bước ố : Quay bước Bước : Kết thúc 1.6 Nêu thuật toán dạng sơ dồ khói tính bậc hai sỏ dương A với sai số nhỏ e theo công thức lặp sau đâv : x n+l = ( X n + A / X n ) với X = Lời g iải : Bước I : Nhập dãy A Bước : Gán Xm = Bước : Xe = Xm Bước : Xm = (Xc + A/Xc)/2 Bước : Nếu IXc - Xml < £ chuyển tới bước khơng quav vồ bước Bước ổ : Kết thúc 1.7 Cho dãy số X| , x X n Trình bày thuật tốn xếp lại dãy theo thứ tự tãng dần Lời g i ả i : Bước I : Nhập dãy X | , x X n Bước : Gán i = Bước : Gán j = i + Bước : Kiểm tra Xj < Xj Nếu sang bước 5, không thi sang bước Bước : Đổi chỗ Xị Xj Bước : Gán j = j + Bước : Lặp lại từ bước j >N Bước : Gán i = i + Bước : Lặp lại từ bước i = N Bước 10 : Kết thúc 1.8 Trình bày thuật tốn dạng sơ đổ khối tìm trung bình cộng N' + I giá trị X, nàm đoạn [A, B l , (X = A X N = B) I lù\ mó la thuật toán xoá phần tứ thứ 11 máng sỏ nguyên Lời : T h u ậ t to n n h sau : liiíớc / Nhập dãv số nguyên từ bàn phím Hước : Nhập vị trí mn xố từ bàn phím (vtri) Hước : Vòng lặp từ vtri tăng tới spt - 1, dó đặt phấn tứ đứng trước phần tử dứng sau x[i] := x [i+ l] ỈÌKỚC Giám sô phần tử di spt := spt-1 ; Hước Kết ihúc 1.10 llãy mõ ta thuật tốn chèn thêm sơ vào vị trí thứ 11 màng sò Iiuuỹn Lời g iải : T h u ậ t to n nh sau : liước / Nhập dãy sỏ nguyên từ bàn phím li ước Nhập vị trí mn chèn từ bàn phím (vtri) Hước J : Vòim lặp i từ spt + I giám xuống vtri +1 đặt phần tử đứng sau phần tử dứng trước x[i]:= xỊi-1] íiước : Gán phần tứ vị trí muốn chèn bàng sơ muốn chèn x[vtri]:= so Hước : Tăng sò phần tứ lên spl:= spt+1 ; Hước Kết thúc 1.11 Cho mảng số thực ; sau dó nhập vào sơ tìm xem sỏ có 11'oni! máng hay khơng Lời giai : T h u ậ t to n n h sau : Bước I : Nhập dãy sò thực a \'à so từ bàn phún Bước : i :=1 : Biiớc : Ncu a[i] < > so ị < = spt i:= i+l lỉirức Nếu i ds[j].ns)) then begin hs:= ds [i]; ds [i] := ds [j]; ds [j] := hs ; end; for i:=l to n writeln (ds [i] ten: 25f ds [i] dtb:7 :2) ; assign (f 1/ ’KQ DAT1);rewrite (f 1); for i:=l to n if ds [i] ns = 1975 then write(f1/d s [i ]); close(f1); end 132 Bài 10* Kết thi lưu dạng tệp định kiểu có tên BAOCAO.DAT ; phần tử tệp chứa thơng tin thí sinh bao gồm : tên thí sinh, điểm trung bình, năm sinh ; giả thiết sỏ người thi không 100 Hãy lập chương trình PASCAL thực cơng việc sau : - Đọc liệu từ tệp BAOCAO.DAT cho mảng bán ghi có khai báo thích hợp - Sắp xếp lại màng ghi theo thứ tự giảm dần điểm trung bình, thí sinh có điếm trung bình dược xếp theo thứ tự tăng dần năm sinh Hãy tạo tệp văn có tên K Q TXT lưu lại kết thí sinh sinh nám 1980 xếp theo thứ tự giảm dần điểm trung bình cho thí sinh chiếm 01 dòng tệp theo mẫu sau : lên : 30 ký tự, điếm trung bình ký tự có ký tự thập phân, năm sinh ký tự Lời giải : Chương trình sau : program baocao; type ths = record ten:string [25]; dtb:real; n s :integer; end; var f :text; f 1:file of ths; ds :array[1 100] of ths; i,j,n :integer;h s :ths; begin assign (f 1, 'BAOCAO.DAT'); reset (f1 ); i : =0; while not eof(f) begin readln(f,h s ); 133 i :=i+l; d s [i]:=hs; end; close (f); n := i ; for i :=1 to n-1 for j :=i+1 to n if (ds[i].dtb < ds[j].dtb) or ((ds [i] dtb = ds [j] dtb) and(ds [i] ns > ds [j].ns;) begin hs:= ds[i]; ds[i]:= ds[j ]; ds[j]:= hs ; end; for i:= to n writeln (ds [i] ten:25, ds[i] ,dtb:7:2); assign (f,'KQ.txt'); rewrite(f); for i := to n if ds[i].ns = 1980 then write (f,ds [i] ten: 30,ds, ds [i] đtb: 6:2,ds [i] ns: 5) ; close (f ); end Bài 11 Cho hàm sỏ : X2 + sin(x + 1) f(x) Khix > log2 ( x2 + 1) + X5 Khi X < Khi X = Hãy viẽi chương trình thực cơng việc sau : • Đọc Iĩiộl dãy sỏ thực X, (i = 1 0 ) vào máy thơng qua bàn phím tính giá trị hàm điểm ; hiên thị kết lên hình • Tun giá trị lớn hàm điểm Lời giải : Chương trình sau : program giail; var X ,y :array[1 100] of i:integer; max:real; 134 real; t begi n write(,hay doc vao 100 so thuc:'); for i :=1 to 100 begin write ('doc vao so thu i); readln (x [i]); end/ for i:= to 100 if x[i] > then y[i]:= x[i]*x[i] + sin(x[i] +1) else if x[i]= then y[i]:=4 elseyt i]:=ln(sqr(x[i]+1)+sqr (sqr (x[i]))*x[i]; max :=y [1] ; for i :=1 to 100 if max < y[i] then max writeln(fgia tri lon nhat readln; end := y[i]; la: f,maxl0:4); Iỉài 12\ a) Viết hàm để đếm số lần cụm ký tự “45” xuất xâu Hàm khai háo sau : Ỉùtỉỉí ỈÌOỈI DEMTU(S:string): integer; s : xâu cần duyệt ; hàm DEMTU trả vẻ số lần cụm ký tự “4 ” đêm xâu s b) Sừ dụng hàm đà viết đế đếm sỏ lần từ “4 ” xuất trongmột tệp Năn hân ; cùa tệp nhập từ bàn phím Đưa sơ đếmđược hình Bài giải : pro.ji.am dem tu; va r XV ;:string; i ,slg :integer ; f :tex t.; ỉ\::\ "t ion dem tu (s :string) :integer ; d :integer;i :integer; begin ị * ệ ícr i:=l cc lengr h (s ldo 135 if (s [i ]= *4 ') and (s[i+1]=•5') then d:=d + l; demtu:=d; end; begin write('Doc ten tep:' );readln(name); assign (f,name);reset (f); slg :=0; while not eof(f) begin readln(f,xau); slg:=slg +demtu(xau); end; write('so lan xuat hien * *4 5•' tep la:',i); readln; end Lưu ý hàm demtu (s : s t r i n g ) : i n t e g e r viết lại sau : function demtu(s:string):integer; var d :integer; begin d = ; for i:= to length(s) if ’451=copy(s ,i,length('45')) then inc(d); demtu:=d; end; Bài 13* Viết hàm để kiểm tra xem từ “BK ” có xuất xâu hay không ? Hàm khai báo sau : Funcỉion XfJATHỈEN(s : striễiỊỊ): boolean; \ xâu cần duyệt ; hàm XUATỈỈỈEN trả vể giá trị TRUE từ “BK” có xuất FALSE trường hợp ngược lại b) Sử dụng hàm viết đê đếm sơ dòng tệp văn bán có chứa lừ “BK” ; tèn cùa tệp dượe nhập từ bàn phím Đưa sơ đếm hình Bài g i ả i : program tim_bk; var f :text; slg:integer;name,xaurstring; Function XUATHIEN(s :string) :boolean; 136 v-ìr vitri: integer; beg in v i t n := pos('bk',s); if vitri then XUATHIEN:= true else XUATHIEN := false end; be 'ìin write(’Haỵ vao ten tep:’); readln(name); ass gn (f,name);reset (f); slg :=0 ; while not eof(f) begin readln (f,xau ); if XUATHIEK(xau) then slg:= slg+1; end; write(' Tu BK xuat hien ',slg:2,' dong'); end Hài 14 Kết thi học sinh giói lưu dạng bán ghi sau : 1ISG = record hoten : Sưing(40|: {họ tên học sinh} dt : real: Iđiểm thi đạt Ị tcnTP : StringPO]; cnd: già sử ràng có không 100 học sinh tham dự kỳ thi Viết chương trình làm cơng việc sau : a) Đọc liệu (ừ hàn phím ghi vào tệp KETQUA.DAT Kết thúc nhập liệu tên học sinh xâu rỗng b) Đếm xem thành phò “HAN" có học sinh tham dự sò iliẽm cao cúa học sinh thành phò hao nhiêu ; đưa số hình, trường hợp khổng có học sinh “H A N O r ihain dự thi in thõng háo “Hà Nội khơng tham dự” C) Đưa la hình danh sách học sinh xếp theo thứ tự giám dần cua tliếm thi ncu học sinh có sơ diêm thi hãng sãp xếp Iheo thứ tự abc (tăng dán) cùa tên thành phố Danh sách đưa có khn dan*i 4_ nlitr sau 137 stt Tôn học sinh Điếm thi Thành phố XXX XXXXX XXXX XXX XXXX XX X (40 ký tự) (20 ký tự) Ghi cluì : mỏi X thê ký lự hình Lời giải : Chương trình sau : type HSG = record hoten:string[40]; dt :real; tenTP:string [20]; enđ; var ht:string [40 ]; d s :array[1 100] of hsg; i,d,slg,stt,j : integer; max: real; f: file of hsg; tg:hsg; begin assign (f, 'c:\KETQUA.DAT'); rewrite (f); i :=0; repeat write('Doc mot ho ten:1); reacỉln(ht); i f h t o ** then begin i := i+1 ; ds [i ].hoten := ht; write (*Diem readln(ds[i] dt); write('que readln (ds [i] tenTP) ; cua quan hoc cua sinh hoc write (f,ds [i] ); end; until (ht = '') cr (i > 100); slg:=i; d:=0; max:= 0; fcr i := to slg 138 sinh thu \ thu: ', i/ ' ' l'ì:1;; iỉ: ' ; begin for j:= to length(ds[i}.tenTp) ds [i] tenTp[j] := upcase(ds[i] tenTP[j]); if ds[i].tenTP = 'HANOI' then begin d := d+1; if max < ds[i].dt then max := ds[i].dt; end; end; writeln(fCo ',d, ' hoc sinh Ha Noi tham du voi diem cao nhát la: ',max:6:l); for i := to slg -1 for 1:=i+l to slg beg irì if ds[i].dt < ds[j].dt then begin tg := ds[i]; ds[i] := ds[j]; ds[j] := tg; nd ĩ if íds[ij.dt = dsij].dt) and (ds[i].tenTP > is 'j].tenTP) then begin tg := ds[i]; ds[i] := ds[j]; ds[j] := tg; 0nci ỉ end; writeln(' DANH SACH DA SAP XEP:'); stt:=l; fc>r i :=1 to slg writein(i:3,ds[i].hoten:40,ds(i].dt:6:2,ds[i].tenTp:20); readln; e nJ Hài 15 Kòi I|u;i học lập cùa trường dược tổ chức dạng tệp định kicu hán ghi có cấu trúc sau : ku = record len : String[50]: ịtêncúa trường I II : intcgcr; Ih inleger: {sỏ học sinh lên lớpị I số học sinh lưu han Ị cnd; 139 dử liệu nhập lưu vào tệp BCKỌ.DAT thư mục c:\HOCTAP Giá sử tệp có liệu cùa khơng q 30 trường Viết chương trình làm cong việc sau : u) Đọc liệu từ tệp trẽn dưa hình theo khn dạng : Tòn trường Số học sinh lên lớp X X X X X X X X sỏ học sinh lưu ban Tổng sô học sinh XXXX XXXX X XXXX (50 ký tự) Tổng xxxxxx xxxxxx xxxxxx Ghi : mỏi X the ký tự hình h) Tun dưa hình danh sách tất cá sinh lớn nhất, mỏi trường trẽn dòng trườngcó tống số học c) Đưa hình danh sách trường xếp theo thứ tựtăng cùa sỏ học sinh dược lên lớp Stt Tên trường Số học sinh lớp XX XXXX XXXX xxxxx (50 ký tự) Lời giải : Chương trình sau : program qlht; type kq=record ten:string[50]; {tên cua trường} 11:integer; {số học sinh lên lớp} lb:integer; {số học sinh lưu ban} end; var tongmax:integer; d s :array[1 30] of kq; f:file of kq;tg:kq; begin assign íf, 'c :\hoctap\bckq da t ');reset(f); i : = ; t 1 : = ; t l b :=0; 140 dần while not eof(f) begin i := i+1 ; read(f,ds[ i]); tll := tll+ ds[i].ll; tlb := tlb+ ds[i].lb; writeln(ds[i].ten:50,ds[i].11:4,ds[i].lb, + d s [ i ] l b : 5); end; ds[i].11 wr iteln (*Tong *:50, tll:5,tlb:5,tll+tlb:5); n := i ; tongmax:= ds[l] 11 + ds[l] lb; {t*m tr-êng cà sè hs lin nhEt} for i:=l to n if tongmax < ds[i].ll + ds[i].lb then tongmax := ds[i].ll + ds[i].lb; writeln( 'DANH SACH CAC TRUONG co so HOC SINH LON NHAT:'); for i :=1 to n if ds[i].ll + ds[i].lb = tongmax then writeln(ds[i] ten); for i :=1 to n-1 for j :=i+l to n if ds[i].ll > ds[j].ll then begin tg:=ds[i];ds [i] :=d s [j];ds[j] :=tg end; writelrì ('DANH SACH DA SAP XEP:f); for i:=l to rì writeln(i:2/ds[i] ten:50 #d s [i] 11:5); readln; end Bài 16* a) Lập chương trình khai báo sau : Kunction SOCHSO(str : s trin g ): integer; đế đếm xem xâu str có ký tự ký tự số (từ đến 9) b) Hăy sử dụng chương trình để đếm in hình sơ ký tự sỏ có tệp vãn ; tên tệp vãn bán nhập từ bàn phím ; giá sử dòng tệp vãn đểu < = 255 ký tự 141 Lời giái : Chương t rì nh s a u : Program sokt; Var fvb:text; nâme, xau:string; Tg:longint; Punction SOCHSO(str: string):integer; Var i, z :integer; Begin z : =0; for i:=l to length(str) if (str[i] >='0') and (str[i] =0 then z:=cos(x) + ỵ*sin(x) else z:= sin(x) + y*cos(x); FXY:= z; End; Begin Write('Nhap gia tri cho bien ỵ:'); readln(B); A := 0; While A THIDO[i] sbd then begin cne:= THIDO[i]; THIDO[i]:= THIDO[j];THIDO[j]:= one; end; writeln('DANH SACH HOC SINH XUAT SAC:'); stt:=0; for :=1 to n begin if (THIDO[i].dt >= 8) and (THIDO[i].dv >= 8) then begin stt:=stt+l; with THI D O [i] writein(stt:1, hoten:30, dt:l, dv:l, dt+dv:2) end ; end ; end Biii Lập chưưng trình PASCAL dê quản lý sách ihư viện hao 1ỈĨI11 c c thơng tin : tên sách, tên tác giá, sỏ lượng, n ăm xuất Yêu cáu chương trình phái sử dụng kiểu bán ghi khai báo : type kicusach = record ten: string; tacgia: string; soluong: integer; numXB: integcr; cnd; a) Nhập bán ghi sách từ bàn phún liệu dược ghi vào tệp văn hán SACH.TXT Dữ liệu vé mỏi sách ghi dòng Q trình nhập liệu kết thúc gập tên sách '* * * ' nhập du 100 sách h) Đọc liệu từ tệp SACH.TXT vào máng MSACH- mảng ghi có kiêu sách sáp xếp lại mảng theo thứ tự abc cùa tên sách In ihơnii tin mang hình dạng bảng : tên sách 1C-BTTHĐC tên tác giá sơ lượng năm xuất bán 145 c) Tìm đưa hình tống sơ lượng sách tấc già dỏ tên tác giả nhập từ bàn phím d) Tìm tất cá sách xuất năm 1999 dưa vào tệp định kiêu SACHMOI DAT bán ghi kieusach dà khai báo Lời giải : Chương trình sau : Progra;’ ! qlsach; type kieusach = record ten:string; tacgia:string; soluong:integer; namXB:integer; end; var q s :kieusach; tentg:string; slg, nxb, i ,j,n,sl:integer; MSACH : array[1 100]of kieusach; fl:text; f2 : file of kieusach; Begin c rs c r ; Assign (f 1, *sach txt);rewr ite (f1); s 1: = ; Repeat Write('Nhap ten sach:'); readln(tentg); If (tentg and (sl

Ngày đăng: 03/12/2019, 00:07

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

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

Tài liệu liên quan