Новый ответ для Сборки iTerm2 3.3.4 пользователя:
Шаг 1: (macOS X) вкладка System Preferences> Keyboard> Shortcuts> Избранное Управление полетом (оставленный панель)> ярлыки Снятия флажка, которые маркировали как "Перемещение, оставили пространство", и "Перемещение исправляет пространство"
Шаг 2: (iTerm2 Сборка 3.3.4), Предпочтения> Профили> Выбор * Значение по умолчанию (оставленный панель)> вкладка Keys> Удаляют обоих "вЊҐ->" и "вЊҐ< -" записи> Набор обе "Левых Опции (вЊҐ) Ключ": и "Правильная Опция (вЊҐ) Ключ": к Esc +
No бездельничающий с профилями оболочки, нет бездельничающими с нижним masOS Терминал (по умолчанию), никакой awkwards Esc+F/B, & промывки; повторите ерунду.
Заключенная сделка!!!
Обладают этой подсказкой, моими коллегами - ПРОГРАММИСТАМИ!
Сообщите автору, что
pounds = newtons/NEWTONS_PER_POUND;
приказывает процессору
то, что он ищет, скорее всего, является функцией в императивных терминах:
double newtons_to_pounds(double newtons) {
return newtons/NEWTONS_PER_POUND;
}
...
newtons = 10.0;
cout << newtons_to_pounds(newtons) << endl; /* a big number, not 10.0/4.448 */
return 0;
C ++ - это императивный язык программирования, а не средство решения уравнений.
C ++ выполняет операторы в том порядке, в котором вы их пишете. C ++ не инициализирует переменные, если это не указано. C ++ позволяет использовать переменную, значение которой не было инициализировано, но когда вы это делаете, результат будет неопределенным . Неопределенный означает, что что-либо может произойти, включая такие плохие вещи, как создание «сумасшедших чисел».
Вот подробное объяснение:
double pounds, newtons;
pounds = newtons/NEWTONS_PER_POUND;
newtons = 10.0;
Первый оператор объявляет две переменные без их инициализации. На данный момент их значения не указаны.
Второй оператор считывает значение ньютонов
(которое может быть любым) и делит его на NEWTONS_PER_POUND
. Результат (который может быть любым) присваивается фунтов
.
Что ж, это не должно быть слишком сложно объяснить, независимо от уровня подготовки студентов: просто все те, что C ++ оценивает программы шаг за шагом, оператор за оператором (несмотря на артефакты компилятора, такие как переупорядочивание…).
Ничего особенного в способе обработки этого C ++, и это даже не ограничивается компьютерным программированием - скорее, это повседневный способ работы с упорядоченным списком инструкций.
Ньютоны не ленивые
Таким образом расчет выполняется во время декларирования, а не во время запроса. Ему нужен функциональный код, а не то, что будет делать C ++.
Если человек не слишком техничен, вы можете попробовать:
«Операторы в этой программе на C ++ подобны шагам, необходимым для приготовления торта. Вы должны выполнять шаги один за другим и они должны быть выполнены в определенном порядке, чтобы это было успешным »
Объясните, что фунтам присваивается значение в строке с оператором присваивания:
pounds = newtons/NEWTONS_PER_POUND;
Если это не так, но эти фунты были вычислены при их использовании (как в случае с оператором cout ), то, если изменится значение ньютонов, то изменится и значение фунтов. Поскольку фунты не являются указателями любого типа, а представляют собой простое целое число, это невозможно.
А как насчет пошагового выполнения кода в отладчике?
IME нет ничего подобного, чтобы понять выполнение программы, написанной на процедурном языке (т. Е. Смоделированной на основе того, как ЦП фактически выполняет код).
Вы пытаетесь заставить слушателя претерпеть сдвиг парадигмы - изменить весь его / ее подход к пониманию этого кода.
«фунты» - это просто число. Нет понятие о том, как это создано. Ты говоришь "фунтов", как это создано, не будет помнить. Он просто запомнит, что это так, а не то, как он создан.
Может показаться немного странным антропоморфизовать блок памяти. : -)
Возьмем немного более сложный пример, где переменная вроде newtons
повторно используется и ей присваиваются значения более одного раза. Например:
double pounds, newtons;
newtons = 10.0;
pounds = newtons/NEWTONS_PER_POUND;
cout << pounds << endl;
newtons = 15.0;
pounds = newtons/NEWTONS_PER_POUND;
cout << pounds << endl;
return 0;
Покажите ему и код, и результат. Затем попросите его объяснить, как и почему программа выдает разные числа для каждой строки. Я думаю, это должно подтолкнуть его к тому, что он будет рассматривать программу как процедуру, которая выполняется сверху вниз.