На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение





Сообщение: 16
ссылка на сообщение  Отправлено: 15.03.23 14:37. Заголовок: B5 №309


Возможно в задании содержится ошибка. Или неверно расписан пример работы алгоритма. Или наблюдается двоякость толкования задания.
Из задания: Например, для числа 13 двоичные коды цифр: 1 = 00012, 3 = 00112. С добавленными битами чётности: 00011 и 00110, результат шага 1: 0001100110.
Заменяем два левых разряда на 1 и добавляем справа 0: 10110011002 = 716.
В примере заменен только один крайний левый разряд.
Возможно два толкования условия:
1. вместо двух первых разрядов добавляется одна 1,
2. каждый из двух первых разрядов заменяется на 1.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 , стр: 1 2 All [только новые]







Сообщение: 362
ссылка на сообщение  Отправлено: 22.03.23 15:52. Заголовок: GasDM21 пишет: Возм..


GasDM21 пишет:

 цитата:
Возможно в задании содержится ошибка. Или неверно расписан пример работы алгоритма. Или наблюдается двоякость толкования задания.


нет там ошибок!
GasDM21 пишет:

 цитата:
Заменяем два левых разряда на 1 и добавляем справа 0: 1011001100 = 716.
В примере заменен только один крайний левый разряд.


а ничего, что слева было три 0, а стал 1
GasDM21 пишет:

 цитата:
результат шага 1: 0001100110.



Результата, т.е. ответ можно получить двумя способами либо в лоб - перебором, либо пошагово от обратного, например так:

Пишем команду в питоне и запускаем ее на выполнение:
print(bin(674890)[2:])

получаем двоичный код:
1010000110001001010

удаляем правый нолик и разбиваем код на пятерки
1010 01001 10001 00101

Убираем справа от каждой группы по единице кроме левой, где справа стоит 0, который говорит, что до замены двух левых символов было ровно две 1, поэтому убираем справа 0, а слева, наоборот - добавляем 0
0101 0100 1000 0010

Получили 4 тетрады, декодируя которые получаем число 5 4 8 2

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 18
ссылка на сообщение  Отправлено: 22.03.23 16:00. Заголовок: Спасибо за пояснение..


Спасибо за пояснение. Надеюсь на экзамене такого не будет.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 363
ссылка на сообщение  Отправлено: 22.03.23 16:06. Заголовок: GasDM21 пишет: Наде..


GasDM21 пишет:

 цитата:
Надеюсь на экзамене такого не будет.



Думаю, что это гораздо проще, чем написать код!
Например, автор предлагает такое решение:
 
def alg( n ):
s = ''
for d in str(n):
sd = f'{int(d):04b}'
s += sd + '0' if sd.count('1') % 2 == 0 else \
sd + '1'
s = '1' + s[2:] + '0'
return int( s, 2 )

for n in range(1, 10000):
if alg(n) == 674890:
print( n )
break

Если разум воспримет, то, как говорится, ни пуха ни пера!

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 19
ссылка на сообщение  Отправлено: 22.03.23 16:11. Заголовок: Мой вариант решения ..


Мой вариант решения немного больше )))
 
uses School;
var
n: integer;

function four_bits(n: integer): string;
var
c: integer;
d: Dictionary<integer, string> := Dict(Arr((0, '00000'),(1, '00011'),
(2, '00101'),(3, '00110'),
(4, '01001'),(5, '01010'),
(6, '01100'),(7, '01111'),
(8, '10001'),(9, '10010')));
begin
Result := '';
while n > 0 do begin
c := n mod 10;
Result := d[c] + Result;
n := n div 10;
end;
end;

function automat(n: integer): integer;
var
n2: string;
begin
n2 := four_bits(n);
n2 := '1' + Copy(n2, 3, n2.Length) + '0';
Result := Dec(n2, 2);
end;

begin
n := 13;
while automat(n) <> 674890 do begin
//Writeln($'n = {n} -> R = {automat(n)}');
n += 1;
end;
Writeln($'n = {n} -> R = {automat(n)}');
end.


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 364
ссылка на сообщение  Отправлено: 22.03.23 16:32. Заголовок: двумя пальцами если ..


двумя пальцами если набирать, то в минуту 100 символов среднему ученику можно настучать, здесь более 1000 символов, т.е. 10 минут как с куста только на набор, да еще нужно продумать алгоритм - еще как минимум 10, если не более, а остальные задачки когда решать?
Кроме того, даже для алгоритмов высокого уровня дается от 10 до 20 строк, а данное задание базового уровня, и это превышает по количеству строк даже высокий уровень.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 20
ссылка на сообщение  Отправлено: 22.03.23 16:38. Заголовок: Был "спортивный&..


Был "спортивный" интерес решить задание. Решил

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 365
ссылка на сообщение  Отправлено: 23.03.23 02:35. Заголовок: GasDM21 пишет: "..


GasDM21 пишет:

 цитата:
"спортивный" интерес


Похвально, но очень уж длинно!

В питоне например алгоритм, предложенный мной выше, может выглядеть гораздо короче, примерно так:
 
st =''
s = bin(674890)[2:]
s = s[:-1]
for i in range(4):
s = s[:-1]
s1 = s[-4:]
s2 = int(s1,2)
st = str(s2)+st
s = s[:-4]
print(st)
Надеюсь, что разница примерно 1 к 10, т.е. на порядок - очевидна, может стоит сменить язык или упростить алгоритм решения?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 366
ссылка на сообщение  Отправлено: 23.03.23 04:45. Заголовок: Оказывается, без пот..


Оказывается, без потери работоспособности можно еще сократить длину кода сливанием двух строк в одну
 
st =''
s = bin(674890)[2:]
s = s[:-1]
for i in range(4):
s = s[:-1]
s1 = s[-4:]
st = str(int(s1,2))+st
s = s[:-4]
print(st)


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 21
ссылка на сообщение  Отправлено: 23.03.23 09:35. Заголовок: Менять - нет, а в до..


Менять - нет, а в дополнение - прорабатывается

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 368
ссылка на сообщение  Отправлено: 23.03.23 10:17. Заголовок: GasDM21 пишет: в до..


GasDM21 пишет:

 цитата:
в дополнение - прорабатывается


тогда вот решение перебором, вдруг пригодится
 
def f( n ):
s = ''
for d in str(n):
sd = bin(int(d))[2:]
while len(sd)<4:
sd = '0'+sd
if sd.count('1') % 2 == 0:
s += sd + '0'
else:
s += sd + '1'
s = '1' + s[2:] + '0'
return int( s, 2 )

for n in range(1000, 10000):
if f(n) == 674890:
print( n )
break


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 22
ссылка на сообщение  Отправлено: 23.03.23 11:17. Заголовок: Спасибо. Мой алгорит..


Спасибо. Мой алгоритм, записанный выше занимается тем же. Просто решение разбито на этапы, оформленные в виде функций.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 369
ссылка на сообщение  Отправлено: 23.03.23 13:46. Заголовок: GasDM21 пишет: Прос..


GasDM21 пишет:

 цитата:
Просто решение разбито на этапы, оформленные в виде функций.


Я это понял,
но возник один вопрос, для чего было строить эту таблицу
:= Dict(Arr((0, '00000'),(1, '00011'),
(2, '00101'),(3, '00110'),
(4, '01001'),(5, '01010'),
(6, '01100'),(7, '01111'),
(8, '10001'),(9, '10010')));
неужели в паскале нет возможности, ее создавать кодом, по мере возникновения необходимости, что то вроде:

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 23
ссылка на сообщение  Отправлено: 23.03.23 14:55. Заголовок: Захотелось "прик..


Захотелось "прикрутить" словарь, из которого по ключу выбирались бы значения. В Python словари есть, PascalABC.Net тоже ими обзавелся.
Знаю, что можно было обойтись и обычным массивом, и списком.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 370
ссылка на сообщение  Отправлено: 24.03.23 02:06. Заголовок: GasDM21 пишет: Захо..


GasDM21 пишет:

 цитата:
Захотелось "прикрутить" словарь,


А, если захотелось - то конечно!

Кстати, я уже это ХОЧУ где-то рядом слышал!

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

Но, видимо, у разных людей - разные тараканы.

Удачи

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 24
ссылка на сообщение  Отправлено: 24.03.23 07:52. Заголовок: Что есть, то есть. ..


Что есть, то есть.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 2191
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет