Cách Sử Dụng “const” Trong C++

--- Bài mới hơn ---

  • Kiểu Ký Tự Trong C++ (Character)
  • Chuỗi Là Gì? Hàm Nhập Xuất Chuỗi Trong C/c++
  • Bài 9: Lớp Lưu Trữ (Storage Classes) Trong C++
  • Template Classes Trong C++ ” Cafedev.vn
  • Ngôn Ngữ C++ Là Gì? Ứng Dụng Của Ngôn Ngữ C++
  • Điều đầu tiên khi lập trình viên nghĩ đến từ khóa const là những gì không thể thay đổi được (hằng số). Bạn không thể thay đổi giá trị của một hằng số. Bạn có thể dùng từ khóa const để chỉ ra rằng một giá trị nào đó sẽ không thể thay đổi được trong suốt chương trình của bạn. Một câu hỏi dành cho bạn:

    Bạn có thể đặt từ khóa “const” ở những nơi nào trong chương trình của mình?

    Để trả lời câu hỏi trên khi làm việc với ngôn ngữ lập trình (ở đây là C++), bạn cần phải trả lời được câu hỏi: “Tôi cần giá trị nào trở thành không thay đổi được?”.

    Ở đây, trong bài viết này, xin liệt kê ra một số nơi bạn có thể đặt từ const.

    1. Khi khai báo một biến, nếu bạn đặt thêm từ const thì giá trị của biến đó sẽ không thể thay đổi được trong suốt phạm vi tồn tại của biến đó.

    Ví dụ các khai báo sau:

    const int x = 8; int const y = 10;

    Hai dạng khai báo trên là tương đương. Giá trị của hai biến x và y sẽ không thể thay đổi được.

    2. Đối với biến con trỏ, bạn cần lưu ý đến hai điều: vùng nhớ con trỏ trỏ đến và giá trị của vùng nhớ đó.

    Với các khai báo:

    int x = 10, y = 20; const int *px = &x;

    Khi này, giá trị của vùng nhớ mà px đang trỏ đến là không thể thay đổi được thông qua thay đổi (*px). Do đó, ta có các câu lệnh sau:

    *px = 15; // incorrect px = &y; // correct x = 15; // correct

    (Để ý rằng giá trị của x vẫn có thể được thay đổi, ta chỉ không thể thay đổi giá trị này thông qua px)

    Nhưng với các khai báo sau:

    int x = 10, y = 20; int* const px = &x;

    Khi này, giá trị của vùng nhớ mà px trỏ đến có thể được thay đổi thông qua việc thay đổi (*px) nhưng điều đặc biệt là ta không thể làm cho px trỏ đến một vùng nhớ khác. Ta có các câu lệnh sau:

    *px = 15; // correct px = &y; // incorrect

    Với khai báo sau:

    int x = 10; const int* const px = &x;

    Bạn không thể thay đổi nơi px đang trỏ đến và thông qua (*px) cũng không thể thay đổi giá trị vùng nhớ đó.

    Tiếp theo bài viết kỳ trước, bài này xin trình bày tác dụng của const khi hoạt động với hàm trong C++.

    Giả sử ta có cấu trúc sau:

    class A { private: int m_a; public: ... };

    Và ta có một hàm nhận tham số đầu vào là một đối tượng kiểu A và trả về một đối tượng kiểu A.

    A functionName(A object); // object là một đối tượng kiểu A

    Khi gọi hàm này với x là một đối tượng kiểu A:

    functionName(x);

    Một đối tượng object sẽ được tạo và máy sẽ copy toàn bộ giá trị của x vào object rồi xử lý, sau đó sẽ trả về một đối tượng kiểu A. Vấn đề phát sinh là khi ta có một class với kích thước lớn thì việc chép giá trị vào tham số hình thức ở hàm sẽ làm cho chương trình trở nên chậm đi và đặc biệt là sẽ hao phí bộ nhớ. Do đó, ta có giải pháp là hai khai báo cho hàm đó như sau:

    A functionName(A& object); A functionName(A* object);

    Hàm trên sử dụng tham số hình thức là một biến tham chiếu (reference variable) và hàm dưới dùng một biến con trỏ (pointer variable). Hai cách khai báo này sẽ cho kết quả tương tự nhau. (Sự khác nhau giữa biến tham chiếu và biến con trỏ sẽ được trình bày trong một bài gần đây). Khi này, với lời gọi hàm như trên thì địa chỉ của x sẽ được truyền vào, do đó sẽ tránh được việc phải chép cả cấu trúc với kích thước lớn.

    Nhưng với khai báo như thế thì giá trị của biến truyền vào có thể bị thay đổi thông qua biến object (vì là biến con trỏ hoặc tham chiếu), trong khi với cách khai báo như cũ thì ta không hề muốn giá trị này bị sửa đổi chút nào. Do đó, từ khóa const được sử dụng:

    A functionName(const A& object); A functionName(const A* object);

    Như bài trước, nếu ta muốn con trỏ object luôn trỏ đến một vị trí cố định thì hãy viết:

    A functionName(const A* const object);

    Nếu hàm trả về một con trỏ trỏ đến một đối tượng kiểu A:

    A* functionName(const A* const object);

    Theo nhu cầu, có thể bạn mong muốn hàm sẽ trả về con trỏ mà giá trị trỏ đến là không thay đổi được thông qua con trỏ, bạn sẽ khai báo hàm như sau:

    const A* functionName(const A* const object);

    Nếu bạn muốn con trỏ trả về cũng không thể thay đổi được vị trí trỏ đến của nó thì hãy viết:

    const A* const functionName(const A* const object);

    Tiếp theo, nếu class A của chúng ta có thêm một phương thức là long A::m_square() ; chẳng hạn. Phương thức này sẽ tính bình phương của biến A::m_a và trả về giá trị đó. Thực sự, đây chỉ là một hàm tính toán một giá trị từ giá trị của những thuộc tính trong class. Yêu cầu đặt ra là hàm này không được làm thay đổi giá trị của các thuộc tính của class. Do đó ta sẽ sử dụng một phương thức hằng bằng cách đặt từ const vào cuối hàm:

    long A::m_square() const;

    Bây giờ, nếu bạn lại muốn phương thức hằng của mình vẫn có thể thay đổi được giá trị của một số thuộc tính của class thì sao? Điều này vẫn có thể đạt được bằng cách sử dụng từ khóa mutable vào trước khai báo của thuộc tính nào bạn cần thay đổi giá trị bởi phương thức hằng. Chú ý là mutable không được dùng cho các biến staticconst.

    Trở lại với hàm functionName(…) của ta. Khi hàm này là một phương thức của class A và bạn muốn nó trở thành một phương thức hằng thì ta có một khai báo khủng hoảng về từ khóa const:

    const A* const functionName(const A* const object) const; // 5 từ const

    Việc sử dụng những từ khoá const và vị trí của chúng trong chương trình là tùy theo mục đích và yêu cầu của ngữ cảnh hiện tại. Do đó, bạn hãy lưu ý khi làm việc với chúng.

    – Phong Tran –

    --- Bài cũ hơn ---

  • Thao Tác Với Constant Trong C++
  • Tại Sao Các Nhà Phát Triển Trò Chơi C++ Không Sử Dụng Thư Viện Boost?
  • Cách Sử Dụng Boost Trong Visual Studio 2010
  • Buffer Là Gì? Tìm Hiểu Về Buffer Là Gì?
  • Khai Báo Biến Trong C++
  • Sự Khác Biệt Giữa #define Và Const Trong C Là Gì?

    --- Bài mới hơn ---

  • Cách Sử Dụng Define Trong C/c++
  • Khi Nào Thì Cần Dùng Đến Default Gateway?
  • Vai Trò Của Từ Khóa Default Và Break Trong Switch Case?
  • Default Gateway Là Gì? Khi Nào Cần Dùng Đến Default Gateway?
  • Cấu Hình Định Tuyến Mặc Định (Default Route) P2
  • Sự khác biệt giữa #define và const trong C là gì?

    Một số khác biệt quan trọng:

      Một cách khó hiểu là một định nghĩa vĩ mô, thì không có gì khó hiểu, đó là một từ khóa, # 1 trong khi biên dịch phải sử dụng trong quá trình tiền xử lý, một cách dễ dàng trong quá trình biên dịch Cũng có thể được sử dụng để khai báo các phương thức, chỉ có thể sử dụng các giá trị, các ứng dụng có thể có phạm vi toàn cầu hoặc phụ thuộc vào phạm vi toàn cầu, nghĩa là có thể có phạm vi toàn cầu hoặc cục bộ tùy theo tuyên bố của họ không thể xác định được bằng cách sử dụng chỉ thị của #

    Jason

    Một #define là một sự thay thế văn bản được thực hiện bởi bộ tiền xử lý TRƯỚC KHI tệp được biên dịch, mọi lần xuất hiện của macro sẽ được mở rộng thành tệp nguồn. Một #define có thể là các trang của mã nguồn và trong một số trường hợp được sử dụng như một cách tạo các mẫu nguyên thủy trong C.

    Const là một vòng loại được sử dụng để báo cho trình biên dịch rằng giá trị sẽ không bị thay đổi. Nó có thể được sử dụng với bất kỳ loại dữ liệu nào ngoài void, tuy nhiên con trỏ void có thể là const.

    Xem hướng dẫn tuyệt vời này: Sự khác biệt giữa const và #define trong ngôn ngữ lập trình C, C ++

    Tóm lại, #define là một chỉ thị tiền xử lý được sử dụng để xác định các macro, trông giống như các hằng hoặc hàm. Các macro được thay thế trong quá trình tiền xử lý bằng cách sử dụng thay thế văn bản. Một const là một từ khóa được trình biên dịch hiểu để biến một cái gì đó thành hằng số, ví dụ, trong C, một biến được đánh dấu là const là một biến có giá trị không thể thay đổi.

    N.B., macro dễ vỡ hơn nhiều so với các hằng số và hàm thích hợp. Ví dụ,

    #define THÊM (x, y) x + y int chính (int argc, char * argv ) { int a; a = 1 + 2 * 3; }

    Đó là, a được đặt thành 7, trong khi

    #define THÊM (x, y) x + y int thêm (int a, int b) { trả về a + b; } int chính (int argc, char * argv []) { int a; a = thêm (1,2) * 3; }

    mang lại một bằng 9

    Ngôn ngữ C có một lịch sử kỳ lạ là ngôn ngữ cấp cao / cấp thấp. C tổng hợp có hai bước chính.

      Bộ tiền xử lý hoạt động trên các chỉ thị # – ký hiệu, như #define Trình biên dịch C thực sự đọc mã được sửa đổi để tạo mã máy

    Sự khác biệt giữa #define và const trong C là gì?

    Bước tiền xử lý thay thế giá trị macro #define trong mã nguồn C. Điều này có nghĩa là #define MAXVAL (38) thực sự đặt 38 vào nguồn; nó không phải là một biến và không chiếm các ô nhớ trong chương trình.

    Vòng loại const áp dụng cho các biến được khai báo là hằng số. const int var = 38; là một ô nhớ không đổi cụ thể. Sử dụng const để đảm bảo các tham số được truyền cho một hàm don Thay đổi trong trình gọi.

    svcministry.org © 2022

    --- Bài cũ hơn ---

  • Khai Báo Define Trong C/c++
  • Xử Lý Nhập Xuất Trong C (Bài 3)
  • Các Kiểu Dữ Liệu Trong C ( Int
  • Nhập Xuất Cơ Bản Trong C Và C++
  • Học C++ Làm Được Gì Cho Đời?
  • C++ — ‘const Static’ Có Nghĩa Là Gì Trong C Và C ++?

    --- Bài mới hơn ---

  • 1.5.7 Sử Dụng Giá Trị Kiểu Char Như Giá Trị Kiểu Int
  • Giới Thiệu Về Kiểu Dữ Liệu Char Trong C++
  • Bài 1: C++ Là Gì? Ứng Dụng C++? Vì Sao Nên Học C++?
  • Ngôn Ngữ Lập Trình C++ Là Gì? Tương Lai Ngôn Ngữ C++ Sẽ Ra Sao?
  • 1.3 Sử Dụng Các Lệnh Liên Quan Đến Xuất Dữ Liệu
  • Dòng mã đó thực sự có thể xuất hiện trong một số bối cảnh khác nhau và mặc dù nó hoạt động gần giống nhau, có những khác biệt nhỏ.

    Phạm vi không gian tên

    // foo.h static const int i = 0;

    i‘ sẽ hiển thị trong mọi đơn vị dịch thuật bao gồm tiêu đề. Tuy nhiên, trừ khi bạn thực sự sử dụng địa chỉ của đối tượng (ví dụ: ‘&i‘), tôi khá chắc chắn rằng trình biên dịch sẽ coi ‘i‘ đơn giản là một loại an toàn 0. Khi có thêm hai đơn vị dịch thuật lấy ‘&i‘ thì địa chỉ sẽ khác nhau cho mỗi đơn vị dịch thuật.

    // foo.cc static const int i = 0;

    i‘ có liên kết bên trong và do đó không thể được tham chiếu từ bên ngoài đơn vị dịch thuật này. Tuy nhiên, một lần nữa trừ khi bạn sử dụng địa chỉ của nó, rất có thể nó sẽ được coi là loại an toàn 0.

    Một điều đáng để chỉ ra, đó là tuyên bố sau:

    const int i1 = 0;

    chính xác giống như static const int i = 0. Một biến trong một không gian tên được khai báo bằng const và không được khai báo rõ ràng bằng extern là hoàn toàn tĩnh. Nếu bạn nghĩ về điều này, ý định của ủy ban C++ là cho phép các biến const được khai báo trong các tệp tiêu đề mà không cần luôn luôn cần từ khóa static để tránh phá vỡ ODR.

    Phạm vi lớp học

    class A { public: static const int i = 0; };

    Trong ví dụ trên, tiêu chuẩn chỉ định rõ ràng rằng ‘i‘ không cần phải được xác định nếu không yêu cầu địa chỉ của nó. Nói cách khác, nếu bạn chỉ sử dụng ‘i‘ là loại an toàn 0 thì trình biên dịch sẽ không định nghĩa nó. Một điểm khác biệt giữa các phiên bản lớp và không gian tên là địa chỉ của ‘i‘ (nếu được sử dụng trong hai đơn vị dịch thuật nhiều quặng hơn) sẽ giống nhau cho thành viên lớp. Địa chỉ được sử dụng, bạn phải có định nghĩa cho địa chỉ đó:

    // a.h class A { public: static const int i = 0; }; // a.cc #include "a.h" const int A::i; // Definition so that we can take the address

    --- Bài cũ hơn ---

  • C++ — Có Bao Nhiêu Và Việc Sử Dụng “const” Trong C ++ Là Bao Nhiêu?
  • Hằng Số Trong C++ (Constants)
  • 4.7. Hành Trình Không Dừng Lại
  • Lập Trình Chuẩn C++11 Như Một Ngôn Ngữ Mới
  • Biến Trong C (Bài 2)
  • Bài 4: Mảng Trong Pascal

    --- Bài mới hơn ---

  • Pascal: Các Kiểu Dữ Liệu Cơ Bản
  • Một Số Lưu Ý Về Chương Trình Con
  • Bài 3 (Tiếp Theo): Biến Toàn Cục, Biến Cục Bộ Và Phạm Vi Của Biến
  • Pascal Cơ Bản – Chủ Đề Ii: Một Số Kiểu Dữ Liệu Chuẩn
  • Câu Lệnh Điều Khiển Vòng Lặp Break, Continue, Goto
  • 1. Mảng 1 chiều:

    – Có thể hiểu nôm na: Mảng 1 chiều là dãy số hữu hạn.

    vd: nhiệt độ mỗi ngày trong tuần (tháng/năm), cấp số cộng, cấp số nhân…

    – Chỉ số của mảng:

    vd: Xét mảng: 10 20 30 5 6 7

    là một dãy các số tự nhiên bất kì có 6 phần tử mà

    phần tử thứ 1 là 10

    phần tử thứ 2 là 20

    phần tử thứ 3 là 30

    phần tử thứ 4 là 5

    phần tử thứ 5 là 6

    phần tử thứ 6 là 7

    Lưu ý!

    Xét dãy: Ti Suu Dan Mao Thin Ti Ngo Mui Than Dau Tuat Hoi

    cũng được coi là mảng 1 chiều, trong đó:

    • Phần tử 1 là Ti
    • Phần tử 2 là Suu
    • Phần tử 3 là Dan
    • Phần tử 4 là Mao
    • Phần tử 5 là Thin

    Xét dãy:cũng được coi là mảng 1 chiều, trong đó:

    – Cách tham chiếu đến mảng: A=10; A=30; A=6; A of integer;

    b,c:array of integer;

    var a,b,c:mang;

    – Cách nhập/xuất mảng 1 chiều:

    vd:- Cách nhập/xuất mảng 1 chiều:

    var a:array=’); readln(A);

    end.

    2. Mảng 2 chiều:

    – Khái niệm: Nếu mảng 1 chiều là dãy thì mảng 2 chiều là bảng các phần tử cùng kiểu (bảng các số).

    – Tham chiếu: Vì mảng 2 chiều là bảng nên sẽ cần chỉ số hàng và chỉ số cột: A of Integer;

          i,j,N,Max,k,c,M:Integer;

    begin

         write(‘So hang cot:’);readln(N,M);Max:=0;

         for i:=1 to N do

          for j:=1 to M do

           begin

                write(‘A);

           end;

         for i:=1 to N do

           begin

                for j:=1 to M do

                write(A[i,j]);

           end;

    end.

    Tổng hợp và biên tập

    Mảng 1 chiều,

    Mảng 2 chiều,

    Pascal cơ bản

    --- Bài cũ hơn ---

  • Dữ Liệu Kiểu Mảng (Array)
  • Làm Việc Với File Trong Pascal
  • Tin Học Cho Người Việt
  • Cùng Nhau Khám Phá, Cùng Nhau Học Tập
  • Phương Thức Thanh Toán D/a
  • Lệnh If .. Then Trong Pascal

    --- Bài mới hơn ---

  • Dữ Liệu Kiểu Tệp: Giới Thiệu Và Sử Dụng (P2) Mở Tệp Và Đọc Tệp
  • Ý Nghĩa Thủ Tục Fillchar Trong Pascal
  • Cách Viết Hàm (Function) Trong Pascal
  • Thủ Tục Trong Pascal, Định Nghĩa Và Cách Khai Báo
  • Vòng Lặp Repeat .. Until Trong Pascal
  • Trong bài này chúng ta sẽ học lệnh rẻ nhánh if .. then trong Pascal, đây là lệnh dùng để đổi hướng chương trình dựa vào một điều kiện nào đó. Kể từ bài lệnh if này ta sẽ bắt đầu học những kiến thức nâng cao hơn.

    Trước khi học bài này bạn cần phải hiểu được khái niệm về giá trị của biểu thức. Chúng ta có hai giá trị đó là đúng ( TRUE) – sai ( FALSE), và mỗi biểu thức đặt trong điều kiện if phải trả về một trong hai giá trị này, vì vậy ta phải sử dụng các toán tử mà mình đã giới thiệu ở bài trước.

    I. Lệnh if .. then trong Pascal

    Giả sử bạn cần viết một chương trình tính tổng của hai số được nhập vào từ bàn phím, sau đó in ra màn hình tổng đó là số chẵn hay số lẻ. Lúc này bạn phải sử dụng lệnh if.

    Cú pháp như sau:

    if (condition) then begin // statement end;

    Trong đó:

    • condition là điều kiện xảy ra
    • statement là đoạn code sẽ được chạy nếu condition có giá trị TRUE, ngược lại nếu giá trị FALSE thì sẽ bỏ qua.

    Ví dụ: Viết chương trình kiểm tra một số có phải là số chẵn hay không

    program IfThenPascal; var a : integer; begin writeln('HOC PASCAL TAI FREETUTS.NET'); writeln('Nhap vao so can kiem tra'); readln(a); if ( a mod 2 = 0 ) then begin writeln(a, ' la so chan'); end; readln; end.

    Chạy chương trình bnạ sẽ thu được kết quả như sau:

    Lưu ý: Nếu bên trong begin và end chỉ có một lệnh duy nhất thì ta có thể bỏ begin và end. Như ví dụ trên ta có thể viết lại như sau:

    begin writeln('HOC PASCAL TAI FREETUTS.NET'); writeln('Nhap vao so can kiem tra'); readln(a); if ( a mod 2 = 0 ) then writeln(a, ' la so chan'); readln; end.

    II. Lệnh if .. then .. else trong Pascal

    Ở lệnh if .. then ta chỉ cho chương trình chạy được một nhánh duy nhất, nhưng thực tế thì ta cần rẻ rất nhiều nhánh nên lúc này phải sử dụng lệnh if .. then .. else.

    Giả sử mình cần viết một chương trình kiểm tra một số xem nó số chẵn hay số lẻ, sau đó in ra màn hình là số chẵn hoặc số lẻ.

    if (condiiton) then begin // statement1 end else begin // statement2 end;

    Ok, bây giờ mình sẽ giải bài toán trên như sau:

    program IfThenPascal; var a : integer; begin writeln('HOC PASCAL TAI FREETUTS.NET'); writeln('Nhap vao so can kiem tra'); readln(a); if ( a mod 2 = 0 ) then begin writeln(a, ' la so chan'); end else begin writeln(a, ' la so le'); end; readln; end.

    Kết quả:

    Ở bài giải trên mình đã sử dụng khối lênh begin và end, tuy nhiên điều đó là dư thừa bởi đoạn code bên trong chỉ có một lệnh duy nhất. Ta có thể viết lại như sau:

    if ( a mod 2 = 0 ) then writeln(a, ' la so chan'); else writeln(a, ' la so le');

    III. Lệnh if .. then .. else lồng nhau trong Pascal

    Lệnh lồng nhau tức là bên trong một lệnh có chứa nhiêu lệnh con. Điều này có nghĩa trong chương trình có sử dụng các lệnh if .. then, và bên trong đoạn code xử lý lại chứ thêm những đoạn code if .. then khác, ta gọi là lồng nhau.

    if (condition1) then if (condition2) then // statement

    Nghe có ve khó phải không nào? Thực ra nó cũng rất dễ nếu như bạn biên dịch tuân theo thứ tự từ trên xuống và từ trái qua phải. Nếu điều kiện thỏa thì chạy code bên trong điều kiện đó, cứ như vậy cho đến hết tất cả các lệnh if lồng nhau.

    Ví dụ: Viết chương trình kiểm tra một số, nếu là số chẵn thì kiểm tra số đó lớn hơn 100 không, nếu số lẻ thì kiểm số đó lớn hơn 20 không.

    program IfThenPascal; var a : integer; begin writeln('HOC PASCAL TAI FREETUTS.NET'); writeln('Nhap vao so can kiem tra'); readln(a); if ( a mod 2 = 0 ) then begin writeln(a, ' la so chan'); writeln(a, ' lon hon 100'); end else begin writeln(a, ' la so le'); writeln(a, ' lon hon 20'); end; readln; end.

    Chạy lên và nhập số 25 thì ta có được kết quả sau:

    --- Bài cũ hơn ---

  • 13 Sai Lầm Thường Gặp Khi Học Tin 11 Và Cách Khắc Phục
  • Ngôn Ngữ Lập Trình Pascal (Bổ Trợ Tin 11)
  • Một Số Hàm Và Lệnh Pascal Cơ Bản
  • Kinh Nghiệm Khi Thi Hsg Môn Tin Học Bằng Pascal
  • Khối Lệnh Begin … End Trong Pascal
  • Hàm Pascal, Tổng Hợp Các Hàm Phổ Biến, Thường Gặp Trong Pascal

    --- Bài mới hơn ---

  • Câu 1: Cho Biểu Thức Trong Pascal: Abs(X+1) 3
  • Aptomat ! Phân Loại, Cách Sử Dụng Và Báo Giá
  • Hạt Nhựa Tiếng Anh Là Gì? Những Về Hạt Nhựa Bạn Cần Biết
  • Hệ Thống Phanh Abs: Khái Niệm, Cấu Tạo, Phân Loại Và Nguyên Lý Hoạt Động
  • Abs, Ebd Và Ba, 3 Trang Bị An Toàn Ô Tô ‘tối Thiểu’
  • Pascal là ngôn ngữ lập trình cấp thấp với những câu lệnh đơn giản để xử lý những bài toán cơ bản, thường được sử dụng làm ngôn ngữ lập trình trong chương trình học phổ thông để học sinh có thể hình thành tư duy lập trình cơ bản. Tuy nhiên trong chương trình học mới chỉ mang đến một số câu lệnh đơn giản, Taimienphi sẽ đưa đến cho các bạn một số hàm Pascal với nhiều công dụng khác nhau.

    Các hàm nhập và xuất dữ liệu

    write() – in ra màn hình liền sau kí tự cuối.

    writeln() – in ra màn hình xuống một hàng.

    read() – đọc biến.

    readln(‘ ‘) – đọc biến và xuống dòng.

    clrscr – xoá toàn bộ màn hình.

    textcolor() – in chữ màu.

    textbackground() – tô màu cho màn hình.

    sound() – tạo âm thanh.

    delay() – làm trễ.

    nosound – tắt âm thanh.

    windows(x1,y1,x2,y2) – thay đổi cửa sổ màn hình.

    highvideo – tăng độ sáng màn hình.

    lowvideo – giảm độ sáng màn hình.

    normvideo – màn hình trở lại chế độ sáng bình thường.

    gotoxy(x,y) – đưa con trỏ đến vị trí x,y trên màn hình.

    deline – xoá một dòng đang chứa con trỏ.

    clreol – xoá các ký tự từ vị trí con trỏ đến cuối mà không di chuyển vị trí con trỏ.

    insline – chèn thêm một dòng vào vị trí của con trỏ hiện hành.

    exit – thoát khỏi chương trình.

    textmode(co40) – tạo kiểu chữ lớn.

    randomize – khởi tạo chế độ ngẫu nhiên.

    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.

    halt – Ngưng thực hiện chương trình và trở về hệ điều hành.

    Abs(n) – Giá trị tuyệt đối.

    Arctan(x) – cho kết quả là hàm Arctan(x).

    Cos(x) – cho kết quả là cos(x).

    Exp(x) – hàm số mũ cơ số tự nhiên ex.

    Frac(x) – cho kết quả là phần thập phân của số x.

    int(x) – cho kết quả là phần nguyên của số thập phân x.

    ln(x) – Hàm logarit cơ số tự nhiên.

    sin(x) – cho kết quả là sin(x), với x tính bằng Radian.

    Sqr(x) – bình phương của số x.

    Sqrt(x) – cho kết quả là căn bậc hai của x.

    pd(x) – cho kết quả là số nguyên đứng trước số nguyên x.

    Suuc(x) – cho kết quả là số nguyên đứng sau số nguyên x.

    odd(x) – cho kết quả là true nếu x số lẻ, ngược lại là false.

    chr(x) – trả về một kí tự có vị trí là x trong bảng mã ASCII.

    Ord(x) – trả về một số thứ tự của kí tự x.

    round(n) – Làm tròn số thực n.

    Random(n) – cho một số ngẫu nhiên trong phạm vi n.

    upcase(n) – đổi kí tự chữ thường sang chữ hoa.

    assign(f,) – tạo file.

    rewrite(f) – khởi tạo.

    append(f) – chèn thêm dữ liệu cho file.

    close(f) – tắt file.

    erase(f) – xóa.

    rename() – đổi tên cho file.

    length(s) – cho kết quả là chiều dài của chuỗi.

    copy(s,a,b) – copy chuỗi.

    insert(,s,a) – chèn thêm cho chuỗi.

    delete(s,a,b) – xoá chuỗi.

    Unit GRAPH (Các hàm đồ họa)

    initgraph(a,b,) – khởi tạo chế độ đồ hoạ.

    closegraph ; – tắt chế độ đồ hoạ.

    setcolor(x) – chọn màu.

    outtext() – in ra màn hình tại góc trên bên trái.

    outtextxy(x,y,); – in ra màn hình tại toạ độ màn hình.

    rectangle(x1,y1,x2,y2) – vẽ hình chữ nhật.

    line(x1,y1,x2,y2) – vẽ đoạn thẳng.

    moveto(x,y) – lấy điểm xuất phát để vẽ đoạn thẳng.

    lineto(x,y) – lấy điểm kết thúc để vẽ doạn thảng.

    circle(x,y,n) – vẽ đường tròn.

    ellipse(x,y,o1,o2,a,b) – vẽ hình elip.

    floodfill(a,b,n) – tô màu cho hình.

    getfillpattern(x) – tạo biến để tô.

    setfillpattern(x,a) – chọn màu để tô.

    cleardevice; – xoá toàn bộ màn hình.

    settextstyle(n,a,b) – chọn kiểu chữ.

    bar(a,b,c,d) – vẽ thanh.

    bar3d(a,b,c,d,n,h) – vẽ hộp.

    arc(a,b,c,d,e) – vẽ cung tròn.

    setbkcolor(n) – tô màu nền.

    putpixel(x,y,n) – vẽ điểm.

    setfillstyle(a,b) – tạo nền cho màn hình.

    setlinestyle(a,b,c) – chọn kiểu đoạn thẳng.

    getmem(p,1) – chuyển biến để nhớ dữ liệu.

    getimage(x1,y1,x2,y2,p) – nhớ các hình vẽ trên vùng cửa sổ xác định.

    putimage(x,y,p,n) – in ra màn hình các hình vừa nhớ

    Unit DOS

    getdate(y,m,d,t) – lấy các dữ liệu về ngày trong bộ nhớ.

    gettime(h,m,s,hund) – lấy các dữ liệu về giờ trong bộ nhớ.

    findnext(x) – tìm kiếm tiếp.

    Findfirst($20,dirinfo) – tìm kiếm

    --- Bài cũ hơn ---

  • Abs Trên Xe Máy Hoạt Động Thế Nào?
  • Maknae Là Gì? Bỏ Túi 30+ Thuật Ngữ Chuyên Dùng Của Fan K
  • 14 Thuật Ngữ Tiếng Anh Mà Fan Kpop Phải Biết
  • Bảo Ôn Là Gì? Bảo Ôn Quan Trọng Hay Không Quan Trọng?
  • Thuốc Bảo Vệ Thực Vật Là Gì
  • Các Mã Lỗi Trong Pascal

    --- Bài mới hơn ---

  • Các Lỗi Thường Gặp Trong Pascal
  • Kiểu Tập Tin Trong Pascal
  • Dữ Liệu Kiểu Tệp Trong Pascal
  • Chương Trình Con : Hàm Và Thủ Tục Trong Pascal
  • Pascal: Hằng, Biến, Biểu Thức
  • In trang này

    Khi làm việc với bất cứ một ngôn ngữ lập trình nào, việc hiểu biết rõ các thông báo lỗi rất quan trọng. Đối với người đang học ngôn ngữ đó, trong quá trình làm việc không thể tránh khỏi thao tác sai sinh lỗi. Việc biết rõ ý nghĩa các thông báo lỗi sẽ giúp cho việc sửa chưng trình được nhanh hơn, giúp cho người học hiểu rõ hơn công việc mình làm. Đối với những người viết ứng dụng, ý nghĩa các lỗi sinh ra trong quá trình chạy chưng trình cũng rất quan trọng. Người lập trình cần phải bắt các lỗi trong chương trình để có thể thông báo kịp thời cho người sử dụng, tránh việc chưng trình bị ngắt, không thực hiện tiếp được.

    Việc học ngôn ngữ PASCAL

    trong nhà trường đã trở nên rộng rãi, do đó một tài liệu mô tả chi tiết các

    lỗi mà người dùng có thể gặp khi làm việc với môi trường PASCAL.

    Các lỗi sinh ra trong

    quá trình chạy chương trình (Runtime error)

    Mã lỗi ý nghĩa

    1 Invalid function number Sai số hiệu hàm

    2 File not found Không tìm thấy file

    3 Path not found Không tìm thấy đường dẫn

    4 Too many open files Mở quá nhiều

    file

    5 File access denied Không truy

    nhập được file

    6 Invalid file handle Số hiệu

    file không hợp lệ

    12 Invalid file access code Mã truy nhập file

    không hợp lệ

    15 Invalid drive number Số hiệu thiết

    bị không hợp lệ

    16 Cannot remove current directory Không thể xoá hoặc chuyển thư

    mục hiện hành

    17 Cannot rename across drives Không thể đổi tên các

    thiết bị chéo nhau

    100 Disk read error Lỗi khi đọc đĩa

    101 Disk write error Lỗi khi ghi đĩa

    102 File not assigned File chưa được chỉ định

    103 File not open File chưa được mở

    104 File not open for input File chưa được

    mở để lấy dữ liệu

    105 File not open for output File chưa đựoc mở

    để xuất dữ liệu

    106 Invalid numeric format Định dạng số

    không hợp lệ

    150 Disk is write-protected Đĩa đang được bo vệ chống ghi

    151 Bad drive request struct length Độ lớn cấu yêu cầu cấu trúc

    thiết bị sai

    152 Drive not ready Thiết bị chưa sẵn sàng

    154 CRC error in data Lỗi kiểm tra độ dư vòng trong

    dữ liệu

    156 Disk seek error Lỗi tìm kiếm trên đĩa

    157 Unknown media type Không biết kiểu thiết bị

    158 Sector Not Found Không tìm thấy sector được yêu

    cầu

    159 Printer out of paper Hết giấy

    trên máy in

    160 Device write fault Lỗi ghi thiết bị

    161 Device read fault Lỗi đọc thiết bị

    162 Hardware failure Lỗi phần cứng

    200 Division by zero Lỗi chia cho 0

    201 Range check error Lỗi tràn bộ nhớ

    202 Stack overflow error Lỗi tràn ngăn

    xếp

    203 Heap overflow error Lỗi tràn vùng

    nhớ Heap

    208 Overlay manager not installed Quản lí tràn chưa được cài

    đặt

    209 Overlay file read error Lỗi tràn khi đọc

    file

    210 Object not initialized Đối tượng

    chưa được khởi tạo

    211 Call to abstract method Lỗi gọi một phưng

    thức trừu tượng

    212 Stream registration error Lỗi đăng kí dòng

    xuất nhập

    204 Invalid pointer operation Con trỏ phép toàn

    không hợp lệ

    205 Floating point overflow Tràn dấu phẩy

    động

    206 Floating point underflow Tràn dấu phẩy động

    207 Invalid floating point operation Phép toàn với số dấu phẩy

    động không hợp lệ

    Các lỗi biên dịch

    (Compiler error)

    --- Bài cũ hơn ---

  • Chuyên Đề: Làm Quen Với Pascal–Khai Báo, Sử Dụng Biến
  • Exp Là Gì Giải Đáp Exp Ý Nghĩa Trong Từng Lĩnh Vực Cụ Thể
  • Bài 2. Các Thành Phần Cơ Bản
  • Cầu Tên Trong Ngôn Ngữ Lập Trình Là…
  • Lập Trình Pascal – Tin Học Không Khó
  • Vòng Lặp For .. Do Trong Pascal

    --- Bài mới hơn ---

  • Kiểu Bản Ghi (Record) Trong Pascal
  • Kiểu Dữ Liệu Xâu Kí Tự (String) Trong Pascal
  • Cho Biểu Thức Trong Pascal: Sqrt(Sqr(X)
  • Con Trỏ Trong Pascal, Cấu Trúc Và Ví Dụ Minh Họa
  • Tìm Hiểu Khái Niệm Winword
  • Trong bài này chúng ta sẽ tìm hiểu về vòng lặp For .. Do trong Pascal, đây là vòng lặp cơ bản và được sử dụng nhiều nhất trong lập trình Pascal.

    1. Vòng lặp For .. do trong Pascal

    Vòng lặp for .. do là một cấu trúc điều khiển cho phép bạn viết một chương trình có tính lặp đi lặp lại với số lần cụ thể. Cú pháp của nó như sau:

    Trong đó:

    • variable-name là tên biến điều khiển vòng lặp
    • initial_value là lần lặp đầu tiên
    • final_value là lần lặp cuối, tổng số lần lặp được tính từ initial_value đến final_value
    • S là những lệnh sẽ được chạy trong vòng lặp. Nếu có nhiều lệnh thì phải đặt trong khối BEGIN … END

    HÌnh: internet

    Giả sử bạn muốn in ra các số từ 1 đến 5 thì có thể viết theo cách thông thường như sau:

    program forLoop; begin writeln('1'); writeln('2'); writeln('3'); writeln('4'); writeln('5'); end.

    Nhưng nếu mình muốn in ra từ 1 đến 1000, thậm chí là 1.000.000 lần thì phải làm sao? Nếu viết thủ công như vậy thì là điều rất khó, mất khá nhiều thời gian.

    Áp dụng cấu trúc vòng lặp for thì mình sẽ viết lại bài này như sau:

    program forLoop; var a: integer; begin for a := 1 to 5 do begin writeln('Gia tri cua a la: ', a); end; end.

    Các bước thực hiện như sau:

    • Bước 1: Lặp lần thứ nhất, a bắt đầu từ 1, vì nó nằm trong khoảng từ 1 đến 5 nên khối lệnh bên trong được thực hiện.
    • Bước 2, 3, 4, 5: Tương tự, a sẽ có giá trị lần lượt là 2, 3, 4, 5 và nó nằm trong khoảng 1 – 5 nên vẫn thực hiện.
    • Bước 6: Lúc này a = 6, nằm ngoài phạm vi lặp nên vòng lặp hết thúc.

    Kết quả in ra màn hình các số từ 1 đến 5.

    Gia tri cua a la: 1 Gia tri cua a la: 2 Gia tri cua a la: 3 Gia tri cua a la: 4 Gia tri cua a la: 5

    2. Vòng lặp for .. do lồng nhau

    Trong pascal bạn có thể đặt vòng lặp for này nằm trong vòng lặp for khác để tạo ra cấu trúc lồng nhau. Lúc này tổng số lần lặp sẽ là cấp số nhân giữa vòng lặp ngoài (cha) và vòng lặp trong (con).

    Ví dụ vòng lặp cha lặp từ 1 đến 5, vòng lặp con lặp từ 1 đến 10 thì tổng số lần lặp là 5 x 10 = 50.

    Cấu trúc cú pháp cơ bản như sau:

    for a := 1 to 5 do begin for b := 1 to 10 do begin ... end; end;

    Trong đó các số điều khiển vòng lặp có thể thay đổi theo yêu cầu của bài toán bạn cần lập trình.

    Ví dụ: Mình cần in ra bảng cửu chương thì có thể viết như sau:

    program IfThenPascal; var a: integer; b: integer; begin for a := 2 to 9 do begin for b := 1 to 9 do begin writeln(a, ' x ', b, ' = ', (a * b)); end; end; readln; end.

    Chạy chương trình này bạn sẽ thu được kết quả như sau:

    Trên là kiến thức cơ bản của vòng lặp for trong Pascal. Đây là một vòng lặp rất quan trọng không chỉ ở Pascal mà ở bất kì một ngôn ngữ khác, vì vậy bạn cần phải hiểu ý nghĩa của nó để áp dụng, cũng như sau này sẽ phân biệt với các vòng lặp while và repeat.

    --- Bài cũ hơn ---

  • Giới Thiệu Tổng Quan Stored Procedure Là Gì Trong Sql Server
  • Chương Trình Con (Procedure Và Function) Trong Pascal
  • Pascal : Bài Tập Mảng 1 Chiều Hot Nhất Nên Xem
  • Tổng Hợp Bài Tập Pascal Có Giải, Từ Dễ Đến Khó
  • Lỗi Cú Pháp Trong Pascal Loi Cu Phap Pascal Doc
  • Lỗi Cú Pháp Trong Pascal Loi Cu Phap Pascal Doc

    --- Bài mới hơn ---

  • Tổng Hợp Bài Tập Pascal Có Giải, Từ Dễ Đến Khó
  • Pascal : Bài Tập Mảng 1 Chiều Hot Nhất Nên Xem
  • Chương Trình Con (Procedure Và Function) Trong Pascal
  • Giới Thiệu Tổng Quan Stored Procedure Là Gì Trong Sql Server
  • Vòng Lặp For .. Do Trong Pascal
  • MỘT SỐ LỖI CÚ PHÁP THƯỜNG GẶP TRONG PASCAL

    1. Lỗi cú pháp là những lỗi phát sinh do lập trình viên viết sai những quy định về văn phạm của hệ thống hoặc ngôn ngữ. Thí dụ các lỗi sau đây là những lỗi cú pháp: (a + b * 2: thiếu dấu đóng ngoặc BEGIM: định viết BEGIN, sai N 2. Xử lý lỗi. Lỗi cú pháp được phát hiện trong quá trình dịch. Turbo Pascal báo lỗi cú pháp theo nguyên tắc “Mỗi lần chỉ báo một lỗi”. Nếu gặp lỗi ta cần trở về chế độ soạn thảo, tìm vị trí xuất hiện lỗi, sửa lại lỗi đó rồi dịch lại chương trình. Sau khi báo lỗi, Turbo Pascal sẽ chờ ta bấm phím ESC để trở về chế độ soạn thảo. Con trỏ của màn hình soạn thảo sẽ đặt ở cạnh vị trí xuất hiện lỗi, thông thường quá đi 1 ký tự. 3. Các thông báo lỗi thường gặp và gợi ý khắc phục. Lỗi 2. Identifier expected: mong gặp định danh (có thể do chưa khai báo biến, hằng…) Lỗi 3. Unknown identifier: định danh chưa được khai báo. Hãy khai báo định danh này ở đầu thủ tục hoặc chương trình.( có thể do sai chính tả một tên, từ khoá nào đó) Lỗi 4. Duplicate identifier: định danh được khai báo 2 lần trở lên. Lỗi 5. Syntax error: Lỗi cú pháp. Gặp một ký tự sai hoặc viết sai một hằng. Lỗi 6. Error in real constant: Viết sai hằng thực. Lỗi 7. Error in integer constant: Viết sai hằng nguyên. Chú ý rằng khai báo CONST c = 1234 sẽ cho ta một hằng c kiểu nguyên. Muốn có một hằng kiểu thực, ta viết CONST c = 1234.0. Những hằng có giá trị nằm ngoài khoảng -2147483648..2147483647 cần được khai báo theo kiểu thực, thí dụ: CONST c = 12345678912.0; Lỗi 8. String constant exceeds line: giá trị của xâu ký tự quả dài, xem lại có thiếu dấu đóng/mở (dấu nháy đơn) hằng văn bản không? Lỗi 10. Unexpected end of file: Cần gặp dấu kết tệp. Lỗi 10 có thể xuất hiện trong các trường hợp sau: – Trong trương trình các cặp BIGIN và END không cân đối. – Tệp khác được gọi lồng tại một vị trí không hợp lệ. – Chú thích chưa được đóng bằng dấu } hoặc * ). Lỗi 11. Line too long: Dòng dài quá Bộ soạn thảo cho phép phát sinh các dòng dài tối đa 249 ký tự trong khi khi chương trình dịch chỉ làm việc với các dòng dài tối đa 126 ký tự. Lời khuyên: Không nên viết các dòng dài quá 60 ký tự. Lỗi 12. Type identifier expected: Cần có định danh kiểu Lỗi 20. Variable identifier expected: Cần một định danh cho biến Thí dụ FOR = 4 TO 20 DO sẽ sinh lỗi 20. Lỗi 25. Invalid string length: Chiều dài xâu không hợp lệ. Chiều dài hợp lệ nằm trong khoảng 0 .. 255.

    Lỗi 26. TYPE mismatch: Kiểu không tương thích. các nguyên nhân sinh lỗi có thể là: – Biểu thức được gán cho biến không đúng kiểu. Thí dụ VAR x: char; BEGIN x: = 127 * 8 END. Lỗi 29. Ordinal type expected: Cần một kiểu thứ bậc. Trong trường hợp này không được dùng các kiểu Real, string, Record, PROCEDURE hoặc pointer. Lỗi 30. Integer constant expected: Cần một hằng nguyên Lỗi 31. Constant expected: Cần một hằng

    Lỗi 33. Type identifier expected: Cần một định danh kiểu Lỗi 36. BEGIN expected: Thiếu BEGIN

    Lỗi 37. END expected: Thiếu END Lỗi 38. Integer expssion expexted: Cần biểu thức nguyên Lỗi 39. Ordinal expssion expected: Cần biểu thức thứ bậc Lỗi 40. Boolean expssion expected: Cần biểu thức kiểu BOOLEAN Lỗi 41. Operand types do not match operator: Kiểu toán hạng không phù hợp với toán tử Lỗi 42. Error in expssion: Biểu thức sai. Thường gặp trường hợp sử dụng ký tự lạ hoặc quên viết dấu phép toán trong biểu thức. Lỗi 43. Illegal assigment: Gans Gán không hợp lệ. Không được gán trị cho biến tệp hoặc biến không định kiểu. Không được gán trị cho định danh hàm ở ngoài thân của hàm đó. Lỗi 44. Field identifier expected: Cần một định danh thường. Lỗi phát sinh khi sử dụng bản ghi (RECORD) không có trường hợp đi kèm. Lỗi 54. OF expected:Thiếu OF trong TYPE, CASE, FILE, SET, ARRAY Lỗi 57. THEN expected:Thiếu THEN trong IF Lỗi 58. TO or DOWN TO expected: Thiếu To hoặc DOWN TO trong FOR Lỗi 66. String variable expected: Cần một biến string. Lỗi 67. String expssion expected; Cần một biểu thức string.

    --- Bài cũ hơn ---

  • Cấu Trúc Một Chương Trình Pascal, Khai Báo Biến, Khai Báo Hàm
  • Các Thành Phần Cơ Bản Trong Pascal
  • Biến Toàn Cục Và Biến Cục Bộ Trong Javascript
  • Biến Toàn Cục Và Biến Địa Phương
  • Ý Nghĩa Tham Số, Tham Trị, Tham Biến
  • Chương Trình Con Trong Pascal

    --- Bài mới hơn ---

  • Bài 3: Câu Lệnh Vòng Lặp Trong Pascal (For, While, Repeat)
  • Từ Pascal Đến C/c++ (P2) – Vòng Lặp
  • Phần 3: Record Trong Pascal
  • Nội Dung Ôn Tập Tin Học 11
  • Chuyên Đề Xử Lí Bit
  • Phần này do Thạc sỹ Nguyễn Văn Linh viết và phát hành theo giấy phép CC-BY

    Đây là một phần của Ngôn ngữ Pascal

    Khái niệm : chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có thể được thực hiện ( được gọi ) từ nhiều vị trí trong chương trình (SGK tin học lớp 11 trang 91)

    Procedure Ten_thu_tuc(Danh sách các tham số cùng với kiểu dữ liệu tương ứng)

    Ví dụ:

    Trong sự đặc tả này, tham số có tên đứng sau VAR biểu thị một kết quả hoặc một tham số có thể bị thay đổi. Cú pháp của sự đặc tả này trong Ada là:

    <s

    Các phép toán nguyên thuỷ được cài đặt bằng cách dùng cấu trúc dữ liệu và các phép toán được cung cấp bởi máy tính ảo bên dưới ngôn ngữ lập trình. Chương trình con biểu diễn một phép toán được xây dựng bởi người lập trình và do đó chương trình con được cài đặt bằng cách dùng cấu trúc dữ liệu và các phép toán được cung cấp bởi chính bản thân ngôn ngữ lập trình đó. Sự cài đặt được xác định bởi thân chương trình con, bao gồm cả việc khai báo dữ liệu cục bộ xác định cấu trúc dữ liệu được dùng cho chương trình con và các lệnh xác định hành động sẽ làm khi chương trình con thực hiện.

    Sự khai báo và các lệnh thường được bao gói, người sử dụng chương trình con không thể truy xuất được tới dữ liệu cục bộ và các lệnh bên trong chương trình con. Người sử dụng chỉ có thể gọi chương trình con với một tập hợp các tham số và nhận lại các kết quả đã được tính toán. Cú pháp của Pascal đối với chương trình con là điển hình:

    FUNCTION

    FN

    (

    x

    :

    REAL

    ;

    y

    :

    INTEGER

    )

    :

    REAL

    ;

    (

    M

    ô

    t

    )

    VAR

    m

    :

    ARRAY

    [

    1

    ..

    10

    ]

    OF

    REAL

    ;

    (

    Khai

    b

    á

    o

    c

    á

    c

    đố

    i

    n

    :

    INTEGER

    ;

    t

    ượ

    ng

    d

    li

    u

    c

    c

    b

    )

    BEGIN

    .

    (

    D

    ã

    y

    c

    á

    c

    l

    nh

    x

    á

    c

    đị

    nh

    .

    h

    à

    nh

    độ

    ng

    c

    a

    ch

    ươ

    ng

    .

    tr

    ì

    nh

    con

    )

    END

    ;

    --- Bài cũ hơn ---

  • Pascal: Hằng, Biến, Biểu Thức
  • Chương Trình Con : Hàm Và Thủ Tục Trong Pascal
  • Dữ Liệu Kiểu Tệp Trong Pascal
  • Kiểu Tập Tin Trong Pascal
  • Các Lỗi Thường Gặp Trong Pascal