Tải bản đầy đủ (.docx) (73 trang)

9 chuyên Đề học sinh giỏi tin 8

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 (283.34 KB, 73 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>CHUYÊN ĐỀ HỌC SINH GIỎI TIN 8</b>

<b>1. CÂU LỆNH IF … THEN … ELSE</b>

<b>Bài 1 :Nhập 3 số a , b , c bất kì . Hãy kiểm tra xem ba số đó có thể là độ </b>

dài ba cạnh của một tam giác hay không ? Thông báo lên màn hình ‘ Thỏa mãn ‘, ‘ Khơng thỏa mãn trong từng trường hợp tương ứng .

<b>1) Var</b>

a , b , c : Real ; BEGIN

Writeln (' Nhap do dai 3 canh cua tam giac : ') ; Write (' a = ') ; Readln ( a ) ;

Write (' b = ') ; Readln ( b ) ; Write (' c = ') ; Readln ( c ) ;

If ( a + b > c ) and ( b + c > a ) and ( c + a > b ) and ( a > 0 ) and ( b > 0 ) and ( c> 0 ) Then

Writeln (' Thoa man : Day la 3 canh cua mot tam giac ') Else

Writeln (' Khong thoa man ! ') ; Readln ;

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

Begin

Write (' So = ') ; Readln ( So ) ; If ( So > 10 ) and ( So < 20 ) Then Begin

Tong := Tong + So ; Dem := Dem + 1 ; End ;

End ;

Writeln (' So cac so >10 va <20 la : ', Dem ) ; Writeln (' Tong cua chung la :', Tong ) ;

Readln ; END .

<b>Bài 3 :Nhập bốn số a , b , c , d . Hãy tìm giá trị lớn nhất của chúng và gán </b>

giá trị lớn nhất đó cho biến Max .

<b>3) Var</b>

Max , a , b , c , d : Real ; BEGIN

Writeln (' Nhap gia tri cua 4 so : ') ;

Write (' a = ') ; Readln ( a ) ; Write (' b = ') ; Readln ( b ) ; Write (' c = ') ; Readln ( c ) ; Write (' d = ') ; Readln ( d ) ;

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>Bài 5 :Viết chương trình :</b>

Nhâp số báo danh

Nhập điểm văn , tốn , ngoại ngữIn ra màn hình dưới dạng :

_ Phiếu điểm :_ Số báo danh :_ Điểm văn :_ Điểm toán :_ Điểm ngoại ngữ :_ Tổng số điểm :

Bạn đã trúng tuyển ( hoặc Bạn đã không trúng tuyển ) với điều kiện Tổng số điểm >= 15 hay ngược lại .

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

Tongdiem := Toan + Van + Ngoaingu ; Clrscr ;

Writeln (' Phieu Bao Diem ') ;

Writeln (' So bao danh : ', SBD ) ; Writeln (' Diem van : ', Van ) ; Writeln (' Diem toan : ', Toan ) ; Writeln (' Diem ngoai ngu : ', Ngoaingu);

Writeln (' Tong diem : ', Tongdiem) ; If Tongdiem >= 15 Then

Writeln(' Ban da trung tuyen ') Else Writeln(' Ban khong trung tuyen ') ; Readln ;

Nếu là “*” , in kết quả của tích lên màn hình . Nếu là “+” , in kết quả của tổng lên màn hình .

Nếu là “+” , in kết quả của tổng lên màn hình .

<b>6) Uses Crt ;</b>

Var

a , b , T : Real ; Pt : Char ; BEGIN

Readln ; END .

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>Bài 7 :Giải và biện luận phương trình : x</b><small>2</small> + ( m – 2 ) x + 1 = 0 ở đây m là tham số thực tuỳ ý .

If Delta < 0 Then Writeln(' Phuong trinh vo nghiem ') Else

Begin

If Delta = 0 Then Writeln(' Phuong trinh co nghiem kep X= ', -( m - 2 ) / 2 ) Else

Begin

Writeln(' Phuong trinh co 2 nghiem : ') ;

Writeln (' X1 = ', ( -(m-2) + sqrt(delta) ) / 2 ) ; Writeln (' X2 = ', ( -(m-2)- sqrt(Delta) ) / 2 ) ;

End ; End ; Readln ; END .

<b>Bài 8 :Viết chương trình nhập hai số tự nhiên N, M và thông báo ‘Dung‘ nếu N , </b>

M cùng tính chẵn lẽ , trong trường hợp ngược lại thì thơng báo ‘Sai‘.

<b>8) Uses Crt ;</b>

Var

N , M : Integer ; Begin

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>2. VÒNG LẶP XÁC ĐỊNH VÀ KHÔNG XÁC ĐỊNH</b>

<b>Sử dụng lệnh For</b>

<b>Bài 1 :Lập trình tính tích các số tự nhiên từ 1 tới 10 .</b>

<b>Bài 2 :Viết chương trình đếm số lần xuất hiện của các kí tự thuộc bảng chữ cái </b>

trong 50 lần gõ kí tự bằng bàn phím (không phân biệt a với A, b với B …, dùng hàm Upcase để chuyển đổi chữ thường với chữ hoa) .

<b>Bài 3 :Cho số tự nhiên n , hãy lập trình để tính các tổng sau :</b>

<b>a. 1 + 1/2</b><small>2</small> + 1/3<small>2</small> + … + 1/n<small>2</small> <b>b. 1 + 1/2! + 1/3! + … + 1/n!Bài 4 :Tính giá trị của biểu thức sau :</b>

( 1 + 1/1<small>2</small> ) ( 1 + 1/2<small>2</small> ) … ( 1 + 1/n<small>2</small> )

<b>Sử dụng lệnh WhileBài 5 :Lập trình tính tổng :</b>

A = 1 + 1/2 + 1/3 + … + 1/n

ở đây n là số tự nhiên được nhập vào từ bàn phím .

<b>Bài 6 :Tính hàm lũy thừa a</b><small>n </small>, ở đây a thực và n tự nhiên được nhập vào từ bàn phím

<b>Bài 7 :Viết chương trình nhập một dãy số tối đa 100 số , sau đó in ra màn hình các </b>

số khác nhau.

<b>Bài 8 :Viết chương trình nhập một dãy số tối đa 100 số , sau đó sắp xếp lại theo </b>

thứ tự tăng dần .

<b>Sử dụng lệnh Repeat</b>

<b>Bài 9 :Cho một dãy số được nhập từ bàn phím . Hãy viết chương trình nhập một số</b>

a rồi liệt kê tất cả các phần tử trong dãy lớn hơn a.

<b>Bài 10 :Viết chương trình nhập một dãy số tối đa 50 số rồi in ra màn hình các số </b>

trùng nhau của dãy .

<b>Bài 11 :Bạn có 1000 đ đem gửi ngân hàng với lãi suất 8%/tháng . Sau mỗi tháng </b>

tiền lãi được nhập vào để tính lãi suất tháng sau . Bạn muốn để dành cho đến khi sốtiền tăng lên là x . Vậy phải để trong bao lâu

<b>Bài 12 :Viết chương trình tìm ƯSCLN của N số được nhập từ bàn phím .1)Var i : Byte ; (* chỉ số chạy *)</b>

p : word ; (* tích số *) BEGIN

p := 1; (* cho giá trị ban đầu của tích *)

For i := 1 to 10 Do (* cho i chạy từ 1 tới 10 *) p := p * i ; (* lần lượt nhân i với p *)

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

Write (' 1 * 2 * ... * 10 = ', p ) ; Readln ;

Clrscr ;

For ch :='A' to 'Z' Do a[ch] := 0 ; (* xả bộ đếm *) Writeln (' Go phim 50 lan ') ;

For i := 1 To 50 Do (* thực hiện 100 lần *) Begin

ch :=Readkey ; (* nhập kí tự vào Ch khơng cần gõ Enter *) ch := Upcase(ch) ; (* Đỗi chữ thường thành chữ hoa *) a[ch] := a[ch] + 1 ;

End;

Writeln (' So lan xuat hien cac ki tu la :') ;

For ch :='A' to 'Z' do (* Kiểm tra bộ đếm từ 'A' tới 'Z' *) If a[ch] > 0 Then (* Nếu Ch có xuất hiện *)

Writeln (ch , a[ch] : 4 , ' lan . ') ; (* Viết ra màn hình kí tự và số lần xuất hiện *)

Readln ; END .

<b>3)a) Var n , i : Word ;</b>

S : Real ; BEGIN

Write (' Nhap n : ') ; Readln (n) ; S := 0 ;

For i := 1 To n Do

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

S := S + 1 / sqr(i) ; Writeln (' S = ', S:0:2) ; Readln ;

END .

b) Var n , i , j , p : Word ; S : Real ;

p := p * i ; (* tính i *) S := S + 1 / p ;

End ;

Writeln (' S = ', S:0:2) ; Readln ;

END .

<b>4)Var i , n : Byte ;</b>

p : Real ; Begin

Write(' Nhap n : ') ; Readln (n) ; p := 1 ;

For i := 1 To n Do p := p * ( 1 + 1/sqr(i) ) ; Writeln(' p = ', p:10:5 ) ;

Readln ; End .

<b>5) Uses Crt ;</b>

Var i , n : Integer ; tong: Real ; BEGIN

Clrscr ;

Write (' Cho so tu nhien n : ') ; Readln (n) ;

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

tong :=0 ; i :=1 ;

While i <= n Do Begin

tong := tong + 1/i ; i := i + 1 ;

Clrscr ;

Write (' Cho so a : ') ; Readln(a) ; Write (' Cho so mu n : ') ; Readln(n) ; i := 1 ;

giatri := 1 ; While i <= n Do Begin

giatri := giatri * a ; i:= i+1 ;

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Write(' Do dai cua day so N = ') ; Readln (N) ; For I := 1 To N Do

j := 1 ;

While ( j < i ) and ( A[j] <> A[i] ) Do inc(j) ; If j = i Then Writeln( A[i] ) ;

i :=i + 1 ; End ; Readln ; END .

<b>8) Uses Crt;</b>

Var A : Array [1..100] Of Integer ; i , j , n , T : Integer ;

BEGIN Clrscr ;

Write(' Do dai cua day so N = ') ; Readln (N) ; Writeln (' Nhap day so : ') ;

For i := 1 To N Do Begin

Write('A[', i ,'] = ') ; Readln ( A[i] ) ; End ;

i := 1 ;

While (i <= n-1) Do Begin

j := i+1;

While j<=n do Begin

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

If A[j] < A[i] then Begin

T := A[j]; A[j ] := A[i]; A[i] := T ; End ; j := j + 1; End ; i := i + 1; End ;

Writeln(' Day sau khi sap xep : ') ; For i := 1 To N Do Write(A[i] : 4) ; Readln ;

Clrscr ;

Write ('Nhap do dai cua day so : ') ; Readln(n) ; Writeln (' Nhap cac phan tu cua day : ') ;

For i := 1 To n Do Begin

Write (' b[', i ,'] = ') ; Readln( b[i] ) ; End ;

Write (' Nhap so thuc a : ') ; Readln(a) ; Writeln (' Cac phan tu lon hon a cua day : ') ; i:=1;

Repeat

If ( b[i] > a ) Then Writeln (' b[', i ,'] = ', b[i]:8:2 ) ; inc(i) ;

Until i > n ;

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Readln ;END .

<b>10) Uses crt ;</b>

Var a , b : Array[1..50] Of Integer ; n , m , i , j , k : Byte ;

trung : Boolean ; BEGIN

Clrscr ;

Write (' Nhap do dai cua day so nguyen : ') ; Readln(n) ; Writeln (' Nhap cac phan tu cua day : ') ;

For i := 1 To N do Begin

Write (' a[', i ,'] = ') ; Readln( a[i] ) ; End ;

i := 1 ; m := 0 ; Repeat

trung := false ; j := i + 1; Repeat

If ( j <= n ) and ( a[i] = a[j] ) Then trung := true ; inc (j) ; Until trung or ( j > n ) ;

If trung Then Begin

m := m + 1;

b[m] := a[i] ; writeln ( b[m] : 4 ) ; End ;

inc(i) ; Until i > n ; If m > 1 Then Begin i := 1 ; Repeat j := i + 1 ;

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

For k := j To m - 1 Do b[k] := b[k + 1] ; m := m - 1 ;

dec ( j ) ; End ; inc ( j ) ; Until j > m ; inc ( i ) ; Until i > m ; End ;

If m > 0 Then

For k := 1 To m Do Write ( b[k] : 4 ) ; Readln ;

END .

<b>11) uses crt ;</b>

var

thang : Byte ; tien , lai , x : Real ; BEGIN

clrscr ;

writeln (' Chuong trinh tinh thoi gian rut tien lai ') ; write (' So tien lai muon rut ra : ') ; readln(x) ; tien := 1000 ;

thang :=1 ; repeat

lai := tien * 8 / 100 ; tien := tien + lai ; thang := thang + 1 ;

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Clrscr ;

Writeln (' Tim USCLN cua N so :') ; Write (' Nhap so N : ') ; Readln(n) ; Writeln ('Nhap ', N ,' so : ') ;

For i := 1 To n Do Begin

Write(' So thu ', i ,' = ') ; Readln( a[i] ) ; End ;

For i := 1 To n-1 Do Repeat

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

_ Viết thủ tục tính diện tích của tam giác .

_ Viết thủ tục tính các trung tuyến của tam giác ._ Viết hồn thiện chương trình chính .

<b>Bài 5 :Giải phương trình x + y + z = 12 trong phạm vi số nguyên không âm với </b>

điều kiện x < 4 .

<b>Bài 6 :Cho trước các số N , a , b , c tự nhiên . Giải phương trình sau trong phạm vi </b>

số nguyên không âm x + y + z = N với điều kiện x < a , y < b , z < c .

<b>Bài 7 :Viết thủ tục Compare ( S1 , S2 : String ; Var Kq : String ) thực hiện công </b>

việc sau : so sánh hai xâu S1 và S2 , tìm tất cả các kí tự có trong cả hai xâu trên . Xâu Kq sẽ chứa tất cả các kí tự đó , mỗi kí tự chỉ được nhớ một lần .

<b>Bài 8 :Viết hàm tính D (St1 , St2) , với U, V là hai xâu kí tự bất kì , là tổng số các </b>

kí tự khơng giống nhau trong hai xâu trên , mỗi loại kí tự chỉ được nhớ một lần . Vídụ D (‘aabba’ , ‘bcdd’) = 2 vì chỉ có hai kí tự a và d là không giống nhau trong các xâu trên .

<b>Bài 9 :Viết chương trình hồn chỉnh thực hiện các công việc của thực đơn sau :1. Nhập dữ liệu ( nhập số tự nhiên n ) .</b>

<b>2. Phân tích ra thừa số nguyên tố ( phân tích n thành tích các số ngun tố )3. Thốt khỏi chương trình .</b>

<b>4. CẤU TRÚC DỮ LIỆU KIỂU MẢNG</b>

<b>Bài 1 :Giải hệ phương trình tuyến tính hai ẩn dùng ma trận :</b>

a<small>11</small>x + a<small>12</small>y = c<small>1</small>

a<small>21</small>x + a<small>22</small>y = c<small>2</small>

<b>Bài 2 :Lập phương trình tạo ra một mảng chứa bảng cửu chương .</b>

<b>Bài 3 :Viết chương trình nhập hai số nguyên dương m , n . Sau đó tính trung bình </b>

cộng bình phương các số nguyên từ m đến n .

<b>Bài 4 :Viết chương trình nhập từ bàn phím các phần tử của một mảng hai chiều . </b>

Kích thước của mảng được nhập trước từ bàn phím .

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<b>Bài 5 :Dãy số sau được gọi là dãy Fibonaci :</b>

a<small>1</small> = 1a<small>2</small> = 1a<small>3</small> = 2a<small>4</small> = 3. . .

a<small>n</small> = 2a<small>n-1</small> + a<small>n-2</small> ( n > 2 )

Hãy lập chương trình tính và gán giá trị của dãy vào biến mảng .

<b>Bài 7 :Nhập số tự nhiên N và viết chương trình tạo mảng bao gồm N số nguyên tố </b>

đầu tiên .

<b>Bài 8 :Viết chương trình nhập một bảng số 3 x 3 với điều kiện các số được nhập sẽ</b>

hiện trên màn hình đúng tại vị trí của mình trên bảng số .

<b>Bài 9 :a. Viết chương trình nhập dữ liệu từ dãy đối xứng vào mảng một chiều .b. Viết chương trình nhập dữ liệu là ma trận đối xứng vào mảng hai chiều .</b>

<b>5. XÂU KÝ TỰ</b>

<b>Bài 1 :Lập trình đếm số lần xuất hiện ở mỗi loại kí tự thuộc bảng chữ cái tiếng </b>

Anh trong một xâu kí tự Str .

<b>Bài 2 :Cho số tự nhiên n và xâu có độ dài n . Hãy biến đổi xâu đã cho bằng cách </b>

thay đổi trong đó :

<b>Bài 4 :Cho số tự nhiên n và dãy các kí tự S</b><small>1</small> , S<small>2</small> , … , S<small>n</small> . Biết rằng trong dãy có ít nhất một dấu phẩy . Hãy tìm số tự nhiên i sao cho :

<b>a. S</b><small>i</small><b> là dấu phẩy đầu tiên . b. S</b><small>i</small> là dấu phầy cuối cùng .

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<b>Bài 5 :Viết chương trình nhập một xâu kí tự , sau đó chỉ ra xem xâu đó có phải là </b>

xâu đối xứng khơng ( xâu đối xứng là xâu có các kí tự giống nhau và đối xứng nhau qua điểm giữa xâu , ví dụ ‘ABBA’ hoặc ‘ABCBA’ ) .

<b>Bài 6 :Cho một xâu kí tự S . Hãy viết chương trình tính xem trong S có bao nhiêu </b>

loại kí tự khác nhau ( phân biệt chữ in hoa với chữ in thường ) . Ví dụ với S là “Pascal” ta có đáp số là 5 .

<b>Bài 7 :Viết chương trình nhập một xâu kí tự và biến đổi chúng thành tồn chữ in </b>

hoa .

<b>Bài 8 :Họ tên một học sinh được nhập từ bàn phím . Bạn hãy viết chương trình </b>

điều chỉnh lại các kí tự đầu của các từ đơn trong tên của học sinh ấy trở thành chữ in hoa .

<b>Bài 9 :Viết chương trình nhập xãu kí tự từ bàn phím , sau đó gọt xâu lại bằng cách </b>

cách xố đi các kí tự trống ở hai đầu của xâu . Ví dụ nếu nhập xâu “ Ha noi “ , thì kết quả sẽ là “Ha noi” .

<b>6. DỮ LIỆU KIỂU TỆP</b>

<b>Bài 1 :Bạn hãy viết hàm Card(A) đếm số phần tử của tập hợp A cho trước có kiểu </b>

Set Of 0 .. 99 .

<b>Bài 2 :Bạn hãy lập chương trình tạo một tập hợp các số nguyên chẵn kiểu Byte và </b>

loại khỏi nó các số chia hết cho 3 . Kết quả thể hiện trên màn hình .

<b>Bài 3 :Xét chương trình sau :</b>

Program B4 ;Var

Thoat : Set Of Char = [‘e’ , ’E’] ;BEGIN

Write (‘ Hay go E de ket thuc : ‘) ;Repeat

Ch := Readkey ;Until Ch in thoat ;END .

Hãy tìm và sửa lỗi trong chương trình đó .

<b>Bài 4 :Bạn hãy lập chương trình hiển thị một menu dạng sau trên màn hình </b>

1. Xem

<b>2. Sua chua3. Loai bo4. Nhap them5. Thoat</b>

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Lua chon cua ban : _

Sau đó đợi gõ phím . Chương trình phải đợi cho tới khi phím gõ vào là một trong các chữ số 1 .. 5 hoặc các chữ cái đầu của các tuỳ chọn thì thơng báo phím gõ vào hợp lệ và kết thúc chương trình . Trong chương trình phải dùng một tập hợp để kiểm tra việc nhập giá trị cho biến từ bàn phím .

<b>Bài 5 :Hãy lập chương trình nhập vào một xâu nhị phân . Các kí tự nhập vào </b>

khơng hợp lệ bị bỏ qua .

<b>Bài 6 :Hãy lập chương trình nhập vào một xâu kí tự từ bàn phím . Yêu cầu các kí </b>

tự nhập vào phải là các chữ cái thuộc bảng chữ cái tiếng Anh , bỏ qua các phím khác .

<b>Bài 7 :Viết chương trình có chức năng thêm phần tử vào tập hợp trực tiếp từ bàn </b>

phím và loại bớt phần tử khỏi tập hợp cũng trực tiếp từ bàn phím .

<b>7. CẤU TRÚC DỮ LIỆU KIỂU RECORD</b>

<b>Bài 1 : Thông tin về mỗi học sinh gồm :</b>

 Họ đệm : một xâu 25 kí tự . Tên : một xâu 10 kí tự .

 Tuổi : một số nguyên hai chữ số .

 Lớp : một xâu hai chữ số và một chữ cái viết hoa

Hãy lập chương trình nhập từ bàn phím danh sách một lớp 15 học sinh vào một mảng bản ghi . Sau đó hiển thị danh sách lên màn hình , mỗi người một dịng .

<b>Bài 2 :Thơng tin về mỗi học sinh là một bản ghi gồm các trường :</b>

 Họđệm : một xâu 25 kí tự . Tên : một xâu 10 kí tự .

 Tuổi : một số nguyên hai chữ số .

 Lớp : một xâu hai chữ số và một chữ cái viết hoa

Một file bản ghi chứa một danh sách một lớp gồm 20 học sinh . Hãy lập chương trình hiển thị danh sách lên màn hình , mỗi người một dịng .

<b>Bài 3 :Một file bản ghi chứa một danh sách học sinh , thông tin về mỗi học sinh </b>

giống như bài trên . Hãy lập chương trình tạo một file bản ghi khác chứa danh sáchđó , mỗi bản ghi gồm các trường :

 Họtên : một xâu 35 kí tự .

 Tuổi : một số nguyên hai chữ số . Khối : một số nguyên hai chữ số . Lớp : một chữ cái viết hoa

<b>Bài 4 :Một file bản ghi chứa một danh sách học sinh PTTH , thông tin về mỗi học </b>

sinh ngoài các trường Họđệm , Tên , Tuổi , Lớp giống như các bài trên cịn có

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

thêm trường Điểm chứa điểm trung bình của học sinh trong năm học . Hãy lập chương trình :

<b>a. Hiển thị lên màn hình danh sách những học sinh giỏi nhất của trường là những </b>

bạn có điểm trung bình từ 8.0 trở lên và cao nhất trong khối .

<b>b. Lập danh sách học sinh trong năm học mới , biết một học sinh có điểm trung </b>

bình từ 5.0 trở lên thì được lên lớp . Chú ý : lớp 10A lên lớp 11A , lớp 11A lên 12A ... Kết quả chứa trong file .

<b>Bài 5 :Cho file bản ghi f chứa dữ liệu về kho sách , dữ liệu về mỗi cuốn sách được </b>

chứa trong một bản ghi gồm 3 trường mang thông tin về : Họ tên tác giả : một xâu 26 kí tự .

 Tên sách : một xâu 40 kí tự .

 Năm xuất bản : một số nguyên 4 chữ số .

Hăy lập chương trình nhập dữ liệu vào kho sách , sau đó tìm ra :

 Những cuốn sách của một tác giả cho trước xuất bản vào một năm cho trước . Những cuốn sách có tên cho trước .

Kết quả hiện trên màn hình

<b>Bài 6 :</b>

File bản ghi F chứa danh sách các ngày lễ trong một năm , mỗi bản ghi gồm ngày tháng , tên ngày lễ và số ngày được nghỉ . Hãy lập chương trình nhập danh sách các ngày lễ và tính :

 Tổng số các ngày lễ và tổng số các ngày nghỉ lễ trong năm .

 Tổng số các ngày lễ và tổng số các ngày nghỉ lễ trong quí 1 , quí 2 , …Kết quả thể hiện trên màn hình .

<b>8. CẤU TRÚC DỮ LIỆU KIỂU FILE</b>

<b>Bài 1 :Hãy lập chương trình tạo một tệp số nguyên chứa các số nguyên tố nhỏ hơn </b>

10000 theo thứ tự tăng dần .

<b>Bài 2 :Cho f là tệp văn bản chứa các xâu 10 kí tự . Hãy lập chương trình nhập và </b>

hiển thị nội dung file đó lên màn hình , mỗi xâu một dịng , đầy trang màn hình thì dừng lại đợi gõ Enter mới hiển thị trang tiếp theo cho tới hết.

<b>Bài 3 :Bạn hãy viết chương trình cho phép đọc dữ liệu từ bàn phím và ghi thêm </b>

vào cuối một tệp các bản ghi .

<b>Bài 4 :Cho một văn bản chứa trong một text file f . Trong văn bản , tính từ trái </b>

sang phải , từ trên xuống dưới , kí tự # là kí hiệu xố đi một từ đứng ngay trước nó nếu có . Ví dụ ‘#Ta#oi di ngu#h###hoc’ có nghĩa là ‘Toi di hoc’ . Bạn hãy viết chương trình sửa lại file f theo quy ước trên .

<b>Bài 5 :Cho 2 file f và g cùng kiểu ( nhưng không rõ kiểu nào ) . Bạn hãy lập thủ tục</b>

gán nội dung của file g cho file f.

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<b>Bài 6 :Cho một file text ghi lại một chương trình Pascal của một học sinh . Hãy </b>

viết chương trình kiểm tra lỗi của chương trình Pascal trên theo các cách sau đây :Cách 1 : Kiểm tra xem số lượng các dấu ‘ ( dấu mở và dấu đóng ) có bằng nhau khơng ?

Cách 2 : Kiểm tra xem số lượng các từ Begin và End có bằng nhau không ?

<b>Bài 7 :Cho một file text . Hãy viết chương trình đếm xem file text trên chứa bao </b>

nhiêu từ . ( Chú ý : theo quy định , các từ cách nhau bởi một hay nhiều dấu cách ) .

<b>Bài 8 :Cho một file text . Viết chương trình loại bỏ các khoảng trống thừa bên </b>

trong file text này .

<b>9. CẤU TRÚC DỮ LIỆU KIỂU CON TRỎ</b>

<b>Bài 1 :Bạn hãy lập chương trình cho phép ta nhập từ bàn phím một danh sách được</b>

ghép nối . Sau đó gỡ bỏ một record khỏi danh sách .

<b>Bài 2 :Bạn hãy lập chương trình cho phép nhập một danh sách được ghép nối . Sau</b>

đó chèn thêm một record vào danh sách .

<b>Bài 3 :Bạn hãy lập chương trình cho phép nhập một danh sách được ghép nối . Sau</b>

đó đổi chỗ hai record trong danh sách .

<b> ướng dẫn :</b>

<b>CHƯƠNG TRÌNH CON1) Procedure Change ( n : integer ; Var St : String ) ;</b>

(* thủ tục chuyển số tự nhiên n cho trước sang hệ cơ số 2 và được lưu ở trong xâu St *) Type

b : Array[0 .. 1] Of Char = ('0' , '1') ; Var

du , So : Integer ; S : String ;

Begin

S := '' ; (* xâu rỗng *) So := n ;

Repeat

Du := So mod 2 ;

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

So :=So div 2 ; S := b[du] + s ; Until So = 0 ; St := S ; End ;

<b>2) Uses Crt ;</b>

Var a, b, c, x1, x2: real;

(*================================*)Procedure Nhapabc(var aa,bb,cc: real);

Write('a='); Readln(aa); Write('b='); Readln(bb); Write('c='); Readln(cc);End;

(*=================================*)Procedure GPTB2;

Var Delta: real;Begin

Delta:=sqr(b)-4*a*c;

If Delta<0 then Writeln('Phuong trinh vo nghiem.') Else

If Delta=0 then Begin

Write('Phuong trinh co nghiem kep : '); Write('x1,2=',-b/(2*a):8:2);

End Else Begin

x1:=(-b+sqrt(Delta))/(2*a); x2:=(-b-sqrt(Delta))/(2*a);

Writeln('Phuong trinh co 2 nghiem phan biet la :'); Writeln('X1=',x1:8:2, 'X2=',x2:8:2);

End;

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

(*================================*)BEGIN (* CT chính *)

Procedure input (Var a: real; tenbien: Char); Begin

Input(b, 'b'); Input(c, 'c');

End; (* kết thúc thủ tục nhập *)

(*================================*) Procedure Kiemtra(a, b, c: Real);

Begin

If (a<b+c) and (b<a+c) and (c<a+b) then Writeln(a:0:2, ', ', b:0:2, ' va ', c:0:2, ' lap thanh ba canh cua tam giac ')

Else Writeln('Khong lap thanh ba canh cua tam giac') ; End;

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

(*===============================*) Procedure Trung_tuyen (a, b, c: Real);

Var ma, mb, mc: real; Begin

ma:=sqrt((2*sqr(b)+2*sqr(c)-sqr(a))/4); mb:=sqrt((2*sqr(a)+2*sqr(c)-sqr(b))/4); mc:=sqrt((2*sqr(a)+2*sqr(b)-sqr(c))/4); Writeln('Cac trung tuyen cua tam giac la : ') ;

Writeln('ma=', ma:0:2, ' mb=', mb:0:2, ' mc=', mc:0:2); End;

(*================================*) Procedure Dientich (a, b, c: real); Var p, S: real; Begin

p:=(a+b+c)/2;

S:=sqrt(p*(p-a)*(p-b)*(p-c)); Writeln('Dien tich =', S:0:2); End;

(*================================*) BEGIN (* Chương trình chính *)

Clrscr;

Nhap(a, b, c); Kiemtra(a, b, c); Dientich(a, b, c); Trung_tuyen(a, b, c); Readln;

<b>4) Uses Crt;</b>

Var a, b, c: real ;

(*================================*) Procedure Nhap(Var a, b, c: real);

Procedure input (Var a: real; tenbien: Char); Begin

Repeat

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

Write('Nhap ' + tenbien+' = '); Readln(a); Until (a>=0);

End;

Begin (* bắt đầu thủ tục nhập *) Input(a, 'a');

Input(b, 'b'); Input(c, 'c');

End; (* kết thúc thủ tục nhập *)

(*================================*) Procedure Kiemtra(a, b, c: Real);

Begin

If (a<b+c) and (b<a+c) and (c<a+b) then Writeln(a:0:2, ', ', b:0:2, ' va ', c:0:2, ' lap thanh ba canh cua tam giac ')

Else Writeln('Khong lap thanh ba canh cua tam giac') ; End;

(*===============================*) Procedure Trung_tuyen (a, b, c: Real);

Var ma, mb, mc: real; Begin

ma:=sqrt((2*sqr(b)+2*sqr(c)-sqr(a))/4); mb:=sqrt((2*sqr(a)+2*sqr(c)-sqr(b))/4); mc:=sqrt((2*sqr(a)+2*sqr(b)-sqr(c))/4); Writeln('Cac trung tuyen cua tam giac la : ') ;

Writeln('ma=', ma:0:2, ' mb=', mb:0:2, ' mc=', mc:0:2); End;

(*================================*) Procedure Dientich (a, b, c: real); Var p, S: real; Begin

p:=(a+b+c)/2;

S:=sqrt(p*(p-a)*(p-b)*(p-c)); Writeln('Dien tich =', S:0:2); End;

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

(*================================*) BEGIN (* Chương trình chính *)

Clrscr;

Nhap(a, b, c); Kiemtra(a, b, c); Dientich(a, b, c); Trung_tuyen(a, b, c); Readln;

<b>5) Uses Crt;</b>

Var X, Y, Z: byte; Begin

Clrscr;

Writeln('Giai phuong trinh X+Y+Z=12 trong pham vi ' + 'so nguyen khong am voi dieu kien x<4'); For X:=0 to 3 do

For Y:=0 to 12 do For Z:=0 to 12 do

If (X+Y+Z=12) then Writeln(' x=',X,' y=',Y, 'z=',Z); Readln;

End.

<b>6) Uses Crt;</b>

Var N, a, b, c, X, Y, Z, i: Integer; Begin

Clrscr;

Write(' N, a, b, c = '); Readln(N, a, b,c); If (a+b+c-3<N) then

Begin

Writeln('Phuong trinh vo nghiem'); Readln; Exit;

End Else Begin

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Writeln('Phuong trinh co nghiem la:'); Writeln('x': 10, 'y': 10, 'z':10);

i:=4;

For X:=0 to (a-1) do For Y:=0 to (b-1) do For Z:=0 to (c-1) do If (X+Y+Z=N) then Begin

Writeln(x: 10, y: 10, z: 10); inc(i);

If i=24 then Begin

Write('Nhan Enter de tiep tuc...'); Readln; i :=0;

End; End ; End ;

Write('Nhan Enter de ket thuc...'); Readln;

(*===============================*) Function kt(ch: char; st: string): boolean;

(* Kiểm tra xem kí tự Ch có trong xâu St khơng . Nếu có thì hàm trả về giá trị True . Nếu khơng thì hàm trả về giá trị False *) Begin

kt:=pos(ch,st)<>0; End;

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

(*================================*) Begin (* Thân của thủ tục Compare*)

kq:=''; (* Xâu rỗng *) For i:=1 to length(s1) do

If (not kt(s1[i],kq)) and (kt(s1[i],s2)) then kq:=concat(kq,s1[i]);

End;

(*==============================*) BEGIN

Clrscr;

Writeln('Nhap 2 xau S1 va S2 :'); Write('S1: '); Readln(xau1); Write('S2: '); Readln(xau2); Compare(xau1, xau2, xau);

If xau<>'' then Writeln('Xau chung la: ',xau)

Else Writeln('Khong co ki tu nao trong ca hai xau '); Write('Nhan ENTER de ket thuc...');

Readln; END .

(*Trả về tổng số loại kí tự khơng giống nhau trong 2 xâu U và V *)

Var k, id: byte; s, luu: string; Begin

luu:=''; (* Xâu rỗng *) For id:=1 to length(U) do

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

If (pos(U[id],V)=0) and (pos(U[id],luu)=0) then luu:=concat(luu,U[id]);

For id:=1 to length(V) do

If(pos(V[id],U) = 0) and (pos(V[id],luu)=0) then luu:= concat(luu,V[id]);

d:=length(luu); End;

(*=================================*) Procedure nhap;

Begin Repeat

Write('So xau ki tu (>=2):') ; Readln(n); If n<2 then

Writeln(#7,'Co ',n,' xau ki tu nen khong the ' + 'so sanh duoc');

Until n>=2;

Writeln('Nhap ',n,' xau ki tu :'); For i:=1 to n do

Begin

Write('S',i,'='); Readln(S[i]); End;

End ;

(*===============================*) BEGIN (* Chương trình chính *)

Clrscr; nhap; max:=0; min:=255;

For i:=1 to n-1 do For j:=i+1 to n do Begin

If max<d(S[i],S[j]) then max:=d(S[i],S[j]); If min>d(S[i],S[j]) then min:=d(S[i],S[j]);

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

End;

Write('Max(d(Si,Sj)=',max,' Min(d(Si,Sj)=',min); Readln;

(*================================*) Procedure nhap(Var NN:longint);

Begin Repeat

Write('Nhap N='); Readln(NN); Until NN>=0;

End;

(*=================================*) Procedure viet;

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

(*================================*) Procedure phantich(N1:longint);

Begin

If N1>1 then Begin u:=2; dem:=0; Repeat

If (N1 mod u=0) then Begin

inc(dem); a[dem]:=u; N1:=N1 div u; End

Else inc(u); Until N1=1; End

Else dem:=0; Viet;

End;

(*==============================*) BEGIN (* Main Program *)

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

d, dx, dy, x, y: real; BEGIN

d:=a[1,1]*a[2,2] - a[2,1] * a[1,2]; dx:=c[1]*a[2,2] - c[2] * a[1,2]; dy:=a[1,1]*c[2] - a[2,1] * c[1];

If d=0 then Writeln(' He vo nghiem hoac vo so nghiem') Else

Begin

x:=dx/d; y:=dy/d;

Writeln('He co nghiem duy nhat :'); Writeln('x=', x:0:2, ' ; y=', y:0:2); End ;

Readln; END .

<b>2)Uses Crt ;</b>

Var a : Array[1..10, 2..9] Of Byte ; i, j : Byte ;

BEGIN Clrscr ;

For i := 1 To 10 Do

For j := 2 To 9 Do a[i, j] := i*j ;

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

Writeln(' Bang cuu chuong : ') ; Writeln ; For i := 1 To 10 Do

For j := 2 to 9 do Write ( j:4 , 'x' , i:2 , '=' , a[i , j]:2) ; (* hết 80 cột tự động xuống hàng *)

Readln ; END .

<b>3)Var m , n , k , s : Word ;</b>

tb : real ; BEGIN

Writeln('Nhap 2 so nguyen duong m, n :') ; Write (' m = ') ; Readln(m) ;

Write (' n = ') ; Readln(n);

If m > n Then (* đỗi chỗ để m <= n *) Begin

k := m ; m := n ; n := k ; End ;

s := 0 ;

For k := m To n do s := s + sqr(k) ; tb := s / (n - m + 1) ;

Writeln ('Trung binh cong bimh phuong cac so ' + 'nguyen tu m den n la: ', tb:12:2); Readln ;

END .

<b>4) Var m , n , i , j : Byte ;</b>

a : Array[1..100, 1..100] Of Real; BEGIN

Write ('Nhap cac kich thuoc cua mang hai chieu : ') ; Write (' So hang m = ') ; Readln(m) ;

Write (' So cot n = ') ; Readln(n) ;

Writeln (' Nhap cac phan tu cua mang : ') ; For i := 1 To m Do

For j := 1 To n Do Begin

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

Write ('a[', i:2, ', ' , j:2 ,']=') ; Readln(a[i, j]) ; End ;

Readln ; END .

<b>5)Var a : Array[1..20] Of Byte ;</b>

i : Byte ; BEGIN a[1] :=1; a[2] :=1;

For i:=3 to 20 do a[i]:=a[i-1]+a[i-2] ;END.

<b>6)Var a : Array [1..100] Of Word ;</b>

i, N : Byte ; S : Real ; BEGIN

Write (' Nhap so N>=2 : ') ; Readln(n) ; a[1] := 1 ;

a[2] := 2 ;

For i := 3 To N Do a[i] := 2*a[i-1]+a[i-2] ; S := 0 ;

For i := 1 to N do S := S+1/sqr(a[i]) ; Writeln (' S = ', S:12:6) ;

Readln ;END.

a:array[1..100,1..100]of byte; n,i,j,k,l,ba:byte;

d:boolean; BEGIN

write(' Nhap kich thuoc cua mang hai chieu NxN. N = ');readln(n); for i:=1 to n do

for j:=1 to n do begin

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

ba:=0; repeat

d:=FALSE;

if j>1 then for k:=1 to j-1 do if a[i,k]=ba then d:=true; if i>1 then for k:=1 to i-1 do if a[k,j]=ba then d:=true; ba:=ba+1;

until not d; a[i,j]:=ba-1; end;

for i:=1 to n do

for j:=1 to n do write(a[i,j]:8); readln;

END .

<b>8) var</b>

a:array[1..100,1..100]of byte; n,i,j,k,l,ba:byte;

d:boolean; BEGIN

write(' Nhap kich thuoc cua mang hai chieu NxN. N = ');readln(n); for i:=1 to n do

for j:=1 to n do begin

ba:=0; repeat

d:=FALSE;

if j>1 then for k:=1 to j-1 do if a[i,k]=ba then d:=true; if i>1 then for k:=1 to i-1 do if a[k,j]=ba then d:=true; ba:=ba+1;

until not d;

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

a[i,j]:=ba-1; end;

for i:=1 to n do

for j:=1 to n do write(a[i,j]:8); readln;

b) Var a: array [1..100, 1..100] of integer; n, i, j: integer;

Write('a[', i:2, ',', j:2, ']='); Readln(a[i, j]); a[j,i]:=a[i,j];

End; Readln ;

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

END .

<b>XÂU KÝ TỰ1) Var A: array [ 'A'..'Z'] of integer;</b>

S: string;ch: char;i: integer;BEGIN

Write(' Cho mot xau ki tu : '); Readln(s);For ch:= 'A' to 'Z' do A[ch]:=0;

For i:=1 to length(s) doBegin

If Upcase(S[i]) in (['A'..'Z']) thenBegin

S[i]:= Upcase(S[i]);A[S[i]]:= A[S[i]]+1;End;

Write(' Cho mot xau ki tu S = '); Readln(S); For i:=1 to length(S) do

If S[i] = '!' then S[i]:= '.';

Write( ' Chuoi sau khi da bien doi la : ', S); Readln;

END . b )

Uses crt;

</div>

×