1. BẢN-NÂNG CAO THÀNH PHỐ HỒ CHÍ MINH - 2018 GV: Phạm Thị Bích Tường Email: [email protected] KIỂU DỮ LIỆU CÓ CẤU TRÚC TRONG PASCAL
2. CƠ BẢN....................................................................................................................3 Bài tập 1: Nhập xâu kí tự bất kì .........................................................................................3 a) Đếm số lần xuất hiện của 1 kí tự nào đó trong câu. ...............................................3 b) Liệt kê các kí tự có mặt trong xâu cùng số lần xuất hiện của các kí tự đó.......3 Bài 2: Nhập 1 xâu kí tự........................................................................................................3 a) Xét xem trong xâu có K kí tự kề nhau mà như nhau hay không? ....................3 b) Hãy xóa đi kí tự kề nhau mà như nhau, chỉ giữ lại một.....................................3 Bài 3: Nhập 1 xâu kí tự. Kiểm tra tính đối xứng của xâu đó. Nếu xâu không đối xứng thì đảo xâu...............................................................................................................4 Bài 4: Cho 1 xâu kí tự. Tính xem trong số đó có bao nhiêu loại kí tự khác nhau ( không phân biệt in hoa hay in thường)..........................................................................5 Bài 5: Cho 1 xâu kí tự bất kì, tính: Số lượng các kí tự số, Số lượng các kí tự chữ cái. ............................................................................................................................................6 Bài 6: Cho 1 xâu kí tự bất kì (cả số lẫn chữ). Viết chương trình tách các phần là số của xâu trên và đưa ra 1 mảng số nguyên. ....................................................................7 Bài 7: Nhập vào 1 xâu. Biến đổi thành chữ in hoa........................................................8 Bài 8: Nhập vào 1 xâu. Biến đổi in thường....................................................................9 Bài 9: Nhập vào 1 chuỗi, in ra chuỗi ngược...................................................................9 Bài 10: Nhập vào danh sách HS 1 lớp. Sắp xếp lại danh sắp theo thứ tự tăng dần theo chiều dài của tên. ..................................................................................................10 Bài 11: Nhập vào họ tên bất kì sau đó biến đổi các chữ cái đầu tiên là in hoa.........10 Bài 12: Nhập vào 1 đoạn văn. Tính số câu...................................................................11 Bài 13: Nhập vào 1 số, xóa bỏ các chữ số lẻ. Xuất kết quả dưới dạng đối xứng của phần còn lại. Vd:1 2 4 5 6 --> 2 4 6 6 4 2 ......................................................................11 Bài 14: Nhập vào 1 số, xóa bỏ các chữ số chẵn. Kiểm tra số còn lại có bao nhiêu chữ số. Xuất kết quả dưới dạng đối xứng của phần còn lại. .............................................12 Bài 15: Nhập chuỗi gồm cả chữ và số. Xuất ra màn hình các số riêng và các chữ riêng. Hãy đếm số lần xuất hiện của mỗi chữ, mỗi số.................................................12 Bài 16: Nhập 1 xâu kí tự và bỏ đi tất cả các khoảng trống bên trái của nó..............13 Bài 17: Dùng hàm “copy”. Tách từ đầu tiên ra khỏi 1 xâu kí tự cho trước. ............14 Bài 18: Vị Giám đốc công ty XYZ cần gửi một văn bản quan trọng tới một đối tác của mình. Để bảo mật văn bản, ông quyết định mã hóa văn bản trước khi gửi. Văn bản là một xâu S các chữ cái la tinh in thường. Ông ta chia văn bản thành hai đoạn liên tiếp Sb và Se. Lần lượt viết hai xâu Sb và Se nhưng đều theo thứ tự ngược lại ông ta nhận được xâu mã hóa Q. Bức thư thứ nhất gửi cho đối tác có nội dung là Q. Để đối tác đọc được văn bản, ông ta gửi thêm một bức thư thứ hai trong đó chứa khóa để giải mã: độ dài k của xâu Sb...........................................................................14 Bài 19: Trong giờ học Lập trình về xử lý chuỗi. Thầy giáo có cho một bài tập như sau: Thầy sẽ đọc họ và tên của một bạn sinh viên bất kỳ trong lớp. Công việc của chúng ta là hãy viết một chương trình để tách Họ, Tên Lót (tên đệm), và Tên của bạn đó ra.........................................................................................................................15 Bài tập 20: Viết chương trình thực hiện phép cộng 2 số tự nhiên lớn (không quá 255 chữ số). .....................................................................................................................16 BÀI TẬP NÂNG CAO...........................................................................................................17 Đề bài số 1.......................................................................................................................17 Đề bài 2............................................................................................................................19
3. BẢN Bài tập 1: Nhập xâu kí tự bất kì a) Đếm số lần xuất hiện của 1 kí tự nào đó trong câu. b) Liệt kê các kí tự có mặt trong xâu cùng số lần xuất hiện của các kí tự đó. Bài giải: uses crt; var str:string[100]; chu:array[
1..
254] of integer; i:integer; ch:char; begin clrscr; for ch:=
1 to
254 do chu[ch]:=0; write(' Nhap chuoi = ');readln(str); for i:=1 to length(str) do (chu[upcase(str[i])]):=chu[upcase(str[i])] +1; writeLn('Cac ki tu trong xau la:'); for ch:=
1 to
254 do if chu[ch]>0 then writeln(ch, ': xuat hien ',chu[ch],' lan'); readln; end. Bài 2: Nhập 1 xâu kí tự. a) Xét xem trong xâu có K kí tự kề nhau mà như nhau hay không? b) Hãy xóa đi kí tự kề nhau mà như nhau, chỉ giữ lại một. Bài giải: uses crt; var ch:string[100]; i,k,d,d1,n:integer; (*****) function xoa:boolean; var i:integer; begin
4. length(ch)-1 do if ch[i]=ch[i+1] then begin delete(ch,i,1); xoa:=true; exit end; end; (*****) begin clrscr; write('Nhap chuoi :');readln(ch); write('Nhap ki tu K:');readln(k); n:=length(ch); d:=0;d1:=0; for i:=1 to n-1 do begin if ch[i]=ch[i+1] then inc(d1) else d1:=0; if d1+1>=k then inc(d); end; if d>0 then writeln('Co ',k,' ki tu nhu nhau') else writeln('Khong co ',k,' ki tu nhu nhau'); while xoa do; write('In lai xau sau khi xoa:'); writeln(ch); readln; end. Bài 3: Nhập 1 xâu kí tự. Kiểm tra tính đối xứng của xâu đó. Nếu xâu không đối xứng thì đảo xâu. Bài giải: uses crt; var str,s:string[100]; n,i:integer; (*****) procedure sx(var a,b:char); var tam:char;
5. j:=i+1 to n do if str[i]=str[j] then begin sx(str[j],str[n-i+1]); exit end; end; (*****) begin clrscr; write('Nhap xau:');readln(str); n:=length(str); s:=''; for i:=n downto 1 do s:=s+str[i]; if str=s then writeln('Chuoi doi xung:') else begin writeln('Chuoi ko doi xung, chuoi da dao doi xung:'); for i:=1 to n-1 do dao(n,i); end; writeln(str); readln; end. Bài 4: Cho 1 xâu kí tự. Tính xem trong số đó có bao nhiêu loại kí tự khác nhau ( không phân biệt in hoa hay in thường). Bài giải: uses crt; var s:string; i,j,dem:integer; t:boolean;
6. to length(s) do begin t:=false; for j:=1 to i-1 do if((s[j])=(s[i])) then t:=true; if not(t) then inc(dem); end; write('Co ',dem,' ki tu khac nhau.'); readln; end. Bài 5: Cho 1 xâu kí tự bất kì, tính: Số lượng các kí tự số, Số lượng các kí tự chữ cái. Bài giải: uses crt; const so: set of char=['0','1','2','3','4','5','6','7','8','9']; var st,b:string; a:array[1..100] of integer; i,j,l,n,dem,dem1,c:integer; (*****) procedure sx(var x,y:integer); var tam:integer; begin tam:=x; x:=y; y:=tam; end; (*****) begin clrscr; write('nhap xau:');readln(st); dem:=0; dem1:=0; for i:=1 to length(st) do begin if (st[i] in['0'..'9']) then inc(dem);
7. then inc(dem1); end; write('Co ',dem1,' chu cai.'); writeln; writeln('Co ',dem,' chu so.'); l:=length(st); i:=1; n:=0; repeat if (st[i] in so) then begin b:=''; repeat b:=b+st[i]; inc(i); until (not(st[i] in so)) or (i>l); inc(n); val(b,a[n],c); end; inc(i); until i>l; for i:=1 to n do write(a[i]:5); writeln; writeln('Sx tang:'); for i:=1 to n-1 do for j:=i to n do if a[j]