Это копия, сохраненная 1 декабря 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
https://github.com/sosachbot/cppthreadhat/wiki
если честно, не смотрел че там по ссылке
книги не успевают за развитием языка, статьи в интернетах по большей части уровня "я вчера это узнал, а сегодня пишу вам", хочешь быть в тренде - смотри видео с конференций, если сам по ним не катаешься, само собой
движуха конкретно по языку:
cppcon russia
https://www.youtube.com/channel/UCJ9v015sPgEi0jJXe_zanjA/featured
corehard братишек-белорусов
https://www.youtube.com/channel/UCifgOu6ARWbZ_dV29gss8xw
cpp-party от ребят из яндекса
https://events.yandex.ru/events/cpp-party/
cppcon
https://www.youtube.com/user/CppCon
boostcon
https://www.youtube.com/user/BoostCon/featured
meeting c++ от дойчей
https://www.youtube.com/user/MeetingCPP/featured
старички accu
https://www.youtube.com/channel/UCJhay24LTpO1s4bIZxuIqKw/featured
алсо, специализируетесь на чем то? хайлоад? микроконтроллеры? геймдев? - ищи специализированную конфу и видео с нее
imho, на степике лучше пройти курс от cs center, чем аналогичный от mail.ru, это
https://stepik.org/course/7
и его продолжение
https://stepik.org/course/3206
если у кого то есть положительный опыт прохождения других онлайн курсов - пишите в тред
да
Нет, тебе надо на каждую единицу данных которую можно посчитать независимо запускать отдельный тред.
В твоём случае это на каждую строку в левой матрице
На каждую комбинацию строки левой и столбца правой, вернее
vector<double> numbers;
while (cin>>number) {
while (numbers.size()<3){
numbers.push_back(number);
cout << numbers[numbers.size()-1] << '\n';
}
}
Мне нужно, чтобы после ввода числа оно сразу же выводилось, но проблема в том, что оно выводится 3 раза вместо одного и в том,что выводящееся записывается в вектор.
while (cin>>number) && (numbers.size()<3) {
numbers.push_back(number);
cout << numbers[numbers.size()-1] << '\n';
}
Господа, чего можно не особо громоздкого навернуть чтобы иметь представление о последнем стандарте плюсов?
Мне для общего развития. Жизнь-то по-всякому повернуться может, авось и приятную работейку на крестах встречу.
Был даже знакомый стартаперо-хуяпер, который в датасайнс укатился, грил что если из крестов пользовать самые последние фичи то в целом это один из приятнейших языков для вкатывания в 2к18 если ты не веб-макак.
Сам я пока наткнулся ровно на то почему в своё время в плюсы не полез - чудовищный исторический разброс применяемых методов даже в плане чистых бестпрактис. Вплоть до того что в книгах ДОСовские идиомы встречаются.
На крестах каждый вырабатывает бест практисес сам себе. Если ты этого не можешь, то в кресты тебе рано.
>Учитель в школе решил, что норм.
В 90-х было норм. Сейчас у школоты дефицит концентрации и внимания. Им лучше Scratch изучать.
Лучше б как все, с питончика
С чистый если очень уж хочется работу с памятью показать
А насчёт scratch кстати у нас в школе применяли какой-то графический язык, было норм
Последня книга Мейерса "Эффективный и современный С++", в котором поднимаются вопросы изменений в языке с С++11 и С++14.
Это абсолютный минимум, но который уже требует от тебя бекграунда в С++, а именно четкого понимания того, зачем вообще потребовалось расширять стандарт языка и его возможности, то есть требует знания С++98.
Дальше все хуже. Статьи в интернете - мусор по большей части. Что может помочь - это видео с конференций в шапке. Есть еще второе издание "Шаблонов С++" Джосаттиса, в котором более-менее детально описывается что произошло с шаблонами в С11 и С++17. Эта книга замечательная, появился русский перевод по сумашедшей цене, но для практикующего разраба это стоит того. Есть второе издание "Стандартной библиотеки" Джосаттиса, там stl стандарта С++11. В книге "Параллельное программирование на С++ в действии" Энтони Уильямса обсуждаются и используются средства поддержки параллельного исполнения в стандарте С++11. Для большинства же изменений в стандарте с трудом можно найти вменяемое объяснение что и как. Приходится тупо набивать шишки на практике и пытаться хоть-что то понять обращаясь к тексту самого стандарта, который теперь просто монструозен по объему.
Начал изучать Go и просто охуел от того как просто и понятно можно всё сделать. Нужен С++2 или ещё что, обратная совместимость это пиздец на таком промежутке времени
>Начал изучать Go и просто охуел от того как просто и понятно можно всё сделать.
Особенно обобщённый код.
В го кстати хотят генерики какие-то сделать
Но вот я сейчас задумался о своих словах об обратной совместимости и понял что не прав. По сути с++ определяется обратной совместимостью и если её убрать то останется просто ещё один язык, как раст или д, да ещё с ебанутой системой дизайна комитетом
+1
>останется просто ещё один язык, как раст или д
ммм, за крестами стоит огромное количество инструментария разработки, библиотек на все что угодно, наработанных десятилетиями практик, книг и материалов
Это все есть пока есть обратная совместимость...
да ладна
явка выстрелила в ентерпрайзе, это да
особенно все что касается middleware, по сути в этой области решения на яве задавили все остальное
сишка и кресты же - универсальный инструмент
а что не так? чего тебе не хватает в инструментарии, пару примеров, для того чтобы продолжить обсуждение?
дело движется к тому что в следующие стандарты таки в стандартную библиотеку добавят средства работы с сетью
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4771.pdf
но это встречает некое сопротивление, в том числе и по идеологическим причинам, основанных на том что невозможно создать эффективную универсальную библиотеку для работы с сетью, это будет всегда компромис
ну а существующих библиотек полно
>Менеджмент пакетов
тоже активно развиваются последнее время, движуха идет
То есть если надо положить какой-нибудь uint16, то сначала идёт(допустим) старший байт, затем младший.
Ничего умнее следующего пока не придумал, но я думаю что должны быть способы.
template<typename T>
void insert(std::vector<unsigned char>& vec, const T elem)
{
const auto ptr = reinterpret_cast<unsigned char>(&elem);
for (int i = 0; i < sizeof(elem); i++)
vec.push_back(*(ptr+i));
}
>есть последовательность байтов, но планирую класть туда цифры
Твой метод не годится потому что ты не знаешь какая на твоём процессоре эндианность
Вообще непонятно что ты хочешь сделать, это говно не распаковать потом
>
>const auto ptr = reinterpret_cast<unsigned char>(&elem);
>for (int i = 0; i < sizeof(elem); i++)
>vec.push_back(*(ptr+i));
>}
Храни вектор векторов, блджад
Нашел в свойствах проектах эту настройку и отключил. Но этот конфиг по умолчанию для всех проектов врубился. Как мне для всех создаваемых проектах вырубить эту настройку "Устранение рисков Spectre", постоянно в каждом проекте заходить и вырубать совсем бред...
или вектор из юнионов
в универе были кресты и какое-то представление имею о них, но не уверен в их перспективности. Знаю, что много совковых нии-параш, где люди десятилетиями пишут си подобный крестокод без каких-либо современных технологий за копейки: это типичная работа для крестовика в рашке? или скорее исключение из правил и большая часть вакансий - машин лёрнинг с нейронными сетями и искусственным интеллектом и алгоритмами?
не лучше ли вкатываться в джаву/скалу/свифт? питон не перевариваю
буду ждать адекватных анонов
>о перспективах
если одним словом: становятся специализированным инструментом
если с точки зрения работы: нужно много знать, тупо много учить, денег будешь получать при этом меньше чем если бы занялся каким-то другим программированием
если действительно хочешь вкатываться - проверь себя: открой на середине "шаблоны с++" джосаттиса или майерса посленюю книгу или какой-нибудь доклад с cppcon или boostcon или, еще лучше, любую библиотеку мета-программирования из boost и спроси себя, потянешь ли ты это
и при этом будь готов работать за 80 в дс уже зная все это
все так, в НИИ ебашут на крестах и ку-тэ за 45-80 т.р. (МАКСИМУМ) кадрам с 10 годами платят может около 90. Работа тупая, откатные проекты и прочее говно, перспектив никаких.
Дело в том, что программа по сути вычисляет хуйню и все.Нужно обязательно задействовать функции, по этому все вычисления происходят у меня в отдельной функции, начиная с "Insert..." заканчивая выводом результата. Препод доебывает, говоря что в главной должно быть хоть что-то, а я хуй знает что туда добавить, кроме как
cout << "" << endl;
...
namefunct();
system("pause");
return 0;
Может у вас есть варианты ?
Хорошо, сейчас сделаю( по правде я так планировал с самого начала сделать)
А можно какой-нибудь цикл добавить, который будет тоже участвовать в процессе, но чтобы не переписывать само вычисление(для меня это оказалось не слишком легкой задачей, т.к. вникать начал не так давно)
Ну да, сделай цикл "ввод - вычисления - вывод" который будет повторяться бесконечно пока пользователь не введет команду на выход
Спасибо, теперь попробую понять как это все провернуть уже в писанине. Добра тебе.
Забей ты хуй на кресты. Зп ниже чем у жавистов, голова болит больше. Да и кресты уже не те кресты, а какое то новомодное говно. И если выбирать между ними то жава однозначно
Кресты выбирают за нативный код и полное управление памятью, они с джавой не конкурируют
Шутишь? Нативный код и полное управление памятью - это к Сишечки. Какое говно генерирует крестовый компилятор - это еще гадать надо.
Все с тобой ясно
>Какое говно генерирует крестовый компилятор - это еще гадать надо.
ты всегда можешь смотреть ассемблерный выхлоп компилятора
вообще то это стандартная практика при любой оптимизации кода, даже не нужно проводить замеры и прочее, глянул что сгенерились правильные инструкции и значит ты на верном пути
Можешь использовать винапи SetPixel(...)
целая армия
роботодатели могут выбирать и платить копеечку
>>87982
>кадрам с 10 годами платят может около 90
>при этом будь готов работать за 80 в дс уже зная все это
пиздец полный, через год работы джуном на пыхе получал уже больше. Печаль-беда, придётся оставаться веб-какахой изи перекатываться в джаву для удовлетворения жажды знаний. Ну или свифт (только кому он нахуй нужон)
только учить кресты начал, не закидывайте камнями
В чём минусы использования класса string?
string a, b, c;
..
string s = a+b+c; <= сколько здесь раз вызовется конструктор строк? ответ: зависит от реализации
Не знаю к чему ты это приплёл, память может просто физически закончиться и всё
:'(
Это имя инстанса
Довен. Ты наезжал на динамическое выделение памяти. Значит ты знаешь, сколько тебе заранее нужно.
Ну так выдели сколько нужно и используй.
Тогда исчезает смысл использования стринга, потому что ты всю память кже заранее выделил
Тогда исчезает смысл жаловаться на динамическое выделение памяти, если ты используешь string.
што значет не дает?
1. Small String Optimization - относительно небольшие строки не требуют динамических аллокаций
2. AllocatorAwareContainer - со стандартными стрингами можно использовать кастомные аллокаторы. Охуенно, если ты хочешь память поконтролировать.
3. std::string - алиас для специализированного char-ами типа std::basic_string, который охуенен тем, что поддерживает не только 1-байтные символы, но и больше. Никогда не забывай про Юникод, программы щас не только американцы используют
4. std::char_traits - мало того, можно еще и кастомизировать привычные операции для стандартных строк.
Хочешь, чтобы у тебя были новые пиздатые строки, которые можно сравнивать, игнорируя то, заглавные ли символы или строчные? Запили новые char_traits, делай алиас
using MyCaseInsensitiveString = std::basic_string<char, MyCaseInsensitiveCharTraits> и на нахуй, у тебя есть твои пиздатые строки, не надо писать васянские функции compareCaseInsensitive, потому что у тебя из коробки есть operator==, который сделает то, что надо.
Вот, читни про это вот всё, прежде чем говорить, что какая-то поебня не дает преимуществ: https://en.cppreference.com/w/cpp/string/basic_string
Как и плюсы
мой круг интересен тем, что показывает количество просмотревших вакансию
вот, например, 2500 просмотров
так чтож работодатели имеют из чего выбирать, их, наверное, завалили резюмехами
Общее представление об структурах и алгоритмах; C++14/17; RAII и как правильно его готовить (move семантика, чем отличается prvalue от xvalue, умные указатели (чем make_shared отличается от shared_ptr)); Паттерны-хуятерны; динамический полиморфизм (плюсом будет знание, как делают «виртуальные» функции на сях, почему штатный полиморфизм в плюсах плох, разницу между сообщениями и методами (и почему существуют такие библиотеки как Folly.Poly, dynamix, dyno)); статический полиморфизм; метапрограммирование; По многопоточности: потоки, блокировки (желательно знать еще транзакционную память и как её использовать (смотри TBB) ), атомарные опрерации (желательно иметь предстовление о memory order, strong/weak опреации), конкурентные структуры, общее представление о lock-free алгоритмах ( wait-free будет плюсом, но я так и не нашел где они используются за пределами академической среды); общее представление о гетерогенном программировании (task based программирование, flow graph (смотри все в TBB, она должна стать, де факто, твоей основной библиотекой по многопоточности)) Ближе к хардверу: представление о том, что твой код будет представлять (x86 ассемблер, особенно со всеми расширениями - боль, можно понимать LLVM IR и ты мало что потеряешь от этого); само собой, как компиляция происходит, общее представление о posix (когда его применять);
Еще плюсом будет умение грамотно пользоваться менеджерами пакетов типо conan; правильно деплоить свое приложение; общие скиллы для программиста(система контроля версий, анализаторы, сайнитайзеры, форматеры кода, jira, уметь в тайм-менеджмент и не заваливать дедлайны); следить что там происходит в мире плюсов;
Братиш, запили мне плез threadsafe lockfree unordered map, да с итераторами, ты ж молодой да шутливый, тебе всё легко.
нет, но мы же в треде про с++
>запили
Джун и мидл, да и сеньор — это не про запиливание lockfree структур данных.
Этим специально обученные люди занимаются. Ну или просто такая структура берётся на стороне.
Пописял на тебя.
>чем отличается prvalue от xvalue
Насколько это важно знать? я не ищу оправдание не знать, т.к. мне поздно уже его искать
#include <iostream>
int main() { std::cout << "Hello, world!\n"; }
И нашел следующие записи Ctrl+F -> "dll":
libgcc_s_dw2-1.dll
libgcj-16.dll
KERNEL32.dll
libmingwex-0.dll
msvcrt.dll
libgcc_s_dw2-1.dll
libstdc++-6.dll
Этого же нет на винде изначально, тогда как решается эта проблема?
Молебен за упокой
там написано что это минимальные требования к миду касательно знания собственно крестов
помимо этого тебе нужно знать английский и иметь базовые social skills
и, да, платить тебе будут не "мильон в месяц", а 80-100 и это в дс
Ну платят по крайней мере получше, и от россии политически далеко
Прошу помощи. Хотел разобраться с тем как работает next_pemutation и завис. Нашёл хорошую статью на стаковерфлоу, там всё достаточно чётко обьяснили. Но я всё равно не пойму. Как функция меняет значения с 1243 до 1324 за один переход цикла? Я так понимаю мы берем число и проверяем, что если все числа справа от него в убывающем порядке то больше возможных комбинаций справа нет. Но как блять оно перешло с 1243 до 1324, там ведь только свап нужен. И как работает while (!(i < --k)), оно должно выбирать наибольший элемент или как? И почему j меняет значение только иногда, оно ведь по идее должно с каждой итерацией меняться, разве нет? Статью с оверфлоу и скрин вывода вывод значений я для удобства добавил прикладываю. https://stackoverflow.com/questions/11483060/stdnext-permutation-implementation-explanation
while (!(i < --k)) исполняется только когда все числа справа от i в убывающем порядке и исчет справа, соответсвенно оно найдёт наименьшую цифру которая больше *i и тем самым обеспечит минимальный переход при пермутации
О, тот самый шарящий анон. Если не устал то можешь помочь на остальные вопросы ответить? Я то я сидел с бумажкой и ручкой писал, и в итоге всё равно где-то туплю. Первый час я правда потратил чтобы понять что после while(!(i < *--k)) нет фигурных скобок сука
>Но как блять оно перешло с 1243 до 1324, там ведь только свап нужен
1324-1243 < 1342-1243, просто свапа мало, надо и остальные цифры привести в порядок возрастания чтобы алгоритм выбрал пермутации 13хх
Там же даже написно что пасс
Видимо не так написал, я хотел сказать что там только свап выполняется если условие верно. Как оно меняет сразу 3 цифры местами?
Ищет* лол
Бля, я читал это как reserve, думал оно место резервирует для комбинации. Сейчас почитаю про нее. Пиздец я тупой
J меняет значение если все цифры справа в убывающем порядке, то есть итерации исчерпаны. После этого цифра высшего порядка меняется и для все цифр справа всё начинается снова, тут есть некоторая рекурсивность
Это in-place алгоритм, он не выделяет никакой памяти и даже не знает какого типа значения он пермутирует, как бы он выделял память или ещё что?
Да я понял что протупил. Я вот всё равно не пойму смысл while(i < *--k). Что будет если оно вернёт false? Цикл ведь дальше пойдет?
Если он вернёт false это значит что он нашёл новую цифру высшего порядка и теперь будет её ставить на место
Не пойму как он это будет делать. Вот если стрелочками показать ну или написать просто то какой код будет исполнятся если вернется фолс? Если тру то цикл просто пойдет дальше выходит.
Если он тру то он декрементит k и больше ничего не делает, если он фолс то выполняется свап и реверс и ретурн тру, новая пермутация найдена
Вооооо. Спасибо большое. Все части кода я вроде более-менее понял. Сейчас будет свободных часов 5 впереди, буду сидеть разбираться пока не смогу написать аналогичный алгоритм сам. Какой-то очень адекватный анон пошёл.
В текстовые! А потом или ручками или библиотекой считать по правилам символьной арифметики.
Не очень понял, но предлагается написать что-то типа
my_long_int(const string num)???
А как такая конструкция будет считывать записи типа
my_long_int mli = 1234 ???
И еще вопрос, попробовал скомпилировать, плюсы вообще не хотят работать с числами, в которых много знаков.
Сейчас прохожу https://www.coursera.org/learn/c-plus-plus-white/
В целом курс для новичка сложноват.
>попробовал скомпилировать, плюсы вообще не хотят работать с числами, в которых много знаков
????????????????????????
????????????
?????????????????????????????????????????
??????
Короче вопрос такой. Могу ли я поймать в какую-то переменную число из 60 символов и если могу то в какую максимально примитивнуюпеременную? В смысле там есть реализация в бусте длинной арифметики, но я что-то не смог найти конструктор этих чисел и посмотреть во что там собственно ловят.
X number = 123456789012345678901234567890
Существует такой встроенный тип X или способ, как что-то подобное реализовать?
Сука, я же обещал себе не заходить в этот тред поле того, как ни один человек в нем не знал, что такое ПОД-типы и какие у них особенности инициализации.
Нахуй вы вообще что-то пишите если в плюсах на уровне школьника разбираетесь?
Не существует. Стандарт это позволяет, но нужно реализовать компилятор с соответствующим расширением, делающим валидным литералы бесконечной длины.
Спасибо, анон.
Лучшее, что ты можешь с подобным синтаксисом - использовать какой-нибудь кастомный тип для большой арифметики и user-defined literals, чтобы конструировать из строки с цифрами число, как тут уже сказали:
struct BigInteger {
unsigned long digits;
};
BigInteger operator""_bigint(const char* value, unsigned long len) {
return { len };
}
void foo() {
BigInteger x = "123213213124512512542132213"_bigint;
}
>BigInteger x = "123213213124512512542132213"_bigint;
Не, я хочу
BigInteger x = 123213213124512512542132213
Но видимо, так сделать нельзя.
У объекта есть owner, который чистит всех у кого он числится влалельцем. Соответственно если овнер не нулевой, то чистить не надо, надо чистить только самый топовый объект
То есть QApplication и главное окошко надо почистить? А вообще что лучше использовать, .deleteLater() или православный delete free().
у всех нормальных людей процессоры с x86 архитектурой и little-endian
QApplication у тебя живет на стеке и поэтому деструктор у него вызовется сам при выходе QApplication из области видимости.
Собственно, насколько я помню, это справедливо для всех Qt-объектов
Не, ну если я сделаю QApplication* obj = new QApplication? Просто часто бывали случаи как я загружал много объектов в стэк и оверфлоу ловил.
Используй умные указатели, люк. В современном С++ сырые указатели это зашквар. В частости тут подойдет либо unique_ptr либо QSharedPointer. Но вообще загугли это, я с Qt не работал очень давно и может там есть какие-то проблемы с этим.
вся суть, пациент плавает вообще в основах, а ему советуют использовать умные указатели как панацею
По-твоему для использования умных указателей нужно сдать экзамен и получить диплом?
Как правило это сорокалетние старперы так рассуждают, которые привыкли срать new и delete везде, вместо того, чтобы этого не делать.
>как панацею
Твои проекции.
>пациент плавает вообще в основах
Какие основы, доктор, я спрашивал про фреймворк, а не про язык.
Да, это похоже на ксамль, вот только встроенные скрипты на джаваскрипте придется писать.
Ну скрипты с анимацией не страшно. Больше интересен мощный зад на c++, вычисляющий белки на видеокарте, и красивый гуи
Ну гуи да, реально легче писать чем на виджетах. Особенно если писать скрипты для генерации кюмла.
Пишу свои хайворлды (лабы) в Sublime text, компилируя gcc (MinGW) под шиндой. Все классно, мне это очень удобно, приятно и легко. Ранее использовал готовые IDE и там в свойствах проджекта задавалась возможность компиляции с всеми библиотеками и прочими ресурсами в готовый файл (это RAD Studio) с MSVC все еще проще было так как регисты есть на всех пк (под шиндовс ofc), а мне их с головой.
Закинул в PATH путь до MinGW и в Build system (Sublime - Tools) выбрал С++ Single file. Компилирую по Ctrl+B, все работает, но стоит перетащить бинарник туда где не установлена MinGW естественно ничего не запускается сыпя ошибками о отсутствии библиотек.
Как можно безболезненно выйти из ситуации (устал компилировать потом отдельно в VS) ? Может достаточно просто закинуть зависимости в папку с бинарником ?
Все что указано в include:
#include "windows.h"
#include "iostream"
#include "cstring"
#include "fstream"
Не помню кстати какие что конкретно в ошибке указывалось, возможно надо еще чего добавить ?
Логировать, естесна, хочу те параметры, которые могут быть выведены в поток оператором <<
Ну а так же не должно быть пиздеца с выводом результата, если функция void.
Джентельмены, походу только здесь могу докопаться до истины
В одном треде Сексача произошел срач между околоайтишниками: https://2ch.hk/sex/res/4884780.html (М) один утверждал, что можно "прочитать пару книжек по С++ и алгоритмам" и уже бежать искать работу за 100-150к, даже без всякого опыта, в качестве пруфа кидался этот пикрил. В ответ ему прилетало что он хуй и чмо, но без особых аргументов
Так кто прав-то??
>прочитать пару книжек по С++ и алгоритмам
если просто так прочитаешь - ничего в голове не останется
а если выполнять примеры и делать упражнения, то "пара книг" у тебя годик вьябывания по 10 часов в день займет
современные кресты, это ни сишка, но даже тот же k&r будешь делать пару месяцев минимум
> В чем подвох?
в том что тебя попросят на бумажке на собесе перевернуть односвязный список и на этом ты обосрешся
Просто автор вакансии не указывает опыт
Код забыл
Всё, в целом с алгоритмом я разобрался, но осталась пара вопросов: этот >>91373 и где в этом коде реализуется сортировка? Я так понял цикл while выбирает одно из значений и сравнивает его с аналогичным в другой части массива, и в итоге записывает одно из них, увеличивая количество записанных чисел и указатель в одном из массивов. Но когда я рисовал алгоритм на листочке я так и не понял где оно сортирует его, если при достижении размера 1 слияние не выполняется, а при двойке оно просто их сливает. Может кто пояснить на конкретно этом коде? cpp.sh/2x7x5
Ну бля я хуй знает как описать, там практически весь алгоритм это слияние двух подмассивов и рекурсия, а вот момент минимальный подмассив сортируется я не могу понять точнее найти
Слиянием конечно, не заметил как-то.
Удвою. Наконец-то понял мув семантику, форвард-хуёрвард, ссылки все эти, разобрался с кастами, осознал разницу между деклтупе и авто.
>что такое ПОД-типы
На работе на мой вопрос чё это за хуйня тимлид сказал "хуй знает, наверное pairs of double", так что не будь так строг к анонам, анон.
Пиздец ты тупой
Внизу дерева останется два или 3 элемента которые будут мерджится, а мерджатся они в порядке возрастания
Возьми небольшой массив и пройдись по алгоритму в уме
>В плюсах никто классы с типами не путает
Алсо на сппреференс то и дело в описании сбиваются с классов на типы и наоборот, так что не всё так однозначно.
Сейчас пройдусь, только ответь на первый вопрос пожалуйста. Сначала функция сама себя вызовет, а потом только будет мёржить? Выходит оно сначала 2+2 сложит, потом 4+4 и по возрастанию?
1+1, потом еще один 1+1, потом 2+2
Это рекурсивный алгоритм, поэтому сложность получается nlogn
Можешь посмотреть визуализации сортировок на ютубчике.
Ладно, извиняюсь, был неправ
Ну вот как-то так выходит, верно? АААА блять, оно же сначала разделит массив на два, а потом в рекурсии проверит. Спасибо аноны, выручаете, как всегда.
> A Plain Old Data Structure in C++ is an aggregate class that contains only PODS as members, has no user-defined destructor, no user-defined copy assignment operator, and no nonstatic members of pointer-to-member type. Greater detail can be found in this answer for C++98/03.
>>91442
http://www.heaventools.ru/pe-explorer.htm
Этим чтоли посмотри. Ты куда вкатываешься вообще: в сиспрограмминг или фронтэнд с портфолями?
Даже без всего этого можешь тупо пытаться смотреть какие длл требует и добавлять в папочку (костыли из костылей костыльных)
>Requirements
Either:
a scalar type;
a class type (class or struct or union) that:
is a trivial type;
is a standard layout type;
has no non-static members that are non-POD;
an array of such type.
Далеко не только то, что ты описал, а вообще к чему ты это? Я как раз и писал, что даже тимлид не знал, что такое pod, говорит pairs of doubles.
На всякий случай scalar это possibly cv-qualified arithmetic, pointer, pointer to member, enumeration, or std::nullptr_t type, другими словами с под типами гораздо чаще сталкиваетесь, чем думаете.
Я всё к тому что проведя очень много времени за всем этим вычитыванием остаешься в ситуации когда даже с сраной джава макаки требуют меньше чем с тебя за большие деньги. Нахуй так жить. Перекатываюсь
Да я не провожу много времени, просто столкнулся в реквайрментсах с POD типами, спросил, получил ответ про пары даблов, решил загуглить. Я не какой-то там книжный червь. Как раз про то и говорю, что не то, что аноны с двача, чувак с дохера годами опыта понятия не имел что это.
Лучше блядь грузчиком в ашане или тележки в ленте катать чем быть анальным рабом манагеров
ты, наверное, просто не был на дне, не вьябывал на погрузке, не стоял в магазе в зале или на кассе, не работал в цеху на заводах, даже по студенчеству
и тебе не с чем сравнить
Я огороды перекапывал еще ДО студенчества и норм было - попроще чем мозгоебство в этих ваших конторах с дегенератами.
Да, через манифесты это еще тот костыль. Никуда я не вкатываюсь, каким - то местом попал в местный универ мухосранска на ОТи погромист специальность (ПИ), сам я не погромист ниразу, точнее писал много чего и были времена действительно веселый,даже банчил своими продуктами. Но я к этому перегорел еще до 20 - ти лет и это уже далеко не то что мне нужно ин лайф. Соответственно ВУЗ кончаю так сквозь пальцы чтобы маму не обижать. Там постоянно что - то погромировать надо, но, в основном основы основ (то что я описал в инклуд это максимум что может понадобится) максимум ООП какой - нибудь. Я уже не могу терпеть всякие IDE, мне чистый компилятор и текст эдитор за глаза, но, свои програмки я должен демонстрировать в вузе, где они не открываются. Чтобы начали открываться приходится в стужии финал компилировать, но это иногда черевато переделыванием половины кода нахуй. Узнать какие библиотеки требует заранее я тоже не могу. Неужели не предусмотрен вариант чтобы все зависимости в бинарник сами запоковались ну или в папку копирнулись. Может можно скормить бинарник линкеру там или компоновщику. Я хз как параметры компиляции в стандартном пресети билда саблайма менять.
Сравнил огороды и грузчиком. Я в порту грузчиком работал, офис после этого словно в рай попал.
Сравнил грузчика в порту с пинанием хуев с тележками. Эти сраные 8 часов с офисными дегенератами подрывает здоровье посильнее физического труда.
Замени MinGW на вот это: http://tdm-gcc.tdragon.net/
Оно по дефолту делает статик (якобы)
Или ищи ключи к статической сборке MinGW
У MinGW посмотри флаги -static-libgcc -staticlibc++ -static
#include <string>
using namespace std;
class name_pairs {
public:
name_pairs(string nn, int aa):n{nn},a{aa}
{}
name_pairs():n{default_pairs().name()},a{default_pairs().age()}
{}
const name_pairs& default_pairs()
{
static name_pairs d{"def name",0};
return d;
}
string name () const {return n;}
int age () const {return a;}
private:
string n;
int a;
};
ostream& operator<<(ostream& os, const name_pairs& d)
{
return os<<"name: "<<d.name()<<" age:"<<d.age();
}
int main()
{
name_pairs dd;
cout<<"вот вам хуй"<<dd;
return 0;
}
</code>
#include <string>
using namespace std;
class name_pairs {
public:
name_pairs(string nn, int aa):n{nn},a{aa}
{}
name_pairs():n{default_pairs().name()},a{default_pairs().age()}
{}
const name_pairs& default_pairs()
{
static name_pairs d{"def name",0};
return d;
}
string name () const {return n;}
int age () const {return a;}
private:
string n;
int a;
};
ostream& operator<<(ostream& os, const name_pairs& d)
{
return os<<"name: "<<d.name()<<" age:"<<d.age();
}
int main()
{
name_pairs dd;
cout<<"вот вам хуй"<<dd;
return 0;
}
</code>
С чего начать? Boost ASIO + vlc? Насколько подъёмно?
Не слушай наркоманов
Алсо, есть ли какие-то более менее стандартные реализации concurrent map для плюсов? Итерироваться не нужно, только вставка-удаление. Или только мьютекс вручную?
>стандартные
Серебряной пули нет, отталкивайся от потребностей.
Например, можешь взять одну из реализация cuckoo.
Какая аллокация, ты не пишешь new и пара выделяется на стеке точно так же, как выделялись бы два параметра
если хочешь чтобы все это дело было более-менее рабочим и из коробки нахаляву, то да
с++11 + std::map + std::mutex
c++11 гарантирует thread safe для map на операции чтения, а мьютексом синхронизируешь операции изменения
lock free вообще любые контейнеры еще пока, имхо, сырые
вернее, относительно легко делается lock-free стек и очередь, что собственно и сделано в boost
но реализация хорошего lock-free map - адски сложное дело
не слушайте этого любителя андифайнед бихевиоров. Shared Mutex для этого впилили спецом
Нет, в С++ переменые умеют храниться на стеке, а не указывать куда-то в кучу, как в случае управляемых языков. Поэтому выделение памяти под std::pair будет просто как для любой локальной переменной. Вызов конструктора компилятор заинлайнит и поэтому тут вообще никаких проблем нет.
Зато сам map хранит свои ноды в куче, так что там аллокаций будь здоров, без pool-аллокатора это крайне тормозная штука, не рекомендую. Но заменой параметров у insert ситуацию не поправишь.
ну это понятно, что для мапов и списков вместо аллокатора по умолчанию по идее лучше взять кастомный, основанный на пуле, например из буста пул взять
только вот посмотреть бы как на практике это реализуют в работающих проектах
Инпут в первом кейсе терминируется длиной, а не делиметером
Увельчь лимит до нормального значения(и размер буфера тоже)
По заданию не более 12 букв во всех трёх строках. Но за помощь спасибо. Не заметил как-то. Алсо, тут еще одна проблема. Программа зависает во всех случаях, даже если я просто ввожу значения из файла во входной поток. Дело в том что оно не видит где конец файла и пытается считать дальше, или в чём? Код приложу сейчас. cpp.sh/3zvej
У тебя только 9 строчек, а ты пытаешься считать 10
С такими мудацкими вопросами сам ебись, умнее будешь
https://www.youtube.com/playlist?list=PLtDc3cNvuhAIU_LRYg6xFaJV_95Kkt79n
"шаблоны с++, второе издание" джосаттиса и вандервуда издали на русском
книга охватывает и с++17
есть в сети в электронном виде
имхо, вместе с майерса последней книжкой будет самое наиполезнейшее чтение из книг сейчас
if(ost==1) {x1=x1*10+ost; s1=s1+1;}
И else обязательно ли использовать, если он не нужен?
stackoverflow.com/questions/35910043/why-does-rand-compile-without-including-cstdlib-or-using-namespace-std
Вам в ваших ебучих шарагах надо курс по гуглению давать, с экзаменами
Я проходил его, хорош достаточно для того, чтобы устроиться крестоджуном на галеру. Работаю уже полгода.
var00 - не инициализированная переменная.
Наверное scanf не извлекает все символы.
И если ты уже юзаешь С ф-и, тоюзай printf вместо cout
Реализовал то что у тебя на пике:
70 строк кода вместо 20 с обычным циклическим алгоритмом умножения
Просто увидел эту гифку и решил попробовать сделать так же, чисто ради интереса, да и помогать разбираться так вроде бы проще будет
Знаю, уже исправил. Кинул сразу после того как дописал, не проверяя на компилируемость
имхо, не лучше, но на уровне
лично мне одинаково интересно смотреть доклады и у них и у нас
второе, признаюсь, мне не хватает знаний английского языка, когда докладчики начинают объяснять какие-то новые концепции, вводимые в язык, с которыми я еще не сталкивался
проще сначала послушать человека который говорит о том же но на русском языке
Как сделать так, чтобы по выбору пользователя (1 пик) >Введите 1, чтобы..
У меня срабатывал конструктор, заполняющий произв. значениями, а при нуле - единицы.
Пытаюсь запихнуть всё это в операторы ветвления, но после этого у меня перестают определяться методы из этого класса. Как быть?
Весь код: https://pastebin.com/8uBFNi4f
Привет, тож в этом году в колледж поступил
Программа должна выстраивать из цифр вводимого числа максимально большое число. Подобное наблюдается при вводе любого числа, в котором больше 10 цифр.
#include <stdio.h>
int main()
{
int n, ost, x1=0, x2=0, x3=0, x4=0, x5=0, x6=0, x7=0, x8=0, x9=0;
int s0=1, s1=1, s2=1, s3=1, s4=1, s5=1, s6=1, s7=1, s8=1, s9=1;
scanf_s("%d", &n);
while(n>0)
{
ost=n%10;
n=n/10;
if(ost==0) s0=s010;
if(ost==1) {x1=x110+ost; s1=s110;}
if(ost==2) {x2=x210+ost; s2=s210;}
if(ost==3) {x3=x310+ost; s3=s310;}
if(ost==4) {x4=x410+ost; s4=s410;}
if(ost==5) {x5=x510+ost; s5=s510;}
if(ost==6) {x6=x610+ost; s6=s610;}
if(ost==7) {x7=x710+ost; s7=s710;}
if(ost==8) {x8=x810+ost; s8=s810;}
if(ost==9) x9=x910+ost;
}
n=n+((((((((((((((((x9s8)+x8)s7)+x7)s6)+x6)s5)+x5)s4)+x4)s3)+x3)s2)+x2)s1)+x1)*s0;
printf("%d", n);
scanf_s("%d", &n);
return 0;
}
Программа должна выстраивать из цифр вводимого числа максимально большое число. Подобное наблюдается при вводе любого числа, в котором больше 10 цифр.
#include <stdio.h>
int main()
{
int n, ost, x1=0, x2=0, x3=0, x4=0, x5=0, x6=0, x7=0, x8=0, x9=0;
int s0=1, s1=1, s2=1, s3=1, s4=1, s5=1, s6=1, s7=1, s8=1, s9=1;
scanf_s("%d", &n);
while(n>0)
{
ost=n%10;
n=n/10;
if(ost==0) s0=s010;
if(ost==1) {x1=x110+ost; s1=s110;}
if(ost==2) {x2=x210+ost; s2=s210;}
if(ost==3) {x3=x310+ost; s3=s310;}
if(ost==4) {x4=x410+ost; s4=s410;}
if(ost==5) {x5=x510+ost; s5=s510;}
if(ost==6) {x6=x610+ost; s6=s610;}
if(ost==7) {x7=x710+ost; s7=s710;}
if(ost==8) {x8=x810+ost; s8=s810;}
if(ost==9) x9=x910+ost;
}
n=n+((((((((((((((((x9s8)+x8)s7)+x7)s6)+x6)s5)+x5)s4)+x4)s3)+x3)s2)+x2)s1)+x1)*s0;
printf("%d", n);
scanf_s("%d", &n);
return 0;
}
Скорее всего у тебя проблема в том, что инт может хранить значения не больше 2^31. Попробуй тип на какой-то long long поменять.
А почему long два раза? Один раз нельзя? Просто я только начал учить языки программирования.
Это вроде самый большой тип для хранения данных. Можешь unsigned int попробовать, мне лень считать.
Хотя нет, не хватит. Вот тебе табличка.
>Библиотеки какие там подключены видишь? То-то же.
преподу своему так говорить будешь, когда он это повторит
тогда пиздец
Еба, таких условий даже нам в шараге не дают. Компиляторами хоть пользоваться можно, или свой писать?
вывод в консоль записью в видеобуфер
У того препода такой способ обучения, заставляет решать задачи лишая нас некоторых упрощающих решение возможностей, заставляя искать иной выход из поставленной ситуации.
ваш препод дегенерат с двача
уверен в том что можно, но звучит круто
Вводится число (n<=10^15), надо написать такую программу, которая меняет цифры введённого числа местами, образуя максимально возможное число из этих цифр. Не слово в слово, но как запомнил. Заданий было несколько, на лабе не решил ни одного, только одно сейчас дома осилил.
Ты забыл самое главное, нельзя использовать ничего кроме stdio.h, это одно из условий задания.
Я же писал что сканф оставляет лишнюю хуйню в потоке. Надо stdin очищать sclear_stdin на пикриле
Лол, зачем так? 4 строчки
func pow(x, n)
{
if n = 0 return 1
else if n is odd return x умножить на pow(x, n/2)^2
else return pow(x, n/2)^2
}
"умножить на" замени на звездочку, ^2 замени на дважды повторённое умножение, а то мало ли не понял.
И привет Наилю Хусаинову
Блять, мерси, ты лучший
У такого алгоритма если че О(логн) комлпексити всего, а у наивного О(н), фил зе дифференс как говорится мхмхехе.
Потому что я сижу дома вторую неделю и мне нехуй делать, алсо, тренируюсь в написании функций
Типа это не косяк, а так и было задумано? Ну ок тогда.
Быстрее работает.
Например, если тебе нужно возвести х в 1024 степень, то по первому алгоритму ты совершишь 1024 действия, а по второму 10.
однако ты быстро словишь выход за допустимые границы числа на больших степенях - а потому сомневаюсь в дрочке этого алгоритма
Ну он же не привязан к С++, в каком-нибудь питоне нет ограничений по сути на длину числа.
Да и вообще, а если тебе просто нужно 1000 сравнительно небольших чисел возвести в степень по очереди. Не, один хуй имеет смысл.
>Да и вообще, а если тебе просто нужно 1000 сравнительно небольших чисел возвести в степень по очереди. Не, один хуй имеет смысл.
Вот про это соглашусь, а про питухон - там разве числа неограниченной величины? (без decimals)
Да, в третьем нет ограничений на int.
Я имею в виду, что пытался скомпилировать твой код через VS 2010 Express, ввёл число и получил хуй.
>Я имею в виду, что пытался скомпилировать твой код через VS 2010 Express, ввёл число и получил хуй.
У вас там наверное манямирок со своими манякомпиляторами, работающими по вашим же манястандартам.
Последняя версия использует те же io функции, что и твое поделие
По условию задания нельзя использовать ничего из C++, потому что сейчас мы проходим чистый C.
там кстати сделали целую специализацию по с++ . Помимо этого курса есть еще 4. Этот самый простой.
Я бы посоветовал его проходить после прочтения половины любой книги для новичков по с++.
Да.
Благодарю.
>>93149
окей, закину в шапку следующего треда, если буду жив к тому моменту
https://www.coursera.org/specializations/c-plus-plus-modern-development
в общем, на курсере этот курс от ребят из яндекса и мифи
а на степике таки лучше курсы от cs center чем от mail.ru
Вообще похую
НАПИСАЛ ОВЕР 1000 СТРОК КОДА
@
ВСЕ РАБОТАЕТ
@
РЕШАЕШЬ ПРИКРУТИТЬ ЕЩЕ ОДНУ СВИСТОПЕРДЕЛКУ
@
ВСЕ РАБОТАЕТ, ПРИ ПОПЫТКЕ ИСПОЛЬЗОВАТЬ СВЕЖЕПРИКРУЧЕННОЕ - КРАШИТСЯ
@
ПЫТАЕШЬСЯ ПОЧИНИТЬ
@
ПЕРЕСТАЕТ РАБОТАТЬ ВООБЩЕ ВСЕ
@
УДАЛИЛ ВСЕ ЧТО ПРИКРУТИЛ
@
КОД ВСЁ ЕЩЕ НЕ ПОДАЕТ ПРИЗНАКОВ ЖИЗНИ, ПРИ ТОМ ЧТО СТАБИЛЬНО КОМПИЛИРУЕТСЯ
@
НАЧИНАЕШЬ ПРОЗВАНИВАТЬ, РАЗДЕЛЯЯ ПО КУСОЧКАМ
@
В ГОЛОВЕ ЕХИДНЫЙ ГОЛОС:
@
>Ну, давай разберем по частям тобою написанное. Складывается впечатление, что ты реально контуженный, обиженный жизнью имбецил.
Блять, не в том ошибка была, это я переписал неправильно.
Но спасибо за наводящий ответ, нашел
Один символ и все по пизде
А я ошибку в логике искал ~ полчаса
Нихуя не предупреждает, пидорас
Компилирует, запускает, при попытке ввода крашится
DEV C++, ммм
Чем тебя не устроил cin?
> Один символ и все по пизде
> А я ошибку в логике искал ~ полчаса
Не огорчайся.
Даже у сильных мира сего бывают ошибки
https://twitter.com/id_aa_carmack/status/857207449987817472
Так добавь опции компилятору -Wall
При этом код компилится и работает
Да это иде не может твоё говно правильно распарсить
Но там можно бесплатно прослушать курс. Разница только в том что ты не можешь 90% задач отправлять на проверку. А так весь материал и видео лекции бесплатен.
Выделять все на стеке и пусть конпелятор оптимизирует?
Ебашить везде shared_ptr? Разбавлять unique_ptr'ами?
Или, по-старинке, долго и вдумчиво new-delete, new-delete?
Плохо. Мне как раз нужен универсальный способ, я хочу написать транслятор своего языка во что-нибудь компилируемое.
Тогда делай все на умных указателях. Будет тормозить - тогда уже оптимизируй.
> я хочу написать транслятор своего языка во что-нибудь компилируемое.
Почему плюсы а не C или LLVM?
Алгоритм нахождения сумм и замены элементов я понимаю, но я не понимаю, как можно пропихнуть двумерный массив в функцию и как вернуть измененный массив?
Бля, ну и вопросы у вас. Это всё гуглится за две минуты. Если массив динамический то прототип выглядит примерно так
int foo(int ar,int size); Чтобы потом что-то с ним делать присвой результат функции куда-то и всё.
Согласен, поэтому лучше юзать с++ без библиотек в своих маня проектах.
>Какое говно генерирует крестовый компилятор - это еще гадать надо.
не надо гадать
ассемблерный выход всегда можно посмотреть, вообще то
Аноны, вчерашний дебил с калькулятором на связи.
Калькулятор я доделал и теперь мне приспичило запилить себе консольную змейку.
Отписал я значит кусок кода, решил запустить, он скомпилился (ВНЕЗАПНО с первого раза) и дальше предлагает ПОЖАЛУЙСТА ПОСОСАТЬ ПИСОС
Что делать, аноны?
Алсо, на запрос адреса в printf-е внимание не обращайте, знаю что имя массива указывает на его первый элемент вся хуйня, уже пофиксил.
Все равно не работает
На комментарии тоже можете внимания не обращать, я это чтобы вслух все не проговаривать, иначе доебут спасибо боженька за аутизм не обманул
Скажи спасибо, что у тебя Хусаинов ведет.
Он самый нормальный препод по проге во всем радике, как мне кажется
Суть в том, что Хусаинов любит олимпиадки и часто дает олимпиадные задачи.
В частности, в контестах для младших школьников есть много задач, которые нужно решать без условий, циклов и массивов - вот он их и дает.
Это всё хорошо, но олимпиадцы потом в большинстве своем никому не нужны.
Типа сейчас змейка выползает, ползет вправо и заползает. И повторить?
- У тебя строки на '\0' заканчиваются?
- Цикл for принципиально не юзаешь?
- У тебя куча магических чисел.
>магических чисел
Что это?
>цикл for принципиально не юзаешь
В while все как-то очевиднее для меня, поэтому предпочитаю, хз.
У for есть какие-нибудь преимущества по скорости исполнения перед while-ом?
>У тебя строки на '\0' заканчиваются?
Они же вроде сами проставляются, если под них место оставить, нет?
Алсо, я космический еблан. Тут действительно стоило бы for использовать
Расставил везде puts-ы чтобы посмотреть до какого места работает, а она в самом начале в бесконечный цикл уходит оказывается
Или я неправильно понимаю принцип работы?
Придумать, как ожидать от пользователя ввода между обратным отсчетом в циклах, а если он за время обратного отсчета ничего не ввел - продолжить функцию, я не смог, поэтому змейка осталась на уровне постоянного переползания от правого края к левому
Это меня огорчает
>>93049
Тред не читал, пока стоял в душе придумал решение, скорее всего уже решили получше, но вот (Шавкятычу привет):
#include <cstdio>
using namespace std;
int main()
{
short num;
unsigned short num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,counter;
num0=num1=num2=num3=num4=num5=num6=num7=num8=num9=counter=0;
puts ("Ââåäèòå ÷èñëî, ïîäëåæàùåå ñîðòèðîâêå: ");
while (num!='\n')
{
scanf ("%c", &num);
switch (num)
{
case '0': {++num0; break;}case '1': {++num1; break;}
case '2': {++num2; break;}case '3': {++num3; break;}
case '4': {++num4; break;}case '5': {++num5; break;}
case '6': {++num6; break;}case '7': {++num7; break;}
case '8': {++num8; break;}case '9': {++num9; break;}
case '\n': break;
default: {puts("\n\nÂâîäè ÷èñëà, âûáëÿäîê!"); break;}
}
++counter;
}
long long result = 0, degree = 1;
bool doCycle = 1;
for (; counter != 2; --counter){degree = 10;}
while (doCycle)
{
while (num9) {result += (9degree);degree/=10; --num9;}
while (num8) {result += (8degree);degree/=10; --num8;}
while (num7) {result += (7degree);degree/=10; --num7;}
while (num6) {result += (6degree);degree/=10; --num6;}
while (num5) {result += (5degree);degree/=10; --num5;}
while (num4) {result += (4degree);degree/=10; --num4;}
while (num3) {result += (3degree);degree/=10; --num3;}
while (num2) {result += (2degree); degree/=10; --num2;}
while (num1) {result += (1degree);degree/=10; --num1;}
while (num0) {result += (0*degree);degree/=10; --num0;}
doCycle = 0;
}
printf ("\nÐåçóëüòàò ñîðòèðîâêè ðàâåí: %lld\n\n", result);
return 0;
}
Алсо, какого хуя не копируется кириллица из моего любимого DEV C++?
Придумать, как ожидать от пользователя ввода между обратным отсчетом в циклах, а если он за время обратного отсчета ничего не ввел - продолжить функцию, я не смог, поэтому змейка осталась на уровне постоянного переползания от правого края к левому
Это меня огорчает
>>93049
Тред не читал, пока стоял в душе придумал решение, скорее всего уже решили получше, но вот (Шавкятычу привет):
#include <cstdio>
using namespace std;
int main()
{
short num;
unsigned short num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,counter;
num0=num1=num2=num3=num4=num5=num6=num7=num8=num9=counter=0;
puts ("Ââåäèòå ÷èñëî, ïîäëåæàùåå ñîðòèðîâêå: ");
while (num!='\n')
{
scanf ("%c", &num);
switch (num)
{
case '0': {++num0; break;}case '1': {++num1; break;}
case '2': {++num2; break;}case '3': {++num3; break;}
case '4': {++num4; break;}case '5': {++num5; break;}
case '6': {++num6; break;}case '7': {++num7; break;}
case '8': {++num8; break;}case '9': {++num9; break;}
case '\n': break;
default: {puts("\n\nÂâîäè ÷èñëà, âûáëÿäîê!"); break;}
}
++counter;
}
long long result = 0, degree = 1;
bool doCycle = 1;
for (; counter != 2; --counter){degree = 10;}
while (doCycle)
{
while (num9) {result += (9degree);degree/=10; --num9;}
while (num8) {result += (8degree);degree/=10; --num8;}
while (num7) {result += (7degree);degree/=10; --num7;}
while (num6) {result += (6degree);degree/=10; --num6;}
while (num5) {result += (5degree);degree/=10; --num5;}
while (num4) {result += (4degree);degree/=10; --num4;}
while (num3) {result += (3degree);degree/=10; --num3;}
while (num2) {result += (2degree); degree/=10; --num2;}
while (num1) {result += (1degree);degree/=10; --num1;}
while (num0) {result += (0*degree);degree/=10; --num0;}
doCycle = 0;
}
printf ("\nÐåçóëüòàò ñîðòèðîâêè ðàâåí: %lld\n\n", result);
return 0;
}
Алсо, какого хуя не копируется кириллица из моего любимого DEV C++?
Знаю что непрофессиональная хуйня
Но там повыше парень битами и сдвигами жонглировал, я блять не понял нихуя, хоть в теории и знаю что это такое
а как иначе реализовать без мам, пап и массивов с векторами и Наилями в душе не ебу, честно
Вместо миллиона переменных num сделай один массив. В первом цикле используй введенное число как индекс массива (nums(num)++). Во втором цикле замени тучу циклом while на один цикл for от 0 до 9 и один while внутри него.
Парень который задавал вопрос указал это как одно из условий (а еще нельзя использовать никакие хедеры кроме <stdio.h>)
Ну как
Твоя задача отсортировать цифры по убыванию: 2860327 => 8632270
Цифр у тебя мало, всего 10 штук, значит удобно применить сортировку подсчетом https://ru.wikipedia.org/wiki/Сортировка_подсчётом
То есть тупо считаешь число девяток, число восьмерок и дальше как-то их записываешь.
Ты можешь легко узнать последний разряд числа хуиткой типа
while (n != 0) {
posledniy_razryad = n % 10;
n = n / 10;
}
Ты можешь легко дописать цифру слева хуиткой типа
yoba = yoba + cifra 10^длина_числа.
а цифру справа хуиткой типа
yoba = yoba 10 + cifra_sprava
Остается это скомбинировать. Считаем число нулей, записываем. Считаем число единиц, записываем справа от нулей. Считаем число двоек. И так далее, до девяти.
Получится вот так
https://ideone.com/VelFpW
>2860327 => 8632270
Тут с семеркой проебался
>Считаем число единиц, записываем справа от нулей
А тут слева конечно же
>как ожидать от пользователя ввода между обратным отсчетом в циклах
Колдовать с API операционки для неблокирующих и не выводящих на экран чтений. Можно в другом потоке, но все равно нужен ввод без эха.
>char names = new char * ;
А после добавлял туда по одному элементу
>names = new char[нужный размер];
И увеличивал счётчик на единицу за каждый элемент, а потом с помощью цикла использовал элементы как мне нужно. Но когда пришло время очистки памяти компилятор начал ругаться за утечку памяти. Может кто подсказать нормальный способ, или хотя-бы как правильно очистить память в моём случае, вот так вот выдаёт ошибку
> for (int i = 0; i < arraysize;i++)
delete [] names;
Блять, там вообщем i-элемент в обоих случаях создания и удаления строки, абу не пускает.
Не совсем понял вопрос. Когда мне нужно старую освобождать? Мне нужно на ходу составить массив из нескольких элементов, их количество заранее не известно. От чего нужно освобождать память, если я создаю несколько элементов массива?
Когда ты вызываешь
names = new char[нужный размер];
ты выделяешь абсолютно новый блок памяти
Соответственно старый со старыми данными остаётся висеть в памяти
Выделяешь новую память -> копируешь данные в новую память -> освобождаешь старую память -> присваиваешь указателю на старую память адрес новой памяти
Да я там элемент массива создать пытаюсь, тут просто нельзя квадратные скобки со значением интерпретируются не так. Там должно быть
names[номер элемента] = new char[размер строки];
Там большая программа связанная с файлами, сейчас комментариев расставлю чтобы понятнее было и вкину
cpp.sh/6ijvn
Держи, там в целом тоже самое что я и писал, только еще код программы основной. Сейчас запустил и заметил что программа в конце зависает, раньше вроде такого не было
Пиздец ты нихуя не понял что такое массив, как они относятся к указателям и что делает new
Начинай сначала
Ты хочешь хранить указатели на неопределённое количество строк, но выделяешь память только под один указатель
Я так понял вот такой записью я создам указатель на указатель на строки размером в 13 символов? Ну как на картинке выходит. А можно ли создать массив из неопределенного количества строк и неопределенного их размера, а заполнить по мере надобности? Или я пик 3 переопределяю их размер? В главе про new и кучу ничего такого не было, извини если очевидные вещи спрашиваю
забыл пик3
Указатель это и есть строка
>А можно ли создать массив из неопределенного количества строк
Нет
И освободить всё потом не забудь
Спасибо за помощь
Сорян за то что много текста
#include "pch.h"
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int Player;
int Total;
class Question
{
private:
string Question_Text;
string Answer_1;
string Answer_2;
string Answer_3;
string Answer_4;
int Correct_Answer;
int Question_Score;
public:
void setValues(string, string, string, string, string, int, int);
void askQuestion();
void SetQuestion()
{
srand(time(0));
rand();
int r = rand() % 10 + 1;
switch (r)
{
case 1:
setValues("В каком году началась Первая мировая война?",
"1913",
"1914",
"1915",
"1916",
2,
10);
break;
case 2: setValues("В каком году закончилась Первая мировая война?",
"1917",
"1918",
"1919",
"1920",
2,
10);break;
case 3:setValues("В каком году началась русско-японская война?",
"1902",
"1903",
"1904",
"1905",
3,
10);break;
case 4:setValues("В каком году закончилась русско-японская война?",
"1903",
"1904",
"1905",
"1906",
3,
10);
break;
case 5:setValues("В каком году началась Октябрьская революция?",
"1915",
"1916",
"1917",
"1918",
3,
10);
break;
case 6:setValues("В каком году началась Вторая мировая война?",
"1938",
"1939",
"1940",
"1941",
2,
10);
break;
case 7:setValues("Кто был главным союзником Гитлера?",
"Черчилль",
"Рузвельт",
"Муссолини",
"Хирохито",
3,
10);
break;
case 8:setValues("Когда закончилась Вторая мировая война?",
"1943",
"1944",
"1945",
"1946",
3,
10);
break;
case 9:setValues("Точная дата окончания Второй мировой войны?",
"9 мая", "2 сентября", "1 июня", "22 июля", 2, 10);
break;
case 10:setValues("Когда случился развал СССР?", "1990", "1991", "1992", "1993", 2, 10);
default:
break;
}
}
};
int main()
{
setlocale(0, "Rus");
cout << "Нажмите Enter чтобы начать викторину" << endl;
cin.get();
Question q[10];
for (int i = 0; i < 10; i++)
{
q.SetQuestion();
q.askQuestion();
}
cout << "Вы набрали: " << Total << " Из 100" << endl;
cout << endl;
if (Total >= 50)
{
cout << "Поздравляю, вы прошли викторину!" << endl;
}
else
{
cout << "К сожалению, вы не прошли викторину" << endl;
}
return 0;
}
void Question::setValues(string q, string a1, string a2, string a3, string a4, int ca, int pa)
{
Question_Text = q;
Answer_1 = a1;
Answer_2 = a2;
Answer_3 = a3;
Answer_4 = a4;
Correct_Answer = ca;
Question_Score = pa;
}
void Question::askQuestion()
{
cout << endl;
cout << Question_Text << endl;
cout << "1. " << Answer_1 << endl;
cout << "2. " << Answer_2 << endl;
cout << "3. " << Answer_3 << endl;
cout << "4. " << Answer_4 << endl;
cout << endl;
cout << "Ваш ответ?" << endl;
cin >> Player;
if (Player == Correct_Answer)
{
cout << endl;
cout << "Поздравляю! Правильный ответ!" << endl;
Total = Total + Question_Score;
cout << "Счет: " << Question_Score << " Из " << Question_Score << endl;
cout << endl;
}
else
{
cout << endl;
cout << "К сожалению, не правильный ответ" << endl;
cout << "Счет: 0 " << " Из " << Question_Score << endl;
cout << "Правильный ответ: " << Correct_Answer << endl;
}
}
Сорян за то что много текста
#include "pch.h"
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int Player;
int Total;
class Question
{
private:
string Question_Text;
string Answer_1;
string Answer_2;
string Answer_3;
string Answer_4;
int Correct_Answer;
int Question_Score;
public:
void setValues(string, string, string, string, string, int, int);
void askQuestion();
void SetQuestion()
{
srand(time(0));
rand();
int r = rand() % 10 + 1;
switch (r)
{
case 1:
setValues("В каком году началась Первая мировая война?",
"1913",
"1914",
"1915",
"1916",
2,
10);
break;
case 2: setValues("В каком году закончилась Первая мировая война?",
"1917",
"1918",
"1919",
"1920",
2,
10);break;
case 3:setValues("В каком году началась русско-японская война?",
"1902",
"1903",
"1904",
"1905",
3,
10);break;
case 4:setValues("В каком году закончилась русско-японская война?",
"1903",
"1904",
"1905",
"1906",
3,
10);
break;
case 5:setValues("В каком году началась Октябрьская революция?",
"1915",
"1916",
"1917",
"1918",
3,
10);
break;
case 6:setValues("В каком году началась Вторая мировая война?",
"1938",
"1939",
"1940",
"1941",
2,
10);
break;
case 7:setValues("Кто был главным союзником Гитлера?",
"Черчилль",
"Рузвельт",
"Муссолини",
"Хирохито",
3,
10);
break;
case 8:setValues("Когда закончилась Вторая мировая война?",
"1943",
"1944",
"1945",
"1946",
3,
10);
break;
case 9:setValues("Точная дата окончания Второй мировой войны?",
"9 мая", "2 сентября", "1 июня", "22 июля", 2, 10);
break;
case 10:setValues("Когда случился развал СССР?", "1990", "1991", "1992", "1993", 2, 10);
default:
break;
}
}
};
int main()
{
setlocale(0, "Rus");
cout << "Нажмите Enter чтобы начать викторину" << endl;
cin.get();
Question q[10];
for (int i = 0; i < 10; i++)
{
q.SetQuestion();
q.askQuestion();
}
cout << "Вы набрали: " << Total << " Из 100" << endl;
cout << endl;
if (Total >= 50)
{
cout << "Поздравляю, вы прошли викторину!" << endl;
}
else
{
cout << "К сожалению, вы не прошли викторину" << endl;
}
return 0;
}
void Question::setValues(string q, string a1, string a2, string a3, string a4, int ca, int pa)
{
Question_Text = q;
Answer_1 = a1;
Answer_2 = a2;
Answer_3 = a3;
Answer_4 = a4;
Correct_Answer = ca;
Question_Score = pa;
}
void Question::askQuestion()
{
cout << endl;
cout << Question_Text << endl;
cout << "1. " << Answer_1 << endl;
cout << "2. " << Answer_2 << endl;
cout << "3. " << Answer_3 << endl;
cout << "4. " << Answer_4 << endl;
cout << endl;
cout << "Ваш ответ?" << endl;
cin >> Player;
if (Player == Correct_Answer)
{
cout << endl;
cout << "Поздравляю! Правильный ответ!" << endl;
Total = Total + Question_Score;
cout << "Счет: " << Question_Score << " Из " << Question_Score << endl;
cout << endl;
}
else
{
cout << endl;
cout << "К сожалению, не правильный ответ" << endl;
cout << "Счет: 0 " << " Из " << Question_Score << endl;
cout << "Правильный ответ: " << Correct_Answer << endl;
}
}
>Сар котаны, как делать так чтобы рандомные вопросы не повторялись?
Ты даун? Ты рофлишь что ли? Тебе блять самому удобно читать такое говно?
С тобой не играл никто.
Сейчас дело не в удобстве, а в работоспособности кода. Как мне сделать так чтобы эти ебанные вопросы не повторялись?
Собери их в массив, массив перемешай (std::shuffle), выдавай из него по порядку.
Но загадкой для меня является сочетание while (s).
Что это значит? Адрес, на который оказывает s, выйдет за границы массива. Если он пустой, то указателю присвоится значение 0 и цикл прервется. Но что если по этому адресу хранится какое-нибудь значение?
int puts (const char s)
{
while (s) putchar (s++);
return 1;
}
Знаю, что для Си есть отдельный отдел, а у крестобояр ссылки-ссылочки, но раз уж тут тусуюсь уже
{
while (s) putchar (*s++);
return 1;
}
Блять, опять проебался. Вот так должно быть
>>94639
Строка должна заканчиваться символом '\0' реальный ноль 0х00. При разыменовании он преобразуется в false и цикл прервётся.
Ай блять, нуль терминатор, спасибо что напомнил
Он блять везде разыменованный, но операторы * блять отпали какого-то хуя. Алсо, можешь пояснить что не так? Должны же ступенчато отобразиться x, y, z, нет?
Сорян, не знал что такой есть. Дематериализуюсь
Можно поставить на кнопку вызов функции выделения памяти, выделять память размером в выделенная в прошлый раз + введенный размер", первые объекты делать указателями на ранее введеные, а остальные заполнять, либо копировать старые значение адреса нового массива, а старый удалять.
Можно вроде как почти все, если надо.
>>94266
Анон, может ли указатель на указатель на over9000* на указатель на переменную со значением = 0 вызвать переполнение стека/кучи?
Я предполагаю что да, ведь вроде как указатели тоже занимают место в памяти, хоть и хранят только адреса, но все же, вдруг ошибаюсь
*копировать старые значения в память нового массива
Кроме как написать игру сетевую на ум ничего не приходит.
Правда ещё была мысль о проверке работы курсовой/дипломной на соответствию ГОСТу, но как-то ограниченно кажется.
Ну да, теоретически можно так сделать, только как потом это разыменовывать?
Базу данных напиши
Хотя сейчас протестил на другой версии студии, вроде работает. Это студия шалит так? Сука 2 часа убил
Видимо так и есть. Жалко онлайн компиляторы работу с файлами не поддерживают. Вопрос закрыт думаю.
Анон, если ты еще тут, можешь ответить пожайлуста. Нужно ли очищать память от указателей, которые никуда не указывают? Вот я создал массив из 10 строк, заполнил из них только 4. При удалении больше 4 компилятор зависает. Пустые указатели удалятся вместе с удалением указателя, который указывает на них? На картинке отметил на всякий случай
Только delete и цикл
Указатель указывает на память, ты освобождаешь память, а не указатель, указатель в данном случае это просто адрес памяти которую надо освободить
Если у тебя указатели тоже хранятся на куче, то тебе сначала нужно освободить каждую отдельную строку которую ты выделил, пройдясь циклом по массиву, а потом и этот массив целиком
На каждый new у тебя в программе должен быть delete
Спасибо.
Поясните аноны как работает unsigned(int)
Так как вот именно эта хрень почему-то падает, я не понимаю.
Ты о чём?
> unsigned(int)
Это обычный каст инта к беззаконному.
Скорее всего инт был отрицательный, а после кастинга он стал UNSIGNED_MAX
И, наверное, использовался как индекс где-то и выхода за границы массива случился
Оно положительное.
Есть ебучие условие
If ( u(i)>x || u(i2)>x) raise()
Причем х точно больше этого говна.
То есть, это условие выполняется или нет?
Из-за чего падает?
Попробуй через cppcheck прогнать, может покажет чего.
Гугли friend class
Бля, пиздос. Кто-то для скорости величины через define поставил и не написал в коммите.
Чего? Ну попробуй статический вектор объектов класса, в любом методе любого из объектов хоть все другие объекты этого класса сможешь получить. Это как вариант, но я с таким не сталкивался, так что хз.
Как-то костыльно. Я думал какое-то умное зерно для ранда придумать нужно. Вот к примеру нужно сгенерировать числа от 1 до 100, но чтобы чисел, которые меньше 50 встречались в 2 раза чаще остальных. Это нужно формулы высчитывать? Сюда пришёл чтобы узнать, может где-то уже это реализовывали.
Собираюсь через переехать в спб из своей мухосрани, но есть еще 1-2 года в запасе, которые можно будет потратить на изучение разных штук и технологий. Я понял, что успешный байтоеб в 2019 году должен уметь: в C, C++, Linux, Linux Kernel и какой-нибудь скриптовый язык вроде питона и систему контроля версий, а также алгоритмы и структуры данных для собеседования.
Стоит ли игра свеч? Или лучше оставить байтоебство как хобби, а работать где-нибудь в вебе или энтерпрайзе?
>C, C++, Linux, Linux Kernel
За 1-2 года ты даже С++ не освоишь. Выучи что-то одно идеально, а не 300кк языков понемногу.
https://www.youtube.com/watch?v=srhdfL_ytwc&list=PLgsLnJ-wgYTbaNXfp3mjf-eOb62Md9-33
переворачиваем списки!
https://www.youtube.com/watch?v=QLqySEpEKW8&index=12&list=PLgsLnJ-wgYTbaNXfp3mjf-eOb62Md9-33
>ли вкатиться в байтоебство и найти работу в России?
>переехать в спб из своей мухосрани
все же нужен бекграунд: техническая вышка, 2-3 года работы по специальности кодером у себя в мухосрани..
если этого нет, то тяжко будет..
Какая-то хуйня без задач. Кроме рефлексии там вообще есть что-то?
int fl = (int)&floatVar;
Аноны, не понимаю как работает вторая строчка, точнее синтаксис. Можете объяснить? Или статью какую-нибудь почитать киньте.
Что она делает я знаю
Кармарк, заебал шабить
Я подумал что это он написал, сорре, таблетки забыл выпить.
>1295637
Я все равно не понял.
Я просто лабу вузовскую делаю. Нужно внутренне представление числа типа флоат: сначала достал значения битов этой переменной, потом в цикле умножаю побитово это число на перемнную цикла (которая равна 2 в 31 и уменьшается каждый шаг в два раза соответсвтенно), ну и вывожу либо ноль либо один.
Аноны, вкатываюсь в С++ и сразу пара вопросов:
1) Нужно ли начинать с Си?
2) Можно ли использовать в С++ системные файлы из Си, например stdio.h?
>1) Нужно ли начинать с Си?
Необязательно.
>2) Можно ли использовать в С++ системные файлы из Си, например stdio.h?
Можно.
>1) Нужно ли начинать с Си?
Обязательно. Прочитай K&R и потом Дизайн и эволюцию С++. Сэкономишь кучу времени, пытаясь понять, какого хуя настолько все через жопу.
>2) Можно ли использовать в С++ системные файлы из Си, например stdio.h?
На С++ сишные хедеры правильно инклудить как <cstdio>, без .h и с "c" в начале. Это особо приветствуется (те же format strings подвержены атакам типа переполнения буфера), но всем похуй.
Сейчас изучаю формат PE и разные манипуляции с ним. В частности инжекты. Не могу понять, как работает мануал маппинг, и можно ли вообще замаппить PE в формате exe?
Это тебе в ассемблер тред или в Си тред, а тут С++, тут таким зашкварно заниматься.
А чем это сейчас крестовые бояре занимаются? Ой, погоди, вы тут сидите базовые алгоритмы покаете, еще и с STL библиотекой. Никаких вопросов!
Виндоговно это нормальный такой зашквар, так что твоё кукареканье из-под шконки мало кого интересует
>можно ли вообще замаппить PE в формате exe
Можно. Статья 273. Создание, использование и распространение вредоносных программ для ЭВМ наказываются лишением свободы на срок до трех лет со штрафом в размере до двухсот тысяч рублей или в размере заработной платы или иного дохода осужденного за период до восемнадцати месяцев.
Это вообще адекватно - на крестах нейросети писать, надо в пайтон вкатываться?
они на всем одинаково пишутся (практически). coursera с кучей курсов по машобу поможет.
Но... Лучше не делать велосипедов, а взять библиотеку
И до сих пор живешь без галоперидола?
>Нахуя учить С++? Есть же дотнет. Чтоб самому все ручками писать?!?!?
Нахуя тебе Си ? В плюсах добавили хуеву тучу нового, для чего на Сишке приходилось писать свои велосипеды. Только говнокодить станешь больше из-за Сишки до С++.
На плюсах велосипеды тоже часто приходится писать, если что
Попробуй отталкиваться от матана.
Любое положительное число можно представить в виде n = 1+1+1...+1.
Например если брать число с примера 5, то 5 = 1 + 1 + 1 + 1 + 1 и в этом равенстве можно располагать скобки как захочешь(согласно правилам математики)
5 = 1 + 1 + 1 + (1 + 1) = 1 + 1 + 1 + 2
5 = 1 + 1 + (1 + 1 + 1) = 1 + 1 +3
5 = 1 + (1 + 1 + 1 + 1) = 1 + 4
Количество способов расставить скобки можно найти по числам Каталана (Х-1) число, когда есть Х чисел.
Я изначально думал в таком русле, но потом затупил когда начал реализовывать. Выходило 1-1-1-2 - все 4 штуки, потом 1-1-3- три штуки - 2 -3 две штуки и 5. Не пойму как в алгоритме сделать, чтобы оно перебирало все комбинации. Вчера вечером чуть-чуть доработал метод с перестановками, но он почему-то не работает для сумм из 2 чисел. Хотя если вывод добавить, то пишет что оно их меняет, а на деле нихуя. Добавлю свой говнокод, может кто найдёт ошибку cpp.sh/47v4n
Это копия, сохраненная 1 декабря 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.