我的PASCAL 选择排序 哪里出错了?

来源:百度知道 编辑:UC知道 时间:2024/06/20 23:47:44
program xuanzepaixu;
var
a:array [1..10] of integer;
i,m,n,q:integer;
procedure temp(a,b:integer) ;
var c :integer;
begin
c:=0;
c:=a; a:=b; b:=c;
end;

begin
m:=1;
read(q);
writeln('qing shu ru' );
for i:= 1 to q do
begin
read(a[i]);
end;
begin
for n:= m to q-1 do
begin
if a[n]>a[n+1]
then
begin
temp(a[n],a[n+1]);
end;
m:=m+1;
readln
end;
begin
for i:= 1 to 10 do
writeln(a[i]) ;
readln
end;
end;
end.
有点笨 赐教!

错误一:
procedure temp(a,b:integer) ;
var c :integer;
begin
c:=0;
c:=a; a:=b; b:=c;
end;

这个函数有问题
pascal函数参数定义包括形参和实参
形参仅传递数值进函数,函数内部的修改不能改变原来的值,调用的时候可以用数值、表达式、变量都可以
而实参是传递变量的地址,函数内部修改可以修改其原来的值,调用时只能用变量调用。
你的这个temp函数应该是交换阿、b两个整数的值,所以必须用实参
应该如此定义:
procedure temp(var a,b:integer) ;

错误二:越看错误越多……
懒得解释了,直接给你修改算了

program xuanzepaixu;
var
a:array [1..10] of integer;
i,m,n,q:integer;
procedure temp(var a,b:integer) ;
var
c :integer;
begin
c:=a; a:=b; b:=c;
end;
begin
m:=1;
read(q);
writeln('qing shu ru' );
for i:= 1 to q do
read(a[i]);
repeat
for n:= m to q-1 do
if a[1]>a[n+1]
then temp(a[n],a[n+1]);
m:=m+1;
until m=q;
for i:= 1 to 10 do
writeln(a[i]) ;
readln
end.

楼上的修改问题很大,上面的函数定义错误没有修改不说,程序也被你改得更错了。

错误一: