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

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

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

 
 Ответить  Открыть новую тему 
> Казнь, Это название задачи такое
EXE
сообщение 17.12.2004 0:55
Сообщение #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 
 К началу страницы 
+ Ответить 
EXE
сообщение 18.12.2004 13:24
Сообщение #2


Новичок
*

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

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


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


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


Гость






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


Новичок
*

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

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


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


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


Гость






EXE
:nono: Нет уж, выкладывай свою... А потом сравнишь с моей.
 К началу страницы 
+ Ответить 
volvo
сообщение 18.12.2004 17:55
Сообщение #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.
 К началу страницы 
+ Ответить 
EXE
сообщение 18.12.2004 21:42
Сообщение #7


Новичок
*

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

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


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

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


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


Пионер
**

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

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


Я сейчас на первом курсе и мне тоже задали эту задачку, но как её исправить, чтобы он считывал n m и k??? поскажите, а тоя попробывала а он мне пишет что так нельзя помогите пожалуйста!! !mol1.gif !mol1.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 25.11.2005 17:04
Сообщение #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 
 К началу страницы 
+ Ответить 
K Y S K A
сообщение 25.11.2005 18:23
Сообщение #10


Пионер
**

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

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


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


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

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

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


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


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


Гость






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

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


Пионер
**

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

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


" Cannot evalute this expresion" вот что он мне пишет, показывая на 10 строчку!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 25.11.2005 18:50
Сообщение #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
 К началу страницы 
+ Ответить 
klem4
сообщение 25.11.2005 18:51
Сообщение #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 - 25.11.2005 18:57


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

 



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