So sánh ngôn ngữ lập trình Pascal và C

Trang web này phụ thuộc vào doanh thu từ số lần hiển thị quảng cáo để tồn tại. Vui lòng tắt trình chặn quảng cáo của bạn hoặc tạm dừng tính năng chặn quảng cáo cho trang web này.
So sánh ngôn ngữ lập trình Pascal và C

#include void hoandoi(int *x,int *y) { int tg; tg=*y; *y=*x; *x=tg; } int main() { int a[30][30],b[30][30]={0},i,j,n; FILE *fi,*fo; fi = fopen("HV.INP", "r"); fo = fopen("HV.OUT", "w"); fscanf(fi,"%d",&n); for (i=0;i

Hầu hết chúng ta đều biết và sử dụng ngôn ngữ lập trình Pascal. Đó là ngôn ngữ được sử dụng nhiều nhất trong các kì thi tin học ở nước ta hiện nay. Tuy nhiên, C cũng là một ngôn ngữ được sử dụng rộng rãi để giải các bài toán tin học; đôi khi nó cung cấp một số thuận lợi nhất định so với Pascal.

Chủ đề này sẽ giúp các bạn nắm được các khái niệm cơ bản của C, thông qua đối chiếu với ngôn ngữ Pascal, từ đó áp dụng vào việc giải các bài toán tin học, hoặc chỉ đơn giản là muốn chuyển từ môi trường Pascal sang C. Sau khi đọc xong bài viết này, bạn cũng có thể chuyển đổi một chương trình giải toán bằng Pascal sang ngôn ngữ C.

Nếu bạn đã thông thạo ngôn ngữ Pascal, thì bài viết này sẽ giúp bạn hiểu C nhanh chóng hơn việc đọc tòan bộ một quyển giáo trình dạy C.

Đều là những ngôn ngữ lập trình có cấu trúc nên mỗi khái niệm trong Pascal có một khái niệm tương ứng , hoặc tương tự, trong C; chỉ có cú pháp, câu lệnh là khác nhau. C tương đối khó hơn vì cú pháp của nó tự do hơn, dẫn đến những lỗi khó phát hiện trong khi viết chương trình.

Trong bài viết này, bạn cũng gặp một số khái niệm của ngôn ngữ C mà Pascal không có. Phần lớn những khái niệm này liên quan đến con trỏ (pointer).

Một số lưu ý cơ bản:

  1. C không cho phép các thủ tục lồng nhau, vì vậy bạn phải lọai bỏ các thủ tục lồng nhau trong chương trình Pascal trước khi chuyển nó sang ngôn ngữ C.
  2. Ngôn ngữ C phân biệt ký tự thường và ký tự hoa: AAA, aaa và Aaa là 3 tên gọi khác nhau.

Dưới đây là một chương trình C rất đơn giản tính giai thừa của 6. Bạn nên gõ lại chứ đừng copy đoạn mã; như thế sẽ giúp bạn thuộc cú pháp của C nhanh hơn.

Dòng C Pascal
0 program samp;
1 #include uses crt;
2 #define VALUE 6 const value=6;
3 int i,j; var i,j:integer;
4 void main()
5 { begin
6     j=1;     j:=1;
7     for (i=1; i<=VALUE; i++)     for i:=1 to value do
8         j=j*i;         j:=j*i;
9     printf(“Giai thừa của %d là %d\n”,VALUE,j);     writeln(‘Giai thừa của ‘,value,’ là ‘,j);
10 } end.

Bạn có thể thấy tương ứng giữa những câu lệnh. Khác biệt duy nhất là đọan chương trình C bắt đầu bằng #include . Dòng này đưa thư viện I/O chuẩn vào chương trình để bạn có thể đọc/viết các giá trị, xử lý file văn bản, v.v… C có rất nhiều các thư viện chuẩn như stdio, string, time, math, v.v… Còn phía Pascal, đó là lệnh uses.

Ngoài ra, Pascal có program để đặt tên cho chương trình, tuy nhiên, C thì không cần nên nó có thể coi là vô dụng.

Dòng #define định nghĩa một hằng. Lệnh int i,j; khai báo 2 biến tòan cục kiểu số nguyên Các kiểu dữ liệu thông dụng khác là float (số thực), char (ký tự), cả hai đều có thể định nghĩa theo cùng cú pháp như trên. Pascal sử dụng const để khai báo các hằng.

Dòng main() khai báo thủ tục chính. Mọi chương trình C đều phải có một thủ tục có tên “main”. Trong C, 2 dấu ngoặc kép {} thay thế cho beginend của Pascal. Tượng tự, phép gán = thay thế cho :=. Vòng lặp for và lệnh printf hơi lạ một chút, nhưng chúng có cùng chung chức năng như các dòng lệnh tương ứng trong chương trình Pascal (write và writeln). Lưu ý C sử dụng dấu ngoặc kép thay vì dấu nháy đơn ( )  đối với chuỗi ký tự.

Khi bạn quen, lệnh printf của C sẽ dễ sử dụng hơn lệnh write/writeln trong Pascal. Phần trong dấu ngoặc kép được gọi là chuỗi định dạng (format string); nó mô tả dữ liệu được định dạng thế nào khi viết ra. Chuỗi định dạng chứa những chữ như Giai thừa của x, \n (kí tự xuống dòng), và các toán tử xác định vị trí của các biến. Hai toán tử trong chuỗi định dạng trên (%d %d) cho biết các giá trị nguyên trong chuỗi tham số phía sau sẽ được in ra tại vị trí này. Có những toán tử khác dành cho số thực, kí tự, chuỗi, v.v… Bạn có thể dùng phần hướng dẫn của Turbo C chẳng hạn để xem danh sách các toán tử này. Một điều quan trọng là các tham số đi đằng sau phải có kiểu đúng như các toán tử trong chuỗi định dạng. Ví dụ bạn không thể viết %d nhưng tham số tương ứng đằng sau lại là một biến kiểu float.

Chương trình trên chạy tốt, nhưng có thể được cải tiến bằng cách đọc thẳng giá trị thay vì sử dụng hằng số. Bạn hãy sửa lại chương trình, lọai bỏ hằng VALUE, thay vào đó khai báo value như một biến toàn cục. Sau đó thêm hai dòng sau vào đầu thủ tục main (tương ứng với Pascal):

Dòng Pascal C
1 write(‘Nhập giá trị:’); printf(“Nhập giá trị:”);
2 readln(value); scanf(“%d”,&value);

Lệnh scanf cùng sử dụng một kiểu chuỗi định dạng như printf (bạn hãy xem phần help để biết thêm chi tiết). Bạn cũng cần lưu ý dấu & trước biến value. Đây là toán tử địa chỉ (address operator) của C: nó trả về địa chỉ của biến; nhưng chúng ta sẽ bàn điều này sau khi đề cập đến kiểu con trỏ. Bạn phải sử dụng dấu & trong lệnh scanf trước bất kỳ biến nào kiểu char, int, float, hoặc kiểu những kiểu record (chúng ta sẽ để cập kiểu record sau). Nếu bạn gõ thiếu dấu &, bạn sẽ gặp lỗi “segmentation fault” khi chạy chương trình.

Những lỗi cần tránh:

  • Quên dấu & trong lệnh scanf.
  • Quên dấu */ ở cuối của dòng chú thích.

Đây là phần mở đầu giữa sự khác biệt căn bản trong cấu trúc của C và Pascal. Bài tiếp theo chúng ta sẽ xem những thay đổi cú pháp trong các vòng lặp.

Cheers,

Vì cần nhiều lời khuyên khi chuyển từ pascal sang c và lần đâu tiên học C nên mong mọi người cho cháu ý kiến và lời khuyên khi học C, điều gì của pascal có thể giống hoặc khác C ạ!

Lời khuyên: Quên đi những gì liên quan đên ngôn ngữ lập mình đã hoc trước đó, và hãy học ngôn ngữ mới như mới bắt đầu học lập trình

So sánh ngôn ngữ lập trình Pascal và C
So sánh ngôn ngữ lập trình Pascal và C

5 Likes

Pascal là ngôn ngữ case-insensitive, tức là không phân biệt chữ hoa chữ thường, C thì có phân biệt chữ hoa chữ thường, ví dụ biến x khác với biến X.
Theo mình thì cú pháp của Pascal khá khó chịu. Học Pascal để làm quen với lập trình trong trường học chứ ứng dụng thực tế của nó thì không nhiều.

2 Likes

C không hỗ trợ lập trình hướng đối tượng Còn Pascal hỗ trợ lập trình hướng đối tượng ! …

Không nghịch C và Pascal nên k biết nhìu hun !

2 Likes

Cảm ơn bạn thông não giùm mình, hồi đó giờ học Pascal mình cứ nghĩ nó chỉ có hướng thủ tục :))

1 Like

Mình cũng vừa mới biết đc tầm 1 tháng ! Căn bản sách Tin học dạy ở Trung học của chúng ta đc viết hơn chục năm trc đến hơn chục năm sau vẫn k chịu sửa đổi nên đến giờ vẫn ghi : Pascal là ngôn ngữ lập trình hướng thủ tục

Mình cũng có biết đâu , do 1 lần cãi nhau vs 1 đứa về sự lỗi thời của Pascal mới biết là nó có hướng đối tượng từ thuở nào rùi

So sánh ngôn ngữ lập trình Pascal và C

4 Likes

Lập trình hướng đôí tượng và hướng thủ tục là sao ạ?

So sánh ngôn ngữ lập trình Pascal và C

2 Likes

So sánh ngôn ngữ lập trình Pascal và C
Pham_Phuc:

Lập trình hướng đôí tượng và hướng thủ tục là sao ạ?

So sánh ngôn ngữ lập trình Pascal và C

Bạn có thể paste câu hỏi của bạn nên Google và xem câu trả lời !

1 Like

Theo ý mình thì C và pascal khác nhau cơ bản nhất đó là cấu trúc của ngôn ngữ, vì C có thể viết theo thủ túc (procedure) và OOP còn pascasl thì chỉ có procedure… còn mọi thứ thì giống nhau, nhưng C hơn pascal đó là C/C++ có hỗ trợ UI

có gì đó sai sai C có OOP?

Pascal không có OOP?

Mình đọc nhiều tài liệu thì k hề thấy pascal có đề cập tới OOP, nhưng C/C++ thì có

Chưa cặp bồ với hai thằng này bao giờ nên cũng chưa hiểu nhau lắm. C không có hướng đối tượng còn Pascal thì có. C được ứng dụng nhiều ( Được dùng để viết Driver, mà đi đâu cũng có phần cứng, tất nhiên

So sánh ngôn ngữ lập trình Pascal và C
) còn Pascal thì chủ yếu được dùng dạy trong trường học. Sẽ học C nhưng không bao giờ nghịch Pascal
So sánh ngôn ngữ lập trình Pascal và C

  • Thứ nhất, những tài liệu bạn đọc không thấy đề cập đến OOP không có nghĩa là nó không có OOP, mà các tài liệu pascal hiện tại ở VN chủ yếu là trong sách tin học THPT và các sách phục vụ giải thuật, thi đấu, thì không thấy OOP là bình thường. Pascal có OOP, và có thể dùng FPC hoặc Lazarus Pascal để làm, với FPC thì bật mode {$mode objfpc} lên
  • Thứ hai, C KHÔNG CÓ OOP, chỉ C++ mới có (đó cũng là lý do một số tài liệu hoặc diễn đàn mô tả C++ là “C with OOP”, tất nhiên nó không hoàn toàn đúng)

6 Likes

Bạn thấy Pascal có String, tức là nó có đối tượng rồi

So sánh ngôn ngữ lập trình Pascal và C

không phải, string trong pascal bản chất cũng chỉ là array of char thôi nhưng nó được hỗ trợ bằng các hàm đặc biệt dành riêng cho nó
Bằng chứng là với String pascal, thì phần tử đầu tiên của nó sẽ lưu lại độ dài chuỗi, còn dữ liệu được lưu từ vị trí 1 trở đi (đó là lý do vì sao string trong pascal chỉ chứa tối đa 255 kí tự)

6 Likes

Nếu bạn tìm hiểu sâu về pascal bạn sẽ thấy rất rõ. Thứ nhất, pascal có rất nhiều kiểu string, widestring, unicodestring, ansistring, shortstring (255 kí tự). Chỉ có shortstring mới là mảng kí tự, còn hầu hết kiểu chuỗi pascal hiện đại ngày nay được tạo ra từ con trỏ, PWideChar, PChar, … Tài liệu tiếng việt quá quá cũ rồi, đừng tin vào những gì quá lỗi thời, muốn thông tin chính xác lên wiki tiếng Anh của free pascal mà xem.

(Sorry vì đã đào lại bài cũ, lâu lâu xem lại thấy khó chịu nên rep, xin đừng ném đá)

3 Likes

Thanks for rep

So sánh ngôn ngữ lập trình Pascal và C

Thì mảng nó cũng thực chất là con trỏ thôi, shortstring vẫn dùng phần tử [0] để lưu lại.
Ngay cả những ngôn ngữ bậc cao thì nó vẫn truyền xuống ngôn ngữ bậc thấp xử lí cái đó, qua lại thì nó vẫn là con trỏ, quan trọng là time-life của nó đến bao giờ thôi.

2 Likes

mình cũng học pascal rồi mới học c

1 Like

Không nhé bạn, thư viện Crt của Pascal không chứa bất kì hàm toán học nào.
Xem thêm ở đây https://www.freepascal.org/docs-html/3.0.0/rtl/crt/index-5.html
Các hàm toán học pascal chứa trong unit System và math nhé

1 Like

next page →

Home Categories FAQ/Guidelines Terms of Service Privacy Policy