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

Bồi Dưỡng HSG Tin Học Cấp Tỉnh Lớp 9 Pascal

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 (235.33 KB, 53 trang )

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

<b>Chuyên đề: KINH NGHIỆM BỒI DƯỠNG HỌC SINH GIỎI.</b>

<b>Chương 3: Cấu trúc lặp ………. trang 7</b>

<b>Chương 4: Kiểu dữ liệu mãng (1 chiều)……….………. trang 11</b>

<b>Chương 5: Xâu ký tự……..……….……. trang 14</b>

<b>Chương 6: Chương trình con……….….……. trang 21</b>

<b>Phần 2: Các bài tập về mảng ……. ……….….…….trang 31</b>

<b>Phần 3: Các bài tập về xâu ………...….……. trang 38</b>

<b>Phần 1: TỔNG QUÁT.</b>

<b>CHƯƠNG 1: KIẾN THỨC CƠ BẢN.</b>

<b>1. Hằng, biến và kiểu dữ liệu:</b>

- Hằng là đại lượng không thay đổi giá trị và biến là đại lượng cóthể thay đổi giá trị trong khi thực hiện chương trình.

- Kiểu dữ liệu: byte, integer, real, char, boolean, string …

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

Ví dụ: var n,x,y: integer;

Uses danhsachthuvien; Uses crt;

Const tenhang = giatrihang; const Pi =3.14;Type tenkieu = kieudulieu type xau30 = string[30]; Var tenbien : kieudulieu var n,i: integer;

writeln lệnh này đưa con trỏ xuống dòng dưới.

Write(‘chao cac ban’); xuất ra màn hình chữ chào các bạn;

Lưu ý: Nội dung trong dấu ‘….’ là một text và giữ nguyên khi xuấtra màn hình.

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

- Nhập giá trị vào từ bàn phím khi chạy chương trình: Read(…);Readln(…); readln dừng chương trình đến khi gõ một phím sẽ tiếptục.

<b>6. Một số kiểu dữ liệu chuẩn và phép toán:</b>

- Kiểu ký tự (char): có tất cả 256 ký tự từ 0 đến 255. Dùng hàmord để biết mã của kí tự và hàm Upcase để đổi chữ thường sang chữhoa.

- Kiểu xâu ký tự (string): vd: ‘chao cac ban’. Các hàm xử lý xâu sẽđề cập phần sau:

- Kiểu logic (Boolean): chỉ nhận hai giá trị đúng (True) hoặc sai(False). Các phép toán cơ bản là: và (and), hoặc (or), phủ định (not).

+ đk1 and đk2 nhận giá trị đúng khi cả hai điều kiện đều đúng.+ đk1 or đk2 nhận giá trị đúng khi một trong hai là đúng.

+ Not(đk) nhận giá trị đúng khi điều kiện sai.

7. Các bước cơ bản khi lập một chương trình Pascal.- Bước 1: Soạn thảo chương trình.

<b>- Bước 2: Dịch chương trình (nhấn phím F9), nếu có lỗi thì sửa</b>

lỗi.

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

<b>- Bước 3: chạy chương trình (nhấn phím Ctrl F9).Bài tập:</b>

Bài 1: Hãy xuất câu ‘chao cac ban’ ra màn hình.

Bài 2: Lập trình theo thứ tự: chú ý đến khoảng cách các chữ chènvào.

<b>-</b> Xuất: ‘Ban ten gi’.

<b>-</b> Nhập: <tên của mình>

<b>-</b> Xuất: ‘xin chao ban <tên> đen voi Pascal’.

Bài 3: Hãy nhập vào bán kính r, viết chương trình tính chu vi và diệntích hình trịn có bán kính r.

<i>- Chu vi đường trịn: 2**r.- Diện tích hình trịn: *r*r.</i>

Bài 4: Hãy nhập vào chiều dài d và chiều rộng r, viết chương trìnhtính chu vi và diện tích hình chữ nhật.

<i>- Chu vi hình chữ nhật: (dài + rộng)*2.</i>

- Diện tích hình chữ nhật: dài * rộng.

Bài 5: Hãy nhập vào chiều cao h và cạnh đáy a, viết chương trình

<i>tính diện tích hình tam giác. ( s=cạnh đáy* chiều cao/2)</i>

Bài 6: Hãy nhập vào một cạnh a, tính chu vi và diện tích hình vng.

<i>- chu vi: cạnh *4. Diện tích: cạnh * cạnh.</i>

Bài 7: Nhập vào 4 số, viết chương trình tính trung bình cộng 4 số đó.Bài 8: Như bài 7, nhưng sử dụng 2 biến.

Bài 9: In đão số. Nhập vào hai số ab, in ra màn hình ngược lại là ba.Ví dụ nhập 15 thì in ra 51.

<i><b>-</b>Thuật toán đảo số:</i>

<i><b>-</b>Nhập a, b.</i>

<i><b>-</b>tam:= a;a:=b;b:=tam;</i>

<i> - Như vậy a bây giờ mang giá trị của b, b mang giá trị của a. inkq. (write(a,b));</i>

Bài 10: Một của hàng bán nước ngọt với giá sỉ là 7000đ/chai nếumua chẳn chục, giá 7500đ/chai nếu mua lẻ. Nhập vào số chai cầnmua và viết chương trình tính tiền cho khách theo giá trên.

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

<i>- Nhập n (số chai cần mua).</i>

<i>- Số chai lẻ = n mod 10; Số chai chẳn = n div 10</i>

Bài 11a:Tách số. Nhập vào một chữ số có ba số, viết chương trìnhtách ra số hàng trăm hàng chục và hàng đơn vị.

Ví dụ: nhập vào số n = : 352.Kết quả: Số 352 có:

<b>-</b> Hàng đơn vị là2.

<b>-</b> Hàng chục là5.

<b>-</b> Hàng trăm là3.

<i>- Lấy đơn vị: n mod 10Loại bỏ hàng ĐV: n:= ndiv 10</i>

<i>- Hàng chục: n mod 10- Hàng trăm: n div 10.</i>

<i>- ĐV: 352 mod 10 =2.</i>

<i>Loại bỏ: n= 352 div10=35</i>

<i>- Hàng chục:35mod10=5</i>

<i>- Hàng trăm: 35 div10=3</i>

<b>CHƯƠNG 2: CẤU TRÚC RẼ NHÁNH.1. Lệnh nếu thì:</b>

- Dạng thiếu: if <điều kiện> then <lệnh>;

Nếu <điều kiện> đúng thì thực hiện <lệnh>, sai thìthốt.

- Dạng đủ: if <điều kiện> then <lệnh 1> else <lệnh 2>;

Nếu <điều kiện> đúng thì thực hiện <lệnh 1>,

Ngược lại (nếu điều kiện sai) thì thực hiện<lệnh 2>.

Chú ý: trước dịng lệnh else (cuối lệnh 1) khơng có dấu ;

<b>2. Lệnh lựa chọn.</b>

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

Dạng 1 Dạng 2Case <biểu thức> of

Const 1: <lệnh 1>; Const 2: <lệnh 2>; ………..

Const n: <lệnh n>;End.

Case <biểu thức> of Const 1: <lệnh 1>; Const 2: <lệnh 2>; ………..

Const n: <lệnh n>;Else <lệnh n+1>

Nếu biểu thức là hằng số 1 thì thực hiện lệnh 1… Nếu biểu thứclà hằng số n thì thực hiện lệnh n, else là trường hợp biểu thức khôngchứa các giá trị từ một đến n thì thực hiện lệnh n+1.

<b>Bài tập:</b>

Bài 12: Nhập vào hai số in ra màn hình số lớn hơn.

<i>If a>b then writeln(a)Else writeln(b);</i>

Bài 13b: Nhập vào 3 cạnh a, b, c của một tam giác. Viếtchương trình cho biết đây có phải là một tam giác đều khơng?

<i>- Nếu a=b và b=c và thì là tam giác đều, ngược lại không làtam giác đều.</i>

Bài 13c: Nhập vào 3 cạnh a, b, c của một tam giác. Viết chươngtrình cho biết đây có phải là một tam giác cân không?

<i>- Nếu a=b hoặc b=c hoặc a=c và thì là tam giác cân, ngược lạikhơng là tam giác cân.</i>

Bài 13d: Nhập vào 3 cạnh a, b, c của một tam giác. Viếtchương trình cho biết đây có phải là một tam giác vuông không?

<i>- Nếu a<small>2</small>=b<small>2</small>+c<small>2</small> hoặc b<small>2</small>= c<small>2</small> +a<small>2</small> hoặc c<small>2</small>= a<small>2</small>+b<small>2</small> là tam giácvuông.</i>

Bài 14: Nhập vào hai số nguyên dương a và b, viết chương trìnhin ra số nhỏ đứng trước, số lớn đứng sau.

Bài 15: Nhập vào một số là thứ mấy trong tuần, viết chươngtrình dịch ra tiếng Anh các thứ đó.

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

Dạng tiến: FOR <biến đếm> := <giá trị đầu> TO <giá trị cuối>DO <lệnh>;

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

Ví dụ: n:=0;

for i:=1 to 10 do n:=n+1;

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

vịng lập lần 1: i có giá trị bằng 1 và thực hiện lệnhn:=n+1

lần 2: i có giá tri bằng 2 tiếp tục thực hiện lệnhn:=n+1.

…. lần 10: i có giá trị bằng 10 tiếp tục thực hiện lệnhn:=n+1.

Sau đó tự kết thúc lệnh lặp này (lặp lại 10 lần).2. Vịng lặp khơng xác định:

Có hai dạng:

a. WHILE <điều kiện> DO <lệnh>;

Nếu <điều kiện> là đúng thì thực hiện <lệnh>; và tiếp tục lặplại đến khi điều kiện sai thì thốt khỏi vịng lặp.

b. REPEAT <lệnh> UNTIL <điều kiện>;

Thực hiện lệnh trước sau đó xét điều kiện, nếu điều kiện đúngthì dừng. Nếu điều kiện sai thì tiếp tục lặp lại thực hiện lệnh và xétđiều kiện.

Chú ý: + Câu lệnh While xét điều kiện trước nếu đúng mới thựchiện lệnh, còn câu lệnh repeat thì ngược lại là thực hiện lệnh trướcrồi sau mới xét điều kiện.

+ Có thể vịng lặp này rơi vào vịng lặp vơ hạn vì khơngthỏa mản điều kiện kết thúc. Nhấn nút Break để kết thúc.

Bài 17: Nhập vào số nguyên dương n, viết chương trình in racác số lẻ nhỏ hơn hoặc bằng n. (giải bằng 2 cách dùng câu lệnh forvà while).

<i>- Nhập n;</i>

<i>- For i:= 1 to n do </i>

<i>If i mod 2 = 1 then write(i, ‘ ‘);</i>

Bài 18: Nhập vào số ngun dương n, viết chương trình tínhtổng các số lẻ nhỏ hơn hoặc bằng n.

<i>- Nhập n;- TL:= 0;</i>

<i> for i:= 1 to n do</i>

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

<i>If i mod 2 = 1 do TL:= TL +i; (Nếu tính tổng chẳn thì điều kiện:i mod 2 = 0)</i>

<i>- In kết quả (TL).</i>

Ghi chú: Bài 17, 18 có thể đổi lại là số chẳn, số dương, số âm…Bài 19: Nhập vào số nguyên dương n, viết chương trình in ra tấtcả các số ước của n.

<i>- Nhập n;</i>

<i>- for i:= 1 to n do</i>

<i>If n mod i = 0 then write(i, ‘ ‘);</i>

Bài 20: Một số có tổng các ước nhỏ hơn nó bằng chính nó, đượcgọi là số hồn chỉnh. Ví dụ: 6 là số hồn chỉnh vì có các ước nhỏ hơnnó là 1,2,3 và tổng là: 1+2+3=6.

Viết chương trình nhập vào số n, xét xem n có phải là số hồnchỉnh hay không?

- Nhập n;

<i>- s:=0;</i>

<i>For i:= 1 to n-1 do If n mod i = 0 then s:= s+i; If s=n then writeln (n, ‘la so hoan chinh’);</i>

<i>Else writeln (n, ‘khong la so hoan chinh);</i>

Bài 21: Nhập vào số n, tìm các số hồn chỉnh nhỏ hơn hoặcbằng n.

<i>- Nhập n;</i>

<i>- For j:=1 to n doBegin</i>

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

Bài 23: Nhập vào số nguyên n, viết chương trình xem số n cóphải là số ngun tố khơng?

Cách 1: dùng câu lệnh while … do

<i>- nhập n;</i>

<i><b>- i:=2;</b></i>

<i><b>while n mod i <>0 do i:= i+1;</b></i>

<i><b>if i=n then writeln(n, ' la so nguyen to')</b></i>

<i><b> else writeln(n, ' khong la so nguyen to');</b></i>

Cách 2: dùng câu lệnh for … to … do

<i><b>- nhập n;- dem:=0; for i:=2 to n do</b></i>

<i><b> if n mod i = 0 then dem:= dem+1;</b></i>

<i><b> if dem<2 then writeln(n, ' la so nguyen to') else writeln(n, ' khong la so nguyen to');</b></i>

<i>Cách 3: </i>

KT:= true;

for i:=2 to n-1 do if (n mod i)= 0 then KT := false;

Bài 24: Nhập vào số nguyên n, viết chương trình in ra các sốnguyên tố nhỏ hơn hoặc bằng n.

<i>- Nhập n;</i>

<i>- For j:= 1 to n do </i>

<i>ghép cả đoạn chương trình trên vào với n đổi lại là j.</i>

Bài 25: Nhập vào số nguyên n, viết chương trình tính n!. n! được biết như sau:

n!= 1 với n=0.

n!= 1.2.3…n (tích của n số từ 1 đến n).

<i>- Nhập n;</i>

<i><b>- gt:=1;</b></i>

<i><b> for i:=1 to n do gt:=gt*i;</b></i>

Bài 26: nhập vào 2 số a và b, viết chương trình tìm UCLN của 2số đó.

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

<i>- Nhập a, b;</i>

<i>- While a<>b do</i>

<i>If a>b then a:= a- bElse b:=b-a;</i>

<i>- In kết quả ước chung lớn nhất là b;</i>

Bài 27: Tính tổng của n số tự nhiên đầu tiên, với n là số nguyêndương và được nhập từ bàn phím.

<i>- Nhập n;- tong:=0;</i>

<i>For i:=1 to n do tong:=tong+i;- In kết quả là, tong.</i>

Bài tập phụ không gợi ý:

<i><b>Bài tập 3.1 In bảng cửu chương n.Bài tập 3.2 Các bài toán cổ:</b></i>

<i>a.Trâu đứng ăn nămTrâu nằm ăn baLụ khụ trâu giàBa con một bóTrăm con ăn cỏTrăm bó no nê.</i>

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

<i>b.Vừa gà vừa chó, bó lại cho trịn,ba mươi sáu con, một trăm chân chẵn. Hỏi có bảo nhiêu chó gà?</i>

<i>c. Các bài tập tương tự như: Bài tập đếm số tờ tiền…</i>

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

<b>CHƯƠNG 4: KIỂU DỮ LIỆU MẢNG (MỘT CHIỀU)</b>

<b>Cú pháp: var <biến mảng>: array[chỉ số đầu..chỉ số cuối]of<kiểu dữ liệu>.</b>

Bài 28: viết chương trình nhập n số và in ra theo thứ tự ngược lại. Ví dụ nhập vào 3 số là 7, 5 6 thì in ra 6, 5 7.

<i>- Nhập n, nhập giá trị từng phần tử.</i>

<i><b>- for i:=n downto 1 do write(a[i].' ');</b></i>

Bài 29: Nhập vào n số nguyên dương, viết chương trình tìm sốlớn nhất, số nhỏ nhất trong n số đó.

<i>- Nhập n, nhập giá trị từng phần tử.</i>

<i><b>- max:=a[1];for i:=2 to n do</b></i>

<i><b>if max<=a[i] then max:=a[i];min:=a[1];</b></i>

<i><b>for i:=2 to n do</b></i>

<i><b>if min>=a[i] then min:=a[i];</b></i>

<i>- In kết quả, min max.</i>

Bài 30: Viết chương trình nhập dãy n số và in ra tổng các sốchẳn, tổng các số lẽ trong dãy vừa nhập.

<i>- Nhập n, nhập giá trị từng phần tử.</i>

<b>- TC:=0;TL:=0;</b>

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

<b>- min:=a[1];for i:=1 to n doif min>=a[i] then Begin</b>

<b> min:=a[i]; k:=i;</b>

<i><b> tam:=a[i]; a[i]:=a[j]; a[j]:=tam; end;</b></i>

<i>- In kết quả, dãy số đã sắp xếp tăng dần: for i:=1 to n do write(a[i],' ');</i>

<i>b. Đối với trường hợp giảm dần thì điều kiện ngược lại a[i]<a[j];</i>

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

... Hàng thứ n được xác định từ hàng n-1:

- Phần tử đầu tiên và phần tử cuối cùng đều bằng 1.

- Phần tử thứ 2 là tổng của phần tử thứ nhất và thứ 2 của hàng n-1- Phần tử thứ k của hàng thứ n là tổng của phần tử thứ k-1 và k của hàng thứ n-1.

Program Tam_giac_Pascal_mot_chieu;Var n,i,j: integer;

M: array[1..10] of integer;Begin

Write('Nhap n: '); Readln(n); For i:= 1 to n do M[i]:=0; M[1]:=1;

For i:=1 to n do Begin

For j:=i+ 1 downto 2 do M[j]:=M[j]+M[j-1]; For j:=1 to i+ 1 do Write(M[j]:3);

Writeln; End;

ReadlnEnd.

<b>Bài tập 32d</b>

Viết chương trình cho phép nhập một dãy gồm n số nguyên. Nhập thêm một số và chèn thêm vào dãy sau phần tử k.

<b>Bài tập 32f</b>

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

Viết chương trình nhập n số, xoá số thứ k trong n số vừa nhập.In ra n-1 số cịn lại.

n= 10 (Nhập 10 phần tử)

Ví dụ: Nhập 2, 3, 4, 5, 6, 8, 7, 6, 5, 4.k= 8 (Xoá phần tử thứ 8).

In ra: 2, 3, 4, 5, 6, 8, 7, 5, 4.

<b>CHƯƠNG 5: XÂU KÝ TỰ (STRING)</b>

<b>1. Cú pháp khai báo: var <tên biến>:string[max];Max: là số phần tử tối đa trong xâu.</b>

Nếu không có số max thì mặc định là 255 ký tự.

<b>2.CÁC THỦ TỤC VÀ HÀM VẾ XÂU KÝ TỰ2.1. Hàm lấy chiều dài của xây ký tự</b>

<b>LENGTH(St : String):Integer;</b>

<b>2.2. Hàm COPY(St : String; Pos, Num: Byte): String;</b>

Lấy ra một xâu con từ trong xâu St có độ dài Num ký tự bắt đầu từ vịtrí Pos .

<b>2.3. Hàm POS(SubSt, St :String):Byte;</b>

Kiểm tra xâu con SubSt có nằm trong xâu St hay khơng? Nếu xâuSubSt nằm trong xâu St thì hàm trả về vị trí đầu tiên của xâu conSubSt trong xâu St, ngược lại hàm trả về giá trị 0.

<b>2.4. Thủ tục DELETE(Var St:String; Pos, Num: Byte);</b>

Xoá trong xâu St Num ký tự bắt đầu từ vị trí Pos.

<b>2.5. Thủ tục INSERT(SubSt: String; Var St: String; Pos:Byte);</b>

Chèn xâu SubSt vào xâu St bắt đầu tại vị trí Pos.

<b>2.6. Thủ tục STR(Num; Var St:String);</b>

Đổi số nguyên hay thực Num thành dạng xâu ký tự, kết quả lưu vàobiến St.

<b>2.7. Thủ tục VAL(St:String; Var Num; Var Code:Integer);</b>

Đổi xâu số St thành số và gán kết quả lưu vào biến Num. Nếu việcchuyển đổi thành công thì biến Code có giá trị là 0, ngược lại biếnCode có giá trị khác 0 (vị trí của lỗi).

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

<small> CÁC THỦ TỤC THÔNG DỤNG</small>

Str(x,S) Ðổi giá trị kiểu số X sang dạng chuỗi S.

Val(S,x,code) Đổi chuỗi S thành sô x.Nêu đổi chuỗi thành công biên Code nhận giá trị 0. Nêu không đổi đc,code là sơ ngun cho biêt vtrí gây lỗi.

INC(x,r) Tăng giá trị của x nên r đơn vị. Tương đương với x:=x+r;DEC(x,r) Giảm giá trị của x xuống r đơn vị. Tương đương với x:=x-r.(Thủ tục INC(x), DEC(x) xem như tăng, giảm x một đơn vị)

Insert(S,T,vt); Chèn chuoi S vào chuoi T vtrí vt.Delete(S,P,L) Xố L ký tự từ vtrí P ra khỏi

Break ;kết thúc vòng lặp CÁC HÀM THÔNG DỤNG

Ord(X) Lấy thứ tự của ký tự X trong bản mã ASCII.Chr(X) Lấy ký tự thứ X trong bảng mã ASCII

PRED(x) Cho phần tử đứng trước xSUCC(x) Cho ra phần tử đứng sau xRound(x) Làm tròn x

Trunc(x) Lấy phần nguyênInt(x) Lấy phần nguyênFrac(x) Lấy phần lẻ

ABS(x) Lấy giá trị tuyệt đối

Copy(S,P,L) Trích chuỗi S một chuỗi con dài L ký tự bắt đầu từ vtrí P.

Odd(I:Integer) Cho True khi I là sô lẻ và False khi I là sô chẵnPos(X,S):Integer Cho vtrí bắt đầu của chuỗi con X trong S. Nêu X khơng thuộc S thì hàm POS cho giá trị 0.

A Page A Future

<b>Bài 5: Xâu ký tự (String) trong Pascal</b>

Xâu là gì? Để xử lý các chuỗi văn bản, Pascal đưa ra một kiểu dữ liệumới gọi là xâu ký tự và được định nghĩa bằng từ khóa STRING. Xâu ký tự là dữ liệu bao gồm một dãy các ký tự trong bảng mã ASSCII.Cách khai báo:

Var: STRING[độ dài của xâu];

Xâu ký tự trong bộ nhớ nó chiếm số byte bằng số ký tự cực đại được

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

khai báo cộng với byte đầu tiên chứa số ký tự hiện có của xâu. Độ dài tối đa của xâu ký tự là 255.

- Cách nhập/xuất: Cách đọc hay viết kiểu STRING cũng tương tự như các kiểu dữ liệu khác, ta sử dụng các thủ tục READ, hoặc WRITE.Ví dụ:

<i>- Truy cập từng phần tử của xâu ký tự: tương tự mảng 1 chiều: thông</i>

qua tên biến kiểu STRING và chỉ số của nóVí dụ:

St := 'Le Thanh Lam';write(st[4]);

-> Kết quả: cho ra chữ T.Các thao tác trên xâu ký tự:

<b>1/ Phép cộng xâu:</b>

Ví dụ:

st1:=’Le’; st2:=’Thanh’; St=st1 + st2; -> KQ: ‘Le Thanh’

Hai xâu ký tự được gọi là bằng nhau khi chúng hoàn tồn giống nhau (có độ dài như nhau).

Ví dụ: ‘FILENAME’ = ’FILENAME ‘

<b>3/ Các thủ tục và hàm chuẩn xử lý xâu ký tự</b>

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

a. Hàm length(st): cho độ dài thực của xâu ký tựví dụ: st:=’le thanh’ thì LENGTH(st) cho bằng 8.

b/ Thủ tục DELETE(st, pos, num): xóa num ký tự trong xâu st kể từ vịtrí pos

Ví dụ: st= ‘FILENAME’

Delete(st,5,4) lúc đó st cho ra là ‘FILE’

c/ Thủ tục INSERT(obj, st, pos): Thủ tục cho kết quả bằng cách chèn xâu ký tự có tên là Obj vàoxâu st tại vị trí pos, những ký tự đứng saupos sẽ được dời vềphía sau của xâu ký tự obj.

Ví dụ: obj:= ‘Thanh ‘st:=’Le Lam’;

INSERT(obj,st,4) lúc đó st=’Le Thanh Lam’;

d/ Thủ tục STR(value, st): Thủ tục này thực hiện việc chuyển đối giá trị kiểu số(value) sang dạng xâu ký tự và gán cho biến st.

Ví dụ: n là một só nguyên có giá trị: n:=150;STR(n:5,st) sẽ cho kết quả xâu st là: st=’ 150’;

e/ Thủ tục VAL(st, value,code) đối một xâu ký tự st sang dạng số và gán cho biến value, nếu biến đối thành cơng thì code sẽ nhận giá trị bằng 0. ngược lại thì cho giá trị khác khơng

Ví dụ: VAL(‘123’,value,code) lúc này code sẽ nhận giá trị bằng 0 và value=123

f/ Hàm COPY(st, pos, num): sao chép trong xâu st, num ký tự tại vị trí pos,

Ví dụ: st=’Le Thanh Lam’COPY(st,4,5) = ‘Thanh’;

g/ Hàm CONCAT(s1,s2,…,sn): hàm cho ra 1 xâu mới bằng cách nối đi các xâu s1,s2,…,sn lại với nhau.

Ví dụ: CONCAT(‘Le ’,’Thanh ‘, ‘Lam’) = ‘Le Thanh Lam’;

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

h/ Hàm POS(st1,st2): hàm cho tavị trí tìm thấy đầu tiên của xâu s1 trong xâu s2.

Ví dụ: POS(‘Lam’,‘Le Thanh Lam’) = 10;

Bài 33: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó sang chữ in hoa rồi in kết quả ra màn hình.

<i><b>program bai33;uses crt;</b></i>

<i><b>var st:string; {khai báo xâu có tên là st}i:byte;</b></i>

Bài 34: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Đổi xâu ký tự đó sang chữ thường rồi in kết quả ra màn hình.

<i>- Nhập xâu;</i>

<i><b>- for i:=1 to length(st) do</b></i>

<i><b>if st[i] in ['A'..'Z'] then st[i]:= chr(ord(st[i])+32);</b></i>

<i><b>for i:=1 to length(st) do</b></i>

<i><b>if st[i] in ['0'..'9'] then dem:=dem+1;- in kết quả, dem.</b></i>

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

Bài 36: Viết chương trình nhập vào một xâu ký tự từ bàn phím. In ra xâu đó sau khi xóa hết ký tự trắng thừa trong xâu. (ký từ trắng thừa là ký tự đầu xâu, cuối xâu, và ở giữa xâu nếu có 2 ký tự trắng liên tiếp nhau).

Bài 38: 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 các chữ cái có trong xâu và số lượng của chúng.

<i><b>program bai33;uses crt;</b></i>

<i><b>var st:string; {chuổi nhập vào}</b></i>

<i><b>dem:array['A'..'Z']of byte; {đây là một mảng số ngầm chứa số chữ cái có trong xâu}</b></i>

<i><b>ch:char;{kiểu ký tự, chứa các ký tự từ A đến Z}.begin</b></i>

<i><b>write('nhap xau st: ');readln(st);</b></i>

<i><b>for ch:='A' to 'Z' do dem[ch]:=0; {khởi tạo mảng dem và gáncho chúng bằng o: vd: dem[A]:=0, dem[B]:=0, dem[C]:=0……}</b></i>

<i><b>for i:=1 to length(st) do</b></i>

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

<i><b> if upcase(st[i])in ['A'..'Z'] then inc(dem[upcase(st[i])]);{duyệt xâu st nếu thấy xâu st có ký tự A thì dem[A] tăng thêm 1 hay dem[A]=1. hàm inc là làm giá trị trong nó tăng thêm 1}.</b></i>

<i><b>for ch:='A' to 'Z' do</b></i>

<i><b> if dem[ch]>0 then writeln(ch,': ',dem[ch]);</b></i>

<i><b>{duyệt từ ký tự A đến Z nếu dem[A]>0 thì xuất ra màn hình A: dem[A]}.</b></i>

Bài 39: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Xóa hết các ký tự số rồi in ra màn hình.

<i>- Nhập xâu st;</i>

<i><b>- i:=1;</b></i>

<i><b>while i<= length(st) do</b></i>

<i><b> if st[i] in ['0'..'9'] then delete(st,pos(st[i],st),1) else i:=i+1;</b></i>

<i><b>- In kết quả xâu st.</b></i>

Bài 40: Viết chương trình nhập vào một xâu ký tự từ bàn phím. Xem xét ký từ x (ký tự bất kỳ nhập từ bàn phím) xuất hiện bao nhiêulần trong xâu.

<i><b>- Nhập xâu st;- dem:=0;</b></i>

<i><b> for i:=1 to length(st) do</b></i>

<i><b> if st[i]=x then dem:=dem+1;-In kết quả là dem.</b></i>

Bài tập 41: Viết chương trình nhập vào một xâu ký tự từ bàn phím.Tìm và in ra màn hình một từ có độ dài lớn nhất trong xâu.

<i><b>Gợi ý:</b></i>

Tách từng từ để so sánh (xem bài tập 5).

Bài tập 42: Viết chương trình nhập một xâu ký tự St từ bàn phím vàmột ký tự ch. In ra màn hình xâu St sau khi xóa hết các ký tự chtrong xâu đó.

<i><b>Gợi ý:</b></i>

While POS(ch,st)<>0 Do Delete(st,POS(ch,st),1);

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

Bài tập 43: Viết chương trình nhập một xâu vào từ bàn phím vàthơng báo lên màn hình xâu đó có phải đối xứng khơng theo 2 cách:Đệ qui và khơng đệ qui. (Ví dụ: abba, abcba là các xâu đối xứng).

<i><b>Gợi ý:</b></i>

- Nếu xâu Length(st)<=1 thì st là xâu đối xứng- Ngược lại:

+ Nếu st[1]<>st[Length(st)] thì st khơng đối xứng

+ Ngược lại: Gọi đệ qui với xâu st sau khi bỏ đi ký tự đầuvà ký tự cuối.

Bài tập 44: Viết chương trình đảo ngược thứ tự các từ trong một xâuđược nhập vào từ bàn phím.

<i><b>Ví dụ: Xâu Nguyen Van An sẽ thành An Van Nguyen.Gợi ý:</b></i>

Tách từng từ nối vào đầu xâu mới (xem bài tập 5).

Bài tập 45: Viết chương trình nhập vào 2 xâu ký tự s1 và s2. Kiểm tra xem xâu s2 xuất hiện bao nhiêu lần trong xâu s1. (Lưu ý:

a. Xóa tất cả các ký tự trắng thừa.

b. Trước các dấu câu khơng có các ký tự trắng, sau các dấu câucó một ký tự trắng.

c. Đầu câu in hoa.

Bài tập 48: Viết chương trình để nén và giải nén một xâu ký tự .

Ví dụ: Xâu ‘AAAABBBCDDDDDDDEEF’ sau khi nén sẽ trở thành‘4A3BC7D2EF’.

<b>CHƯƠNG 6: CHƯƠNG TRÌNH CON.</b>

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

<i><b>1. Khai báo chương trình con</b></i>

Nhắc lại cấu trúc của một chương trình

PROGRAM Tên_chương_trình; { Tên chương trình}USES ...; {Khai báo thư viện}

CONST ...;{Khai báo hằng}TYPE ...;{Khai báo kiểu}VAR ...;{Khai báo biến}

Khai báo CHƯƠNG TRÌNH CON (THỦ TỤC)BEGIN {Chương trình chính}

<các lệnh>;END.

Như vậy phần khai báo CHƯƠNG TRÌNH CON nằm ở phần cuối của phần khai báo

<i><b>2. Khai báo và lời gọi hàm</b></i>

Chú ý ln có phép gán tên hàm cho giá trị để hàm trả về giá trị khi được gọi.

Lời gọi hàm

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

<tên hàm>(danh sách các tham số thực);Ví dụ:

Ví dụ:

Procedure inso(n:integer);var i:integer;

for i:=1 to n do write(i:5);end;

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

<small>Chú ý: Nếu một cơng việc có thể làm bằng hàm thì chắc chắn sẽ làmđược bằng thủ tục tuy nhiên sẽ phức tạp hơn khi dùng hàm nhưng mộtchương trình làm bằng thủ tục thì chưa chắc ta đã làm được bằng hàm.</small>

<i><b>5. Bài tập minh họa:</b></i>

<i><b>Bài tập 1: Viết chương trình tính giai thừa của số n. Với yêucầu: </b></i>

<i>Nếu người dùng nhập số n < 0 thì yêu cầu nhập lại.Sử dụng chương trình con để tính giai thừa của một số.</i>

Uses crt;

Var n:integer;x:longint;

<b>Procedure Giai_Thua(var GT: longint; n: byte);</b>

while n>0 dobegin

GT:= GT*n;N := n-1;end;

<b>write('Nhap so n: '); readln(n);if n < 0 then </b>

<b>begin </b>

<b>write('Nhap so n>=0');readln; end;</b>

<b>until n>=0;Giai_Thua(x,n);</b>

<b>writeln('Giai thua cua ',n,'la:',x);</b>

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

<i><b>Lệnh n := n - 1 làm thay đổi giá trị của n nhưng khi rakhỏi chương trình con n có giá trị khơng đổi so với trước khigọi chương trình con.</b></i>

<i><b>Bài 2: Viết chương trình tính n! với yêu cầu sử dụng hàm đểtính giai thừa.</b></i>

Uses crt;

Var n: longint;

<b>Function Giai_Thua ( n : longint ) : longint;</b>

Var GT:Longint;begin

GT := 1;

while n > 0 dobegin

GT := GT * n;n := n - 1;end;

Giai_thua := GT;end;

<b>write('Nhap n: '); readln(n);write(n,'!=',Giai_thua(n));readln</b>

<i><b>Khi dùng Procedure cần một biến (toàn cục) để lưu giữa giá trị của n! Biến này được truyền cho tham biến trong </b></i>

<i><b>Procedure. Sau khi gọi nó cần lệnh để in n!</b></i>

<i><b>Khi dùng Function, có thể sử dụng nó như là một biểu thức. </b></i>

</div>

×