Kiểu dữ liệu có cấu trúc dạng con trỏ (Pointer)

M

megamanxza

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

E hèm!
Theo yêu cầu của bác Lâm Đê Tiện, à quên lamdetien, hôm nay em xin mở một topic mới huớng dẫn một kiểu dữ liệu mới của ngôn ngữ lập trình Pascal. Và topic đó chính là:




:khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4)::khi (4):

Huớng dẫn cơ bản về kiểu dữ liệu có cấu trúc dạng con trỏ

:khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176)::khi (176):​

Dù đây là một khái niệm có lẽ còn khá mới với học sinh chúng ta, nhưng hi vọng các bác ủng hộ! :)>-
Các bác có thể ủng hộ em bằng cách nhấn Thanks để em có tinh thần viết tiếp! Nếu không thì đừng ném đá, WOW Lu Gạch hay mấy thứ đại loại khác:khi (164):! 1 năm gắn bó với Haivl đã cho em một số gạch đủ xây nhà lầu rồi! Không cần thêm nữa đâu!:khi (132):

Mỗi ngày em sẽ up một phần. Bắt đầu nào! Cuộn thanh cuốn xuống phía duới đi! :khi (24):
 
M

megamanxza

Phần 1
Khái niệm về con trỏ

1/ Con trỏ là gì?
-Con trỏ là một kiểu dữ liệu đặc biệt, có hầu hết trong mọi ngôn ngữ lập trình.
-Một biến con trỏ sẽ chứa địa chỉ trong bộ nhớ của một dữ liệu trong kiểu cơ sở. Do chỉ chứa địa chỉ, nên kích thuớc biến con trỏ là không hạn chế cho mọi kiểu của con trỏ.
2/ Định nghĩa kiểu con trỏ
-Một kiểu con trỏ được định nghĩa bằng dấu ^tên kiểu mà con trỏ chỉ tới.
-Nếu P1 là một biến kiểu con trỏ, thì dữ liệu thuộc kiểu cơ sở mà P1 chỉ đến sẽ được kí hiệu là: P1^.
Ví dụ:
Mã:
[COLOR="Blue"][SIZE="3"]Type
  Hocsinh = Record
    Hoten : String [40];
    Lop : String [5];
  end;
  HSPT = ^Hocsinh;
var
  HS1, HS2, HS3: Hocsinh;
  P1, P2, P3: HSPT;[/SIZE][/COLOR]
-Thì P1, P2, P3 là địa chỉ của các dữ liệu kiểu Hocsinh.
-Hocsinh là kiểu cơ sở của kiểu HSPT.


{Còn nữa......}

Vậy là xong phần một! Phần hai em sẽ up lên vào ngày mai (ngày 20/7/2013). Hãy Thanks để ủng hộ! ;)
 
T

thienvamai

theo mình, con trỏ chỉ đơn giản là 1 địa chỉ của 1 biến chứ ko phải là 1 kiểu dữ liệu đặc biệt nào cả (nếu có là kiểu dữ liệu thì nó cũng không đặc biệt)
 
L

lamdetien36

theo mình, con trỏ chỉ đơn giản là 1 địa chỉ của 1 biến chứ ko phải là 1 kiểu dữ liệu đặc biệt nào cả (nếu có là kiểu dữ liệu thì nó cũng không đặc biệt)
Em có coi thử con trỏ bên C/C++, toàn mấy thứ quái dị: hằng con trỏ, con trỏ hằng, con trỏ hàm, tham biến, tham trị, ... @-)
Hy vọng là con trỏ trong Pascal đơn giản hơn, với lại em cũng muốn hiểu rõ về con trỏ để mà còn học CTDL nữa :)

Mai nhớ up tiếp nhé megamanzxa :)
 
M

megamanxza

Em có coi thử con trỏ bên C/C++, toàn mấy thứ quái dị: hằng con trỏ, con trỏ hằng, con trỏ hàm, tham biến, tham trị, ... @-)
Hy vọng là con trỏ trong Pascal đơn giản hơn, với lại em cũng muốn hiểu rõ về con trỏ để mà còn học CTDL nữa :)

Mai nhớ up tiếp nhé megamanzxa :)

Ô Kê gà đen! Mai em sẽ up tiếp như đã hứa!
Chỉ cần Thanks là đuợc! =))
 
M

megamanxza

Phần 2
Các thủ tục, hằng, toán tử dùng trong con trỏ

1/ Thủ tục New
-Khi chúng ta khai báo một biến con trỏ, thì nội dung của nó (địa chỉ) là không biết được. Chúng ta sẽ dùng thủ tục New để khởi động biến con trỏ đó. Và lúc này máy sẽ cung cấp một vùng nhớ có kích thước chứa đủ một dữ liệu thuộc kiểu cơ sở.
Ví dụ: với biến con trỏ P1 ở trên, ta thực hiện:
Mã:
[COLOR="Blue"][SIZE="3"]New (P1);
P1^.Hoten='Nguyen Dai Thang';
Readln (P1^Lop);[/SIZE][/COLOR]
-Vì P1 là một biến thuộc kiểu Hocsinh, do đó chúng ta có thể gán: HS1:=P^; hoặc P^:=HS2;.
Ghi chú:
-Nếu là các biến con trỏ, các bạn có thể gán cho nhau. Ví dụ: P2=P1 (P2 sẽ chứa một địa chỉ giống P1 chứa).
-Giả sử bạn dùng phát biểu Writeln (P2^.Hoten); thì Nguyen Dai Thang sẽ đuợc in ra màn hình, vì lúc này P2^P1^ là một.

2/ Thủ tục Dispose
-Dispose (P1); sẽ trả vùng nhớ đuợc cấp phát cho P1 trở về bộ nhớ chính, không dùng nữa. Lúc này biến P1 có giá trị không xác định và P1^ cũng vậy.

3/ Hằng Nil
-Khi chúng ta gán P1:=Nil thì P1 không chỉ đến dữ liệu nào cả (không chứa địa chỉ). Xem như con trỏ rỗng!

4/ Toán tử @
-Biểu thức @x cho ta địa chỉ của biến x.


{Còn nữa......}

Vậy là xong phần hai! Phần ba em sẽ up lên vào ngày mai (ngày 21/7/2013). Hãy Thanks để ủng hộ! ;)
 
M

megamanxza

Phần cuối
Bài tập thực hành

1/Bài tập mẫu

Viết chương trình dùng con trỏ để nhập vào danh sách các học sinh, khi không nhập nữa thì nhập chữ k. Sau đó sẽ in ra màn hình danh sách vừa nhập.

Mã:
[COLOR="blue"][SIZE="3"]Program Controhocsinh;
Type
  Phocsinh= ^Hocsinh;
  Hocsinh= Record
    stt: integer;
    hoten: string[40];
    lop: string[5];
    next: Phocsinh;
  end;
var P, Q: Phocsinh;
      i: integer;
      hoi: char;
begin
clrscr;
P:=Nil;
i:=1;
repeat
  New(Q);
  Q^.Next:=P;
  P:=Q;
  write ('Nhap ho va ten hoc sinh: '); readln (Q^.hoten);
  write ('Nhap lop hoc sinh: '); readln (Q^.Lop);
  Q^.stt:=i;
  inc (i);
  write ('Nhap tiep hay khong? Chon C/K: '); readln (hoi);
  readln (hoi);
until hoi='K';
clrscr;
writeln ('Danh sach hoc sinh');
P:=Q;
while P<>Nil do
  begin
    writeln ('So thu tu: ',P^.stt);
    writeln ('Ho ten hoc sinh: ',P^.hoten);
    writeln ('Lop: ',P^.Lop);
    P:=P^.Next);
  end;
readln
end.[/SIZE][/COLOR]

Giải thích:
-Đầu tiên khai báo kiểu con trỏ chỉ tới Hocsinh.
-Kiểu Hocsinh là kiểu Record có 3 thành phần: stt, hotenlop.
-Khai báo biến PQ có kiểu con trỏ.
-Biến i có kiểu nguyên chỉ số thứ tự.
-Biến hoi có kiểu Char, chứa kí tự 'C' hoặc 'K' dùng để báo nhập tiếp hay không.
-Vòng lặp Repeat...Until để nhập danh sách học sinh.
-Vòng lặp While...do để in danh sách học sinh.

2/ Bài tập

1/ Viết chương trình nhập kết quả thi HSG cấp thành phố của trường trong năm học 2004-2005 với các thông tin: Họ và tên, năm sinh, nơi sinh, lớp, môn thi, điểm, kết quả, và in ra màn hình.

2/ Viết chương trình nhập kết quả điểm HKII của học sinh gồm: Họ và tên, Văn, Toán, Ngoại ngữ, Lý , Hoá, Sinh, Kĩ Thuật, Sử, Địa, Công dân, Thể dục, Nhạc, Hoạ, Học lực, Hạnh kiểm.


HẾT

Vậy là đã xong chuyên đề Dữ liệu kiểu Con trỏ! Hi vọng các bạn có thêm những kiến thức mới về kiểu dữ liệu này, cũng như thêm yêu môn Tin học Lập trình và ủng hộ box Tin hơn ;)! Chứ dạo này Box Tin trầm vãi /:)!

P/s: các bác Thanks ủng hộ cả ba phần giùm em đi ạ! Mòn mỏi gõ tay+ biên soạn liên tiếp 3 ngày mà đuợc có vài Thanks !
 
  • Like
Reactions: domanhhung9169
Top Bottom