Chủ Nhật, 3 tháng 3, 2013

Một số bài tập pascal về danh sách liên kết đơn(P2)


Bài tập số 3

Dùng ngôn ngữ lập trình Pascal để thực hiện công việc sau:
Tạo một danh sách liên kết đơn n phần tử (n>0) chứa các số nguyên ngẫu nhiên. Xác định xem phần tử x nhập vào từ bàn phím có nằm trong danh sách hay không? Nếu có thì ở những vị trí nào? In ra các phần tử của danh sách.

Bài tập số 4

Dùng ngôn ngữ lập trình Pascal để thực hiện công việc sau:
Tạo một danh sách liên kết đơn n phần tử (n>0) chứa các số nguyên ngẫu nhiên. Hãy in ra các phần tử của danh sách và cho biết giá trị của phần tử thứ k của danh sách là bao nhiêu ? Loại bỏ phần tử thứ k khi k=1.


Bài tập số 5
Dùng ngôn ngữ lập trình Pascal để thực hiện công việc sau:
Tạo một danh sách liên kết đơn n phần tử (n>0) chứa các số nguyên ngẫu nhiên. Hãy đếm xem trong danh sách có bao nhiêu số chẵn, bao nhiêu số lẻ, bao nhiêu số âm, bao nhiêu số dương? Hãy in ra màn hình lần lượt từng loại các phần tử tương ứng trên.
Nối tiếp vào bài 1 và 2
code

Function TimKiem (P: Contro; x: Integer): Contro;
{Ham thuc hien kiểm tra trong sanh sách P có chứa giá trị x hay không, kết quả trả về là địa chỉ nut chứa x}
Var R: Contro;
Begin
R:=P;
While (R^.Value <> x) and (R <> Nil) do
R:=R^.Next;
TimKiem:=R;
End;
Function ViTri (P: Contro; k: Integer): Contro;
{Ham thuc hien tra lai dia chi cua nut tai vi tri thu k trong danh sach P}
Var R: Contro; i: integer;
Begin
R:=P; i:=1;
While (i<k) and (R <> Nil) do
Begin
R:=R^.Next;
i:=i+1;
                        end;
ViTri:=R;
End;
Procedure Xoa (Var P: Contro; M: Contro);
{Thu tuc thuc hien loai bo nut M khoi danh sach P}
Var R: Contro;
Begin
If M=P then P:=P^.Next
Else
Begin
R:=P;
While R^.Next<>M do
            Begin
R:=R^.Next;
R^.Next:=M^.Next;
end;
Dispose(M);
end;
end;
Procedure TimX (P: Contro);
{Thu tuc thu hien dua ra vi tri cua nut co gia tri bang x trong danh sach P, voi x nhap tu ban phim}
Var R: Contro; x: integer;
Begin
Write('Nhap gia tri can tim: ');Readln(x);
R:=TimKiem(P,x);
If R<>Nil then
Begin
Writeln('Tim thay gia tri ',x,' trong danh sach. Tai cac vi tri:');
Writeln(R);
While R^.Next<>Nil do
Begin {Ham TimKiem da thuc hien duyet danh sach, khi ket thuc moi lan tim kiem con tro R se tro den 1 nut nao do trong danh sach, hoac het danh sach} R:=TimKiem(R^.Next,x);
If R<>Nil then Writeln(R);
End;
End
Else
Writeln('Khong tim thay gia tri ',x,' trong danh sach.');
End;
Function DemSoAm(P: Contro): Integer;
{Ham dem so am trong danh sach}
Var R: Contro; T: Integer;
Begin
T:=0;
R:=P;
While R<>Nil do
Begin
If R^.Value<0 then T:=T+1;
R:=R^.Next;
End;
DemSoAm:=T;
End;
Function DemSoDuong(P: Contro): Integer;
{Ham dem so duong trong danh sach}
Var R: Contro; T: Integer;
Begin
T:=0;
R:=P;
While R<>Nil do
Begin
If R^.Value>0 then T:=T+1;
R:=R^.Next;
End;
DemSoDuong:=T;
End;
Function DemSoChan(P: Contro): Integer;
{Ham dem so chan trong danh sach}
Var R: Contro; T: Integer;
Begin
T:=0;
R:=P;
While R<>Nil do
Begin
If (R^.Value mod 2 = 0) then T:=T+1;
R:=R^.Next;
End;
DemSoChan:=T;
End;
Function DemSoLe(P: Contro): Integer;
{Ham dem so le trong danh sach}
Var R: Contro; T: Integer;
Begin
T:=0;
R:=P;
While R<>Nil do
Begin
If (R^.Value mod 2 = 1) then T:=T+1;
R:=R^.Next;
End;
DemSoLe:=T;
End;
Procedure InSoAm(P: Contro);
{Thu tuc in so am trong danh sach}
Var R: Contro;
Begin
T:=0;
R:=P;
While R<>Nil do
If R^.Value<0 then
Write(R^.Value);
Writeln;
End;
Procedure InSoDuong(P: Contro);
{Thu tuc in so duong trong danh sach}
Var R: Contro;
Begin
T:=0;
R:=P;
While R<>Nil do
If R^.Value>0 then Write(R^.Value)
Writeln;
End;
Procedure InSoChan(P: Contro);
{Thu tuc in so chan trong danh sach}
Var R: Contro;
Begin
T:=0;
R:=P;
While R<>Nil do
If (R^.Value mod 2 = 0) then Write(R^.Value);
Writeln;
End;
Procedure InSoLe(P: Contro);
{Thu tuc in so le trong danh sach}
Var R: Contro;
Begin
T:=0;
R:=P;
While R<>Nil do
If (R^.Value mod 2 = 1) then Write(R^.Value);
Writeln;
End;
Procedure TimNutThuK (P: Contro);
{Thu tuc tim nut thu k trong danh sach, va xoa nut dau tien neu k=1, voi k nhap tu ban phim}
Var k: integer; R:Contro;
Begin
Write('Nhap vi tri nut can xem: ');
Readln(k);
R:=ViTri(P,k);
If R=Nil then Write('Khong tim thay nut thu ',k)
else Writeln('Gia tri cua nut thu ',k,'la ',R^.Value);
If k=1 then
Begin
Xoa(P,P);
Writeln('Danh sach sau khi xoa');
HienthiDanhsach(P);
End;
End;

Phần thân chính.
TimX (P);
TimNutThuK (P);
Writeln('So luong so le co trong sanh sach: ',DemSoLe(P));
Writeln('So luong so chan co trong sanh sach: ',DemSoChan(P));
Writeln('So luong so am co trong sanh sach: ',DemSoAm(P));
Writeln('So luong so duong co trong sanh sach: ',DemSoDuong(P));
Write('So am: ');
InSoAm(P);
Write('So duong: ');
InSoDuong(P);
Write('So chan: ');
InSoChan(P);
Write('So le: ');
InSoLe(P);


Không có nhận xét nào: