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

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

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

 
 Ответить  Открыть новую тему 
> задача "считалка"
Sofo4ka
сообщение 24.10.2006 19:17
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

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


считалка. заданы натуральные числа M и N (M число детей в круге, N число слов в считалке). создать программу,выводящую на экран номера детей в порядке выбывания ( здесь можно решить и с помощью массива)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.10.2006 19:19
Сообщение #2


Гость






Поиск по форуму, ключевое слово - "Казнь"... Чуть-чуть модифицировать, и получишь то, что тебе нужно...
 К началу страницы 
+ Ответить 
Sofo4ka
сообщение 24.10.2006 19:24
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

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


спасибо

что то очень тяжелая,легче никак?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 25.10.2006 9:44
Сообщение #4


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

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

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


Так пойдет ?

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.


n = 7
shift = 9


1 2 3 4 5 6 7
1 3 4 5 6 7
1 3 4 6 7
1 4 6 7
1 6 7
6 7
7


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


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

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


да спс wub.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
dize
сообщение 18.12.2011 15:07
Сообщение #6


Гость






А не подскажите как вывести последовательность выбывших? Столкнулся с подобной задачей, а паскаль уже почти не помню.
 К началу страницы 
+ Ответить 
Виктор
сообщение 10.04.2015 11:37
Сообщение #7


Гость






Цитата(klem4 @ 25.10.2006 9:44) *

Так пойдет ?

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.


n = 7
shift = 9
1 2 3 4 5 6 7
1 3 4 5 6 7
1 3 4 6 7
1 4 6 7
1 6 7
6 7
7


Можешь помочь?не могу понять что делать эта функция i:=i mod n+1
Program schitalka;
Const nmax=100;
Var n,m,I,j:integer;
Krug: set of 1..nmax;
Begin
Write(‘введите число человек: ’); read(n);
Write(‘кого удалять?: ’); read(m);
If (n>500) or (m>100) then write(‘ошибка’)
Else begin
Krug:=[1..n];
I:=n;
End;
Repeat
For j:=1 to m do
Repeat
I:=I mod n+1
Until I in krug;
Write(i:3);
Krug:=krug-[i]
Until krug=[ ];
Write(‘номер уцелевшего: ’,i);
End.
 К началу страницы 
+ Ответить 

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

 



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