Hiển thị các bài đăng có nhãn Pascal cơ bản. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Pascal cơ bản. Hiển thị tất cả bài đăng

Thứ Năm, 24 tháng 5, 2012

Kiểm tra số chính phương trong mảng 1 chiều

Trước hết, chúng ta sẽ tìm hiểu khái niệm về số chính phương. Số chính phương là gì? Số chính phương là một số mà tự nó là căn bậc hai của một số tự nhiên khác, hay nói rõ hơn thì số chính phương là bình phương của một số tự nhiên.
Ví dụ: 289 là một số chính phương vì 289 = 17 bình phương.

Thuật toán Pascal dưới đây sẽ giúp tìm số chính phương trong mảng 1 chiều.

  uses crt;
  type ArrInt = array[1..250] of integer;  
  Var n,i,x : integer;
         a: ArrInt;
  BEGIN
   clrscr;
   write('Nhap so phan tu: ');
   readln(n);
   for i:=1 to n do
   begin
     write('Phan tu thu ',i,'= ');
     readln(a[i]);
   end;
   writeln('Cac so chinh phuong co trong mang:');
   for i:=1 to n do
   begin
    x:=trunc(sqrt(a[i]));
     if sqr(x)=a[i] then
       write(a[i]:4);
   end;
   readln;
  END.  

Trong đó lệnh hàm sqrt để lấy căn và hàm trunc để lấy phần nguyên.

Thứ Bảy, 12 tháng 5, 2012

Trắc nghiệm nhanh Pascal (tin học lớp 8)

1. Lệnh lặp For, mỗi lần lặp giá trị của biến đếm thay đổi như thế nào?
a) tăng 1                                   b) tăng 2                                   c) tăng 3                       d) tăng 4

2. Cấu trúc của câu lệnh lặp For:
a) For i:= 1 to n do Câu lệnh;                                     
b) For biến đếm=1 to do Câu lệnh;
c) For biến đếm:=giá trị đầu to giá trị cuối do Câu lệnh;
d) For biến đếm:=giá trị đầu to n do Câu lệnh;

3. Số lần lặp trong câu lệnh sau là: For i:=5 to 27 do ….
a) 20 lần                                   21 lần                                       c) 22 lần                       d) 23 lần

4. Đoạn lệnh sau, mỗi lần lặp giá trị của biến i trong câu lệnh sau thay đổi như thế nào?
       While i<=10 do i:=i+3;
a) tăng 1                                   b) tăng 2                                   c) tăng 3                       d) tăng 4

5. Cấu trúc của câu lệnh lặp While:
a) While i<=n do Câu lệnh;                            
b) While biến đếm do Câu lệnh;
c) While điều kiện do Câu lệnh;          
d) While biến đếm:=giá trị đầu to giá trị cuối do Câu lệnh;

6. Kết quả in ra của đoạn lệnh sau khi thực hiện là:
i:=1; S:=5;
While i<=5 do
Begin
            S:=S+i; i:=i+2;
End;
a) S=13
b) S=14
c) S=15
d) S=16

7. Kết quả in ra của đoạn lệnh sau khi thực hiện là:
For i:=1 to 10 do
     If i mod 2=1 then    
            Write (‘i=’,i, ’ ’);
a) i=1 2 3 4 5 6 7 8 9 10
b) i=0 2 4 6 8 10
c) i=0 1 3 5 7 9
d) i=1 3 5 7 9

8. Đoạn lệnh sau đúng, sai như thế nào?
While n<=0 do;
            Write(‘Nhap lai n:’);
Readn (n);
a) Đúng
b) Sai, sau do không có ;
c) Sai, thiếu Begin end.
d) Câu b và c đúng

Sưu tầm

Xử lý tệp văn bản

Sử dụng ngôn ngữ lập trình pascal viết chương trình xử lý tệp văn bản với các yêu cầu sau:
* Đọc tệp văn bản và in ra màn hình.
* Sữa Tệp văn bản theo quy tắc
* Bỏ các dấu cách không cần thiết
* Trước các dấu . , : ; ! ? không có dấu cách
* Sau các dấu . , : ; ! ? phải có 1 dấu cách
* Đầu mổi câu (sau dấu . ! ) phải viết hoa
* Chương trình có dao diện đẹp và dể sử dụng.

type Set1 = set of char;

procedure ChuanHoa(var s:string);
begin
    while s[1]=' ' do delete(s,1,1);
    while s[length(s)]=' ' do delete(s,length(s),1);
    while pos('  ',s)<>0 do delete(s,pos('  ',s),1);
end;

procedure ChuanHoaLan2(var s:string);
var sSplit,sEnd:Set1;
    i:integer;
begin
     sSplit:=[',', '.', ':', ';', '!', '?'];
     sEnd:=['.', '!', '?'];

     s[1]:=upcase(s[1]);
     for i:=2 to length(s)-1 do
     begin
          if s[i] in sSplit then
          begin
             if s[i-1]=' ' then
             begin
                  delete(s,i-1,1);
                  dec(i);
             end;
             if s[i+1]<>' ' then
                insert(' ',s,i+1);
          end;
          if s[i] in sEnd then
             s[i+2]:=upcase(s[i+2]);
     end;
end;


VAR str:string;
    f,g:text;
BEGIN
     assign(f,'C:\input.txt');{Doc file}
     reset(f);
     while not eof(f) do
           read(f,str);
     close(f);
     ChuanHoa(str);
     ChuanHoaLan2(str);
     writeln(str);
     assign(g,'C:\input.txt');{Sua lai file}
     rewrite(g);
     write(g,str);
     close(g);
     readln;
END.

Thứ Ba, 8 tháng 5, 2012

Phương pháp học, giải bài tập Pascal trong tin học lớp 11

Pascal là ngôn ngữ lập trình bắt buộc, được đưa vào trong chương trình phổ thông và đại học. Tuy nhiên, đối với nhiều người đây vẫn là một môn học khó. Tài liệu: "Phương pháp giải bài tập tin học lớp 11" dưới đây sẽ phần nào giúp các bạn hiểu hơn về Pascal để hoàn thành tốt chương trình học trên lớp cũng như bồi dưỡng, nâng cao khả năng lập trình.

Xem online và download tại: Google Docs hoặc TaiLieu.vn.

Thứ Bảy, 5 tháng 5, 2012

Cho biết tháng đó có nhiêu ngày

Đề: Nhập vào 1 năm, 1 tháng và cho biết tháng đó có bao nhiêu ngày?

uses crt;
var a,b:integer;
     bo:boolean;
begin
write('Nhap nam :');readln(b);
if (b mod 100=0) then bo:=(b mod 400)=0 else
                      bo:=(b mod 4   )=0;
if bo then
             begin
             repeat
             clrscr;
             write('Nhap thang :');readln(a);
             until (a>0) and (a<13);
             case a of
             2:write('Co 29 ngay');
             1,3,5,7,8,10,12:write('Co 31 ngay');
             4,6,9,11:write('Co 30 ngay');
             end;
             end;
if (not bo) then
             begin
             repeat
             clrscr;
             write('Nhap thang :');readln(a);
             until (a>0) and (a<13);
             case a of
             2:write('Co 28 ngay');
             1,3,5,7,8,10,12:write('Co 31 ngay');
             4,6,9,11:write('Co 30 ngay');
             end;
             end;
readln;
end. 

Thứ Hai, 30 tháng 4, 2012

[Học Pascal] Chương trình con

Chương trình con ( CTC ) là một chương trình độc lập, xử lý một công việc nhất định nào đó trong chương trình chính, nó có chỉ có thể thực hiện được công việc đã được lập trình khi ở chương trình chính có lời gọi đến nó.

Trong khi lập trình giải 1 bài toán, đôi khi chúng ta gặp phải những đoạn chương trình lặp đi lặp lại nhiều lần ở những phần xử lý khác nhau, để cho tiện lợi và không mất công, chúng ta định nghĩa 1 CTC với công việc được lập trình sẵn, khi cần thiết chỉ việc gọi chương trình con ra để làm việc mà không cần phải lập trình lại phần đã làm ở trên. Việc sử dụng CTC vô cùng tiện lợi và đảm bảo tính chặt chẽ của chương trình, thậm chí nhiều khi nếu không sử dụng CTC thì bài toán sẽ trở nên vô cùng rắc rối, và việc gỡ lỗi trong chương trình trở nên rất nan giải.

Pascal cung cấp cho chúng ta 2 loại CTC là Procedure ( Thủ tục ) và Function ( Hàm ). Đây là hai chương trình con sẽ theo các bạn trong suốt quá trình học. Đây chính là cơ sở để khi các bạn học lên các ngôn ngữ lập trình 32 bit, các bạn sẽ không bị bỡ ngỡ khi lập trình với lớp ( Class ) và Thư viện ( Library ). Hay nói một cách ngắn gọn, đây chính là phần quan trọng nhất trong kỹ thuật lập trình Pascal. Phần này tương đối phức tạp, nên bạn cố gắng tập trung để phân biệt, khi nào nên dùng Thủ thục, khi nào nên dùng Hàm, và các khái niệm liên quan khi tham chiếu các thành phần của các CTC.

Vị trí khai báo và định nghĩa CTC: CTC được khai báo và định nghĩa sau từ khoá VAR của Chương trình chính. Khai báo CTC có dạng sau:

PROCEDURE Tên thủ tục ( Khai báo các tham số hình thức, nếu cần );
Var ' Khai báo biến trong CTC nếu cần thiết
Begin
End; ' Kết thúc CTC bằng END;
FUNCTION Tên hàm ( Khai báo các tham số hình thức, nếu cần ): Kiểu dữ liệu trả về của Hàm;
Var ' Khai báo biến trong CTC nếu cần thiết
Begin
End; ' Kết thúc CTC bằng END;

CTC có cáu trúc giống hệt một chương trình chính, bạn có thể khai báo đầy đủ từ nhãn, hằng, biến, thậm chí bạn có thể định nghĩa một CTC khác trong CTC hiện hành.

Các tham số của CTC chính là các dữ liệu cần thiết nhập vào để xử lý các phép toán trong CTC sử dụng. Các tham số này được gọi là tham số hình thức, bởi nó chỉ mang danh nghĩa là các đối số của chương trình con, chứ về mặt bản chất dữ liệu nó lại mang thông tin của các biến trong chương trình chính. Các tham số này có 2 loại: Tham biến và Tham trị. Các CTC có thể có nhiều loại Tham số hình thức khác nhau về kiểu tham số hay về kiểu dũ liệu của tham số.

Tham biến: Là loại tham số hình thức mà giá trị của nó có thể thay đổi được trong các phép xử lý tính toán của CTC. Có thể dữ liệu nạp vào CTC là A, nhưng sau khi ra khỏi CTC ( kết quả sau khi thực hiện CTC ) nó lại mang kết quả B. Tham biến là tham số hình thức được khai báo ở CTC và bắt buộc phải được khai báo với từ kháo khai báo VAR. Các CTC có thể có nhiều loại tham biến, và cách khai báo các tham biến giống hệt như bạn khai báo biến trong chương trình chính.

Tham trị: Là loại tham số hình thức mà giá trị của nó không thể thay đổi được trong các phép xử lý tính toán của CTC. Dữ liệu nạp vào CTC là A, nhưng sau khi ra khỏi CTC ( kết quả sau khi thực hiện CTC ) nó vẫn phải là A. Chính vì vậy, trong CTC bạn không thể nào thực hiện 1 phép toán làm thay đổi giá trị của tham trị, nếu có máy sẽ báo lỗi.Tham trị là tham số hình thức được khai báo ở CTC và không bắt buộc phải được khai báo với từ kháo khai báo VAR. Các CTC có thể có nhiều loại tham trị, và cách khai báo các tham trị giống hệt như bạn khai báo biến trong chương trình chính.

A) Chương trình con dạng Thủ tục

CTC dạng Thủ tục được sử dụng khi các bạn muốn có một thủ tục nhập dữ liệu hoặc các phép tính toán trả về kiểu dữ liệu thường là " không định kiểu ". Hay nói chính xác hơn đó là một chương trình hoàn chỉnh trả về kết quả nhất định mà người lập trình mong muốn.

Ví dụ: Bạn viết một thủ tục nhập dữ liệu cho chương trình chính tính tổng các số nhỏ hơn số vừa nhập từ bàn phím.

Procedure Nhap ( n: byte);
begin
Write ( ' Nhap so N: = '); Readln ( N );
Writeln;
End;

Hoặc bạn cũng có thể viết luôn thủ tục tính ra kết quả mong muốn luôn bằng Thủ tục sau:

Procedure Nhap ( n: byte);
Var i , Tong : Byte;
begin
Write ( ' Nhap so N: = '); Readln ( N );
Writeln;
For i : = 1 to N do
Tong : = Tong + i ;
Writeln ( ' Tong cac so la : = ' , Tong );
Readln;
End;

B) Chương trình con dạng Hàm

CTC dạng Hàm được sử dụng khi các bạn muốn có một thủ tục nhập dữ liệu hoặc các phép tính toán trả về kiểu dữ liệu thường là xác định. Hay nói chính xác hơn đó là một chương trình hoàn chỉnh trả về kết quả với kiểu dữ liệu nhất định mà Pascal đã định nghĩa hoặc Pascal có thể " hiểu " được ( Đối với kiểu dữ liệu do người lập trình tự định nghĩa )

Ví dụ: Cũng ví dụ trên bạn có thể viết ở dạng Hàm như sau

Function Tong ( n : byte ) : Byte;
Var i , Trung_gian : Byte;
Begin
Write ( ' Nhap so N : = ');Readln ( N );
Writeln;
For i : = 1 to N do
Trung_gian : = Trung_gian + i ;
Tong : = Trung_gian ;
End;

Ở CTC dạng hàm bạn nên chú ý. Hàm chir được hoàn tất khi Tên hàm được gán cho 1 giá trị cuối cùng sau khi thực hiện các phép tính toán. Và trong chương trình chính khi có lời gọi Hàm thì cũng phải có một phép toán gán giá trị để nhận được kết quả của Hàm. VD: Tring ví dụ trên khi vào chương trình chính nếu ta muốn in ra giá trị của Tong hay dùng Tong là một phép tính toán khác thì ta thực hiện phép gán sau khi goi chương trình con là A : = Tong ( so ) (Với so là tham số thực sự cỉa bài toán - tức là biến của chương trình chính ).

C) Một số chú ý khi dùng CTC

Khi sử dụng CTC bạn cần chú ý một số điểu sau đây:
1) Nên sử dụng CTC dạng Hàm hay Thủ tục
2) Tránh việc khai báo các tham số hình thức bừa bãi và không nhất quán
3) Phân biệt rõ ràng 2 khái niêm Tham biến và Tham trị. Để bạn hiểu rõ hơn, bạn hãy chạy đoạn mã và xem kết quả của ví dụ sau.

Uses crt;
Var
a , b : integer;
{----------------------}
Procedure VD ( x : integer; var y: integer );
Begin
inc ( x );
inc ( y );
writeln ( x : 4 , y : 4 );
end;
{---------------------}
Begin
a : = 1 ;
b : = 10 ;
VD ( a , b );
writeln ( a : 4 , b : 4 );
readln;
end.

D) Bài tập luyện tập.

* Bạn hãy viết tất cả các chương trình bạn đã làm ở dạng CTC
** Lập trình ( có sủ dụng CTC ) để:
- Tính Giai thừa 1 số được nhập từ bàn phím
- Tìm USCLN của 2 số nhập từ bàn phím
- Tìm các số FIbonaci nhỏ hơn 1 số cho trước từ bàn phím
- Tìm các số chính phương nhỏ hơn một số nguyên cho trước. 

Code Pascal sưu tầm

Thứ Ba, 24 tháng 4, 2012

Thuật toán tìm kiếm 1 số trong mảng 2 chiều (Pascal)


Viết chương trình Pascal tìm một số (phần tử) trong mảng hai chiều. In tổng số lần và vị trí xuất hiện của các phần tử ra màn hình.


Program Tim_so;
   Var
      a:Array[1..4,1..6] Of Integer;
      i,j,so,solan:Integer;
Begin
   Writeln('TIM MOT SO TRONG MANG');
   Writeln('---------------------');
   Writeln;
   For i:=1 To 4 Do
      For j:=1 to 6 Do
         Begin
            Write('-Phan tu A[',i,',',j,']= ');
            Readln(a[i,j]);
         End;
   Writeln;
   Write('-So muon tim: ');
   Readln(so);
   solan:=0;
   For i:=1 To 4 Do
      For j:=1 To 6 Do
         If so=a[i,j] Then
            Begin
               solan:=solan+1;
               Writeln('+Lan: ',solan,' tai hang: ',i,' cot: ',j);
            End;
   Writeln;
   Writeln('+Tong so lan xuat hien la: ',solan);
   For i:=1 To 4 Do
      Begin
         For j:=1 To 6 Do
            Write(a[i,j]:8);
            Writeln;
      End;
   Readln
End.

In bảng mã ASCII của các ký tự chữ cái trong pascal

Viết chương trình Pascal in mã ASCII của các ký tự. Khá đơn giản chỉ với 1 lệnh for.

Program Mang_Ky_Tu;
   Var
      a:Array[Char] Of Integer;
      Ch:Char;
Begin
   Writeln('IN MA ASCII CUA CAC KY TU');
   Writeln('------------------------');
   For Ch:='A' To 'Z' Do
      Begin
         a[Ch]:=Ord(Ch);
         Writeln('-Ky tu: ',Ch,' ma ASCII = ',a[ch]);
      End;
   Writeln;
   Writeln('Bam phim <Enter> de ket thuc');
   Readln
End.

Thứ Năm, 19 tháng 4, 2012

Xóa 1 phần tử trong mảng 1 chiều

Viết CT nhập từ bàn phím mảng 1 chiều và xóa 1 phần tử của mảng có n phần tử.

var
  n,i,q,k,p:integer;
  a,b:array [1..1000] of integer;
begin
  write('n= ');readln(n);
  for i:=1 to n do
    begin
      write('a[',i,']= ');
      readln(a[i]);
    end;
  write('Xoa pt co vi tri la: ');readln(p);
  q:=0;
  for i:=1 to n do
    if q<>p then
      begin
        inc(q);
        b[q]:=a[i];
      end;
  writeln('Mang sau khi xoa la: ');
  for i:=1 to q do
    write(b[i],' ');
  readln
end.

Nhập thêm 1 phần tử vào mảng 1 chiều

Viết chương trình nhập vào một mảng A gồm N số nguyên và nhập thêm vào một số nguyên X.

var
  n,i,q,k,p,:integer;
  a,b:array [1..1000] of integer;
begin
  write('n= ');readln(n);
  for i:=1 to n do
    begin
      write('a[',i,']= ');
      readln(a[i]);
    end;
  write('-Chen pt va vi tri cua pt do: ');readln(k,p);
  q:=0;
  for i:=1 to n do
    begin
    inc(q);
    if q=p then begin
      b[q]:=k;
      inc(q);
    end;
    b[q]:=a[i];
  end;
  writeln('-Mang sau khi chen la: ');
  for i:=1 to q do
    write(b[i],' ');
  readln
end.

Tìm các số mà tổng bình phương bằng chính nó

Đề bài: Cho dãy a1, a2, a3....a100 là dãy số nguyên gồm 4 chữ số có nghĩa. Đưa ra màn hình tất cả các số thỏa mãn điều kiện tổng bình phương các chữ số của nó bằng chính nó.


USES crt;
VAR a:ARRAY[1..100] OF INTEGER;
    n,m,i,j,h,k,l:INTEGER;
BEGIN    
    clrscr;
    FOR i:=1 TO 100 DO
    BEGIN
        a[i]:=random(8999)+1000;
    END;  
    writeln('Cac so ma tong binh phuong cac chu so bang no la:');
    FOR i:=1 TO 100 DO
    BEGIN
        m:=a[i] MOD 10;
        n:=a[i] DIV 1000;
        h:=(a[i] DIV 100)-n*10;
        l:=((a[i] MOD 100)-m) DIV 10;
        IF (a[i]= m*m+n*n+h*h+l*l) THEN write(a[i],',');
    END;
    readln      
END.

Thứ Hai, 16 tháng 4, 2012

Tìm bội chung nhỏ nhất của N số (ví dụ: mảng 1 chiều)

Như trong bài viết Tìm UCLN và BCNN đã trình bày cách tìm tuy nhiên chỉ áp dụng với trường hợp 2 số. Bài toán ra là tìm BCNN của mảng 1 chiều, vậy sẽ phải viết chương trình như thế nào?

Bội số chung nhỏ nhất (The Least Common Multiple hay Lowest Common Multiple) của một nhóm các số nguyên, gọi tắt là LCM, là số nhỏ nhất mà có thể chia hết cho tất cả các số đó. Có nhiều giải pháp để tìm LCM của hai số nguyên, một trong những giải pháp dễ dàng nhất là dùng thuật giải Euclid. Cho hai số nguyên a và b, chúng ta có công thức LCM(a, b) = (a x b) / GCD(a, b). Như vậy quá trình tính toán sẽ thông qua các bước sau:
  1. Bước 1. Sử dụng thuật toán Euclid để tìm ước chung lớn nhất GCD (a, b)
  2. Bước 2. Tính giá trị a x b.
  3. Bước 3. Chia kết quả bước 2 cho kết quả bước 1 chúng ta được giá trị LCM cần tìm.
Để tìm LCM của n số chúng ta đầu tiên chọn ra 2 số rồi tính LCM của chúng, sau đó lấy thêm số khác để tính LCM của LCM mới tìm được và số mới chọn ra, cứ như thế cho tới khi nào hết n số. Ví dụ tìm LCM của 2, 3 và 5. Đầu tiên ta tính LCM(2, 3) = 6. Sau đó tìm LCM(6, 5) = 30.

uses crt;
var x, y, i, n, ucln, bcnn: longint;
  a: array[1..100] of integer;
function h_ucln(x,y:integer):integer;
begin
 while x<>y do
  if x>y then
   x:=x-y
  else
   y:=y-x;
 h_ucln:=x;
end;
begin
 clrscr;
 repeat
  write('Nhap N (N>=2): ');
  readln(n);
 until(n>=2);
 for i:=1 to n do
 begin
  write('Phan tu thu ',i,' = ');
  readln(a[i]);
 end;
 ucln:=h_ucln(a[1],a[2]);
 bcnn:=(a[1]*a[2]) div ucln;
 for i:=3 to n do
 begin
  ucln:=h_ucln(bcnn,a[i]);
  bcnn:=(bcnn*a[i]) div ucln;
 end;
 writeln('bcnn la: ',bcnn);
 readln;
end.

Thứ Bảy, 14 tháng 4, 2012

Đếm số lần xuất hiện của mỗi chữ cái trong xâu

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 và chữ thường).

Uses Crt;
Var    St:String;
       dem: Array[‘A’..’Z’] Of Byte;
       i:Byte;
       ch:Char;
Begin
    Write(‘Nhap xau St: ‘); Readln(St);
    {Khởi tạo mảng}
    For ch:=’A’ To ‘Z’ Do dem[ch]:=0;
    {Duyệt xâu}
    For i:=1 To Length(St) Do
        If Upcase(St[i]) IN [‘A’..’Z’] Then              Inc(dem[Upcase(St[i])]);
    {Liệt kê các ký tự ra màn hình}
    For ch:=’A’ To ‘Z’ Do
        If dem[ch]>0 Then Writeln(ch,’ : ’,dem[ch]);
    Readln;
End.



Thứ Năm, 12 tháng 4, 2012

Kiểm tra cấp số cộng trong pascal

Nhập dãy số gồm N số nguyên (N<100). Xác định xem đó có phải dãy số có tính chất là cấp số cộng hay không.

uses crt;
  Var
  A:array[1..100] of integer;
  i,n,d: integer;
  CS: boolean;
  BEGIN
  clrscr;
  repeat
  Write(' Nhap vao so nguyen duong N <=100 : ');
  readln(N);
  Until (n>1) and (n<=100);
  For i:=1 to n do
     begin
     repeat
     write('A[',i,'] = ');
     readln(A);
     until abs(A)<=1000;
     end;
     d:=abs(A[2]-A[1]);
     CS:=True;
     For i:=2 to n do
         IF (abs(A-A[i-1])<>d) then  
                                   begin
                                    CS:=False;
                                    break;
                                   end;
     IF CS then writeln('Day la cap so cong ')
           else writeln(' Day ko phai la cap so cong ');
     readln;
  END.

Thứ Tư, 11 tháng 4, 2012

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

Xâu là gì? Để xử lý các chuỗi văn bản, Pascal đưa ra một kiểu dữ liệu mớ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 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ụ:
Readln(st);
Writeln(st);

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

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

Ví dụ:
st1:=’Le’; st2:=’Thanh’; St=st1 + st2; 
-> KQ: ‘Le Thanh’

2/ Phép so sánh: 
Hai xâu ký tự có thể so sánh với nhau bằng các phép so sánh =, >, <…
Nguyên tắc so sánh thực hiện như sau, chúng sẽ đem từng ký tự tương ứng với nhau để so sánh, xâu nào có ký tự có số thứ tự trong bảng mã ASCII lớn hơn thì xâu đó lớn hơn.
Hai xâu ký tự được gọi là bằng nhau khi chúng hoàn toàn giống nhau (có độ dài như nhau).
Ví dụ: ‘FILENAME’ = ’FILENAME ‘

3/ Các thủ tục và hàm chuẩn xử lý xâu ký tự
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 sau pos 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 đuôi các xâu s1,s2,…,sn lại với nhau.
Ví dụ: CONCAT(‘Le ’,’Thanh ‘, ‘Lam’) = ‘Le Thanh Lam’;

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;

Sưu tầm và biên tập

Thứ Ba, 6 tháng 3, 2012

Tuổi cha tuổi con

Nhập từ bàn phím tuổi cha và con (hiện tại tuổi cha lớn hơn 2 lần tuổi con và tuổi cha hơn tuổi con ít nhất là 25). Đưa ra màn hình câu trả lời cho câu hỏi "Bao nhiêu năm nữa thì tuổi cha gấp đôi tuổi con"?


uses crt;
var tcha,tcon,nam,kq:byte;
begin
write('nhập tuổi con:');readln(tcon);
write('nhập tuổi cha gấp ba lần tuổi con và ít nhất lớn hơn tuổi con 25:');readln(tcha);
repeat
nam:=nam+1;
tcon:=tcon+1:
tcha:=tcha+1;
until tcha=2*tcon;
kq:=nam;
writeln('vậy sau ',kq,' năm thì tuổi cha gấp 2 tuổi con');
readln;
end.

Thứ Hai, 5 tháng 3, 2012

Tìm ước chung lớn nhất và bội chung nhỏ nhất pascal

Ý tưởng: Lấy số lớn hơn trong 2 số trừ đi nhau. Lặp lại thao tác đến khi nào 2 số bằng nhau -> UCLN. Lấy tích của 2 số chia cho UCLN -> BCNN.

Thuật toán tìm Bội chung nhỏ nhất và Ước chung lớn của 2 số trong Pascal:


Cách 1: Dưới đây là thuật toán tìm UCLN bằng cách trừ đi nhau, được trình bày trong SGK tin học 10.

var x,y,UCLN,BCNN:integer;
begin
readln(x,y);
BCNN:=x*y;
While x<>y do If x>y then x:=x-y else y:=y-x;
UCLN:=x;
BCNN:=BCNN div UCLN;
write(UCLN,' ',BCNN);
end.

Cách 2: Thuật toán Euclide: Ngoài cách tìm UCLN như trên. Các bạn có thể sử dụng cách chia lấy dư (mod), chương trình sẽ tối ưu do phải thực hiện ít phép tính hơn.

Ý tưởng: UCLN của 2 số x, y cũng là UCLN của 2 số y và x mod y, vậy ta sẽ đổi x là y, y là x mod y cho đến khi y bằng 0. Khi đó UCLN là x.

var x,y,UCLN,BCNN,t:integer;
begin
readln(x,y);
BCNN:=x*y;
t:= y mod x;
While t <> 0 do
      Begin
        t:= x MOD y;
        x:= y;
        y:= t;
      End;
ucln:=x;
BCNN:=BCNN div UCLN;
write(UCLN,' ',BCNN);
end.

Cách 3: Tìm UCLN bằng cách dùng đệ quy: Đệ quy được hiểu đơn giản là sự gọi nhiều lần chương trình con trong chương trình. Thực sự, đối với bài toán đơn giản, không ai sử dụng đệ quy vì sẽ làm phức tạp vấn đề và làm chương trình trở nên rắc rối, phải thực hiện nhiều phép tính hơn. Tuy nhiên, nếu bắt buộc phải dùng đệ quy, các bạn có thể tham khảo cách làm dưới đây:

function ucln(x,y:integer):integer;
begin
if x = y then
ucln:=x
else if x > y then
ucln:=ucln(x mod y,y)
else
ucln:=ucln(x, y mod x);
end;
var x,y:integer;
begin
readln(x,y);
write('Ước chung lớn nhất là: ', UCLN(x,y), ' Bội chung nhỏ nhất là: ', (x*y) div UCLN(x,y));
end.

Chủ Nhật, 4 tháng 3, 2012

Dếm số ký tự chữ và số

Viết ct nhập vào xâu có cả chữ và số, rồi cho xuất ra có bao nhiêu kí tự chữ và bao nhiêu kí tự số.

var s: string;cs,cc,i: integer;
begin
 write('Nhap mot xau ky tu: ');
 readln(s);
 cs:=0;
 cc:=0;
 for i:=1 to length(s) do
 begin
  if (s[i] in ['0'..'9']) then cs:=cs+1;
  if s[i] in ['A'..'Z'] + ['a'..'z'] then cc:=cc+1;
 end;
 write('So cac ki tu la chu so:',cs:2,'  So cac ki tu la chu cai:',cc:4);
 readln
end.

Thứ Sáu, 24 tháng 2, 2012

Tính tổng chỉ sổ cột hàng chẵn trong mảng 2 chiều

Lập chương trình nhập mảng 2 chiều m hàng n côt. tính và in ra màn hình tổng các phần tử có chỉ số hàng chẵn, chỉ số cột lẹ M, N được nhập từ bàn phím.


Var a:array[1..100,1..100] of integer;
    i,j,m,n:integer;
Begin
  Write('Nhap so hang va cot');readln(m,n);
  For i:=1 to m do
  For j:=1 to n do
  begin
    write('A[',i,',',j,']=');readln(a[i,j]);
  end;
  i:=2;j:=1;
  While i<=m do
  begin
  While j<=n do
   begin
    write('A[',i',',j,']='a[i,j],'   '); j:=j+2;
   end;
  i:=i+2;
  end;
  Readln;
End.

Đảo ngược mảng 1 chiều

Lập chương trình thực hiện đảo ngược mảng số đó.

Var a:array[1..100] of integer;
    n,i:integer;
Begin
  write('Do dai cua mang can nhap?');readln(n);
  For i:=1 to n do
  begin
    write('Phan tu thu ',i,'=?');readln(a[i])
  end;
  writeln('Mang dao nguoc la :');
  For i:=n downto 1 do write(a[i]:5);
  Readln;
End.

Bài đăng phổ biến