Bài Tập Xâu Cơ Bản Trong Pascal - Tài Liệu Text - 123doc

Tải bản đầy đủ (.pdf) (29 trang)
  1. Trang chủ
  2. >>
  3. Lớp 8
  4. >>
  5. Tin học
Bài tập xâu cơ bản trong 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 (641.31 KB, 29 trang )

KIỂU DỮ LIỆU CÓ CẤU TRÚC TRONG PASCALBÀI TẬP XÂUCƠ BẢN-NÂNG CAOGV: Phạm Thị Bích TườngEmail: THÀNH PHỐ HỒ CHÍ MINH - 20181MỤC LỤCBÀI TẬP CƠ BẢN .................................................................................................................... 3Bài tập 1: Nhập xâu kí tự bất kì ......................................................................................... 3a)Đếm số lần xuất hiện của 1 kí tự nào đó trong câu. ............................................... 3b)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ự đó. ...... 3Bài 2: Nhập 1 xâu kí tự. ....................................................................................................... 3a)Xét xem trong xâu có K kí tự kề nhau mà như nhau hay không? .................... 3b)Hãy xóa đi kí tự kề nhau mà như nhau, chỉ giữ lại một. .................................... 3Bà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 đốixứng thì đảo xâu. .............................................................................................................. 4Bà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). ......................................................................... 5Bà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............................................................................................................................................. 6Bà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. .................................................................... 7Bài 7: Nhập vào 1 xâu. Biến đổi thành chữ in hoa. ....................................................... 8Bài 8: Nhập vào 1 xâu. Biến đổi in thường. ................................................................... 9Bài 9: Nhập vào 1 chuỗi, in ra chuỗi ngược. .................................................................. 9Bà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ầntheo chiều dài của tên. .................................................................................................. 10Bà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......... 10Bài 12: Nhập vào 1 đoạn văn. Tính số câu................................................................... 11Bà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ủaphần còn lại. Vd:1 2 4 5 6 --> 2 4 6 6 4 2 ...................................................................... 11Bà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. ............................................. 12Bà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ố. ................................................ 12Bà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ó.............. 13Bài 17: Dùng hàm “copy”. Tách từ đầu tiên ra khỏi 1 xâu kí tự cho trước. ............ 14Bà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áccủ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ănbả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ạnliê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ứakhóa để giải mã: độ dài k của xâu Sb. .......................................................................... 14Bà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ủachú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ủabạn đó ra ......................................................................................................................... 15Bà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ố). ..................................................................................................................... 16BÀI TẬP NÂNG CAO ........................................................................................................... 17Đề bài số 1 ....................................................................................................................... 17Đề bài 2............................................................................................................................ 192BÀI TẬP CƠ BẢNBà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;beginclrscr;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 doif 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;begin3xoa:=false;for i:=1 to length(ch)-1 doif ch[i]=ch[i+1] thenbegindelete(ch,i,1);xoa:=true;exitend;end;(*****)beginclrscr;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 dobeginif 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;4begintam:=a;a:=b;b:=tam;end;procedure dao(n,i:integer);var j:integer;beginfor j:=i+1 to n doif str[i]=str[j] thenbeginsx(str[j],str[n-i+1]);exitend;end;(*****)beginclrscr;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:')elsebeginwriteln('Chuoi ko doi xung, chuoi da dao doi xung:');for i:=1 to n-1 dodao(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ácnhau ( 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;5beginclrscr;write('Nhap xau:');readln(s);dem:=0;for i:=1 to length(s) dobegint:=false;for j:=1 to i-1 doif((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;begintam:=x;x:=y;y:=tam;end;(*****)beginclrscr;write('nhap xau:');readln(st);dem:=0;dem1:=0;for i:=1 to length(st) dobeginif (st[i] in['0'..'9']) then inc(dem);6if (upcase(st[i]) in['A'..'Z']) then inc(dem1);end;write('Co ',dem1,' chu cai.');writeln;writeln('Co ',dem,' chu so.');l:=length(st); i:=1; n:=0;repeatif (st[i] in so) thenbeginb:='';repeatb:=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 dofor j:=i to n doif a[j]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;write('Sx tang:');writeln;for i:=1 to n-1 dofor j:=i to n doif a[j] length(hs[j]) then sx(hs[i],hs[j]);writeln('Sx theo do dai ten:');for i:=1 to n do writeln(hs[i]);readln;end.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à inhoa.Bài giải:uses crt;const chu=['a'..'z'];var hoten:string;i,k:integer;begin10clrscr;write('Nhap ho ten:');readln(hoten);k:=length(hoten);if hoten[1] in chu then hoten[1]:=upcase(hoten[1]);for i:=2 to k doif (hoten[i-1]=#32) and (hoten[i] in chu) thenhoten[i]:=upcase(hoten[i]);write('sau khi bien doi:',hoten);readln;end.Bài 12: Nhập vào 1 đoạn văn. Tính số câu.Bài giải:uses crt;var s:string;i,d:integer;beginclrscr;write('Nhap 1 doan:');readln(s);for i:=1 to length(s) doif s[i]='.' then inc(d);write('Doan tren co ',d,' cau.');readln;end.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 đốixứng của phần còn lại.Vd:1 2 4 5 6 --> 2 4 6 6 4 2Bài giải:uses crt;const so=['1','3','5','7','9'];var s:string;i:integer;beginclrscr;write('Nhap 1 day so:');readln(s);i:=1;while i0 ThenBeginstr(sodu,ch);st:=ch+st;End;Cong:=st;End;BeginWrite('Nhap so thu nhat: '); Readln(so1);Write('Nhap so thu hai: '); Readln(so2);kqua:=Cong(so1,so2);Writeln('Tong= ',kqua);Readln;EndBÀI TẬP NÂNG CAOĐề bài số 1Ngày nay, việc sử dụng bàn phím điện thoại di động để nhấn các số đã trởthành một việc rất quen thuộc với các bạn sinh viên. Ai cũng biết các phímsố trên điện thoại cũng là các phím dùng để nhấn các chữ cái:2: ABC, 3: DEF, 4: GHI, 5: JKL, 6: MNO, 7: PQRS, 8: TUV, 9: WXYZNam viết ra giấy một dãy ký tự và đố Bình xác định đó là dãy số nào theocách nhấn số trên điện thoại (chỉ xem xét sự tương ứng giữa số và ký tựchứ không xem xét phải nhấn bao nhiêu lần phím đó, ví dụ cả A, B, C đềulà một số 2).Bình rất nhanh chóng xác định được kết quả, không những thế Bình cònmuốn xác định nhanh xem số đó có phải là số dạng thuận nghịch haykhông. Một số là thuận nghịch nếu viết theo thứ tự ngược lại cũng là chínhnó. Hãy viết chương trình giúp Bình thực hiện công việc trên.17InputDòng đầu tiên chứa số n là số bộ test (không quá 1000).Mỗi bộ test viết trên một dòng một dãy ký tự gồm các chữ cái có thể là chữ hoahoặc chữ thường, dài không quá 20 ký tự, không có khoảng trống.OutputVới mỗi bộ test, in ra màn hình, trên một dòng, chữ “YES” nếu đó tương ứng làsố thuận nghịch, chữ “NO” nếu ngược lại.Chương trình tham khảoconst fi='';type data=longint;varf:text;s:string;i,test,j:data;function tinh(c:char):char;beginc:=upcase(c);case c of'A'..'C': exit('2');'D'..'F': exit('3');'G'..'I': exit('4');'J'..'L': exit('5');'M'..'O': exit('6');'P'..'S': exit('7');'T'..'V': exit('8');'W'..'Z': exit('9');end;end;function check:boolean;var i:data;st,sk:string;beginst:='';sk:='';for i:=1 to length(s) dobeginst:=tinh(s[i])+st;sk:=sk+tinh(s[i]);end;if st=sk then18writeln('YES')elsewriteln('NO');end;beginassign(f,fi); reset(f);readln(f,test);for i:=1 to test dobeginreadln(f,s);check;end;end.Đề bài 2Hệ điều hành XP cho phép điều khiển cùng lúc hai bàn phím. Hai anh emTuấn và Nam vừa được thưởng một máy tính mới nên rất muốn thử tínhnăng này của XP. Tuấn và Nam, mỗi người dùng một bàn phím và đồngthời gõ vào một từ đang nghĩ trong đầu tương ứng là S1 và S2. Do gõ đồngthời và tốc độ gõ khác nhau nên kết quả là trên màn hình hiện ra một chuỗiký tự S là kết hợp của các ký tự trong S1 và S2. Các ký tự này đan xennhau theo một trình tự nào đó khiến Tuấn và Nam không còn nhận ra kýtự nào do mình đã gõ.Yêu cầuHãy giúp Tuấn và Nam xác định những ký tự nào có thể là của mình theo nghĩanếu tách những ký tự đó ra và ghép lại theo đúng thứ tự thì ta nhận được đúngtừ mà Tuấn và Nam đã gõ.Dữ LiệuDữ liệu vào gồm 3 dòng, trong đó:Dòng đầu tiên chứa từ S1 do Tuấn đã gõ. Dòng thứ hai chứa từ S2 do Nam đãgõ.Dòng cuối cùng chứa chuỗi S. S1 và S2 chỉ chứa các chữ cái latin (a, A, b, B.. )và số lượng ký tự trong mỗi chuỗi không vượt quá 100.Kết QuảKết quả ghi ra chỉ có một dòng duy nhất chứa chuỗi ký tự có chiều dài bằngchiều dài chuỗi S, trong đó ký tự thứ I sẽ bằng ký tự ′1′ nếu ký tự tương ứngS[I] do Tuấn gõ và bằng ′2′ nếu S[I] do Nam gõ.19Trong trường hợp có nhiều hơn một kết quả thì in ra dãy có thứ tự từ điển bénhất.Ví DụInput:papamamampapamaaOutput:211122122. Hướng dẫn giải NKH spoj – Tách Từ– Xây dựng thủ tục đệ quy try(i,kt1,kt2) với ý nghĩa tìm kết quả kí tự thứ i củaxâu S khi chọn kí tự s1[kt1] hoặc s2[kt2] để ghép vào vị trí đóCode tham khảoconst fi='';nmax=200;type data=longint;varf:text;s1,s2,s3:string;n,m:data;tr:array[0..nmax+1] of data;procedure docfile;var i,j:data;beginassign(f,fi); reset(f);readln(f,s1); n:=length(s1);readln(f,s2); m:=length(s2);readln(f,s3);close(f);end;procedure try(i,kt1,kt2:data); // sinh ki tu thu ivar j:data;beginif i>m+n thenbeginfor j:=1 to m+n dowrite(tr[j]);halt;end20elsebeginif s3[i]=s1[kt1] thenbegintr[i]:=1;try(i+1,kt1+1,kt2);end;if s3[i]=s2[kt2] thenbegintr[i]:=2;try(i+1,kt1,kt2+1);end;end;end;begindocfile;try(1,1,1);end.Đề bài 3: NKH spojHệ điều hành XP cho phép điều khiển cùng lúc hai bàn phím. Hai anh emTuấn và Nam vừa được thưởng một máy tính mới nên rất muốn thử tínhnăng này của XP. Tuấn và Nam, mỗi người dùng một bàn phím và đồngthời gõ vào một từ đang nghĩ trong đầu tương ứng là S1 và S2. Do gõ đồngthời và tốc độ gõ khác nhau nên kết quả là trên màn hình hiện ra mộtchuỗi ký tự S là kết hợp của các ký tự trong S1 và S2. Các ký tự này đanxen nhau theo một trình tự nào đó khiến Tuấn và Nam không còn nhận raký tự nào do mình đã gõ.Yêu cầuHãy giúp Tuấn và Nam xác định những ký tự nào có thể là của mình theo nghĩanếu tách những ký tự đó ra và ghép lại theo đúng thứ tự thì ta nhận được đúngtừ mà Tuấn và Nam đã gõ.Dữ LiệuDữ liệu vào gồm 3 dòng, trong đó:Dòng đầu tiên chứa từ S1 do Tuấn đã gõ. Dòng thứ hai chứa từ S2 do Nam đãgõ.Dòng cuối cùng chứa chuỗi S. S1 và S2 chỉ chứa các chữ cái latin (a, A, b, B.. )và số lượng ký tự trong mỗi chuỗi không vượt quá 100.Kết Quả21Kết quả ghi ra chỉ có một dòng duy nhất chứa chuỗi ký tự có chiều dài bằngchiều dài chuỗi S, trong đó ký tự thứ I sẽ bằng ký tự ′1′ nếu ký tự tương ứngS[I] do Tuấn gõ và bằng ′2′ nếu S[I] do Nam gõ.Trong trường hợp có nhiều hơn một kết quả thì in ra dãy có thứ tự từ điển bénhất.Ví DụInput:papamamampapamaaOutput:211122122. Hướng dẫn giải NKH spoj – Tách Từ– Xây dựng thủ tục đệ quy try(i,kt1,kt2) với ý nghĩa tìm kết quả kí tự thứ i củaxâu S khi chọn kí tự s1[kt1] hoặc s2[kt2] để ghép vào vị trí i đó.Code tham khảoconst fi='';nmax=200;type data=longint;varf:text;s1,s2,s3:string;n,m:data;tr:array[0..nmax+1] of data;procedure docfile;var i,j:data;beginassign(f,fi); reset(f);readln(f,s1); n:=length(s1);readln(f,s2); m:=length(s2);readln(f,s3);close(f);end;procedure try(i,kt1,kt2:data); // sinh ki tu thu ivar j:data;beginif i>m+n thenbeginfor j:=1 to m+n do22write(tr[j]);halt;endelsebeginif s3[i]=s1[kt1] thenbegintr[i]:=1;try(i+1,kt1+1,kt2);end;if s3[i]=s2[kt2] thenbegintr[i]:=2;try(i+1,kt1,kt2+1);end;end;end;begindocfile;try(1,1,1);end.Đề bài 4: P156SUME spojMột chuỗi a được gọi là ước của chuỗi b nếu tồn tại một số nguyên dươngx sao cho khi ta viết x lần chuỗi a thì sẽ thu được chuỗi b. Ví dụ chuỗi“abab” có 2 ước là “ab” và “abab”.Bạn được cho 2 cho 2 chuỗi s1 và s2, hãy đếm xem chúng có tất cả baonhiêu ước chung?InputDòng đầu tiên là 1 chuỗi s1, dòng thứ 2 là chuỗi s2.Cả 2 chuỗi đều gồm các chữ cái thường, độ dài 2 chuỗi không quá 105.OutputIn ra một số nguyên là kết quả của bài toán.ExampleTest 1:Input:xyztxyztxyztOutput:123Test 2:Input:aaaaaOutput:1Hướng dẫn giải P156SUME spoj PTIT– Gọi n1, n2 là độ dài của 2 xâu s1, s2.– độ dài ước của xâu sẽ là [1..độ dài xâu], mà ở bài này ta cần xâu chung, nhưvậy ta chỉ cần xét các xâu có độ dài từ [1..min(n1,n2)]. và xâu có độ dài i cókhả năng là ước của xâu khi n1 mod i=0 và n2 mod i = 0.– Xét mỗi độ dài xâu ước, hãy kiểm tra xem xâu có độ dài i có phải là ước haykhông? và kiểm tra ước trên s1, s2 giống nhau không.– Đếm kết quả bài toán…const fi='';nmax=100000;type data=longint;varf:text;n1,n2:data;s1,s2:ansistring;procedure docfile;beginassign(f,fi); reset(f);readln(f,s1);readln(f,s2);n1:=length(s1);n2:=length(s2);close(f);end;function min(a,b:data):data;beginif a

Từ khóa » Viết Chương Trình đếm Số Ký Tự Trong Xâu Pascal