IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> динамические массивы, непонятное поведение
klem4
сообщение 23.09.2007 21:30
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


есть 2 практически идентичных программы, суть - вывести на экран все варианты перестановок элементов массива
Первая работает со статическим массивом, вторая с динамическим и вот вторая почему-то отрабатывает не верно((

1-я

uses crt;

const
n = 3;

type
tarr = array [1..n] of integer;

procedure pr(const arr: tarr);
var
i: integer;
begin
writeln;
for i := 1 to n do write(arr[i]:3);
end;

procedure sw(var arr: tarr; const p, q: integer);
var
T: integer;
begin
T := arr[p];
arr[p] := arr[q];
arr[q] := T;
end;

procedure nx(arr: tarr; i: integer);
var
j: integer;
begin
for j := i to n do begin
if i <> j then begin
sw(arr, i, j);
pr(arr);
end;
nx(arr, i + 1);
end;
end;

var
a: tarr = (1, 2, 3);

begin
clrscr;
pr(a);
nx(a, 1);
readln;
end.


2-я
{$R-}
uses crt;

const
n = 3;

type
parr = ^tarr;
tarr = array [1..1] of integer;

procedure pr(const arr: parr);
var
i: integer;
begin
writeln;
for i := 1 to n do write(arr^[i]:3);
end;

procedure sw(var arr: parr; const p, q: integer);
var
T: integer;
begin
T := arr^[p];
arr^[p] := arr^[q];
arr^[q] := T;
end;

procedure nx(arr: parr; i: integer);
var
j: integer;
begin
for j := i to n do begin
if i <> j then begin
sw(arr, i, j);
pr(arr);
end;
nx(arr, i + 1);
end;
end;

var
a: parr;
i: integer;

begin
clrscr;

GetMem(a, n * sizeof(tarr));
for i := 1 to n do a^[i] := i;

pr(a);
nx(a, 1);

FreeMem(a, n * sizeof(tarr));
readln;
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"