1. Trang chủ
  2. » Giáo án - Bài giảng

Lý thuyết và bài tập thực hành có lời giải bồi dưỡng học sinh giỏi tin học 11 cực chuẩn năm 2014

44 2,7K 25

Đ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 44
Dung lượng 351,5 KB

Nội dung

Bạn đang lúng túng trong việc biên soạn một tài liệu để giảng dạy phần lý thuyết chuyên đề bồi dưỡng học sinh giỏi tin 11, thì đây chính là tài liệu thực sự bạn cần. Tôi đã tìm hiểu biên soạn và đưa vào giảng dạy hiệu quả phần lý thuyết. Các bài tập thực hành được đưa vào minh họa từ dễ đến khó. Trích đoạn: Bài 5. Kiểu dữ liệu tệp 1. Vai trò của kiểu tệp Dữ liệu kiểu tệp có những đặc điểm sau: + Được lưu trữ lâu dài ở bộ nhớ ngoài (đĩa từ, CD, . . .) và không bị mất khi tắt nguồn điện vào máy + Lượng thông tin lưu trữ trên tệp có thể rất lớn và chỉ phụ thuộc vào dung lượng đĩa. 2. Thao tác với tệp Hai thao tác cơ bản đối với tệp là ghi dữ liệu vào tệp và đọc dữ liệu từ tệp a. Khai báo tệp văn bản : VAR : TEXT; Vd: Var f1, f2 : text; b. Sơ đồ thao tác với tệp: c. Cú pháp: Ví dụ:  Một số hàm và thủ tục thông dụng: • Hàm EOF (): trả về giá trị TRUE khi con trỏ tệp đã ở vị trí cuối tệp. • Hàm EOLN(): trả về giá trị TRUE khi con trỏ tệp đã ở vị trí cuối dòng. BÀI TẬP ÁP DỤNG Bài 1. Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng. Đọc dữ liệu từ tệp SN.INP rồi ghi vào tệp SN1.OUT tổng giá trị các phần tử đó. Bước 1. Mở Pascal, tạo tệp số nguyên rồi lưu trên máy với tên tệp là SN.INP Bước 2. Mở màn hình Pascal mới và lập trình. Bước 3. Chạy chương trình. Vì tệp kết quả được lưu trên bộ nhớ ngoài với tên là SN1.OUT, ta sẽ mở xem kết quả bằng cách nhấn File  Open (hoặc F3)  chọn tên SN1.OUT  OK. program Tep1; var f1,f2:text; s,x:integer; begin assign(f1,D:HSG_BTTHSN.INP); reset(f1); assign(f2,D:HSG_BTTHSN1.OUT); rewrite(f2); s:=0; while not eof(f1) do begin read(f1,x); s:=s+x; end; write(f2,Ket qua la: ,s); close(f1); close(f2); end. Bài 2. Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng. Tìm phần tử lớn nhất có trong tệp SN.INP rồi ghi vào tệp SN2.OUT giá trị lớn nhất đó. program Tep2; var f1,f2:text; max,x:integer; begin assign(f1,D:HSG_BTTHSN.INP); reset(f1); assign(f2,D:HSG_BTTHSN2.OUT); rewrite(f2); read(f1,max); while not eof(f1) do begin read(f1,x); if x>max then max:=x end; write(f2,Max la: ,max); close(f1); close(f2); end. Bài 3. Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng. Tìm phần tử lớn nhất có trong tệp SN.INP rồi ghi vào tệp SN3.OUT giá trị lớn nhất và cho biết vị trí đó. program Tep3; var f1,f2:text; max,x,d,vt:integer; begin assign(f1,D:HSG_BTTHSN.INP); reset(f1); assign(f2,D:HSG_BTTHSN3.OUT); rewrite(f2); read(f1,max); d:=1; while not eof(f1) do begin read(f1,x); d:=d+1; if x>max then begin max:=x; vt:=d; end; end; writeln(f2,Max la: ,max); write(f2,Vi tri Max la: ,vt); close(f1); close(f2); end. Bài 4. Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng. Tìm phần tử lớn nhất theo từng dòng trong tệp SN.INP rồi ghi vào tệp SN4.OUT giá trị lớn nhất theo từng dòng tương ứng. program bt21; var f1,f2:text; max,x,d:integer; begin assign(f1,D:HSG_BTTHSN.INP); reset(f1); assign(f2,D:HSG_BTTHSN4.OUT); rewrite(f2); d:=0; while not eof(f1) do begin read(f1,max); while not eoln(f1) do begin read(f1,x); if x>max then max:=x; end; d:=d+1; readln(f1); writeln(f2,Max dong ,d, la: ,max); end; close(f1); close(f2); end. Bài 5. Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng. Tìm phần tử lớn nhất theo từng dòng trong tệp SN.INP rồi ghi vào tệp SN5.OUT giá trị lớn nhất theo từng dòng tương ứng và cho biết vị trí. program Tep5; var f1,f2:text; max,x,d,t,vt:integer; begin assign(f1,D:HSG_BTTHSN.INP); reset(f1); assign(f2,D:HSG_BTTHSN5.OUT); rewrite(f2); d:=0; while not eof(f1) do begin read(f1,max); t:=1; while not eoln(f1) do begin read(f1,x); t:=t+1; if x>max then begin max:=x; vt:=t; end; end; d:=d+1; readln(f1); writeln(f2,Max dong ,d, la: ,max, o vi tri ,vt); end; close(f1); close(f2); end. Bài 6. Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng. Đọc dữ liệu từ tệp SN.INP rồi ghi vào tệp SN6.OUT sao cho các phần tử được sắp xếp tăng dần. program Tep6; var f1,f2:text; A:array1..100 of integer; x,i,j,n,t:integer; begin assign(f1,D:HSG_BTTHSN.INP); reset(f1); assign(f2,D:HSG_BTTHSN6.OUT); rewrite(f2); i:=0; while not eof(f1) do begin read(f1,x); i:=i+1; Ai:=x; end; n:=i; for j:=n downto 2 do for i:=1 to j1 do if Ai > Ai+1 then begin t:=Ai; Ai:=Ai+1; Ai+1:=t; end; writeln(f2,Cac phan tu da duoc sap xep tang dan:); for i:=1 to n do write(f2,Ai, ); close(f1); close(f2); end. Bài 7. Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng. Đọc dữ liệu từ tệp SN.INP rồi ghi vào tệp SN7.OUT sao cho các phần tử được sắp xếp tăng dần theo từng dòng tương ứng. program Tep7; var f1,f2:text; A:array1..100 of integer; x,i,j,n,t,d:integer; begin assign(f1,D:HSG_BTTHSN.INP); reset(f1); assign(f2,D:HSG_BTTHSN7.OUT); rewrite(f2); writeln(f2,Cac phan tu da duoc sap xep tang dan theo tung dong:); d:=0; while not eof(f1) do begin i:=0; while not eoln(f1) do begin read(f1,x); i:=i+1; Ai:=x; end; n:=i; for j:=n downto 2 do for i:=1 to j1 do if Ai > Ai+1 then begin t:=Ai; Ai:=Ai+1; Ai+1:=t; end; d:=d+1; write(f2,Dong ,d,: ); for i:=1 to n do write(f2,Ai, ); writeln(f2); readln(f1); end; close(f1); close(f2); end.

Trang 1

Bài 1 CÁC CÂU LỆNH CÓ CẤU TRÚC

If x MOD 2=0 Then Writeln('So vua nhap vao la so chan')

Else Writeln('So vua nhap vao la so le');

Trang 2

<Hằng thứ i>: có thể là một giá trị hằng, các giá trị hằng (phân cách nhau bởi dấu

phẩy) hoặc các đoạn hằng (dùng hai dấu chấm để phân cách giữa giá trị đầu và giá trịcuối)

 Giá trị của biểu thức và giá trị của tập hằng i (i=1¸n) phải có cùng kiểu

Khi gặp lệnh CASE, chương trình sẽ kiểm tra:

- Nếu giá trị của <biểu thức> nằm trong tập <hằng i> thì máy sẽ thực hiện <câu lệnh i>

tương ứng

- Ngược lại:

+ Đối với dạng 1: Không làm gì cả

+ Đối với dạng 2: thực hiện lệnh <câu lệnh n+1>

Trang 3

Readln;

End

Bài tập 4: Lập trình nhập tháng, năm Tính số ngày của tháng đó.

Hướng dẫn: Ta biết các tháng 1, 3, 5, 7, 8, 10, 12 có 31 ngày, 4, 6, 9, 11 có 30 ngày Riêngtháng 2 của năm nhuận có 29 ngày còn các năm không nhuận thì có 28 ngày

Bài tập 1: Viết chương trình nhập vào từ bàn phím: giờ, phút, giây Cộng thêm một số giây

cũng được nhập từ bàn phím Hãy in ra kết quả sau khi cộng xong

Gợi ý:

- Gọi số giây được cộng thêm là: s Gán giây:=giây+s

- Nếu giây60 thì: phút:=phút + giây DIV 60 và giây:=giây MOD 60

- Nếu phút60 thì: giờ:=giờ + phút DIV 60 và phút:=phút MOD 60

Bài tập 2: Viết chương trình tìm Max, Min của 4 số: a, b, c, d.

Trang 4

FOR <biến đếm>:=<giá trị cuối> DOWNTO <giá trị đầu> DO <Câu lệnh>;

Chú ý: Khi sử dụng câu lệnh lặp FOR cần chú ý các điểm sau:

<Biến đếm> là biến đơn, thường có kiểu nguyên

<Giá trị đầu> và <Giá trị cuối> là các biểu thức cùng kiểu với biến đếm

<Giá trị đầu> bé hơn hoặc bằng < Giá trị cuối>

Nếu <Giá trị đầu> lớn hơn < Giá trị cuối> thì vòng lặp không thực hiện được

vậy có thể sẽ không kiểm soát được biến đếm.

2.2 Vòng lặp không xác định

Repeat

<Dãy câu lệnh>;

Until <Điều kiện>;

While <Điều kiện> Do <Câu lệnh>;

Trang 5

Bài tập 1: Viết chương trình tính tổng S = 1+2+ +N.

Trang 6

-Bài tập 2: Viết chương trình nhập vào N số nguyên từ bàn phím Hãy tính và in ra màn hình

tổng của các số vừa được nhập vào

Ý tưởng:

Dùng phương pháp cộng dồn Cho vòng lặp FOR chạy từ 1 tới N, ứng với lần lặp thứ

i, ta nhập vào số nguyên X và đồng thời cộng dồn X vào biến S

Bài tập 3: Viết chương trình nhập vào các số nguyên cho đến khi nào gặp số 0 thì kết thúc.

Hãy đếm xem có bao nhiêu số chẵn vừa được nhập vào

Ý tưởng:

Bài toán này không biết chính xác số lần lặp nên ta không thể dùng vòng lặp FOR Vìphải nhập vào số nguyên N trước, sau đó mới kiểm tra xem N=0? Do đó ta nên dùng vònglặp REPEAT

Write('Nhap vao mot so nguyen N= '); Readln(N);

If N MOD 2 = 0 Then dem:=dem+1;

Until N=0;

Trang 7

Writeln(’Cac so chan duoc nhap vao la: ’,dem);

Write('Nhap so nguyen N= '); Readln(N);

For i:=1 To N div 2 Do

If N MOD i=0 Then Write(i,’ ’);

- Tìm USCLN: Lấy số lớn trừ số nhỏ cho đến khi a=b thì dừng Lúc đó: USCLN=a

- BSCNN(a,b) = a*b DIV USCLN(a,b)

Trang 8

-Bài tập 5: Viết chương trình tìm các số có 3 chữ số abc sao cho: abc = a3 + b3 + c3.

Ý tưởng:

Dùng phương pháp vét cạn Ta biết rằng: a có thể có giá trị từ 19 (vì a là số hàngtrăm), b,c có thể có giá trị từ 09 Ta sẽ dùng 3 vòng lặp FOR lồng nhau để duyệt qua tất cảcác trường hợp của a,b,c

Ứng với mỗi bộ abc, ta sẽ kiểm tra: Nếu 100.a + 10.b + c = a3 + b3 + c3 thì in ra bộ abc

BÀI TẬP CÁC CÂU LỆNH CÓ CẤU TRÚC

Bài tập 1: Viết chương trình nhập vào số tự nhiên N > 0 rồi thông báo lên màn hình số đó

có phải là số nguyên tố hay không

Ý tưởng:

- Ta biết số nguyên tố là số có 2 ước số là 1 và chính nó

- Vậy 1 không phải là số nguyên tố

- Ở chương trình lớp 10, ta biết có thuật toán tìm số nguyên tố như sau: x là số nguyên tốnếu x không chia hết cho các số chạy từ 2 đến phần nguyên căn bậc 2 của x

while (u<=sqrt(x)) and (x mod u <>0) do u:=u+1;

if u> sqrt(x) then write(x,' la so nguyen to')

else write(x,' khong phai la so nguyen to');

end;

readln

end

Trang 9

-Bài tập 2: Viết chương trình giải phương trình bậc hai: ax2 + bx + c = 0, a0.

Gợi ý: Xem sgk Tin 11.

- Tính Delta=b*b-4*a*c

- Biện luận:

Delta<0: Phương trình vô nghiệm

Delta=0: Phương trình có nghiệm kép: x = -b/(2*a)

Delta>0: Phương trình có 2 nghiệm phân biệt: x1,2 = (-bSQRT(Delta))/(2*a).Bài tập 3: Lập trình tính S= 13 + 23 + 33 + … + n3

Bài tập 4: Lập trình tính tổng sau (với x là số thực <=1 nhập từ bàn phím)

writeln(' ',i,' : ','la ki tu ',CHR(i));

if i mod 40 = 0 then readln;

Trang 10

ORD(X): Cho giá trị là số thứ tự của kí tự X trong bảng mã ASCII

VD: ORD(’A’) cho giá trị là 65

ORD(’B’) cho giá trị là 66

CHR(n): Cho giá trị là kí tự có số thứ tự n trong bảng mã ASCII

VD: CHR(65) cho giá trị là kí tự ’A’

CHR(66) cho giá trị là kí tự ’B’

***************************************************

BÀI TẬP THỰC HÀNH Bài tập 1: Viết chương trình in ra màn hình các số nguyên từ 1 đến 100 sao cho cứ 10 số thì

For j:=1 To 10 Do Writeln(i,’ x ’,j,’ = ’,i*j);

Bài tập 3: Viết chương trình để tìm lời giải cho bài toán sau:

Trong giỏ vừa thỏ vừa gà,Một trăm cái cẳng bốn ba cái đầu

Hỏi có mấy gà mấy thỏ?

Bài tập 4: Viết chương trình để tìm lời giải cho bài toán sau:

Trăm trâu trăm bó cỏ

Bó lại cho tròn

Trâu đứng ăn năm

Trâu nằm ăn ba

Trâu già ba con ăn một bó

Hỏi có bao nhiêu trâu đứng, trâu nằm, trâu già?

Bài tập 5: Viết chương trình nhập vào một số nguyên dương Hãy thông báo lên màn hình

số đó có bao nhiêu chữ số và tổng các chữ số của số đó

Trang 11

n:=n div 10;

d:=d+1;

end;

writeln('So luong chu so: ',d);

writeln('Tong cac chu so: ',t);

readln

end

Bài tập 6: Số hoàn thiện là số tự nhiên có tổng các ước của nó (không kể chính nó) bằngchính nó Viết chương trình kiểm tra xem một số được nhập vào từ bàn phím có phải là sốhoàn thiện hay không? Ví dụ: 6, 28 là các số hoàn thiện

Gợi ý:

- Tính tổng các ước số của N: từ 1  N div 2 lưu vào biến S

- Nếu S=N thì N là số hoàn thiện

Với mảng một chiều ta quan tâm đến :

- Tên mảng một chiều

- Số lượng phần tử trong mảng

- Kiểu dữ liệu của phần tử

- Cách khai báo biến mảng một chiều

- Cách tham chiếu đến từng phần tử của mảng

a> Khai báo mảng một chiều

Trong ngôn ngữ Pascal, mảng một chiều được khai báo bằng hai cách như sau :

Cách 1 : Trực tiếp

Var <Tên biến mảng> : Array[kiểu chỉ số] of <kiểu phần tử> ;

Cách 2 : Gián tiếp

Type <Tên kiểu mảng> = Array [<kiểu chỉ số>] of <kiểu phần tử> ;

Var <Tên mảng> : <tên kiểu mảng> ;

Trong đó :

- Var là từ khóa dùng để khai báo biến, Array là từ khóa để khai báo mảng

- Kiểu chỉ số thường là đoạn số nguyên liên tục có n1 n2, với n1 là chỉ số đầu và n2 làchỉ số cuối

- Kiểu phần tử là kiểu dữ liệu của phần tử mảng

- Để tham chiếu vào phần tử mảng ta viết :

Trang 12

Type Mang_nguyen=Array[1 100] of Integer;

Mang_thuc=Array[1 50] of Real;

Var A : Mang_nguyen;

B : Mang_thuc;

Khai báo mảng trực tiếp :

Var A : Array[1 100] of Integer ;

B : Array[1 50] of Real ;

-Bài tập 1 : Tìm phần tử lớn nhất của một dãy số nguyên

- Input : Số nguyên dương N và dãy số A1, A2, … , AN

- Output : Chỉ số và giá trị của số lớn nhất trong dãy

- Ý tưởng :

+ Đặt số A1 là số lớn nhất (max)

+ Cho i lặp từ 2 đến N, nếu A[i] > max thì gán max := A[i] và lưu lại vị trí i

Chương trình như sau :

Writeln('Gia tri lon nhat : ',max) ;

Writeln('chi so ptu lon nhat : ',csmax) ;

Readln ;

End

Bài tập 2 : Sắp xếp dãy số nguyên theo bằng thuật toán tráo đổi

- Input : Số nguyên dương N và dãy số A1, A2, …, AN

- Output : Dãy A được sắp xếp theo thứ tự không giảm

- Ý tưởng :

+ Hoán đổi để đưa số lớn nhất về vị trí cuối cùng

+ Làm tương tự đối với những số còn lại

Trang 13

Chương trình như sau :

-Bài tập 3 : Tìm kiếm nhị phân

- Input : Dãy số A1, A2,………, AN đã được sắp xếp tăng dần

- Output : Có hay không chỉ số i mà A[i] = k hoặc thông báo không tìm thấy

- Ý tưởng :

Xem lại thuật toán tìm kiếm nhị phân trong SGK lớp 10

Chương trình như sau :

Trang 14

Write('nhap so can tim k : ') ;

If TK then write('Chi so tim thay la : ',giua)

else write(' Khong tim thay ');

Nhập n số thực từ bàn phím vào một mảng, tính trung bình cộng của các số này.

Bài tập 6: In ra màn hình n số hạng của dãy Fibonaci

Trang 15

1 2 1

Ý tưởng:

Tam giác Pascal được tạo ra theo qui luật sau:

+ Mỗi dòng đều bắt đầu và kết thúc bởi số 1

+ Phần tử thứ j ở dòng k nhận được bằng cách cộng 2 phần tử thứ j-1 và j ở dòng thứk-1

- Tên mảng hai chiều

- Số lượng phần tử của mỗi chiều

- Kiểu dữ liệu của phần tử

- Cách khai báo biến mảng hai chiều

- Cách tham chiếu đến từng phần tử của mảng

Khai báo mảng hai chiều

Trong ngôn ngữ Pascal, mảng hai chiều được khai báo bằng hai cách như sau :

Trang 16

Cách 2 : Gián tiếp

Type <Tên kiểu mảng> = Array [kiểu chỉ số hàng, Kiểu chỉ số cột] of <kiểu phần tử> ;Var <Tên biến mảng> : <tên kiểu mảng> ;

Type Mang1 = Array[1 30, 1 50] of Integer;

Mang2 = Array[1 3, 0 2] of Real;

* Chú ý: Mảng hai chiều còn gọi là ma trận Trong ví dụ trên, B là ma trận cấp 3 × 3 Trong

mảng hai chiều, để truy cập đến phần tử hàng thứ i, cột thứ j của mảng hai chiều B ta dùng cách viết: [ i , j ]

Trang 17

Var A: Array[1 30, 1 30] of Real;

Writeln( ‘ Tong cot ‘ , j ,’ = ‘ , sum : 0 : 5 );

Trang 18

Type Mang = ARRAY[1 10,1 10] Of Integer;

Var A,B:Mang;

m,n,i,j:Integer;

Begin

Write('Nhap so dong m='); Readln(m);

Write('Nhap so cot n='); Readln(n);

writeln('Nhap ma tran A:');

Write('Nhap so dong m='); Readln(m);

Write('Nhap so cot n='); Readln(n);

Trang 19

Writeln('So lan xuat hien cua x trong mang la: ',dem);

{Tinh tong cac ptu lon nhat cua moi dong}

-Bài 4 XÂU KÝ TỰ (STRING)

I KHAI BÁO KIỂU STRING

VAR <Tên biến > : STRING[Max];

Trong đó Max là số ký tự tối đa có thể chứa trong chuỗi (Max  [0,255]) Nếu không cókhai báo [Max] thì số ký tự mặ mặc định trong chuỗi là 255

Trang 20

II TRUY XUẤT DỮ LIỆU KIỂU STRING

- Có thể sử dụng các thủ tục xuất nhập Write, Writeln, Readln để truy xuất các biếnkiểu String

- Để truy xuất đến ký tự thứ i của xâu ký tự, ta sử dụng cú pháp sau: <Tênbiến>[i] III CÁC PHÉP TOÁN TRÊN XÂU KÝ TỰ

Chèn xâu S1 vào xâu S2 bắt đầu tại vị trí vt

4.6 Hàm ORD(X): Cho giá trị là số thứ tự của kí tự X trong bảng mã ASCII

VD: ORD(’A’) cho giá trị là 65

ORD(’B’) cho giá trị là 66

4.7 Hàm CHR(n): Cho giá trị là kí tự có số thứ tự n trong bảng mã ASCII

VD: CHR(65) cho giá trị là kí tự ’A’

For i:=1 to length(S) do S[i]:=Upcase(S[i]);

Write(‘Xau ket qua: ‘, S);

Trang 21

Write(‘Nhap xau S: ‘); Readln(S);

For i:=1 to length(S) do

If S[i] IN [‘A’ ’Z’] Then S[i]:=CHR(ORD(S[i])+32);

Write(‘Xau ket qua: ‘, S);

Write(‘Nhap xau St: ‘); Readln(St);

For i:=1 to length(St) do

-Bài tập 4: Viết chương trình nhập vào một xâu ký tự từ bàn phím Thông báo lên màn hình

số lần xuất hiện của mỗi chữ cái tiếng Anh trong xâu S ( Không phân biệt chữ hoa hay chữthường)

Write('Nhap xau S: '); Readln(S);

{Khoi tao mang}

For ch:='A' To 'Z' Do dem[ch]:=0;

{Duyet xau}

For i:=1 To Length(S) Do

If Upcase(S[i]) IN ['A' 'Z'] Then Inc(dem[Upcase(S[i])]); {Liet ke cac ki tu ra man hinh}

Trang 22

-Bài tập 5: Viết chương trình tìm các vị trí xuất hiện chuổi S1 trong chuổi S ?

Dữ liệu vào: Chuổi s và chuổi s1.

Kết quả ra: Các vị trí tìm thấy s1 trong s.

Nhập vào một chuỗi sau đó xuất ra các từ dài nhất trong chuỗi

Dữ liệu vào: một chuỗi

Kết quả ra: các từ dài nhất trong chuỗi

Ví dụ:

bggggGiải

{In ra cac tu dai nhat trong xau}

while s[length(s)]=#32 do delete(s,length(s),1);

while pos(#32#32,s)>0 do delete(s,pos(#32#32,s),1);

j:=1;

Trang 23

for i:=1 to length(s) do

if length(a[i])>max then max:=length(a[i]);

writeln('cac tu dai nhat co ',max,' ky tu:');

while s[length(s)]=' ' do delete(s,length(s),1);

while pos(' ',s)>0 do delete(s,pos(' ',s),1);

if length(a[i])>max then max:=length(a[i]);

writeln('cac tu dai nhat co ',max,' ky tu:');

-Bài tập 7 : Viết chương trình nhập vào một dòng văn bản, hiệu chỉnh văn bản theo những

yêu cầu sau đây và in văn bản sau khi hiệu chỉnh ra màn hình:

a Xóa tất cả các ký tự trắng thừa (mỗi từ cách nhau đúng một dấu cách)

b Đầu câu, cuối câu không có kí tự trắng

c Đầu câu in hoa

-Bài 8: Viết chương trình nhập vào từ bàn phím một xâu kí tự và in ra màn hình xâu kí tự

ngược tương ứng Ví dụ: nhập ‘TRUNG TAM KTTHHN GIO LINH’

 ‘HNIL OIG NHHTTK MAT GNURT’

****************************

Trang 24

Bài 5 kiÓu d÷ liÖu tÖp

1 Vai trò của kiểu tệp

Dữ liệu kiểu tệp có những đặc điểm sau:

+ Được lưu trữ lâu dài ở bộ nhớ ngoài (đĩa từ, CD, ) và không bị mất khi tắt nguồn điệnvào máy

+ Lượng thông tin lưu trữ trên tệp có thể rất lớn và chỉ phụ thuộc vào dung lượng đĩa

2 Thao tác với tệp

Hai thao tác cơ bản đối với tệp là ghi dữ liệu vào tệp và đọc dữ liệu từ tệp

a Khai báo tệp văn bản :

VAR <Tên biến tệp>: TEXT;

Vd: Var f1, f2 : text;

b Sơ đồ thao tác với tệp:

Trang 25

c Cú pháp:

Ví dụ:

Trang 26

Một số hàm và thủ tục thông dụng:

• Hàm EOF (<biến tệp>): trả về giá trị TRUE khi con trỏ tệp đã ở vị trí cuối tệp.

• Hàm EOLN(<biến tệp>): trả về giá trị TRUE khi con trỏ tệp đã ở vị trí cuối dòng.

-BÀI TẬP ÁP DỤNG

Bài 1 Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng Đọc dữ liệu từ tệp SN.INP rồi ghi vào tệp SN1.OUT tổng giá trị các phần tử đó

Bước 1 Mở Pascal, tạo tệp số nguyên rồi lưu trên máy với tên tệp là SN.INP

Bước 2 Mở màn hình Pascal mới và lập trình

Bước 3 Chạy chương trình

Vì tệp kết quả được lưu trên bộ nhớ ngoài với tên là SN1.OUT, ta sẽ mở xem kết quả bằng cách nhấn File  Open (hoặc F3)  chọn tên SN1.OUT  OK

Trang 28

writeln(f2,'Max la: ',max);

write(f2,'Vi tri Max la: ',vt);

Trang 29

writeln(f2,'Cac phan tu da duoc sap xep tang dan:');

for i:=1 to n do write(f2,A[i],' ');

close(f1);

close(f2);

end

Trang 30

-Bài 7 Cho tệp SN.INP gồm các số nguyên, ghi trên nhiều dòng Đọc dữ liệu từ tệp SN.INPrồi ghi vào tệp SN7.OUT sao cho các phần tử được sắp xếp tăng dần theo từng dòng tươngứng.

Trang 31

-Bài 10 Cho số nguyên dương N, ta tạo số nguyên dương N1 bằng cách viết liên tiếp nhau từ

1 đến N Ví dụ N=4, ta có N1=1234 Thực hiện việc thu gọn N1 bằng cách xóa tất cả cácchữ số ở vị trí lẻ, sau đó xóa tất cả các chữ số ở vị trí chẵn, sau đó xóa tất cả các chữ số ở vịtrí lẻ … cho đến khi chỉ còn lại một chữ số Ví dụ:

N1=1234 (ban đầu)

N1=24 (lần xóa 1)

N1=2 (lần xóa 2)

Yêu cầu: Cho số nguyên N (1<=N<=1000)

Hãy xác định chữ số nhận được sau quá trình thu gọn chữ số N1 tương ứng

Dữ liệu vào: File văn bản VB10.INP gồm 1 dòng chứa số nguyên N

Kết quả ra: File văn bản VB10.OUT chứa chữ số tìm được ứng với số N

Trang 32

Viết chương trình chuyển các kí tự đầu tiên của mỗi từ thành

for i:=1 to length(s) do

if s[i]=' ' then s[i+1]:=upcase(s[i+1]);

-Bài 12 Xâu giao S của 2 xâu S1 và S2 là xâu chứa các kí tự

có trong xâu S1, đồng thời cũng có trong xâu S2

Cho 2 xâu S1 và S2 gồm các kí tự 'a' 'z','0' '9'(chiều dàimỗi xâu <= 255) Yêu cầu: tìm xâu giao S của 2 xâu S1 và S2

Dữ liệu vào: tệp DL1.INP gồm 2 dòng:

Trang 33

for i:=1 to length(s1) do

if pos(s1[i],s2)<>0 then s:=s+s1[i];

b:='';

for i:=1 to length(s) do

if pos(s[i],b)=0 then b:=b+s[i];

-Bài 13 Cho một số nguyên dương N có M chữ số cuối

Yêu cầu: Hãy tính tổng M các số tận cùng của N

end

Ngày đăng: 04/11/2014, 17:14

HÌNH ẢNH LIÊN QUAN

Sơ đồ thực hiện: - Lý thuyết và bài tập thực hành có lời giải bồi dưỡng học sinh giỏi tin học 11 cực chuẩn năm 2014
Sơ đồ th ực hiện: (Trang 1)

TỪ KHÓA LIÊN QUAN

w