• Как одна функция узнает числа массива из другой функции?

    @Flysink
    Почитайте про указатели и ссылки, в FillArray вы передаете указатель на массив int, то-есть адрес в памяти, где лежат данные, и в ShowArray вы передаете тот же адрес в памяти, где лежат данные.
    Ответ написан
    2 комментария
  • Как правильно обращаться с массивом строк в си,си++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char *grps[] = {""};
    Но получается так, что в grps храниться только первая gr, а последующие не записываются.

    Ты понимаешь, что у тебя в массиве grps -- один единственный элемент, и запись всех элементов после первого происходит мимо этого массива, куда-то на стек, портя другие данные?

    grps[k] = new char[8];
    ...
    String^ st = gcnew String("");

    А если твой вопрос не про С, то поправь теги.
    Ответ написан
    6 комментариев
  • Есть ли в си конструктор по умолчанию?

    Zoominger
    @Zoominger
    System Integrator
    Си - не объектно-ориентированный язык, там нет классов, и, соответственно, конструкторов.
    Ответ написан
    Комментировать
  • C# или Java для игр?

    saboteur_kiev
    @saboteur_kiev Куратор тега Разработка игр
    software engineer
    Какой язык больше подходит для написания игры (Unity в расчет прошу не принимать)

    Больше всего подходит бейсик.

    Прошу объяснить почему.

    1. Это не юнити.
    2. Я на нем сокобан за час сделал.

    P.S. Игры бывают разные. Платформы бывают разные. Знания бывают разные. Вам нужно больше деталей. А так игры можно на чем угодно писать.
    Ответ написан
    Комментировать
  • Как промоутить джунов в мидл разработчиков?

    SayMAN83
    @SayMAN83
    Работаю в IT
    У нас в компании недавно сделали открытые требования к грейду. Младший спец должен делать узкий круг задач, но под контролем своего руководителя. Чуть выше грейд- это уже самостоятельный чел. Старший спец - это уже тот кому может потребоваться делегирование своих полномочий. Т.е уже выше уровень. Ещё выше ведущий специалист. Так же идёт расчёт, работник движется в сторону менеджера или тех спеца. К примеру Тим лид - это больше менеджер и движется в управление. Тех спец движется в сторону консультанта и архитектора. Каждому сотруднику задаются цели на год. Потом проводится аттестация по результатам. Как правило цели выбираются для достижения грейда и зарплаты.
    Ответ написан
    6 комментариев
  • Как промоутить джунов в мидл разработчиков?

    Neikist
    @Neikist
    Бывший 1сник, теперь пишу под андроид
    На моей прошлой работе в последнее время той же целью задались (там и раньше были критерии, но тут прям конкретно решили). В общем опросили вообще всех программистов какие навыки важны с их точки зрения, владение какими инструментами, какие знания, какой опыт и т.п. и сейчас насколько я знаю пытаются +- рабочую модель составить по результату.
    Ответ написан
    2 комментария
  • Как промоутить джунов в мидл разработчиков?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Сначала вам необходимо подготовить максимально полную классификацию, кто есть кто в вашей компании. Например, абстракный джун обладает такими-то скилами, реашет такие-то задачи и т.п. Мидл, умеет и знает всё тоже самое, что и джун + что-то ещё по каждому из пунктов + возможно дополнительные пункты. Начиная со старших разработчиков уже должно быть прописано, как сотрудник влияет на бизнес и т.п.

    После того, как у вас есть классификация, определитесь с системой перехода между уровнями. Это может быть что угодно, начиная с интервью один на один, заканчивая тестами. Лучше, чтобы решения принимал не один человек, а два-три.

    Далее, необходимо чётко прописать зарплатную вилку для каждой должности, с учётом всех бонусов и прочих плюшек. Эти данные могут не быть публичными, но лучше чтобы все знали, на что они могут рассчитывать.

    Вот пожалуй и весь нехитрый набор рекомендаций. Важно, на мой взгляд подходить к реалзиации каждого этапа итеративно и командно. Выносить на всеобщее обсуждение, дорабатывать и т.п.
    Ответ написан
    6 комментариев
  • Как поставить таймер на кнопку в Android Studio?

    Yar_Rick
    @Yar_Rick
    yareg.com
    1. При нажатии на кнопку нужно сохранять timestamp куда-либо (в БД, в Preferences).
    2. При открытии экрана с этой кнопкой сравнивать текущее время с сохраненным timestamp - если прошло 5 часов, кнопка создается на экране активной, если нет - кнопка создается неактивной.
    3. Для активации кнопки в нужное время при постоянно открытом экране с этой кнопкой нужно воспользоваться какой-нибудь реализацией таймера. Таймер заводить при открытии экрана (onResume) на время, которое должно пройти с текущего момента до сохраненного timestamp + 5 часов и останавливать при закрытии экрана (onPause). Когда таймер сработал - кнопка активируется.
    Ответ написан
    Комментировать
  • Почему не устанавливается apk на некоторые телефоны?

    akaish
    @akaish
    Стек Java\Android
    Надо смотреть следующие вещи:
    1. Логи приложения на устройстве. Вы можете их посмотреть с помощью утилиты а-ля https://play.google.com/store/apps/details?id=com.... по крайней мере у меня на старом ведре Sony Z1 оно работает без рута (кто-то в комментах к вашему вопросу писал о том, что логкэты могут требовать рут прав, этот точно не требует для многих версий андроида). Также, для просмотра логов хватит просто установленного SDK с пакетом сопутствующих утилит на ноуте, к примеру (android sdk tools, ну сколько они занимают, мегабайтов 200 максимум).
    2. Надо смотреть Ваш манифест. Там есть ряд нюансов, на которые может смотреть установщик apk android. Сходу не могу сказать, какие именно нюансы, просто надо документацию почитать.
    3. Если вы используете нативные библиотеки, с некоторой долей вероятности Вы пытаетесь запустить приложение с библиотекой, скомпилированной для другой архитектуры.
    4. Вы можете использовать в своем приложении устаревшие или наоборот, еще не существующие API для конкретной версии.
    5. Если используете multi dex, у меня лично с ним был косяк для одного проекта, не запускался на 5-ке на некоторых устройствах. Плюнул, так как проект влезал в 64K ограничение на методы.
    6. Если качаете приложение с флешки, к примеру, через адаптер, или еще как-то без проверки контрольных сумм, могут быть ошибки, связанные с битым файлом apk.
    7. Приложение может не пропускать, к примеру, антивирус на устройстве. Может стоять запрет на установку приложений из сторонних источников. Может быть так, что существует запрет на установку apk фалов, не подписанных вовсе, или подписанных только debug ключами при отсутствии включенного режима разработчика (гипотеза).

    С Вашей проблемой не сталкивался, накидал гипотетических вариантов.
    Ответ написан
    1 комментарий
  • Как заставить rustc клонировать переменные динамического типа?

    ozkriff
    @ozkriff
    Rust э̶н̶т̶у̶з̶и̶а̶с̶т сектант, хобби игродел
    (Не надо кидать код картинкой)

    MCVE для твоей ошибки выглядит так:

    fn foo<T>(a: T) -> (T, T) {
        (a, a)
    }
    
    fn main() {
        foo(1);
    }


    playground

    Как и написано в ошибке, дело в том, что используемый тобой типаж `T` не требует маркерного типажа Copy, а значит переменные с его типом при первом складывании в поле структуры перемещаются, т.е. во второе поле класть уже нечего.

    Самый простой способ исправить ошибки в данном случае - добавить требование Copy:

    fn foo<T: Copy>(a: T) -> (T, T) {
        (a, a)
    }


    Playground

    Но типаж Copy работает только для POD типов, для более сложных типов в такой ситуации нужен уже типаж Clone.
    Ответ написан
    2 комментария
  • Выбрать числа из множеств, чтобы они не пересекались?

    sergiks
    @sergiks Куратор тега Алгоритмы
    ♬♬
    1. Выбираете 1-е число из полного диапазона.
    2. Выкидываете множество выпавшего числа.
    3. Выбираете 2-е число из оставшегося диапазона.


    Например:
    1. случайное из [0, 2346] оказалось 105 из диапазона "B"
    2. выкидываем диапазон B, остаётся [0, 1902], т.к. длина "B" 544-101+1 = 444, 2346 - 444 = 1902
    3. случайное из [0,1902] оказалось, например, 404. Для чисел выше 100 добавляем 444 и получаем 848 из диапазона "C" по старому стилю )
    Ответ написан
    Комментировать
  • CLI или GUI в 2019?

    NeiroNx
    @NeiroNx
    Программист
    Зачем серверу GUI? Мониторить сотояние? Так монитор состояния это отдельное приложение.
    Мухи отдельно, котлеты отдельно - смешивать не надо.
    Ответ написан
    Комментировать
  • Как посчитать количество элементов в массиве?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    std::size(mas)
    или
    std::distance(std::begin(mass), std::end(mass))

    Но лучше std::array использовать вообще. У него есть метод size.
    Ответ написан
    3 комментария
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Коротко, ты можешь не сохранять минимальное и максимальное значение отдельно, т.к. они всегда доступны по индексу в массиве. Другое дело - это что у тебя нет этих индексов до начала прохода по массиву, тебе их просто неоткуда взять. Этот момент и определяет верное начальное состояние в решении твоей задачи. Отсутствие этого момента и приводит к тому, что твой код сейчас работает неверно.

    Тебе нужны только индексы тех элементов, которые ты считаешь как минимальный и максимальный.
    size_t min_value_index = 0;
    size_t max_value_index = 0;

    Я выбираю инициализацию в 0 для того чтобы изначально обозначить первый же элемент массива и как минимальный, и как максимальный одновременно. Именно так я определю начальное состояние алгоритма.

    Далее надо сделать проход по массиву.
    for( size_t index = 1; index < stream_length; ++index )
    {
       // ...
    }

    Мне незачем сравнивать элемент по нулевому индексу с самим собой, т.к. я изначально уже выбрал его, поэтому проход по массиву можно начать со следующего элемента.

    Теперь надо записать условие выбора минимального и максимального значений.
    for( size_t index = 1; index < stream_length; ++index )
    {
       if( stream[ index ] < stream[ min_value_index ] )
       {
          min_value_index = index;
       }
       
       if( stream[ index ] > stream[ max_value_index ] )
       {
          max_value_index = index;
       }
    }

    При записи условий очень важно соблюдать логику. Нужно писать так, чтобы выражение читалось как можно легче, используя слова в названиях и порядок записи операций.
    Тут видно что если по текущему индексу значение меньше запомненного минимального, то надо запомнить текущий индекс как индекс минимального значения. И для максимального значения точно так же.

    По завершении цикла в min_value_index будет гарантированно лежать индекс минимального значения массива, а в max_value_index - индекс максимального.

    Как работает этот код.
    Ответ написан
    7 комментариев
  • Где может быть полезен Rust?

    printf
    @printf
    Ем детей.
    Кому и в каких задачах Rust может мне заменить

    Кому [...] мне — крутая формулировка, я заценил :З

    А заменяет он не C# и питон, а скорее Си и C++: Rust это язык для низкоуровневых вещей. На нем имеет смысл писать драйвера, серверы, движки рендеринга и т.п. вещи, и практически не имеет смысла писать скрипты (для этого есть Python) и окошки с кнопочками (для этого есть C#).
    Ответ написан
    7 комментариев
  • Странный дизайн Rust?

    Rust это не C++. Почему он должен брать термины из C++?

    В Java вон тоже ссылки - это указатели в терминологии C++.

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

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    int f(int n){
       return 1 + n;
    }

    Не благодари.
    Ответ написан
    Комментировать
  • Как передать в функцию ссылки на два элемента вектора?

    ozkriff
    @ozkriff
    Rust э̶н̶т̶у̶з̶и̶а̶с̶т сектант, хобби игродел
    https://stackoverflow.com/questions/30073684/how-t...

    TLDR: ты хочешь https://doc.rust-lang.org/std/primitive.slice.html... потому что Ржавчина разрешает иметь только одну активную изменяющую ссылку на сущность, а знание о том, как устроен срез/вектор в язык не зашито, т.е. это решается функциями с unsafe внутри.
    Ответ написан
    2 комментария
  • Rust использует виртуальную машину?

    @Ariox41
    Rust - это язык программирования, виртуальная машина - это среда выполнения. Вы можете скомпилировать Rust в wasm и запускать под виртуальной машиной (node.js или в браузере), или можете скомпилировать в машинный код и запускать как как обычное приложение. Правда, пока что экосистема wasm еще не развита, но в целом работает, да и сам язык до зрелости еще не дотягивает.

    Отличие от языков, изначально рассчитанных на виртуальную машину, заключается в том, что сам Rust не содержит предположений по этому по этому поводу и не предоставляет дополнительных функций, основанных на возможностях виртуальной машины. В частности, в нём нет возможности управлять jit-компиляцией. Впрочем, всё то же самое можно сказать и про C++, но там исторически сложилось, что долгое время под него просто не было виртуальной машины (сейчас его тоже можно скомпилировать в wasm или в JavaScript).

    На практике Rust компилируется в LLVM - байт код, с которым можно делать что угодно - компилировать в машинный код, запускать напрямую на виртуальной машине (теоретически) или транслировать куда-то еще.
    Ответ написан
    Комментировать