Помощь - Поиск - Пользователи - Календарь
Полная версия: круговой массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
blackhard
помогите с решением:
Одномерный массив А считать круговым, т.е. после последнего элемента следует снова первый. Из данного кругового массива последовательно удалить в массив С каждый третий элемент. Удаление происходит, пока в массиве А не останется два элемента.
нашел тут на форуме вот это пргогу пробовал переделать чтобы она все выкидываемые символе заносила в массив b но чето не получиось подскажите как это сделать я пробовал в процедуре del в b[i]:=arr[p]

uses crt;
const
max_len = 255;
type
TArray = array [1..max_len] of Integer;
procedure Fill(var arr: TArray; n: Integer);
var
i: Integer;
begin
for i := 1 to n do arr[i] := i;
end;
procedure Print(const arr: TArray; const n: Integer);
var
i: Integer;
begin
writeln;
for i := 1 to n do write(arr[i]:3);
writeln;
end;
procedure Del(var arr: TArray; var n: Integer; const p: Integer);
var
i: Integer;
begin
for i := p to n - 1 do
arr[i] := arr[i + 1];
n := n - 1;
end;
function GetNext(var arr: TArray; var n: Integer; var p: Integer; shift: Integer): Integer;
var
tShift: Integer;
begin
if p + shift <= n then begin
p := p + shift;
end
else begin
tShift := shift - (n - p);
p := 0;
while (tShift > n) do tShift := tShift - n;
p := tShift;
end;
Del(arr, n, p);
GetNext := p;
Dec(p);
end;
procedure GetSequence(arr: TArray; n, shift: Integer);
var
p: Integer;
begin
p := 0;
while (n > 0) do begin
GetNext(arr, n, p, shift);
Print(arr, n);
end;
end;
var
a: TArray;
n, shift: Integer;
begin
clrscr;
write('N = '); readln(n);
write('Shift = '); readln(shift);
Fill(a, n);
clrscr;
Print(a, n);
GetSequence(a, n, shift);
readln;
end.
volvo
{ Глобально: }
const
count: integer = 0;
var
b: array[1 .. max_len] of integer;

...

procedure Del(var arr: TArray; var n: Integer; const p: Integer);
var i: Integer;
begin
inc(count);
b[count] := arr[p];

for i := p to n - 1 do
arr[i] := arr[i + 1];
n := n - 1;
end;

...

Все работает...
klem4
похожие задачи решались. есть определенные нюансы. приведи пример входных/выходных данных. Решить можно по разному (2 варианта )
blackhard
Цитата(klem4 @ 2.12.2007 17:03) *

похожие задачи решались. есть определенные нюансы. приведи пример входных/выходных данных. Решить можно по разному (2 варианта )

входные данные допустим массив А[ 1 7 6 3 5 3 ]тогда выходной массив B должен выглядеть так [6 3 3 1] а массив A[7 3]
volvo
Массив A должен выглядеть <1, 5>, а не <1, 3>

Ты мои ответы игнорируешь? Ну, как знаешь, я тебе привел решение в предыдущем посте. Все что останется сделать - изменить процедуру Fill, чтобы вводить данные с клавиатуры, и поменять один символ в GetSequence (чтобы оставить 2 элемента в массиве А)... Хотя... Что это я. Ты же хочешь услышать авторитетный ответ, куда нам до этого...
blackhard
Цитата(volvo @ 2.12.2007 18:50) *

Массив A должен выглядеть <1, 5>, а не <1, 3>

Ты мои ответы игнорируешь? Ну, как знаешь, я тебе привел решение в предыдущем посте. Все что останется сделать - изменить процедуру Fill, чтобы вводить данные с клавиатуры, и поменять один символ в GetSequence (чтобы оставить 2 элемента в массиве А)... Хотя... Что это я. Ты же хочешь услышать авторитетный ответ, куда нам до этого...

да нет извени я не игнорирую я просто еще и на 2ой ответ ответил а твой ответ я уже попробовал спасибо все работает мне просто было интересно какие могут быть нюансы smile.gif

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.