Базовый курс. МГ сессия от 01.11.10
Продолжаем отвечать в формате видео на ваши вопросы. Представляем 6 новых видео-уроков.
Сегодня рассмотрены следующие вопросы.
1. Пусть элемент структуры А.А равен 100, вызываем некую процедуру Тест(А, А.А);
Процедура Тест(Структура, Элемент)
Структура = NULL;
Сообщить (Элемент); // 100!!!… Структура «уничтожена», а значение ее элемента продолжает оставаться доступным!
2. Присваивание переменных: по ссылке и по значению Я стремился реализовать не формальное отсутствие других имен переменных, а реально избежать создания в памяти 3-го экземпляра значения, поскольку думаю, что в реальной задаче нам никто не запретит объявить еще одну переменную А вот вспомогательное значение при обмене значениями между переменными очень большого размера (предположим, в каждой лежит картинка мегабайт по 500) – это уже может сказаться на скорости работы алгоритма. Примеры
3. Заметил, что основное тело модуля формы обработки почему-то выполняется 2 раза. В чем причина такого поведения?
4.Пусть у нас есть строка кода типа:
X = Y + B + M + L
т.е. у нас есть три операции одинакового приоритета (в данном случае сложения). Как система определяет, в какой последовательности будет происходить сложение этих переменных ??? По принципу слева направо (к Y прибавит B, к полученному результату прибавит M и так далее) ??? Это я к тому, что вместо переменных Y,B,M,L могут быть заданы условия в скобках, например:
X = (Усл1) + M + L + (Усл2) и тогда порядок следования слагаемых в выражении может повлиять на оптимальность.
Спасибо за ответы Евгений !!!
Евгений, большое спасибо за ответы :), прочувствовал разницу между самообразованием по сканам методичек из интернета и учебой на курсах.
3-4. Сделал вывод, что при знакомстве с новыми типами данных нужно будет обязательно поэкспериментировать, как работает с ними оператор присваивания.
5. Был еще такой непонятный момент: когда в вашем примере курсор отладчика при компиляции “на клиенте” (примерно 47-я секунда видео) остановился на А=11; табло показывает, что значение А еще не присвоено, если нажать не F5, а F11 – переход к след. строке, то увидим, что А=11, “число”, Б – “неопределено”, еще раз F11 – открывается форма обработки, но Б в табло по-прежнему “неопределено”!!! Я думал, что баг платформы: при второй компиляции не выполняется последний оператор основной программы модуля, но поместив вместо Б=11; оператор Сообщить(11); при открытии формы увидел два сообщения 11, сделал вывод, что последний оператор выполняется, но табло некорректно отражает текущую ситуацию (отстает на один оператор). Только непонятно, так происходит только с последним оператором программы, или это общая особенность работы табло – запаздывание отображения результатов на 1 оператор?
5. Давайте разбираться.
Если отладчик стоит на какой-либо строке это значит, что она еще не выполнена.
Переходим на следующую строку – предыдущая выполняется.
А вот результат выполнения последней строки в разделе основной программы мы не увидим!
Евгений, правильно ли я понял из видео, что например, для того чтобы поменять таблицу значений из 800000 строк и список значений из 600000 можно воспользоваться вспомогательной переменной и это не приведет к выделению лишней памяти?
Именно так.