• Параметры функции?

    @vabka
    Токсичный
    Зачем передавать переменные-параметры в функцию, если можно писать глобальное объявление переменных?

    1. Чтобы избавлять от дублирования (ну вообще это сам смысл функций)
    2. Чтобы удобнее работать с этими функциями (сразу видишь, что функция от тебя ждёт)
    3. Чтобы нормально работало в многопоточной среде. (глобальные переменные и многопоток не совестимы)

    Ну вот например менее абcтрактный пример:
    int sum(int a, int b) { // всё отлично, всё понятно
      return a + b;
    }
    
    int a,b;
    // Каким образом мы поймём, что надо перед вызовом sum задать какое-то значение переменным a и b?
    // sum и её "параметры" a и b никак не связаны
    int sum() {
      return a + b;
    }
    
    int sum() { // а как в этом случае нам сложить две переменные? Как задать значения a и b??????
      int a,b;
      return a + b;
    }
    Ответ написан
  • Вызов функции из класса?

    У вас ошибка в вызове метода getValues, так как ожидается аргумент: void getValues(Properties* objectValues);.

    Создайте объект и передавайте ссылку на него.
    Properties obj;
    Properties* objectValues = new Properties;
    objectValues->getValues(&obj);

    UPD: Если вам не нужно косвенное обращение к объекту через указатель, но хотите обратиться к члену объекта через указатель, то можно так:
    #include <iostream>
    
    class Properties
    {
    public:
      void getValues();
    
    	int a = 13;
    	int b = 82;
    	float c = 27.01f;
    };
    
    void Properties::getValues()
    {
    	std::cout << a << std::endl;
    }
    
    int main()
    {
    	setlocale(0, "");
      
    	Properties* ptr = new Properties;
    	ptr->getValues();
      
    	std::cin.get();
      
    	return 0;
    }

    Можно также и без указателя обращаться к члену объекта, через точечную нотацию:
    #include <iostream>
    
    class Properties
    {
    public:
      void getValues();
    
    	int a = 13;
    	int b = 82;
    	float c = 27.01f;
    };
    
    void Properties::getValues()
    {
    	std::cout << a << std::endl;
    }
    
    int main()
    {
    	setlocale(0, "");
      
    	Properties obj;
    	obj.getValues();
      
    	std::cin.get();
      
    	return 0;
    }
    Ответ написан
  • Сколько существует путей и почему?

    wataru
    @wataru
    Разработчик на С++, гуглер, экс-олимпиадник.
    Количество сочетаний из 125 по 50. Или 125!/50!/75!
    Потому что он обязательно сделает 50 шагов вправо и 75 шагов вверх. В любом порядке. Т.е. всего 125 шагов из которых любые 50 - по горизонтали.
    Ответ написан
  • Как сильно пересекаются олимпиадное программирование и разработка?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, гуглер, экс-олимпиадник.
    Решение олимпиадных задач прежде всего учит решать задачи, и только потом алгоритмы и структуры данных. Получается некоторый склад ума, или подход к задачам, если хотите. Это очень помогает собрать мысли в кучу, формализовать задачу и решить ее, даже если там не нужны хитрые алгоритмы.

    Алгоритмические знания же, на мой взгляд, тоже абсолютно нужны. Не каждый день и не во всех областях, но когда оно нужно, оно действительно нужно. Фишка в том, что без знания этих алгоритмов и умения формализовывать задачи вы даже не поймете, что где-то тут можно применить "алгоритм" - вместо короткого, простого и очень быстрого решения вам придется городить какой-нибудь громоздкий и сложный полный перебор, либо вообще непонятно что делать. Поэтому популярное мнение, что не нужно всем знать алгоритмы - достаточно выделенного математика в команде - я тоже считаю неверным.

    Из моего опыта работы: в гугле мне приходилось писать динамическое программирование, всякие хитрые дихотомии (типа бинарный поиск, но по функции а не по массиву), линейные регрессии, хитрые структуры данных (типа sliding window max), применять теорию чисел.

    Одну задачу, что мне пришлось решать, я теперь спрашиваю на интервью. И она ничем не отличается от этих ненавистных многим "алгоритмических задач для интервью, которые никогда никому не понадобятся". Хотя я сам ее решение комитил и оно работает во многих миллионах компьютеров по всему миру.

    Для баланса укажу также и минус олимпиадников - это привычка писать ужасно неподдерживаемый код. Но это легко лечится за несколько недель. Особенно, если в проекте работает код-ревью.
    Ответ написан
  • Как получить всевозможные комбинации массива PHP?

    wataru
    @wataru
    Разработчик на С++, гуглер, экс-олимпиадник.
    Подсчитайте руками, сколько комбинаций для массива из 1,2,3,4 элементов? ответ будет 1,3,7,15 - степени двойки минус один. Подумайте, откуда это берется? Каждый элемент может или быть в ответе, или нет. 2 варианта. Премножаем все, получаем степень двойки. Но это учитывает варинат пустого ответа, поэтому один надо вычесть.

    Тут есть 2 подхода - рекурсивная функция перебора, которая или берет или пропускает текущий элемент. В конце, если хоть один элемент был взят - выводит текущий массив.

    Второй подход - перебирать битовую маску. Каждое число от 1 до 2^n будет в двоичной системе числения представлять какой-то вариант выбора разрядов. Поэтому можно прогнать цикл от 1 до 2^n, потом посмотреть на биты этого числа и брать соотвествтующие числа из массива.
    Ответ написан
  • Как решить задачу на сложность алгоритмов ниже?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, гуглер, экс-олимпиадник.
    г) не правильно подсчитано.

    Составьте уравнение. Вот есть у вас функция времени для n входных данных f(n) на компе B. На компе A время выполнения будет - f(n)/100, ведь он в 100 раз быстрее.

    Теперь обозначьте за x объем данных на компе A, который надо найти. Тогда у вас f(x)/100 = f(n). Подставьте нужную функцию вместо f() и найдите x. Спойлер, будет похоже, но не то, что у вас в вопросе указано.
    Ответ написан
  • Когда использовать ООП?

    wataru
    @wataru
    Разработчик на С++, гуглер, экс-олимпиадник.
    ООП - это не только, когда вы берете какие-то сущности из предметной области и оборачиваете каждую в объект, который что-то умеет делать. Это больше подход к организации кода. Вы делите задачу на подзадачи, а данные на обособленные части, абстрагируете детали внутри объектов. Это позволяет снижать сложность архитектуры. Теоретически любую программу можно написать внутри одной огромной функции с кучей goto. Но так никто не делает, потому что это невозможно поддерживать и невероятно сложно написать. ООП - это логическое продолжение процедур. Теперь вы не только какие-то части программы абстрагируете в одном месте, но теперь еще и данные вмести с ними.

    Мне нужен объект, который будет хранить состояние/данные, и есть общие операции над этим состоянием?


    Вопрос: что значит нужен? Всегда можно взять глобальную переменную, написать функции, которые это состояние принимают и что-то с ним делают. Но довольно часто организация в виде объекта просто удобнее.
    Ответ написан
  • Параметры функции?

    wataru
    @wataru
    Разработчик на С++, гуглер, экс-олимпиадник.
    Потому что иначе невозможна рекурсия. Что если у вас f(1,3) захочет вызвать f(0,0). Еще придется эти глобальные переменные переписать и потом как-то восстанавливать, если после вызова f(1,3) еще что-то хочет делать с этими параметрами.

    Потом, это тупо неудобно. Для каждой функции нужен свой набор глобальных переменных.

    Это про второй ваш вариант.
    В третьем же a и b локальные переменные. Получается вы их никак снаружи функции не сможете задать.

    Кажется, у вас непонимае. Функции нужны не просто для того, чтобы распилить программу на меньшие логически обособленные блоки, но и для переиспользования этих блоков в разных ситуациях. Вот пример - функция вывода строки на экран. Она в качестве параметра принимает строку для вывода. Ее можно вызывать для разных строк. Иначе смысла в ней вообще нет. Вот зачем нужны параметры.
    Ответ написан
  • Как это называется?

    maaGames
    @maaGames
    Погроммирую программы
    Помню, как открывал Mp3 файл в Ворде и огорчался, что вижу кракозябры, вместо текста песен и нот...

    Чтобы не было "жести", нужно открывать в HEX-редакторе, тогда будет удобоваримый шестнадцатиричный текст.
    Ответ написан
  • Как это называется?

    @vabka
    Токсичный
    Вы открыли exe-шник или библиотеку в блокноте видимо. Читайте про portable executable
    Ответ написан
  • Какую книгу по C# выбрать?

    @asArtem
    Никогда не читайте документацию в качестве обучения, как рекомендуют выше. Документация - это справка не более.
    Читать нужно только книги обучающие, иначе зёрна от плевел не отделить и за год даже.
    Ответ написан