Т.к. файл текстовый (не бинарный), то сначала нужно прочитать строку, затем эту строку преобразовать в число (std::atoi, std::strtol, аналогичные функции есть и у класса string).
Решать задачу вполне можно на статических (автоматических) массивах, т.к. заранее известно количество чисел.
Но учитывая, что количество элементов довольно большое, то лучше использовать динамические массивы.
Используйте std::vector - это класс динамического массива, использовать его проще, чем обычные динамические массивы, а кроме того он лишен многих недостатков "чистых" динамических массивов.
Си один из самых востребованных языков, при этом один из самых долгоживущих, на нем написано огромное количество кода. Информации в интернете вагон, но начинать лучше с книги.
Ваша задача элементарная, не нуждается в каких-то особенных знаниях, в любом учебнике по Си вы найдете всю необходимую информацию, что бы реализовать эту задачу.
По идее кодировка в этом случае не особо важна, главное, чтобы входные данные были не UTF8 (или другой Unicode), т.к. тут каждый символ может занимать больше одного байта.
Кодировка не важна, потому что вы сравниваете символы из входной строки с символами из входной строки :-) а у них кодировка одинаковая, какая бы она ни была.
QAJunior, Кстати, почему у вас n - float, она должна быть intом и в начале каждой итерации первого цикла должна приравниваться начальному значению (у вас n обнуляется только на первой итерации). Начальное значение у вас для n - это 2 (а не 0), т.к. значение первой итерации вычислять не нужно (это xn), поэтому всегда начинаете со второй.
Ограничение на точность у вас не верно, на мой взгляд нужно что-то типа этого: (abs(F - log(1-xn)) > eps)
QAJunior, Самое простое - запустите под отладчиком и пройдите в пошаговом режиме пару итераций цикла, проверяя значения выводимых переменных после каждого шага. Думаю этого будет достаточно, чтоб найти ошибку.
Без точного понимания, что стоит за указателями в классе (это динамические массивы или что-то другое) тут не дать правильного ответа.
Но в общем случае, если предположить, что keys и children это указатели на динамическую память, то если первоначальный объект удаляется, указатели можно просто скопировать (т.е. скопировать сами указатели, а не сделать копию памяти на которую указывает указатель), а на прежнем месте указатели обнулить, чтоб память выделенная по указателю не освободилась в процессе удаление первоначального объекта.
Это как с rvalue ссылками и move семантикой, но вам ничего не мешает делать то же самое руками.
Но можно воспользоваться средствами С++ - для этого реализуйте оператор перемещающего присваивавания и/или конструктор перемещения.
Сергей Горностаев, Теоретически мьютекс можно разместить в shared memory. Тогда им могут пользоваться и разные процессы. Никогда так не делал, но почему бы и нет. Единственое надо определится какой процесс должен инициализировать мьтекс.
На эту задачу хорошо ляжет read-write mutex. Вызов foo - блокирует read, bar - write.
Так же можно что-то замутить и с помощью atomic в shared memory, но там придется решать проблему с возможным нежелательным активным ожиданием.
Artemka1903, Эта информация легко модифицируется, смотри git remote --help
Никто не запрещает один локальный репозиторий подключить к нескольким удаленным репозиториям.
Так же после git clone вы можете просто удалить каталог .git (после этого каталог с проектом перестанет быть локальным гит репозиторием, вся информация о коммитах, ветках и т.п. будет потеряна) и инициализировать новый локальный репозиторий, который потом зальете на другой удаленный репозиторий.
Вообще в интернете всегда так - стоит выставить какой-либо сервис в интернет, тут же набегут какие-то боты, которые начнут пробовать сломать ваш сервис.
Смысл очень простой - найдут уязвимость, зальют свой код и будут использовать ваш сервер в каких-то своих "темных делишках", вы даже можете это не сразу обнаружить.
"срабатывание точки останова" - это же не ошибка. Видимо надо убрать точку останова. Или просто запускать не в отладочном режиме.
Зачем вам посимвольная чтение/запись? Пишите/читайте сразу всю структуру с помощью fwrite/fread. Это и проще и быстрее.
Хочу напомнить, что любая операция с файлами может завершиться с ошибкой, по не зависящим от программы причинам. Так что в обязательном порядке нужно проверять возвращаемые функциями работы с файлами значение. Пожалуй, только возвращаемое значение fclose() можно игнорировать.
dmshar, Ну явно же - переход от 3 к 105
Возможно, это определит лишь область для более детального анализа.
Для дальнейшего анализа можно, например, от 105 проверить когда разность изменит знак, так выйдем на 107, это и будет окончательным пиком.
Ваш вариант, кстати, выявит все локальные максимумы (сглаженные размером окна), включая "ярко выраженные пики", а так же и не ярко выраженные.
Страуструп сложен, подойдет для тех кто уже в теме, но хочет поглубже нырнуть.
Прата подойдет. Лафоре из той же оперы.
После этого нужно что-то по глубже, по современным стандартам, по параллельному программированию и т.п.:
Скотт Мейерс "Эффективный и современный С++", это та где про 42 рекомендации
Энтони Уильяис "Параллельное программирование на С++ в действии"
...
Решать задачу вполне можно на статических (автоматических) массивах, т.к. заранее известно количество чисел.
Но учитывая, что количество элементов довольно большое, то лучше использовать динамические массивы.
Используйте std::vector - это класс динамического массива, использовать его проще, чем обычные динамические массивы, а кроме того он лишен многих недостатков "чистых" динамических массивов.