Bài tập xóa xâu s tại vị trí v pascal năm 2024

CÁC CÂU LỆNH TRONG PASCAL

Thư viện SYSTEM

o write() : in ra màn hình liền sau kí tự cuối. o writeln() : in xuống một hàng. o read() : đọc biến. o readln() : dừng chương trình để đọc biến.

Thư viện Uses CRT

o clrscr : xoá toàn bộ màn hình. o textcolor() : in chữ màu. o textcolor() : tô màu cho màn hình. o sound() : tạo âm thanh. o delay() : làm trể. o nosound : tắt âm thanh. o windows(x1,y1,x2,y2) : thay đổi cửa sổ màn hình. o highvideo : tăng độ sáng màn hình. o lowvideo : giảm độ sáng màn hình. o normvideo : màn hình trở lại chế độ sáng bình thường. o gotoxy(x,y) : đưa con trỏ đến vị trí x,y trên màn hình. o deline : xoá một dòng đang chứa con trỏ. o clreol : xoá các ký tự từ vị trí con trỏ đến cuối mà không di chuyển vị trí con trỏ. o insline : chèn thêm một dòng vào vị trí của con trỏ hiện hành. o exit : thoát khỏi chương trình. o textmode(co40) : tạo kiểu chữ lớn. o randomize : khởi tạo chế độ ngẫu nhiên. o move(var 1,var 2,n) : sao chép trong bộ nhớ một khối n byte từ biến Var 1 sang biến Var 2. o halt : Ngưng thực hiện chương trình và trở về hệ điều hành. o Abs(n) : Giá trị tuyệt đối. o Arctan(x) : cho kết quả là hàm Arctan(x). o Cos(x) : cho kết quả là cos(x). o Exp(x) : hàm số mủ cơ số tự nhiên ex. o Frac(x) : cho kết quả là phần thập phan của số x. o int(x) : cho kết quả là phần nguyên của số thập phân x. o ln(x) : Hàm loga cơ số tự nhiên. o sin(x) : cho kết quả là sin(x), với x tính bằng Radian. o Sqr(x) : bình phương của số x. o Sqrt(x) : cho kết quả là căn bậc hai của x. o pred(x) : cho kết quả là số nguyên đứng trước số nguyên x. o Suuc(x) : chô kết quả là số nguyên đứng sau số nguyên x. o odd(x) : cho kết quả là true nếu x số lẻ, ngược lại là false. o chr(x) : trả về một kí tự có vị trí là x trong bảng mã ASCII. o Ord(x) : trả về một số thứ tự của kí tự x. o round(n) : Làm tròn số thực n. o Random(n) : chó một số ngẫu nhiên trong phạm vi n. o upcase(n) : đổi kí tự chữ thường sang chữ hoa. o assign(f,) : tạo file. o rewrite(f) : khởi tạo. o append(f) : chèn thêm dữ liệu cho file. o close(f) : tắt file. o erase(f) : xóa. o rename() : đổi tên cho file. o length(s) : cho kết quả là chiều dài của xâu. o copy(s,a,b) : copy xau. o insert(,s,a) : chèn thêm cho xâu. o delete(s,a,b) : xoá xâu. ...

Thư viện GRAPH

o initgraph(a,b,) : khởi tạo chế độ đồ hoạ. o closegraph; : tắt chế độ đồ hoạ. o setcolor(x) : chọn màu. o outtext() : in ra màn hình tại góc trên bên trái. o outtextxy(x,y,); : in ra màn hình tại toạ độ màn hình. o rectangle(x1,y1,x2,y2): vẽ hình chữ nhật. o line(x1,y1,x2,y2) : vẽ đoạn thẳng. o moveto(x,y) : lấy điểm xuất phát để vẽ đoạn thẳng. o lineto(x,y) : lấy điểm kết thúc để vẽ doạn thảng. o circle(x,y,n) : vẽ đường tròn. o ellipse(x,y,o1,o2,a,b): vẽ hình elip. o floodfill(a,b,n) : tô màu cho hình. o getfillpattern(x) : tạo biến để tô. o setfillpattern(x,a) : chọn màu để tô. o cleardevice; : xoá toàn bộ màn hình. o settextstyle(n,a,b) : chọn kiểu chữ. o bar(a,b,c,d) : vẽ thanh. o bar3d(a,b,c,d,n,h) : vẽ hộp. o arc(a,b,c,d,e) : vẽ cung tròn. o setbkcolor(n) : tô mà nền. o putpixel(x,y,n) : vẽ điểm. o setfillstyle(a,b) : tạo nền cho màn hình. o setlinestyle(a,b,c) : chọn kiểu đoạn thẳng. o getmem(p,1) : chuyển biến để nhớ dữ liệu. o getimage(x1,y1,x2,y2,p): nhớ các hình vẽ trên vùng cửa sổ xác định. o putimage(x,y,p,n) : in ra màn hình các hình vừa nhớ. ...

Thư viện Unit DOS

o getdate(y,m,d,t) : lấy các dữ liệu về ngày trong bộ nhớ. o gettime(h,m,s,hund) : lấy các dữ liệu về giờ trong bộ nhớ. o findnext(x) : tìm kiếm tiếp. o Findfirst(,$20,dirinfo) : tìm kiếm. ...

Bài tập 5.11. Cho tệp LINE.TXT, mỗi dòng chứa một xâu không quá 255 kí tự. Hãy lập trình tạo tệp LINE.DAT chứa các xâu ở tệp LINE.TXT, nhưng mỗi xâu đã được chuẩn hóa theo quy tắc sau:

Xóa tất cả các dấu cách đầu và cuối xâu;

Nhiều dấu cách liên tiép (nếu có) được thay bằng một dấu cách duy nhất.

include

include

include

using namespace std; ifstream fi("LINE.TXT"); ofstream fo("LINE.DAT"); int main() { string s; while (getline(fi,s)) { while (s[0]==' ') s.erase(0,1); while (s[s.length()-1]==' ') s.erase(s.length()-1,1); while (s.find("  ")!=string::npos) s.erase(s.find("  "),1); fo<

Bài tập 4.41. Xâu không chứa các kí tự phân cách ‘.’ (dấu chấm), ‘,’ (dấu phẩy),’ ‘ (dấu cách) được gọi là một từ. Câu là một xâu bao gồm một hoặc nhiều từ, nếu xâu có nhiều từ thì các từ được phân cách với nhau bởi một hoặc một số kí tự phân cách.

Ví dụ, theo định nghĩa trên ta có:

“Informatics”- câu có một từ;

“Olympiad in Informatics” – câu có 3 từ;

“Co anh ban xa nha, co co ban nho cha.” – câu có 10 từ.

Viết chương trình đếm số lượng từ trong câu

Cách 1

include

include

using namespace std; int main() { string s,s1; long d=0,n; getline(cin,s); n=s.length(); bool z=false; for (int i=0;i

Cách 2

include

include

using namespace std; int main() { string s,s1; long d=0,n; getline(cin,s); s=s+" "; s1=""; n=s.length(); for (int i=0;i

Hãy lập trình: Nhập xâu bất kì từ bàn phím.

Chuẩn hóa xâu theo quy tắc sau:

  • Xóa các dấu cách ở đầu xâu nếu có;
  • Xóa các dấu cách ở cuối xâu nếu có;
  • Thay dãy nhiều dấu cách liên tiếp bằng một dấu cách.

Đưa kết quả đã chuẩn hóa ra màn hình.

include

include

using namespace std; int main() {

string s;  
getline(cin,s);  
while(s[0]==' ')s.erase(0,1);  
while(s[s.size()-1]==' ')s.erase(s.size()-1,1);  
while(s.find("  ")!=string::npos)  
    s.erase(s.find("  "),1);
cout<
} Một chuỗi S gọi là chuỗi đối xứng liên tiếp nếu s[i]=s[length(s)+1-i] với mọi i thỏa mãn . Cho một chuỗi S dài không quá 255 kí tự. Hãy cho biết độ dài chuỗi con đối xứng liên tiếp dài nhất trong chuỗi S.

Dữ liệu vào: File văn bản PALIND. INP gồm một dòng ghi chuỗi kí tự S.

Dữ liệu ra: File PALIND.OUT gồm một số nguyên chỉ chiều dài lớn nhất của chuỗi con đối xứng dài nhất trong chuỗi S.

program palind; const

  fi='palind.inp';  
  fo='palind.out';  
var f:text;
s:string;  
max:integer;  
procedure nhap; begin
    assign(f,fi);  
    reset(f);  
    read(f,s);  
end; procedure xuly; var i,j,lj,k:integer;
ok:boolean;  
begin max:=1; for i:=1 to length(s) do
    begin  
    for j:=length(s) downto i+1 do  
            if s[i]=s[j] then  
            begin  
              ok:=true;  
              for k:=0 to (j-i) div 2 do  
                    if s[i+k]<>s[j-k] then  
                    begin  
                            ok:=false;  
                            break  
                    end;  
              if ok then  
                    if j-i+1>max then max:=j-i+1;  
            end;  
    end;  
end; procedure xuat; begin
    assign(f,fo);  
    rewrite(f);  
    write(f,max);  
    close(f);  
end; BEGIN nhap; xuly; xuat; END. Bài toán 1 sách giáo khoa Tin học lớp 11 trang 73. Nhập vào từ bàn phím một xâu. Kiểm tra xâu đó có phải là xâu đối xứng hay không. Xâu đối xứng có tính chất: đọc nó từ phải sang trái cũng thu được kết quả giống như đọc từ trái sang phải (còn được gọi là xâu palindrome) Bài toán này học sinh có hai cách tiếp cận: Cách tiếp cận thứ nhất là dựa trên tư duy phản chứng như sau: “Giả sử như lúc đầu xâu đó là xâu đối xứng, nếu có một tính chất nào đó khiến xâu đó không là xấu đối xứng, thì giả sử sẽ sai và ta kết thúc việc kiểm tra. Còn không thì xâu đó vẫn là xâu đối xứng” Cách 1:

program xaudoixung; uses crt; var s:string;

kiemtra:boolean;  
i:byte;  
begin
 write('Nhap vao xau s=');  
 readln(s);  
 kiemtra:=true;  
 for i:=1 to trunc(length(s)/2) do  
     if s[i]<>s[(length(s)+1)-i] then  
     begin  
     kiemtra:=false;  
     break;  
     end;  
 if kiemtra=true then write('Xau doi xung')  
    else write('xau khong doi xung');
 readln;  
end. Cách tiếp cận thứ hai dựa trên việc phát triển thuật toán đếm số lượng các phần tử trong một mảng hoặc một xâu, và dựa vào tính chất của xâu đối xứng. Nếu xâu đó là xâu đối xứng thì với i từ 1 tới [length(s)/2], ta luôn có tính chất s[i]=s[(length(s)+1-i]. Vậy ta tìm cách đếm xem từ 1 tới [length(s)/2] có bao nhiêu lần tính chất s[i]=s[(length(s)+1-i] này đúng, Nếu có [length(s)/2] lần tính chất này đúng thì xâu đó là xâu đối xứng, còn nếu có <[length(s)/2] lần tính chất này đúng thì xâu không đối xứng Cách 2:

program xaudoixung; uses crt; var s:string;

kiemtra:boolean;  
i,m:byte;  
begin
 clrscr;  
 write('Nhap vao xau s=');  
 readln(s);  
 m:=trunc(length(s)/2);  
 i:=1;  
 while (i<=m) and(s[i]=s[length(s)+1-i]) do  
       i:=i+1;  
 if (m =i-1) then write('Xau doi xung')  
    else write('xau khong doi xung');  
 readln;  
end. Bài 2. Trang 73 Sách giáo khoa Tin học lớp 11

Viết chương trình nhập vào từ bán phím một xâu kí tự S và thông báo ra màn hình số lần xuất hiện của mỗi chữ cái Tiếng Anh trong S (không phân biệt chữ hoa hay thường )

uses crt; var s:string[30];

ch,x:char;  
i:byte;  
dem:array['A'..'Z']of byte;  
BEGIN
 clrscr;  
 write('Nhap vao xau s=');  
 readln(s);  
 for ch:='A' to 'Z' do dem[ch]:=0;  
 for i:=1 to length(s) do  
     begin  
     x:=upcase(s[i]);  
     if (x>='A') and (x<='Z')  
        then  
        dem[x]:=dem[x]+1;  
     end;  
 for ch:='A' to 'Z' do  
     if dem[ch]<>0 then  
             writeln('So luong ki tu',ch,'la',dem[ch]);  
 readln;  
END. Những sai lầm của học sinh không phải vì chúng dốt. Đó là một thực tế. Mà chúng đang nghĩ theo một con đường riêng chúng để có thể dẫn tới kết quả. Người giáo viên dựa vào đó để đánh giá và hiểu những điều sau: “Nguyên nhân sai lầm của học sinh, xuất phát từ đâu, từ phía học sinh hay từ phía giáo viên”. Từ đó giáo viên có cách điều chỉnh thêm trong lời nói, hành động, để tránh lặp lại những sai lầm đó. Chú ý, không bao giờ được phép coi thường những sai lầm của học sinh, mà hãy chỉ ra sai lầm để học sinh hiểu, và có định hướng đúng đắn. Bài toán 3 (Trang 73 sách giáo khoa Tin học lớp 11): Nhập vào từ bàn phím một xâu. Thay thế tất cả các cụm kí tự ‘anh’ bằng cụm kí tự ’em’ Tư duy của học sinh: Duyệt các kí tự của xâu, cho đến khi gặp kí tự ‘anh’ thì thay thế bằng kí tự ’em’

var s:string;

i:byte;  
begin
 write('Nhap vao xau s=');  
 readln(s);  
 for i:=1 to length(s) do  
     if (s[i]='a') and (s[i+1]='n')and(s[i+2]='h') then  
     begin  
     s[i]:='e';  
     s[i+1]:='m';  
     end;  
 write('Xau tiep theo la',s);  
     readln;  
end. Phân tích sai lầm của học sinh: Cách này không đúng vì kí tự ‘h’ đã không bị loại bỏ, do vậy mặc dù từ ‘anh’ đã được thay thế thành từ ’em’ nhưng chữ h đã không bị xóa đi trong xâu. Mà theo yêu cầu của đề bài là phải xóa cả chữ ‘anh’ đi. Tuy nhiên đây là tư duy của học sinh khi mới học về xâu, đó là tư duy hết sức bình thường, hay có thể dành lời khen tặng cho những học sinh nào có thể nghĩ ra cách này. Cách làm đúng Giáo viên thuyết trình: Trước hết cần tìm vị trí đầu tiên của cụm kí tự ‘anh’ trong xâu s, nếu không có thì vị trí sẽ trả về là 0. Nếu vị trí đó khác 0 thì ta tiến hành xóa xấu ‘anh’ đi, thay thế bằng xâu ’em’, rồi tiếp tục tìm xem có còn cụm kí tự nào trong xâu s không. Quá trình này được lặp đi lặp lại cho đến khi vị trí của cụm kí tự ‘anh’ trong xâu s bằng 0. Khi đó ta đưa ra xâu s sau khi đã được thay thế hết !!

program bai3; uses crt; var s:string;

i,vitri:byte;  
begin
 write('Nhap vao xau s=');  
 readln(s);  
 vitri:=pos('anh',s);  
 while vitri<>0 do  
       begin  
       delete(s,vitri,3);  
       insert('em',s,vitri);  
       vitri:=pos('anh',s);  
       end;  
 write('Xau da sua la',s);  
 readln;  
end. Tuy nhiên, học sinh lại đặt câu tiếp câu hỏi ngược lại: “Vậy liệu em có thể thêm s[i+2]=” là một kí tự rỗng vào cách của em được không? Câu hỏi này quả thực rất là thông minh. Nhưng khi lập trình Pascal lại không chấp nhận một kí tự là rỗng. Do vậy cách này không được chấp nhận: