Автор оригинала: Robin Andrews.
Cambridge International POS и уровень компьютерной науки, как правило, является фантастическим ресурсом, охватывающим весь 9608 учебная программа в глубину.
Тем не менее, есть несколько неприятных проблем с книгой, включая некоторые ошибки. Например, на стр. 245 в рамках вопроса стиля экзамена, следующий псевдокод приведен для алгоритма для преобразования номера денарирования в двоичные:
FUNCTION Binary(Number : INTEGER) : STRING
DECLARE BinaryString : STRING
DECLARE PlaceValue : INTEGER
BinaryString <- '' // '' empty string
PlaceValue <- 8
REPEAT
IF Number>= PlaceValue
THEN
BinaryString <- BinaryString & '1' // concatenates two strings
Number <- Number - PlaceValue
ELSE
BinaryString <- BinaryString & '0'
PlaceValue <- PlaceValue DIV 2
UNTIL Number = 0
RETURN BinaryString
END FUNCTION
Если студенты пытаются этот вопрос, они могут быть запутаны, когда сообщили возвращаемое значение, когда составляет 101.
Это из-за ошибки отступа и отсутствуют Endif Отказ Если Блок должен быть закрыт, а PlaceValue <- PlactValue Div 2 следует перемещать один уровень отступа. Затем он будет выполнен независимо от исхода условного ветвления, по мере необходимости.
Ниже приведен реализация питона алгоритма.
def Binary(Number: int) -> str:
BinaryString: str = ''
PlaceValue: int = 8
print("Number\tBinaryString\tPlaceValue\tNumber >= PlaceValue")
# Python has no REPEAT....UNTIL so we use while True and break
while True:
print("{}\t\t{}\t\t{}\t\t{}".format(Number, BinaryString, PlaceValue, Number >= PlaceValue))
if Number >= PlaceValue:
BinaryString = BinaryString + "1"
Number = Number - PlaceValue
else:
BinaryString = BinaryString + "0"
PlaceValue = PlaceValue // 2
if PlaceValue == 0:
break
return BinaryString
print(Binary(10))
Пару очков, чтобы заметить:
Я использовал аннотации типа Python 3, как обсуждалось в эта статья.
Я решил вторую часть вопроса, где он спрашивает, что нужно, чтобы алгоритм правильно:
Если PlaceValueвместоЕсли номер(Возможно, не очевидно, пока вы не видели это!).Таблица в учебнике имеет логический тест
Номерсмещено одним ряд (вертикально). Программирование этого на вывод здесь сделает код слишком сложным и трудно следовать.
Проведите некоторое время, чтобы убедиться, что вы понимаете, как работает этот алгоритм. Чем больше вы делаете это, тем легче он получает.
Наслаждаться!