По поводу параметров функции. Действительно, нужно все данные, с которыми работает функция, стараться передавать ей в параметрах, а не через глобальные сущности. Но иногда удобнее использовать глобальные константы. Например, если все вычисления в программе должны идти с определенной точностью, можно в каждой такой функции иметь параметр, задающий эту точность. Но если точность везде одинакова, то лучше завести глобальную константу, задающую такую точность, а во всех функциях использовать эту константу, а не параметр. Глобальные сущности принято называть длинным осмысленным именем, лучше заглавными буквами, чтобы подчеркнуть ее глобальную роль. Например, EPS или даже DEFAULT_EPS. Другой пример. Например, имеем программу, в которой есть игровое поле - скажем, двумерный массив символов. Одна функция это поле очищает, другая на поле что-то расставляет, третья что-то ищет, отдельная функция выводит поле на экран и т.д. Но если это игровое поле только одно во всей программе, то можно исключить его из параметров и сделать обращение из всех функций глобально. При этом следует назвать этот массив длинным осмысленным именем, например BOARD или GAME_BOARD. Но если есть несколько таких полей - например, нескольких игроков, то при использовании глобальных переменных пришлось бы выполнять присваивание массива глобальной переменной перед вызовом функции и присваивание результата после. Ясно, что тогда лучше передавать поле, с которым в данный момент работает вызываемая функция, в качестве параметра этой функции.
На 11:30 строка 11 копирует логику сравнения из строки 5. Лучше было бы функцию min_3 (в частноси 11ю строку) переписать в виде: 9: { 10: double min_ab = min_2(a, b); 11: return min_2(min_ab, c); 12: } В итиге реализация логики сравнения была бы локализирована в строке 5.
Спасибо! Очень нравится ваш стиль преподавания и подачи материала. Интересно у вас нет своих книг? Я бы с удовольствием купил "Изучаем Python. Балакирев С." или "Изучаем C. Балакирев С."
Сергей, добрый день. А вы не хотели бы добавить в плейлист по C++ то, что выходит из тем за рамки базовых концепций? Например, новые фишки в последнем стандарте C++? Или вообще что есть такого в каждом стандарте, чего нет в предыдущем, начиная с C++11? Также, например, вариативные шаблоны и где их использовать можно в проектах, работе?
При компиляции 1:57 возникла ошибка: main.c:(.text+0x37): undefined reference to `pow' collect2: error: ld returned 1 exit status. Решение: нужно перейти в файл settings.json и добавить аргумент для компилятора в блоке "c" -lm. Пример: "c": "cd $dir && gcc -std=c99 $fileName -lm -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
Символы NAN мы видим на экране, а соответствуют они определенным образом закодированным битам вещественного числа. Каким именно, нужно почитать. Никогда не интересовался ))
Тоже интересно, как можно в типе(переменной) вернуть nan. Может nan это тоже тип, но тогда как функция его возвращает если возвращаемый тип уже определен.
Хороший видеоурок, спасибо!
Спасибо. Великолепно!
По поводу параметров функции. Действительно, нужно все данные, с которыми работает функция, стараться передавать ей в параметрах, а не через глобальные сущности. Но иногда удобнее использовать глобальные константы. Например, если все вычисления в программе должны идти с определенной точностью, можно в каждой такой функции иметь параметр, задающий эту точность. Но если точность везде одинакова, то лучше завести глобальную константу, задающую такую точность, а во всех функциях использовать эту константу, а не параметр. Глобальные сущности принято называть длинным осмысленным именем, лучше заглавными буквами, чтобы подчеркнуть ее глобальную роль. Например, EPS или даже DEFAULT_EPS.
Другой пример. Например, имеем программу, в которой есть игровое поле - скажем, двумерный массив символов. Одна функция это поле очищает, другая на поле что-то расставляет, третья что-то ищет, отдельная функция выводит поле на экран и т.д. Но если это игровое поле только одно во всей программе, то можно исключить его из параметров и сделать обращение из всех функций глобально. При этом следует назвать этот массив длинным осмысленным именем, например BOARD или GAME_BOARD. Но если есть несколько таких полей - например, нескольких игроков, то при использовании глобальных переменных пришлось бы выполнять присваивание массива глобальной переменной перед вызовом функции и присваивание результата после. Ясно, что тогда лучше передавать поле, с которым в данный момент работает вызываемая функция, в качестве параметра этой функции.
спасибо!💪👍👏
На 11:30 строка 11 копирует логику сравнения из строки 5.
Лучше было бы функцию min_3 (в частноси 11ю строку) переписать в виде:
9: {
10: double min_ab = min_2(a, b);
11: return min_2(min_ab, c);
12: }
В итиге реализация логики сравнения была бы локализирована в строке 5.
Спасибо
Спасибо! Очень нравится ваш стиль преподавания и подачи материала. Интересно у вас нет своих книг?
Я бы с удовольствием купил "Изучаем Python. Балакирев С." или "Изучаем C. Балакирев С."
Спасибо! Есть текстовые варианты видео proproprogs.ru
@@selfedu_rus Да, конечно я читаю ваш сайт и материалы на нём. Он закреплен у меня среди 10-ти достойнейших ресурсов на панели в Хроме.
@Vladimir Astrelin 100%
Сергей, добрый день. А вы не хотели бы добавить в плейлист по C++ то, что выходит из тем за рамки базовых концепций? Например, новые фишки в последнем стандарте C++? Или вообще что есть такого в каждом стандарте, чего нет в предыдущем, начиная с C++11? Также, например, вариативные шаблоны и где их использовать можно в проектах, работе?
Подумаю, спасибо!
При компиляции 1:57 возникла ошибка: main.c:(.text+0x37): undefined reference to `pow'
collect2: error: ld returned 1 exit status. Решение: нужно перейти в файл settings.json и добавить аргумент для компилятора в блоке "c" -lm. Пример: "c": "cd $dir && gcc -std=c99 $fileName -lm -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
Благодарю! Очень годный контент и стиль! Сереж, а не планируете уроки по SQL?
Спасибо! Уже есть: ua-cam.com/video/TwnCXdCa8qg/v-deo.html
Можно еще так сократить:
double sq4_x(double x)
{
return x < 0 ? NAN : pow(x, 0.25);
}
Прошу вас уточнить, как функция возвращает не вещественное число, а символы NAN?
Символы NAN мы видим на экране, а соответствуют они определенным образом закодированным битам вещественного числа. Каким именно, нужно почитать. Никогда не интересовался ))
Тоже интересно, как можно в типе(переменной) вернуть nan. Может nan это тоже тип, но тогда как функция его возвращает если возвращаемый тип уже определен.
Спасибо за уроки. На мой взгляд слишком замудренные вы используете примеры в теле функций. 4-я степень и т.п.
void print_even_x(int x)
{
return (x & 1) ? void : printf("x = %d
", x); // Битовые операции (люблю их)
}
не единого слова не понял
Давайте лайки до 100 догоним
а вот и не совсем так у меня при префиксной операции инкремента всегда х принимает уже увеличенное значение не один а два (((.
я здесь лишь привожу пример, а ранее оговаривал, что такое поведение относится к неопределенному, т.к. стандартном языка не оговорено
@@selfedu_rus да я понимаю это, скорее всего это особенность компилятора .