Viết thủ tục và chương trình chèn phần tử X vào vị trí k trong mảng A, N phần tử. Xoá phần tử ở vị trí h trong mảng A.
Ví dụ: A : 12 2 3 6 5 17
X = 20 , k = 3 h = 2
Kết quả chèn: 12 2 3 20 6 5 17
Kết quả xoá: 12 2 20 6 5 17
Hướng dẫn:
Ý tưởng thuật toán:
Viết thủ tục chèn một phần tử X vào vị trí k nào đó cho mảng A (có N phần tử).
+ Dịch chuyển các phần tử từ vị trí k đến N-1 lùi một vị trí, trở thành các phần tử từ vị trí k+1 đến N. Lưu ý, để tránh trường hợp các phần tử đè lên nhau, giải thuật phải tiến hành di dời các phần tử sau trước….đến các phần tử k sau.
+ Gán giá trị cho A[k] là x.
+ Tăng số lượng phần tử của A lên 1, như thế N phải được truyền theo dạng tham biến
Ý tưởng thuật toán
Viết thủ tục xoá một phần tử ở vị trí k trên mảng A (có N phần tử).
+ Dịch chuyển các phần tử từ vị trí k đến N-1 tiến về trước một vị trí, trở thành các phần tử từ vị trí k-1 đến N-2.
+ Giảm số lượng phần tử của A xuống 1, như thế N phải được truyền theo dạng tham biến .
Nội dung các thủ tục chính xây dựng:
{ 1. Thu tuc chen phan tu }
Procedure ChenPhanTu( A:Mang20;Var N : Integer; k, X:Integer);
Var i :Integer;
Begin
For i:=N downto k+ 1 do
A[i] := A[i-1];
A[k] := X;
N:=N+1;
End;
{ 2. Thu tuc xoa phantu }
Procedure XoaPhanTu( A:Mang20; Var N ,k:Integer);
Var i :Integer;
Begin
For i:=k to N-1 do
A[i] := A[i+1];
N:=N-1;
End;
Source code chương trình chính:
BEGIN
NhapMang1C(A, N); { Ham nhap xuat khong lam lai nua }
XuatMang1C(A, N); { Su du let qua o truoc }
Write('Gia tri x:'); Readln(x);
Write('Vi tri k,h:'); Readln(k,h);
Writeln('Ket qua chen vao la:');
ChenPhanTu(A, N, k, x);
XuatMang1C(A, N);
Writeln('Ket qua xoa phan tu o vi tri la:', h);
XoaPhanTu(A, N, h);
XuatMang1C(A, N);
Readln;
END
Chương trình con: Thủ tục và Hàm
Viết chương trình chuyển đổi số tự nhiên N cho trước sang hệ cơ số 2 bằng việc xây dựng hàm chuyển đổi.
Hướng dẫn:
Xây dựng hàm Dec2Bin( ) chuyển đổi từ số tự nhiên sang số nhị phân.
o Sử dụng biến S để lưu giá trị số nhị phân của N. Khởi gán bằng 0.
o Tiến hành lặp chuyển đổi cơ số: Lặp trong khi mà N > 0
SoDu = số dư của N chia cho 2.
N = N chia cho 2.
Bổ sung chữ số SoDu vào số S thành một chữ số
Trả về kết quả cuối cùng của S.
Viết thân chương trình chính với nội dung dùng để kiểm tra kết quả thực hiện của hàm.
o Khai báo biến N, M
o Thông báo nhập, nhập giá trị cho biến N
o Gán giá trị M bằng kết quả trả về của hàm Dec2Bin( N )
o In thông báo về kết quả số nhị phân chuyển đổi được (giá trị của M)
o Gọi hàm readln trước khi kết thúc chương trình
Chương trình:
Program Doi_Co_So;
Uses crt;
Var N:integer;
{ 1. Thu tuc chuyen so tu nhien n cho truoc sang ket qua tra ve he co so 2 }
Function Dec2Bin ( n:integer ):integer;
Var S,So,Du:integer;
Begin
S := 0; So := n ;
While ( So > 0) do
Begin
Du := So mod 2 ;
So := So div 2 ;
S := S * 10 + Du;
End;
Dec2Bin:= S ;
End;
{ 2. Than chuong trinh chinh dap ung yeu cau bai toan }
BEGIN
clrscr;
write( 'Nhap so N =' ); readln(N );
writeln(' Dang nhi phan cua N la ', Dec2Bin(N) );
readln;
END.