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

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

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

 
 Ответить  Открыть новую тему 
> круговой массив, круговой массив
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

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


помогите с решением:
Одномерный массив А считать круговым, т.е. после последнего элемента следует снова первый. Из данного кругового массива последовательно удалить в массив С каждый третий элемент. Удаление происходит, пока в массиве А не останется два элемента.
нашел тут на форуме вот это пргогу пробовал переделать чтобы она все выкидываемые символе заносила в массив 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






{ Глобально: }
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;

...

Все работает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


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

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

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


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


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


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

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


Цитата(klem4 @ 2.12.2007 17:03) *

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

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

Сообщение отредактировано: blackhard -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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

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


Бывалый
***

Группа: Пользователи
Сообщений: 151
Пол: Мужской
Реальное имя: иван

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


Цитата(volvo @ 2.12.2007 18:50) *

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

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

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



Сообщение отредактировано: blackhard -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 29.03.2024 16:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name