uses crt;
var i,k,j,n,tam,dem,x:integer;
a: array [1 50] of integer;
begin
clrscr;
write('n=');readln(n);
for i:= 1 to n do
begin
write('a[',i,']='); readln(a[i]); end;
for i:= 1 to n-1 do
for j:= i+1 to n do
begin
if A[i]<a[j] then
begin
tam:=a[i];a[i]:=a[j];a[j]:=tam; end;
end;
write('mang sau khi sap xep');
for j:=1 to n do
write(a[j]:5);
writeln;
{Chèn vào vị trí theo thứ tự đã sắp xếp}
begin
Write('Nhap vao so nguyen x : ');readln(x);
{Tìm vị trí cần chèn}
i := 1;
k:= n+1;
while (i<=n) and (k=n+1) do
begin
if x > a[i] then k := i;
i:= i + 1;
end;
{Nếu x>a[i] thì k:= i (i là vị trí mà ta cần chèn vào) lúc này điều kiện k=n+1 trong vòng lặp while do sai nên thoát khỏi vòng lặp while do trên, nếu x<=a[i] thì không gán k:=i mà thực hiện tăng giá trị i bằng lệnh i:=i+1; quay trở lên vòng lặp và kiểm tra điều kiện (i<=n) and (k=n+1}
{Đưa số nguyên x vào vị trí cần chèn}
for i := n downto k do a[i + 1] := a[i]; {dãn ra 1 vị trí từ cuối dãy đến vị trí k thoát khỏi vl} a[k]:= x; {sau khi thoát khỏi vòng lặp a[k] nhận giá trị của số nguyên x}
writeln('DAY SAU KHI CHEN x:');
for i := 1 to n + 1 do write(a[i]:5);
end;
readln;
end