Задать вопрос
  • Работа с файлом через функцию с++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вам нужна тупо функция, которая читает К строк и которая пропускает K строк.

    Тогда ваш код становится в Skip(N-1), Read(M-N+1), Read(K-M+1) и читает файл ровно один раз.
    Ответ написан
    1 комментарий
  • Как исправить ошибку конструктора класса c++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Приведите всё сообщение компилятора целиком. В нем однозначно написано, какой конструктор он ищет. Кажется, внимательно посмотрев на него вы заметите, что компилятору нужен конструктор с const String&, когда как у вас определен только String&.
    Ответ написан
    Комментировать
  • Как копировать поведение типа, переданного аргументом шаблона класса?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Определите у него конструктор с шаблонным типом.
    Ответ написан
  • Кто уметь и знает ,а так же подскажет как использовать движение в треугольной сетке полигона в Скретч?

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

    Граф задается очень просто: введите систему координат - каждой вершине соответствует 2 числа - номер стороки (горизонтальная линия, где она находится) и номер в строке (какая она по порядку там). На нечетных строках будет n вершин, на четных - n-1.

    В списках ребер для каждой вершины добавьте ребра влево и вправо (на (x, y+1) и (x, y-1)). Наклонные ребра надо по разному создавать для вершин с четным x и нечетным x. В первом случае это будут (x+-1, y-1), (x+-1, y); во втором - (x+-1, y), (x+-1, y+1);
    Ответ написан
  • Как лучше сортировать данные в которых не отсортирован только 1 объект?

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

    Самое быстрое - это обработать 2 случая, элемент изменил свое значение вниз или вверх. Потом циклом или влево или вправо надо swap-ать его со следующим, пока они стоят не в том порядке. Можно чуть соптимизировать и выкинуть лишние операции из каждого свап-а:
    // a[moved] увеличился.
    tmp = a[moved];
    for (i = moved+1; i < a.size() && a[i] < tmp; ++i) {
      a[i-1] = a[i];
    }
    a[i-1] = tmp;
    Ответ написан
  • Как разделить входящую строку на группы символов с подсчетом их положения?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Нет, надо просто прочитать n символов и поддерживать текущий символ, индекс начала группы и длину группы.
    Когда прочитали символ, если он не равен предыдущему, то выводите группу. Если равен, то увеличивайте длину группы. После цикла не забудьте вывести последнюю группу. Еще, для удобство изначально надо инициализировать ваши переменный группой длины 1 с первого символа и начать итерироваться со второго.
    Ответ написан
  • Какая ошибка в коде?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Скобки в if расставьте, где сокет создаете. Приоритет у сравнения больше, чем у присваивания
    Ответ написан
    Комментировать
  • Как настроить IDE C++?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Так нельзя создавать динамический массив в C++. Это VLA, и оно не является стандартом. VS вообще, похоже, его не поддерживает, в отличии от gcc, который этот код компилирует, хоть и не обязан. Видимо, на серверах стоит g++.

    Никакие настройки вам не помогут.
    Вам надо выделять динамический массив через new[] или лучше использовать std::vector.
    Ответ написан
    1 комментарий
  • Какое математическое ожидание будет правильным?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Неправильно. Надо суммировать произведение значений на их вероятности. Вы же тупо n умножаете на вероятности, а надо X(n).

    Но вы еще и сумму ряда неправильно подсчитали. А вам что-то похожее считать придется. Там можно через интегрирование/дифференцирование рядов вывести формулу.
    Ответ написан
  • Как найти пустую ячейку массива с наименьшим индексом?

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

    При добавлении:
    Если этот указатель -1 - то надо взять следующий по порядку элемент. Иначе указатель - это пустая ячейка. Ее используйте, но сначала сдвиньте указатель на список пустых элементов вперед по списку.

    При удалении просто добавляйте пустую ячейку в начало списка (эта ячейка указывает на текущую голову списка; голова теперь указывает на эту ячейку).

    УПД:

    Это все выше, если забить на требование заполнения самой левой пустой ячейки. Зато все операции (удаление, поиск пустой ячейки) выполняются за константу и не надо константную дополнительную память.

    Если обязательно заполнять самую левую ячейку - то надо писать или приоритетную очередь (через heap) или дерево отрезков (или дерево Фенвика). Тогда операции удаления и поискка будут работать за логарифм и потребуется линейная дополнительная память.
    Ответ написан
    5 комментариев
  • Что за ошибки и как их решить?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы ваш исходник на C++ пытаетесь запуcтить. как будто это java.

    Настройте eclipse для работы с c++. CDT вроде плагин назывался, который надо поставить.
    Ответ написан
  • Как решить ошибку индексирования динамического двумерного массива?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Вы работаете с matrix, как если бы это был массив, но у вас это не массив. Или переопределите оператор [] или как-то выдавайте из matrix наружу T**.
    Ответ написан
    Комментировать
  • Как уменьшить выходной exe при компиляции?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Под винду собираете? exe-шник получается такой большой, потому что туда впендюривается почти весь libc.

    Мелкий файл вы получите, если напишите на чистом winapi и скомпилируете msvc. Ну, или с динамической линковкой всех библиотек, но ваш exe без установленных в системе VС++ redistributables работать не будет.
    Ответ написан
    Комментировать
  • Как исправить ошибку в операторе =?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Надо выделять памяти на +1 символ для завершающего '\0' (который вы тоже должны в конце ставить).

    Потом, можно использовать strcpy вместо ручного цикла. И потом, ваш класс сильно проигрывает std::string - подумайте над вариантом использовать его. Ну или используйте его внутри вашего класса вместо ручного выделения памяти.
    Ответ написан
    Комментировать
  • Как убрать мусор из char массива?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Что у вас за операция пересечения?

    Первая проблема - вы берете максимальную длину двух строк в size и потом проходитесь циклом до size по обеим строкам. Но ведь более короткой строки там просто нет - вы обращаетесь к не вашей памяти.

    Вам надо проверять, есть ли обе строки по индексу i, прежде чем сравнивать их.

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Не совсем понятен вопрос, но есть комментарии по стилю в method1. Лучше передавать указатель вместо неконстантной ссылки. Так из места вызова сразу видно, что передаваемое значение может меняться. На некоторых проектах это прописанно в правилах.

    Если вы про имя параметра, то обычно члены класса делают приватными и это как-то отражается в имени. Например, в конце имени ставится _. А у аргумена функции - нет. Вот они и будут различными. Если же вам нужен именно публичный член класса, то не проблема, что они совпадают, ибо из метода можно обратиться к члену через this и параметру просто так. Но это опасно - можно где-то перепутать и лучше все-таки чтобы имена параметров методов и членов класса не совпадали.
    Ответ написан
    7 комментариев
  • Не могу верно решить задачу из ЕГЭ по инфе. Почему ответ неверный?

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

    Надо делать динамическое программирование:

    F(n, k) - максимальная сумма, которую можно получить, взяв какие-то числа из первых n пар и при этом получить k нечетных чисел.

    F(0,0) = 0

    F(0,*) = -infinity

    F(n,k) = max_i=0..1 a[n-1][i]+F(n-1,k-a[n-1][i]%2).

    Ответ: max_i=0..n: F(n,i) (т.ч. F(n,i) - той же четно для i<=n//2 и нечетно для i > n//2)
    Ответ написан
    Комментировать
  • Как создать n количество переменных?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Список/массив на n элементов.
    Ответ написан
    Комментировать
  • Mоего преподавателя не устраивают следующие операторы:Rev(&n,&A,&D) и Mult(&n,%D,&B1,&X1)?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Я думаю проблема в том, что вы передаете все как указатели. Например, n можно передавать не как адрес (&n), а просто как n (и тип параметра должен быть не int*, а просто int).

    Это все лишнее и только усложняет код.
    Ответ написан
    Комментировать
  • Почему не работает часть программы?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Да у вас непонимание базового синтаксиса. Нельзя делать свитч по нескольким переменным сразу. Там у вас запятая - это оператор, котоый возвращает последний элемент. Также в ифах.
    Ответ написан
    4 комментария