Рубрики
Без рубрики

Кембридж на уровне компьютерные науки Trace Tabs Tabs-стиль

Трассировка столовых упражнений из Кембриджской компьютерной науки

Автор оригинала: 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 вместо Если номер (Возможно, не очевидно, пока вы не видели это!).

  • Таблица в учебнике имеет логический тест Номер смещено одним ряд (вертикально). Программирование этого на вывод здесь сделает код слишком сложным и трудно следовать.

Проведите некоторое время, чтобы убедиться, что вы понимаете, как работает этот алгоритм. Чем больше вы делаете это, тем легче он получает.

Наслаждаться!