Viết hàm xóa tất cả các phần tử có giá trị bằng x trong dãy số A
Cách của anh @tengiday rất chuẩn và tối ưuCách của mình thì phải viết như thế này:
Mã:procedure deleteElements(var a : arr; var n, x : longint); var i, j : longint; begin j := 0; for i := 1 to n do if (a[i] <> x) then begin inc(j); a[j] := a[i]; end; n := j; end;
program test;uses crt;
type mang=array[1..100] of integer;
var i,j,x,n: integer;
A:mang;
function xoaphantu(A:mang; n,x:integer):integer;
var i,j:integer;
begin
j:=0;
for i:=1 to n do
if (A[i]) <> x then
begin
inc(j);
A[j] := A[i];
end;
n:=j;
xoaphantu:=A[j];
end;
begin
clrscr;
write('so phan tu');readln(n);
for i:=1 to n do
begin
write('Nhap phan tu thu ',i,':');
readln(a[i]);
end;
write('Nhap x:');
readln(x);
writeln('Day so sau khi xoa: ',xoaphantu(A,n,x));
readln;
end.
Procedure xoaphantu(A:mang; n,x:integer);
begin
...
end
{Nhập dữ liệu}
...
{Xuất kết quả bằng cách cho 1 vòng lặp như lúc nhập để lần lượt in ra các phần tử của mảng}
writeln('Day so sau khi xoa: ');
for i:= 1 to n do writeln(a[i]);
readln;
program baitap;uses crt;
type mang = array[1..100] of integer;
var n,i,j,x:integer;
a:mang;
procedure xoaphantu(var a:mang;var n,x:integer);
var i,j:integer;
begin
j:=0;
for i:=1 to n do
if a[i] <> x then
begin
inc(j);
a[j]:=a[i];
end;
n:=j;
end;
begin
clrscr;
write('Nhap phan tu: ');readln(n);
for i:=1 to n do
begin
write('Phan tu thu ',i,' ');
readln(a[i]);
end;
writeln('Day so truoc khi xoa');
begin
for i:=1 to n do
write(a[i],' ');
writeln;
end;
write('Nhap vao so X: ');readln(x);
writeln('Day so A sau khi xoa');
for i:=1 to n do
write(a[i]);
writeln;
readln;
end.
Bạn chưa gọi hàm mà.Mã:program baitap;uses crt; type mang = array[1..100] of integer; var n,i,j,x:integer; a:mang; procedure xoaphantu(var a:mang;var n,x:integer); var i,j:integer; begin j:=0; for i:=1 to n do if a[i] <> x then begin inc(j); a[j]:=a[i]; end; n:=j; end; begin clrscr; write('Nhap phan tu: ');readln(n); for i:=1 to n do begin write('Phan tu thu ',i,' '); readln(a[i]); end; writeln('Day so truoc khi xoa'); begin for i:=1 to n do write(a[i],' '); writeln; end; write('Nhap vao so X: ');readln(x); writeln('Day so A sau khi xoa'); for i:=1 to n do write(a[i]); writeln; readln; end.
Khi in ra nó vẫn là mảng cũ không xóa đi đc phần tử nhập vào
Anh @tengiday nói chuẩn rồi, bạn cần gọi hàm (thủ tục) trước khi in ra mảng. Hàm được tạo ra để dùng gọi nhiều lần trong cả chương trình to, riêng bài này thì cũng chả cần tạo hàm làm gì cả, vì dùng mỗi 1 lần thôi mà.Bạn chưa gọi hàm mà.
http://doc.edu.vn/tai-lieu/pascal-tham-so-tri-va-tham-so-bien-59381/