Thuật toán liệt kê hoán vị

Mình đọc trong sách Giải thuật và lập trình của tác giả Lê Minh Hoàng, mình chạy thử code bằng fpc thì lỗi exitcode 2, ideone thì runtime error 2

program Permutation;
const
	InputFile  = 'PERMUTE.INP';
	OutputFile = 'PERMUTE.OUT';
	max = 12;
var
	n, i, k, a, b: Integer;
	x: array[1..max] of Integer;
	f: Text;

procedure Swap(var X, Y: Integer);
var
	Temp: Integer;
begin
	Temp := X; X := Y; Y := Temp;
end;

begin
	Assign(f, InputFile); Reset(f);
	Readln(f, n);
	Close(f);
	Assign(f, OutputFile); Rewrite(f);

	for i := 1 to n do x[i] := i;
	repeat
		for i := 1 to n do write(x[i],' ');
		WriteLn(f);
		i := n - 1;
		while (i > 0) and (x[i] > x[i + 1]) do Dec(i);
		if i > 0 then
		begin
			k := n;
			while x[k] < x[i] do Dec(k);
			Swap(x[k], x[i]);
			a := i + 1; b := n;
			while a < b do
			begin
				Swap(x[a], x[b]);
				Inc(a);
				Dec(b);
			end;
		end;
	until i = 0;
	Close(f);
end.

Exit code 2 là File not found. bạn xem 2 cái file kia đã cùng thư mục với file code chưa?

Mình đã làm rồi :confused:

tên file phải đúng như thế cả in hoa in thường nhé, rồi đường dẫn thư mục không nên để tiếng Việt có dấu nữa.

Em xin lỗi đã khai thác bài viết cũ, tại em đang tìm hướng dẫn viết hoán vị thấy bài viết này ạ, em nghĩ exit code 2 là anh khai báo chắc có gì đó sai.

một chút chỉnh sửa mong có giúp ích

program hoanvi;
var
	n, i, k, a, b: Integer;
	x: array[1..100] of Integer;

procedure Swap(var X, Y: Integer);
var
	Temp: Integer;
begin
	Temp := X; X := Y; Y := Temp;
end;

begin
        write('nhap n: '); Readln(n);
	for i := 1 to n do x[i] := i;
	repeat
		for i := 1 to n do write(x[i],' ');
		WriteLn;
		i := n - 1;
		while (i > 0) and (x[i] > x[i + 1]) do Dec(i);
		if i > 0 then
		begin
			k := n;
			while x[k] < x[i] do Dec(k);
			Swap(x[k], x[i]);
			a := i + 1; b := n;
			while a < b do
			begin
				Swap(x[a], x[b]);
				Inc(a);
				Dec(b);
			end;
		end;
	until i = 0;
readln;
end.
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?