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

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

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

 
 Ответить  Открыть новую тему 
> Казнь, Это название задачи такое
сообщение
Сообщение #1


Новичок
*

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

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


Задача
На площадь выводят N человек, приговоренных к смерти, каждому из которым присвоен уникальный номер от 1 до N. Их расставляют по кругу по часовой стрелке по порядку. Казнь производится следующим образом: отсчитывают M человек, начиная с человека, стоящего после только что казненного, и этого M-го человека уводят на казнь. В начале казни отчет ведется от человека с номером 1. Узнать, человека с каким номером казнят K-м?

С клавиатуры вводятся числа: N, M, K

1<=N<=30000
1<=M<=30000
1<=K<=N


Я тут написал вроде, но не уверен. Посмотрите и подправьте если чего не так:
:low:
var
n, m, k, dop_per: integer;

begin
clrscr;
TextColor(white);
write('N: '); readln(n);
write('M: '); readln(m);
write('K: '); readln(k);
dop_per:=m*k;
repeat
if dop_per>n then begin
dop_per:=dop_per-n;
end;
until dop_per<=n;
write(dop_per);
readln;
end.


--------------------
Время есть сущность всех вещей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


Ну, чего никто ничего не говорит? Жду. А то в понедельник показать надо


--------------------
Время есть сущность всех вещей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






EXE
Подождать еще пару часов можешь? Заканчиваю отладку. Твоя версия работает неправильно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


volvo
черт, я не тот исходник выложил. Только щас заметил. Ну ладно подожду твоей версии


--------------------
Время есть сущность всех вещей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






EXE
:nono: Нет уж, выкладывай свою... А потом сравнишь с моей.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






EXE
Ясно, исходника у тебя никакого нет... Разбираться в приведенной программе будешь сам.
Код

Const
 n = 11;
 m = 7;
 k = 3;

Const
 liRange = SizeOf(LongInt) * 8;
Type
 TBigReg =
   Array[1 .. (n div liRange) + Byte((n mod liRange) > 0)] Of LongInt;

Procedure bit_info(bit: LongInt;
         Var block, offset: Byte);
 Begin
   block := Succ(Pred(bit) div 32);
   offset := Byte( ((bit mod 32) <> 0)) * 32 - (bit mod 32);
 end;

Function is_bit_set(Var x: TBigReg; bit: LongInt): Boolean;
 Var bBlck, bOffs: Byte;
 Begin
   bit_info(bit, bBlck, bOffs);
   is_bit_set := (((x[bBlck] shr bOffs) and $1) = $1);
 End;

Procedure xorBit(Var x: TBigReg; bit: LongInt);
 Var bBlck, bOffs: Byte;
 Begin
   bit_info(bit, bBlck, bOffs);
   x[bBlck] := x[bBlck] xor (LongInt($1) shl bOffs)
 End;

Procedure reset_bit(Var x: TBigReg; bit: LongInt);
 Begin
   If is_bit_set(x, bit) Then xorBit(x, bit)
 End;

Procedure set_bit(Var x: TBigReg; bit: LongInt);
 Begin
   If not is_bit_set(x, bit) Then xorBit(x, bit)
 End;

Function down_next(Var people: TBigReg;
        k, every: LongInt): LongInt;
 Var curr_bit, count, i: LongInt;

 Function next_bit(x: LongInt): LongInt;
   Begin
     Inc(x);
     If x > n Then x := 1;
     next_bit := x
   End;

 Begin
   curr_bit := 0;

   For i := 1 To k Do
     Begin
       count := 0;
       While count < every Do
         Begin
           curr_bit := next_bit(curr_bit);
           inc( count, Byte(is_bit_set(people, curr_bit)) )
         End;
       reset_bit(people, curr_bit)
     End;
   down_next := curr_bit;
 End;


Var
 all: TBigReg;
 i: integer;
begin
 For i := 1 To n Do
   set_bit(all, i);
 WriteLn('this was number: ', down_next(all, k, m))
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


Вообще-то я в форуме не круглосуточно сижу! <_<

Сообщение отредактировано: EXE -


--------------------
Время есть сущность всех вещей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

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

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


Я сейчас на первом курсе и мне тоже задали эту задачку, но как её исправить, чтобы он считывал n m и k??? поскажите, а тоя попробывала а он мне пишет что так нельзя помогите пожалуйста!! !mol1.gif !mol1.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


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

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

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


blink.gif mega_chok.gif

убераешь их из раздела CONST, добавляешь var n,m,k : integer; и вводишь в основном блоке программы ...


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


Пионер
**

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

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


А т ы попробуй и увидишь, что он пишет!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


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

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

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


Да .. придется перекроить прогу или использовать константы, потому что они используются в описании типов ... извиняюсь, не заметил сначала.


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


Гость






K Y S K A, а ты скажи, что он тебе пишет, почему кто-то должен пробовать... dry.gif Вот у меня например все нормально отрабатывает !!!

klem4, и ЭТО говоришь ты, модератор раздела ??? !!!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

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

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


" Cannot evalute this expresion" вот что он мне пишет, показывая на 10 строчку!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






K Y S K A,
первые строки программы меняются вот так:
Const
n: integer = 11;
m: integer = 7;
k: integer = 3;

Const
liRange = SizeOf(LongInt) * 8;
Type
TBigReg =
Array[1 .. 100] Of LongInt;

А потом в основном блоке как хочешь так m, n, k и изменяй... Хочешь - с клавиатуры вводи, хочешь просто переприсваивай... blum.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


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

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

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


хм Volvo... а как интересно компилятор пойемт вот это :
TBigReg =
Array[1 .. (n div liRange) + Byte((n mod liRange) > 0)] Of LongInt;


если перед этой строчкой я сотру раздел констант в котором присутствует n=11 ? blink.gif Ну если я не прав ... извиняюсь.

так что правда тут за мной blum.gif

аа ну вот и решилась проблема ... good.gif

Сообщение отредактировано: klem4 -


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


Знаток
****

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

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


onst
n_max = 11;
m_max = 7;
k_max = 3;

Const
liRange = SizeOf(LongInt) * 8;
Type
TBigReg =
Array[1 .. (n_max div liRange) + Byte((n_max mod liRange) > 0)] Of LongInt;
var n,m,k : integer;

.......................

read(n,m,k);



--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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