>>441725 http://ideone.com/xSDeAx Ну очевидно же: Если переменная скорости по оси 0: возвращает новую координату положения по одно оси (которая не 0) с учетом скорости и шага. Если переменная скорости по оси не 0: возвращает новую координату с учетом угла , скорости и шага.
>>441727 Нет-нет, ты меня не понял. Я знаю что означает этот код. Но для чего он предназначен? Что такое b? В идеале у тебя в классе typeof(b) должна быть член-функция animate(int step), которая делает все это говно. и ты просто вызываешь b.animate(timeStep); // ясный и понятный читателю код, причем b само оперирует своими членами А то, что у тебя - это открытая реализация, суть говнокод.
>>441753 для каждой строки { максимум это минимальное возможное значение пока не конец строки { если текущий элемент больше максимума, то максимум это текущий элемент } вывести максимум }
>>441767 хорошо бы полный код увидеть. Если это внутренности animate, то все норм (я правда так и не понял как это ты так охуенно учитываешь угол просто выполняя деление)
>>441769 >>я правда так и не понял как это ты так охуенно учитываешь угол просто выполняя деление Все тригонометрические функции углов - это же ОТНОШЕНИЯ, лалка.
>>441777 >>441776 Чтобы рассчитать финальные координаты точки (катеты), зная скорость (гипотенузу) и направление азимут? (этот самый тангенс). Собственно сам код не верен, это я только, что понял, но идея такова.
vector<int> v = {1,2,3,5,8,13}; for (int x : v) {...} Есть ли у такой записи преимущества/недостатки по сравнению с обычным for(int i=0; i<v.size(); ++i)? А по сравнению с итераторами?
>>442131 Мамаше своей запихай в сральню. >>442153 Синтаксический сахар над for-ом с итераторами и присвоением переменной x значения итератора. Небольшой оверхед, но с оптимизацией его не будет.
>>442188 Твой код трудно читаем. Вместо запихивания размера вектора в дополнительную переменную, мог бы просто сравнивать сразу с ним. Конпелятор такое оптимизирует.
Сап, не знал куда обратиться к вам или жестянщикам, думаю вам ближе. родилось желание и купил себе ардуино, хочу разобраться что да как, но я так понял там С-подобная урезка используется, может сможете помочь годными гайдами для нулевиков и желательно на русском. Сам программировал только в базовом курсе делфи, поэтому понятие крайне общее обо всем
>>442282 Катись к хуям со своей парашей. Английский он в школе не учил, а дуину у мамки выпросил и туда же. Чепуш блять. Бери примеры из IDE и мануалы с оффсайта и разбирайся. И английский учи. Либо копай картошку как все неграмотное было и не выебывайся.
>>442294 Смотря как x объявлена. Если ссылкой, то да, не будет, а если просто переменной, то она будет копироваться, и ее изменение не отразится на изменении соответствующего элемента контейнера.
>>442325 Вообще-то важно, иначе теряется смысл в unsigned. Если там будет тип более емкий, чем то, что ты объявил, то точно так же будет оверфлоу, как и в случае с signed.
Учу с++ по книге S.Devis с++ для чайников. Так в книге утверждается что в этой проге http://ideone.com/Nd8hs9 вывод терминала будет : We're in Student::calcTuition We're in Student::calcTuition У меня же получается : We're in Student::calcTuition We're in GraduateStudent::calcTuition Это книга слишком старая? Или есть такие компиляторы понимающие полиморфизм по-своему?
>>442377 >Это книга слишком старая? Она не только старая, это вообще параша из параш. Либо дохлого страуса читай, либо прату. Прата предпочтительней для новичка, страус слишком сложен будет.
>>442382 А часто встречается массив размером 2^31 (размер unsigned int без учета всех этих -1)? Так что смысла писать unsigned никакого. А если уж выебываться, то до конца.
>>442325 size_t используется для индексации std::vector (QVector, например, использует int), плюс size_t равен размеру машинного слова, значит компилятор все равно преобразует переменную к этому размеру.
Такс такс такс в этом семестре у меня начались лабы по чистому си. А это значит придётся забыть мои сиауты и булианы ну и конечно же байтоёбство придётся вспомнить.. Но это всё пыль. Главное то что преподователь требует то что он называет "френдли юзер интерфейс". Это наверное означает что придется придусматривать всяческую еботню вроде ввода с экспонентой и предусматривать всяческую пыль вроде ввода символов там где требуются ц.числ. И так как сделать по высшему разряду задание типа "в двумерном массиве записать сумму столбцов втакуюто строку а сумму строк в такойто столбец"
>>442625 >>442626 Ну вы чего в самом деле ? Просто часть перед поездкой на метро написал и часть после. Вот и получилось немногг непонятно. Но прочитать перед отправкой стоило, да.
>>442634 Ты недопонял меня что неудивительно. Перечитал сам ахуел. Мне не нужно чтобы за меня кто то решал мои лабы. Мне нужно чтобы кто то с опытом сказал как сделать их максимально качественно. Так или иначе вот задание. " Задан двумерный массив вещественных чисел размерностью (M+1)x(N+1). В строку m+1 " Про методы i/o ничего не сказано. Значит будем делать из файла и клавиатуры.
Задан двумерный массив вещественных чисел размерностью (M+1)x(N+1). В строку m+1 записать суммы элементов по столбцам, в столбец n+1 записать суммы элементов по строкам, а в элемент Am+1,n+1 записать сумму всех элементов массива. Результат вывести на экран.
>>442654 Непонятно что ты при этом хочешь узнать. Нет единственно верного православного стандарта качества для подобных микропроектов. Просто запиши в нужный столбец сумму строк и в нужную строку сумму столбцов, посчитав ее через циклы for. Потом посчитай сумму всех элементов в последнем строке и столбце и запиши ее в нужный элемент. Можешь даже рандомные числа делать. Пользователь задает из консоли размерности массива, ты генерируешь числа, считаешь нужные столбцы и выводишь все это на экран матрицей.
>>442666 >>442667 Ребят, я не настолько даун. Сам костяк лабы я естественно сделал. Мне бы узнать чтобы сделать ещё. Вот пример как сделал простейшу лабу один из хороших студентов
"Напечатать все простые числа, не превосходящие заданное число" По мимо самой лабы. Был сделан ввод и вывод из файла, экрана, ввод виде эксп., каким то образом предусматривался ввод сумашедших чисел выходящих за приделы int, к всему этому программа занимала около 2мб. Если про сборщик я ещё знаю то про буферезированный вывод я услышал впервые при защите этой лабораторной работы. Вот это я понимаю выполнение обычной лабы на высшем уровне. Так-то мне интресно узнать что можно ещё можно влепить туда.
>>442687 >ввод и вывод из файла Ввод одного числа из файла? Зачем? >выходящих за приделы int Но входящих в unsigned long long? >программа занимала около 2мб В оперативной памяти или на диске? Если на диске, то это дохуя. А если в оперативке, то это либо пиздеж, либо просто грамотная настройка компилятора >ввод виде эксп Подсчет простых чисел предполагает ввод действительного числа? Зачем? double value; scanf("%lf",&value);
>>442692 > Ввод одного числа из файла? Зачем? Ввода не было из файла. Случайно сказанул. > Но входящих в unsigned long long? Какоето ограничение присутствовало, да. Но точную цифру не скажу. > >программа занимала около 2мб > В оперативной памяти или на диске? Если на диске, то это дохуя. А если в оперативке, то это либо пиздеж, либо просто грамотная настройка компилятора В оперативке. При миллионе. Это дал его "алгоритм оптимизации. ". Его сущность я не знаю. > >ввод виде эксп > Подсчет простых чисел предполагает ввод действительного числа? Зачем? > double value; scanf("%lf",&value); Предполагает ввод любого числа. Он даже scanf не использовал. getch и читал посимвольно. Вот и получается в любом виде предусматривается.
>>442711 В общем все ясно, он просто какой-то упоротый любитель низкого уровня. Все это не нужно. Тебе с головой хватит стандартного scanf, только референс почитай, он может очень хорошо читать любой ввод.
>>442775 >>442778 Конкретно в твоем случае с массивами я вижу это так: ты читаешь размерности массивов из потока ввода, создаешь один массив - для суммы столбцов и одну переменную - для суммы строк. Далее ты читаешь по одному элементу из потока ввода, выводишь его в поток вывода и увеличиваешь переменную и соответствующий элемент массива сумм столбцов на этот элемент. Когда строка кончается ты выводишь сумму этой строки в поток вывода и обнуляешь ее. Когда заканчиваются столбцы, ты выводишь массив с суммами столбцов, параллельно считая его сумму и выводишь ее в самом конце. Таким образом у тебя в памяти хранится только 1 массив размером со строку. Вот такая вот оптимизация получается.
>>442778 Ну типо если введёшь большое число то обработка естественно займёт некоторое время. Пользователю может показаться что программа зависла. А так он видит постоянно еёв работе и всё отлично. Ну а проблема в реализации естественно
>>442775 >>442790 >>442974 Ты сам себе противоречишь, ТУПЕНЬКИЙ. А может быть ты не понимаешь основных принципов работы программ. Тогда тебе здесь делать точно нечего.
Возможно ли с помощью функции CreateThread создать поток с 2-мя параметрами. Моя проблема в том, что один параметр уже занят под mutex, а мне надо передать ещё один, содержащий handle другого потока. (Мне нужно вызвать функцию ResumeThread изнутри потока, что бы пробудить другой.)
>>443026 >>443027 Тогда новая проблема возникает. Хотя я туплю, наверное.
Так я получаю указатель:
DoubleParam D; struct D pD;
Указатель запихиваю в функцию CreateThread(...,&pD,...)
С ходу visual studio ошибок не обнаруживает, но при сборке выдаёт (в строке с функцией CreatThread): cannot convert argument 3 from 'DWORD (__stdcall )(DoubleParam)' to 'LPTHREAD_START_ROUTINE'
>>443111 >cannot convert argument 3 from 'DWORD (__stdcall )(DoubleParam)' to 'LPTHREAD_START_ROUTINE'
Ну так ёба, третий параметр это LPTHREAD_START_ROUTINE lpStartAddress, указатель на ThreadProc. О чём тебе и сообщается в тексте ошибки. В MSDN пройди, будь так любезен.
>>443043 Не получится. Ты будешь бежать сюда за любым тупейшим вопросом, который за минуту решается при помощи мозга или гугла. Если сильно повезет, то какой-нибудь омежка-долбоеб сделает все за тебя, но вероятнее просто поешь сажи. Знаний так и не прибавится.
>>443209 Хуйню несёшь. Я же говорил что работу уже сделал. Просто спросил про личные стандарты качества у pr. А ты записал уже в долбаёбы-ниосиляторы. В общем не знаю что с тобой не так и зачем так агрится.
>>443261 Но есть вещи о которых я пока просто напросто не знаю. Как про тот же буф. вывод. А вообще пока хочу задрать эту планку как можно выше. Чтобы потом та самая середина давалась мне легко.
Сап, аноны. Нужно задать квадратную матрицу, чтобы элементы на гл. диагонали были равны 1, ниже 0, выше - сумме индексов. Как сделать, чтобы индексы считались с 1, а не с 0 без костылей? http://pastebin.com/fXtTCDb5
Тян, пруфов не будет. В шараге курс С++, помогите написать программу, вычисляющую, попадет ли точка в закрашенную область. Желательно с объянением, как в if расписать все условия. Фигура #2. :3
>>443745 блять, ты гений. Это то я уже сделала. Проблема в другом. Я не знаю, как в if правильно условие написать, что там х>=чего-то там и у>=чего-то там. Я перепробовала кучу вариантом, он всегда выдает, что точка не попадает в область.
>>441690 Парни, я написал код, собственно, функция, переводящая число в 2-ю систему исчисления, работает коряво. (Задание для ньюфагов, так что массивы и вообще всякие штуки, сложнее 2+2 нельзя юзать)
Верней, все 3-х значные числа она переводит правильно, а, например, число 5000 не переводит - вообще не работает. Четырёхзначные числа вообще переводит неверно или не переводит. Вопрос, почему? Просчитал всё на бумаге, алгоритм тот же. Пошагово проверил, в первом цикле void print_in_binary(int x) на определенном этапе в значение num записывается число с двойками и четверками (Хотя такого не может быть, лол), может, просто необходимо использовать другие типы переменных? Но, вроде как, int вмещает огромные натуральные числа.
>>443899 Спасибо огромное. Но почему когда я пытаюсь сделать это функцией int NaturalCheck(float N) { float integral = 0.0f; float fractional = 0.0f; float num = N;
>>443934 Нашёл где ошибка но не могу понять её суть. Ошибка при передачи значения. Если написать printf("%d\n", NaturalCheck(5.01)); все будет отлично но если задать с клавиатуры printf("%d\n", NaturalCheck(N)); Мутирует. Причём если объявить double N=5.01 Мутирует Так бывает вообще ?
int main() { printf("The 'int' data type is\t\t %d bytes\n", sizeof(int)); printf("The 'unsigned int' data type is\t %d bytes\n", sizeof(unsigned int)); printf("The 'short int' data type is\t %d bytes\n", sizeof(short int)); printf("The 'long int' data type is\t %d bytes\n", sizeof(long int)); printf("The 'long long int' data type is %d bytes\n", sizeof(long long int)); printf("The 'float' data type is\t %d bytes\n", sizeof(float)); printf("The 'char' data type is\t\t %d bytes\n", sizeof(char)); }
С последнего вброса допилил несколько бесполезных фич (перечислены в новостях). Например, подгрузка постов и постинг нескольких картинок (только в /h/).
Почему после ввода символа в тип который предусматривает число переменная не доступна для повторного ввода ? Есть некоторая проверка на правильность ввода из определённого численного диапазона. Если проверка проваливается ввод предлагается заново. Но если при вводе ввести символ scanf уже никак не воспринимается. Происходит зацикливание. Обнуление переменной также не помогает.
Хелп /pr/. Нужно написать / howManyBits - Возвращает наименьшее число битов, необходимое для представления x в дополнительном коде (two's complement) Примеры: howManyBits(12) = 5 howManyBits(298) = 10 howManyBits(-5) = 4 howManyBits(0) = 1 howManyBits(-1) = 1 howManyBits(0x80000000) = 32 Разрешённые операции: ! ~ & ^ | + << >> Максимальное количество операций: 90 */ Так вот. Никаких if и while. Только битоебля, только хардкор. Есть идея свести задачу к более простой. Можно оставить только один старший бит, а остальные занулить. Как можно узнать на каком месте стоит единственный ненулевой бит без полного перебора. Так же как ее решать для отрицательных х? Вроде бы howManyBits(x)= howManyBits(~x+2) верно для x<0. Картинка для привлечения внимания.
>>444143 Ну при неправильном вводе сам scanf() вернёт 0 но я ведь не об этом. Мне интересно почему при вводе символа в переменную типа double она уже не доступна для повторного ввода.
>>444186 Да и не нужено мне символ читать. Я добиваюсь того чтобы при неправильном вводе выбило ошибку и далее следовало предложение повтора ввода. Например ожидается ввод чисел с 1 до 3. Если ты введёшь 5 проверка выбьет ошибку и предложит повторить ввод. Но если ты внезапно ввёл символ scanf() вернёт 0 как ошибку но повторный ввод необходимого значения уже невозможен. Как добится этого самого повторного ввода если scanf пропускается ?
>>444371 Тебе уже говорили. Если число больше либо равно нулю и дробная часть равна нулю, то число натуральное. Воспринимай эту одну строчку как псевдокод на любом языке.
>>444413 На C++ не компилируется. Дело в том, что я с недавнего времени работаю исключительно в Linux. Создаю файл prostoe.txt, копирую туда твою строчку !(any(simple_less_than(x), divides(x))), сохраняю, в окне DOS пишу gcc prostoe.txt и мне дос какие-то ошибки выдает. Не компилируется. gcc - это правильно 100%, мне так знающие люди сказали использовать. Кодировка может неправильная.
>>444438 Значит теперь мне надо написать не только расчет простого числа, но и эти функции в одну строчку на любом языке? Какой же сложный этот С++. А в этих функциях будут тоже функции? Подскажите сразу в общем случае - как мне написать любую функцию в одну строчку на любом языке, и я уже пойду отсюда.
>>444470 > Подскажите сразу в общем случае - как мне написать любую функцию в одну строчку на любом языке, и я уже пойду отсюда. Обычно используют точку с запятой. И тогда можно писать все операторы в одну строчку.
c:\>gcc prostoe.txt c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:prostoe.txt : file format not recognized; treating as linker script c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:prostoe.txt :1: syntax error collect2.exe: error: ld returned 1 exit status
>>444480 Вы меня тут за идиота держите? Я opengl только через неделю начну изучать. Я знаю, что сейчас мне не нужны дрова на видюху. Я просто английского не знаю, а так бы уже давно скомпилировал.
>>444492 Наверное это потому что у тебя линукс не настроенный, у тебя в нем буквы белые, а в правильном должны быть зеленые. Проверь настройки линукса.
>>444496 Так проблема в том, что в языке любых функций нет, или в линуксе? Одни говорят, что программисты только в линуксе работают, другие теперь говорят, что он не настроенный. Я вот чувствовал, что линукс не настроенный на самом деле. Функции, получается, надо убрать из файла?
>>444501 Какой же сложный этот С++. Как мне настроить линукс? Может подскажешь как мне вообще без линукса это сделать. Только обязательно в одну строчку. Язык - любой.
>>444504 Но у меня же linux под windows (если быть совсем точным, то я с ним в досе работаю, как видно на скриншоте), разве можно его настраивать как обычный?
И я уже устал ставить всякое. Ты уверен, что в Wolfram Mathematica я смогу написать любую функцию в одну строчку на С++? Там тоже gcc? Как компилировать? Если ты уверен, что там точно так же, как на любом языке можно сделать, то я конечно же поставлю.
>>444509 Сначала С++ в совершенстве хочу освоить. Потом все остальные языки (но на следующей неделе opengl начну, поэтому возможно python пропущу). Я же прошу подсказать любую функцию, чтобы на любом языке можно было сделать.
Аноны, нужен совет. В качестве курсача, нужно написать проект на С++. Особенность - это должен быть консольный проект, но достаточно сложный. Как вариант - консольная игра. Естественно все крутится вокруг одной и той же хуйни типа - морской бой, крестики нолики ну и прочий подобный, однотипный шлак. А я хочу сделать какой нибудь оригинальный проект, но что то нихуя даже на ум не приходит.
Какой игорь можно написать с консольной графикой (инбифо крузис), да так, что бы это было ну хоть немного свеже и не ебучий морской бой и не блядские крестики нолики или какая то текстовая хуета.
>>444516 Мне что то кажется, что для этого маловато места будет в консоли, не? Да и настолько пиздатое я вряд ли смогу. Но возможно действительно сделать что то подобное. Еще предложения?
>>444517 Ну так-то консольку ж ресайзить можно. Пущай будет требованием сделать консоль определенного размера, чтобы было играбельно. Да и как контра в плане концепта. Пущай мобы и игрок будут размером в один символ. Собственно на скриншоте у тебя вполне играбельный пример даже с дефолтной консолью.
>>444525 Ну смотри, тут два способа. Первый - ты используешь системный терминал. В таком случае очищаешь консоль полностью и рисуешь заново. В таком случае у тебя вывод будет "моргать", т.к дабл буфера тут естественно нет. Второй - ты создаешь обычное окно и рендеришь в нем текст сам с закосом типа консоль. Так обычно и делают, собственно. В таком случае ты уже будешь работать с обычными фреймами. Тут у тебя и дабл буфер есть, и рисовать можно более пеструю хуйню. В этом случае можно либо просто на окне рисовать (GDI+, в Qt QPainter и еще всякая хуйня, загуглишь), или непосредственно с GPU будешь работать (OGL, DX). Для твоей задачи обычного рисования на окне с головой хватит.
>>444312 В продолжение темы: Как обнаружить посторонние элементы при вводе в тип double например ? Поясню: при обычном вводе символов asdf scanf() возвращает 0. Это понятно. Но при вводе сначало числа а потом символов никаких некорректных вводов не обнаруживается 1sdf. Как обнаружить посторонние символы при вводе со scanf() ?
>>444515 Посмотри еще ncurses - библиотека для работы с консолью. В консоли можно интресные вещи делать, можешь посмотреть sanctuaryRPG. Можешь попробывать текстовую адвенчуру сделать (гугли inteactive fiction) - там лексический парсер, подобная хуйня. Можно написать движок для более простых текстовых квестов, типа как в космических рейнджерах - это достаточно просто, при этом нужны определенные архитектурные решения (формат файла с игрой, возможность прикрутить ASCII графон и т.п.) - на курсовую может потянуть, помоему.
Меня смущает reinterpret_cast и полиморфные объекты. Всегда ли они смогут опознать какую функцию необходимо вызывать, если reinterpret_cast делать для объекта-обертки над полиморфными объектами?
>>444784 Да есть либа одна на Си. Пилю высокоуровневую обертку, нужны коллбэки (представлены интерфейсами в обертке). В библиотеке они принимают на вход void* и возвращают его юзеру при вызове коллбэка. В общем-то все так и есть, как в приведенном коде.
>>444801 P.S: saveAInst и issueInst делюаются в сишной либе, я их для примера так реализовал. Конечно они не используют new, delete и глобальную переменную.
Начал изучать C по книге Брайан Керниган, Деннис Ритчи. И в самом начале уже столкнулся с херней. Есть функции getchar и putchar. Предлагается такой пример [code]#include <stdio.h> / копирование ввода на вывод; 1-я версия / main() { int с; с = getchar(); while (с != EOF) { putchar (c); с = getchar(); } } [/code] Выполняю его и ничего не происходит, думаю ладно может так и надо, так как в потоке вроде как и нечему копировать-выводить, однако дальше предлагают два упражнения:
Упражнение 1.6. Убедитесь в том, что выражение getchar() != EOF получает значение 0 или 1 . Упражнение 1.7. Напишите программу, печатающую значение EOF. А как я напишу, если даже не узнаю, работает код или нет?
>Кроме того, вспомните, что многие шаблоны используют другие шаблоны, и таким образом, компилятор должен выполнять каскадную перекомпиляцию таких шаблонов (и их единиц трансляции), и этот рекурсивный процесс продолжается до тех пор, попока не будут выполнены все каскадные инстанцирования (реакция нормального пропрограммиста в такой ситуации: "Какое счастье, что я не занимаюсь реализацией подподдержки экспорта в компиляторе!").
>>445548 Оператор '=' возвращает rvalue, тоесть выражение 'a = b' равно b. В цикле инкрементируются указатели, значения из src сохраняются в dst, пока не встретися 0 и цикл не прервется. По соглашению 0 находится в конце массивов char представляющих строки.
htmls << L"</body></html>"; htmlWindow->SetPage(htmls.str()); Но блин, при увеличении массива на плюс одну структурку в нем, прога вылетает в сегфолт с сообщением: Program received signal SIGSEGV, Segmentation fault. In std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string(std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) () () Уже третий день мозг ебу, что за хрень?
>>445806 Тоесть если в массиве 5 структур, но окошко ни разу не открывалось - все отрабатывает нормально и окошко закрывается. Добавляю структуру в массив, открываю окно = SEGFAULT. Начальное число структур в массиве не играет абсолютно никакой роли, вылетает только при попытке отработать увеличенный массив относительно того, который обрабатывался в первый раз. Сорян, не могу в объяснения
>>445807 Ставь брекпоинты и ищи конкретную строку (вызов функции) на которой падает. Если сегфолт то ты с памятью проебался, индекс не тот или нулевой указатель разименовываешь. Например, когда ты добавляешь структуру она на самом деле не добавляется (или добавляется на на то место куда надо) и когда ты читаешь последний елемент - там ноль. Это надо тестить, проверь все индексы, все указатели, попытайся уточнить строку или блок кода на котором сегфолт.
>>445831 вот и перепиши. пишешь на плюсах - используй возможности плюсов, а не си-стайл. Если только у тебя там не перфоманс-критикал код. хотя и в этом случае вектор можно использовать
>>445826 Да бляха, вы издеваетесь? Какого хуя вы пытаетесь что-то сделать, даже не попытавшись почитать книгу или еще чего-нить? Вы думаете, что вас тут языку учить будут? Надеюсь тебе никто не покажет, как это сделать.
Вопрос к чулочнику, который написал борду на с++. Можешь описать в двух словах, как оно работает? За что отвечает цпп, за что другие вещи (и какие тоже поясни)?
>>446204 а ну-ка в пизду эту кодлу петухов тем более что всё равно не нашёл интересующей инфы там На пальцах поясни, как всё работает. Я в крестах из сетевого только с сокетами вручную работал, не из приятных экспириенс. Я так понял, что всё сетевое взаимодействие берёт на себя CppCMS, т.е. он биндит твой сокет на прослушку сокетов клиентов и всё прочее в этом стиле. Ну и положим, что мой браузер присылает тебе запрос. Хули дальше происходит? Какой-то javascript, охуеть вообще. Он где работает? На стороне клиента или у тебя? Нихуя не понятно короче.
>>446211 Да ты пиздец нубас Проследуй в пхп тренд Напиши имиджборду Тогда будешь понимать И приходи Вообще, было бы неплохо, чтобы кто-то написал текст о веб-программировании, как что происходит Но всем в падлу Джаваскрипт почти всегда исполняется на клиенте Сервер-сайд язык (в данном случае цпп) генерит странички. Вставляет в шаблоны данные из базы данных, например. Потом веб-сервер их отдает. А джаваскрипт все это свистит и пердит и шлёт ajax запросы к серверу для динамической подгрузки условных данных из условной базы данных.
>>446217 Этот все правильно написал, как-то так оно и есть, если коротко. >>446211 А ты иди домашку делать, не дорос еще, судя по долбоебским вопросам.
>>446395 ой я дурачок. вопрос решён. >>446404 соси хуй, злобный тупорылый уёбок. этот учебник у вас первым в рекомендуемом списке стоит. нахуя ты вообще в лужу пёрнул, коли по делу нечего было сказать?
>>446407 Так я по делу и сказал. Алсо, у кого это "у вас"? Я к этому отношения не имею. >>446462 Лел, мелкобуквенное хеллоуворлдное чмо вылезло. Петуха забыли спросить.jpg
>>446536 Вообще-то я часто тут отвечаю тем, кто задает нормальные вопросы, а не "пасаны у миня лаба как сделоть чтоб пичатала матрицу через сраку маиво препада, он миня так папрасил". Нормальный вопрос - нормальный ответ. Нехуй превращать тред в сборище умственно отсталых.
>>446542 Давайте еще начнем спрашивать "как присвоить значение переменной", или "зачем нужна точка с запятой". Тот петушило выше задал вопрос как раз из той серии.
>>446580 В ингрише допустимо пропускать that, примеры ищи в литературе (не знаю как в деловом языке, но в художественной литературе такое допустимо и встречается). окончил языковую гимназию, еще не все забыл-кун
>>446584 Но ведь я только учусь. Соси хуй, быдло. >>446585 >>446588 Какие-то невнятные вскукареки. Что-то не вижу ссылочек на сайтики с грамматикой.
Итаааак, давайте разберем по частям..: >your mother is so fat, твоя мать такая жирная зпт. >the recursive computing her mass causes a stack overflow рекурсивная функция вычисления её массы случай на переполнение стека
>>446634 Но ведь в этом предложении это герундий настоящего времени. >>446631 Мне тоже, но меня смущает это неграмотное отсутствие that >>446632 Что еще спизданёшь?
>>446638 >>446638 >герундий не выступает в роли определения Но ведь function здесь не глагол, выступающий в роли определения, что бы computing его характеризовал как причастие.
>гугл Да я загуглил уже. Странно, я могу читать и понимать, но выражать мысли и удерживать часть прочитанного в памяти - трудновато. Неужели сибляди во всем виноваты?
>>446652 >Но ведь function выступающий в роли определения (по твоему мнению) - здесь не глагол, что бы computing был как характеристика-причастие к этому глаголу. Пофиксил, для понятности.
>>446654 > >Но ведь function выступающий в роли определения (по твоему мнению) - здесь не глагол, что бы computing был как характеристика-причастие к этому глаголу. ты долбоеб function - объект, существительное, подлежащее причастие - форма глагола похожая на прилагательное, признак объекта (НЕ ПРИЗНАК ДЕЙСТВИЯ, ЭТО ТЫ БЛЯДЬ С НАРЕЧИЕМ ПОПУТАЛ)
КАК ЖЕ МЕНЯ ЗАЕБАЛИ ЧЕТЫРЕЖДЫБЛЯСДКИЕ КРЕСТЫ АЖ СИЛ НЕТ, СУКА ИНКЛЮД ИНКЛЮД КЛАДБИЩЕ ПИДОР ПРАГМА ОНСЕ БЛЯДЬ, НАХУЯ ОНА ВООБЩЕ НУЖНА КОГДА МОЖНО ЗАПИЛИТЬ ИМПОРТЫ, НЕТ БЛЯДЬ ХОЧУ ЖРАТЬ ИНКЛЮДЫ, ГОВНОЕДЫ СУКА ЛИНК ЕРРОР СИМВОЛ ПИЗДА_УЗБЕКА АЛРЕДИ ДЕФАЙНЕД ИН .ОБЖ НАХУЯ ДЕФОЛТНО ВСЁ ПРИВАТНО ДЕЛАТЬ, ЧТО ПОНАДОБИТСЯ ТО САМ ЗАПРИВАЧУ КОГДА НУЖНО БУДЕТ. НЕТ БЛЯДЬ УКАЗЫВАЙТЕ ПАБЛИК НАСЛЕДОВАНИЕ УЁБКИ И ДЕЛАЕШЬ КОНСТРУКТОР ПРОТЕКТЕД И ПИШЕШЬ ПОТОМ КОСТЫЛИ ЧТОБЫ СОЗДАТЬ ШЕЙДЕР ПОИНТЕР С ОБЪЕКТОМ. НЬЮ И ПОТОМ ШАРЕД_ФРОМ_ЗИС() ПИЗДЕЦ БЛЯДЬ ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 ЛИНК2005 пиздануться блядь
более неудобного и костыльного языка в жизни не видел
>>446679 Нет, не так. ОШИБКА В <<ЖОПА_ХУЙ::ГОВНО_ПИЗДА><ПИДОР-КЛАДБИЩЕ([СУКА_ЯЕБУ::АНАЛ_ЖИРАФА](<T><ЕБАНИСЬ_В КОНЕЦ>)*)(ЕБАНЫЙНАХУЙ_ОСЁЛ)<ЖРИ_КАЛ(РАС_РАС_РАС)>
ПИДОРЫ БЛЯДЬ НАЛЕПИЛИ В 15000 СТРОК ХУЙНИ КОТОРАЯ 2+2 СКЛАДЫВАЕТ, НАКОПИРОВАЛИ В ДЕСЯТОК ФАЙЛОВ И ЗАВЯЗАЛИ ДРУГ НА ДРУГА. ТЕПЕРЬ ПОПРАВИТЬ НЕБОЛЬШУЮ ХУЙНЮ - ЭТО ПЕРЕПИСАТЬ ПОЛСИСТЕМЫ
>>446625 Нет. Исключения - это исключения, неожиданная ситуация. Хотя бывает, что исключения используют для подъёма из рекурсии. В парсерах, например. Но это очень плохо.
>>446696 Поддвачну этого, дело говорит. Еще дополню, что исключения лучше кидать только тогда, когда ситуация на самом деле исключительная и от разработчика не зависящая (скажем, файловая система наебнулась). А если ошибка вызвана неверными параметрами или тем что сервер недоступен - тут лучше флаг ошибки (возвращаем кортеж с элементом-флагом или передаем out-parameter в виде ссылки/указателя).
>>446692 Ничтожество, ты лишь тупая скотина, дрочащая на хуй пойми что. Когда этот недоязык окончательно канет в лету, ты похватишь нехилый баттхерт, выблядок сучий. Приятного дня.
>>446710 Перейду на другой без лишнего шума. Отчего тебе так печет? Тебя заставляет кто-то на крестах писать? Да? Меняй работу. Нет? Ну так не пиши на крестах.
>>446738 Чет парашная у него видать шарага, раз заставляют на каком-то конкретном языке писать. Я в свое время сразу преподу сказал, чтоб он со своими дельфями сам в очко долбился, а я буду писать на том, на чем хочу. При этом, заценив результат, он меня потом всегда другим в пример ставил. Так что все от самого себя зависит.
Утро доброе, анансы. Появилась мелкая задачка, а именно напилить простейший односторонний ftp СИНХРОНИЗАТОР. На плюсах, конечно же. Почитав rfc я понял, что тут обычные блокируемые сокеты подойдут на ура. Но и сразу же слегка обосрался. Сейчас планирую сделать примерно так: - Собираем рекурсивно файлы из указанно папки, что иметь вид: /ftp/folder1/file1, /ftp/folder1/subfolder/file2, ... И в аналогичном виде собираем на локальной машине. Сравниваем по размеру файла и дате изменения.
Суть обосрамся: Внезапно, фтп иногда отсылает мне "226 Закрытие канала, обмен завершен успешно" ещё до того, как файл был скачал. При этом никакой канал он не закрывает. Т.е. лог может быть подобного вида: RETR filename 150 Статус файла правилен, подготавливается открытие канала //Вот тут никаких сообщений, судя по рфц, быть не должно, но внезапно фтп досылает 226 Закрытие канала, обмен завершен успешно //И тут я, как долбоёб без проблем скачиваю файл.
Хочу попробовать так сделать: Все recv записываем в stringstream, и метод на уровне get_next_response(); И пользоваться std::getline. Ибо стандарт вещает, что фтп все ответы заканчивает на \r\n Вопрос такой, можно ли совладать со stringstream, чтобы он удалял строку после getline? Или есть другие варианты?
>>446754 Посоветую как минимум не писать на чистых крестах, а воспользоваться библиотеками/фреймворками. Еще лучше будет, если ты таки покажешь код (с указанием того места, где у тебя работает не так как надо).
Продолжаю изучать Лафоре. Разбираю пример "Угадай карту". Есть, собственно, класс карты, два поля с рубашкой и достоинством и два метода с водом и выводом карты, но вопрос не в этом.
class card { int number; suit suit; public: card(){} void set(int n,suit s){suit=s; number=n;} void display(); }; void card::display() { if(number>=2 && number<=10) cout<<number; else { switch (number) { case jack: cout<<'J'; break; case queen: cout<<'Q'; break; case king: cout<<'K'; break; case ace: cout<<'A'; break; } }
Для чего вообще вот эта строчка существует? >void card::display() Просто чтобы показать, что описывать функцию можно и вне тела класса, посто объявив её предварительно? Если да, до для чего стоит двойное двоеточие, и что оно в данном случае обозначает? Вроде оно указывает на метод класса, но ведь и без него можно записать функцию.
>>446802 Еще один уебок с вопросами "зачем нужна точка с запятой". Погугли что-то типа "c++ class declaration and definition". Если коротко, то предполагается, что ты отделаешь объявление класса от его определения. Когда что-то больше лаба_2 напишешь, начнешь догадываться, зачем это нужно.
>>446802 > описывать функцию можно и вне тела класса Принято реализацию всех методов выносить из определения класса, возможно кроме inline. ДвоеточиеОператор разрешения контекста нужно чтобы показать что это метод класса, а не просто функция. Если не понимаешь зачем нужен метод а не функция, удали всю эту хуйню (объявление метода, и сам метод сделай функцией) и попытайся переписать функцию таким образом чтобы она работала с тем же результатом что и метод в коде Лафоре.
>>446802 Вообще то тебя бы ссаными тряпками нужно прогнать, но добродвач же.
"Двойное двоеточие" - разрешения контекста (вроде так называется) конкретно указывает для какого класса ты пишешь функцию display, в общем указывает из какого пространства имен ты вызываешь/берешь функцию/переменную/итд.
>>446844 По действию идентичны, в машинном коде сложно сказать как будет, может порядок инструкций будет другой, но количество то же, а может и одинаковый, от компилятора зависит. Ну а в контексте качества кода второй вариант лучше, т.к. легче читается. >>446841 Уж явно не для вопросов по синтаксису. Вот хотя бы для того что >>446844 спрашивает, это еще более-менее.
>>446879 Так в виде объектов и функций и представляю. Не помню как раньше было, но в какой-то момент поймал себя на том, что думаю функциями и объектами.
>>446892 Это самая тяжеловесная часть. Мало того, что ты заставляешь систему найти утилиту cls.exe (а может и не .exe, хуй вашу винду знает), так еще и запустить ее. А при запуске она еще и очищает консоль. Хотя последнее хуйня по сравнению с предыдущими действиями.
>>446955 Как минимум в том, что стек не бесконечный, поэтому надо объявлять объекты, занимающие много памяти, в куче, то есть при помощи new. А new возвращает указатель, очевидно. Это раз. Далее, при копировании такого большого объекта (если в функцию его передаешь, например) тратится еще столько же памяти и лишние такты процессора. А при передаче по указателю нихуя не тратится (размером указателя в 4 (вроде бы) байта можно пренебречь). И еще есть разные ситуации, когда нужны указатели, но мне лень их описывать.
>>446955 Как минимум наличием самого указателя. Как максимум ты вроде в X передаёшь адрес У. Он будет равен ~ 25346. Вот если бы ты написал int x, y; y = &x; то ты бы мог иметь как бы 2 названия одной переменной. присваивать значение 4 иксу через y=4;
а это все разве всё не изучается в спецдисциплине "байтоёбство"? существуют ли инструменты, чтобы посмотреть, на паботу с памятью прямо во времЯ компиляции? Гле научиться всем этим нюансам работы с памятью, ведь нигде прямым текстом не пишется: работа с указателяти на объекты предпочтительнее работы с самими объектами. просто же объясняется про возможность обращения по ссылке и по значению, и всё
>>446974 Здравый смысл? При передаче по значению ты копируешь весь объект и передаешь копию. Если функция проводит какие-то операции над копией, оригинальный объект останется неизменным. При передаче по ссылке ты работаешь непосредственно с объектом, не создавая копии. Функция может его поменять. Т.е. никаких нюансов тут нет, что больше подходит под конкретное техзадание - то и используешь.
>>446966 Для передачи в функцию можно использовать ссылку. Для остальных случаев выделение и очистку памяти разве не лучше ли обарачивать в класс? Реальное приминение указателей - массивы, деревья и другие структуры, неразыменованный указатель нахуй никому не нужен. Так зачем выделять память для единственного объекта?
Мне нравится С++, но меня вводит в недоумение сишный стиль жонглирования указателями. Осообенно, когда функция выделяет память и возвращает указатель. Есть же оптимизация возвращаемого значения. Кто потом это гавно будет отлавливать?
>>446985 Нельзя без них обойтись, толстячок. Тебе уже все про стек и кучу было сказано, но ты же с пятью классами церковно-приходской школы умнее всех комитетов.
>>446974 >ведь нигде прямым текстом не пишется: работа с указателяти на объекты предпочтительнее работы с самими объектами. О не эффективности передачи объектов по значению не писал только ленивый.
Как можно узнать или/и выделить максимум для любой системы памяти например для динамического массива? Известно что malloc возвращает NULL при недостаточном объеме памяти. Но после этого область эта область памяти недоступна так что это использовать врядле удасться.
>>447029 >Известно что malloc возвращает NULL при недостаточном объеме памяти Не обязательно. Под линуксом ты можешь аллоцировать хоть экзабайт на 64-битной системе, и все упадет только когда физическая память закончится.
>>446991 Что было сказано, ебанько? >Без указателей нельзя, но мне лень примеры искать.
Если в классе конструктор выделяет память, он выделяет его в куче и хранит только ебанных указатель, стек от этого не пострадает. Затем деструктор сам почистит все.
Зачем, я вас, крестодебилы, спрашиваю, вы выделяете память направо и налево? Нахуя плодить утечки и сегфолты? Есть этому оправдание?
>>447070 >Зачем, я вас, крестодебилы, спрашиваю, вы выделяете память направо и налево?
Чтобы программа пошустрее работала + экономия памяти. Не использовать же контейнеры для больших объёмов данных.
>Нахуя плодить утечки и сегфолты?
Пиши сразу код в месте, где память должна быть освобождена, только и делов. А ещё умные указатели есть, правда я не знаю, как у них с производительностью/экономией памяти. Хотелось бы ознакомиться с научно-техническими статьями на сей счёт, если кто располагает. Вангую по памяти то же, что и с обычными указателями, а по быстродействию чуть медленнее.
Есть этому оправдание?
Ну конечно есть. Не буду же я без конца петушить std::vector, например, для целочисленных типов. Взял рассчитал, сколько тебе памяти нужно, до какого момента пробегать итерациями, когда освобождать. Лишний раз не освобождаешь / не занимаешь память.
>>447070 То что ты, неосилятор, плодишь сегфолты, это твои проблемы. Нехуй делать еще одну жаву из крестов с тысячей лишних оберток и абстракций. Кресты не про это. Уебывай и пиши на чем хочешь, раз мозгов не хватает.
Есть одна задача -- плодится много экземпляров класса, и в каждый нужно передать одну и ту же константу, которая генерится в процессе. Как это лучше сделать?
Передавать каждому в конструктор не хочется, это криво и выглядит велосипедом. Делать глобалки, разумеется, тоже не хочется. Стоит сделать статическую инициализацию в конструкторе?
>>447078 >Чтобы программа пошустрее работала + экономия памяти. Не использовать же контейнеры для больших объёмов данных. >2015 >Примитивные оптимизации вместо продуманной архитектуры на языке с лучшими оптимизирующиеми компиляторами
>Не использовать же контейнеры для больших объёмов данных. А для чего они тогда нужны? Контейнеры - удобная и безопасная обертка для работы с динамическое памятью.
>Пиши сразу код в месте, где память должна быть освобождена, только и делов. Как найти это место среди неопределенного числа вложенных рекурсивных вызовов и ветвлений?
>Не буду же я без конца петушить std::vector, например, для целочисленных типов. Тебя никто не заставляет использовать STL, можно написать свой контейнер. >Взял рассчитал, сколько тебе памяти нужно >Лишний раз не освобождаешь / не занимаешь память. А vector-то самопроизвольно выделяет память в случайные моменты времени в случайном количестве. >до какого момента пробегать итерациями begin()/end() для кого сделали?
>>447095 Ты что несешь, поехавший? Проверься на нуль терминатор, ты походу гавно наворачиваешь.
>>447118 В процессе реализации возникла проблема. В классе есть static std::vector< int > i; После класса есть std::vector< int > i; Ругается на multiple definition.
Если не сложно, приведи пример, как это должно выглядеть, чтобы можно было инициализировать статический член в конструторе и забыть.
>>447148 >После класса есть Зачем он там есть? Если тебе нужно инициализировать его в конструкторе, то инициализируй его в конструкторе, а не объявляй новый.
Я решил перенести этот вектор даже не в конструктор, а в функцию, где он используется. Чтобы один раз инициализировать и все. Но беда состоит в том, что функция эта лежит в треде, поэтому туда лезут два треда сразу и происходит сегафолт.
Если я переношу инициализацию в конструктор, то за пределами конструктора вектор не видно.
>>447165 Объекты создаются в одном потоке. В каждом из объектов есть тред и функция, с которой этот тред запускается овер дохуя раз в секунду.
Поэтому все-таки хочется вынести инициализацию статики в конструктор, потому что он вызывается для каждого объекта последовательно, а не городить синхронизацию.
Что он от меня хочет? Когда использую в функции get strcpy, то получается какой то ужасный результат. Дело, наверное, в more(), но я не знаю, как ту штуку можно исправить.
на char in и на аргумент in внимания не обращайте, мне просто лень при возвращении к стандартному коду, где у get нет аргументов всё вилкой чистить.
>>447180 > Объекты создаются в одном потоке Ну значит сегфолт не из-за того что куда-то лезут два треда. Ты где-то дергаешь нулевой указатель, или там удаляешь объект а потом пытаешся его использовать. Вообще у тебя вся архитектура как-то подозрительно выглядит, в каждом объекте по треду который стартуется дохуя раз это не очень то нормально. Подумай еще раз про общую структуру приложения.
>>447193 >>447193 Да нет, с архитектурой вроде все норм -- все эти объекты это обертки для тредов. Там суть вот в чем -- в рабочей функции треда лежит статический вектор. Если он не заполнен, врубается его заполнение.
Так вот -- пока первый забравшийся в функцию тред заполняет, второй уже лезет дальше, где идет работа с этим вектором, и логично получает в итоге хуй.
Я пока придумал только один способ решения -- сделать после заполнения while по существованию вектора. Но это какой-то ебучий костыль.
Может все-таки есть способ объявить вектор статическим членом класса и генерить в конструкторе?
>>447193 Ну, то есть можно еще генерить статику в конструкторе, а потом копировать ее в член класса, по которому будет проверяться, но тогда придется хранить вектор в памяти много раз, а это ненужное засирание памяти.
>>447204 Если я правильно понял, тебе нужно тчо-то типа сделать статический метод (метод класса) который будет инициализировать вектор (статический естественно). Раз объекты у тебя создаются в одном потоке, перед их созданием дергаешь метод с инициализацией вектора, потом начинаешь создавать объекты. Если из разных потоков то нужно убедится что метод будет вызван до попыток инстанциировать объекты. Совать его в конструктор не сильно хорошая идея, но можно с блокировками - при самом первом зодании берется мьютекс и после инициализции вектора освобождается. Остальные объекты (если есть) ждут освобождения мьютекса. Но если у тебя создание в одном потоке то этого нихуя не надо, проще вызывать статический метод и потом инстанциировать объекты.
>>447051 > Undefined behaviour. UB там нет. Есть unspecified behavior в том, каким будет порядок и взаимное расположение нескольких выделенных областей памяти. Зато ясно написано, что к объекту можно обращаться до тех пор, пока он явно не будет освобожден. Про UB (а OOM Killer очень даже UB) при обращению к объекту не говорится.
>>447527 >массив Никак. Только если создать новый массив, либо realloc. В любом случае придется пройти по массиву и перезаполнить его заново с учетом нового элемента (если новый массив), либо сместить "правую" часть (если realloc). А лучше использовать список.
Привет ребяты, поясните, как мне понять что клиент отключился от сервера а winsock, как мне устроить так, чтобы после того как пользователь открыл консольное окно сервер смог реконнектнуться к пользователю(сервер сам подключается к клиенту). И почему у меня выходит отправить только 4 символа в функции Mes ? http://pastebin.com/ArWF04Vc
>>447535 >как мне понять что клиент отключился от сервера Пингуй времяот времени, сделай так чтобы клиент перед штатным отключением предупреждал сервер. > после того как пользователь открыл консольное окно сервер смог реконнектнуться Тоже самое - постоянно пробывать подключиться к клиенту, пока он не ответит
Плюсач, подскажи хороший гайд по быстрому изучению особенностей свежего C++ (Что там сейчас модно, C++14?)
Программировал на плюсах несколько лет назад, сейчас возникла необходимость пособеседоваться на позицию плюсовика, в компании используются по возможности новые фичи компилятора (т.е. C++0x нужен, C++14 - скорее нужен, чем нет)
>>446702 > (возвращаем кортеж с элементом-флагом или передаем out-parameter в виде ссылки/указателя). А потом весь код, через строчку в if (error)? Я думал исключения придумали как раз чтобы не было этой хуйни.
>>443673 Плохая идея. Данный приём хорош или для очень больших матриц (в обоих измерениях одновременно), или для одномерных массивов практически вне зависимости от размера массива.
У Страуструпа был приёмчик в упражнении, когда он запили struct Month {}; где std::vector<Day> day; в конструкторе имеет 32 дня, чтобы к ним было удобно обращаться.
>>443724 Ты, блядь, шутишь? Равно как и те, кто тебе отвечают. Тебе нужны тупо вложенные ифы одного уровня вложенности, не более, условия по y вложены в условия по x.
Даже если грамотно всё написать, можно по максимум избежать вложенностей. Вот вроде самым простым способом сделал.
Коротко: Был макакой, решил пересесть на плюсы. Нужны проекты, которые можно почитать и понять общие концепции. На github нихуя найти не могу, ибо проекты до безумия сложны, либо проект состоит из одного файла на 2000 строк и может быть получится найти 2-3 комментария. Соответственно реквестирую ссылки на проекты, которые осилить может даже я.
Подробно: Был макакой на похапе. Понял, что совсем не мое. Пересел на С, потом по совету знакомого взял C++. Изучил все азы, скорее даже сравнил их с похапе и довольно быстро усвоил, но столкнулся с проблемой, что не знаю, как пилить проект.
Концепция проекта есть, но я банально не знаю, как выполнить реализацию: -Стоит ли пилить отдельный класс. -А как разместить файлы? -Где хранить данные? -А может быть стоит использовать готовые библиотеки? -Может быть, уже есть готовый паттерн, а я просто ебуся в жопу? -etc.
Банально, вопросы организационного характера, но никакой информации я найти по этому не могу. Если PHP-код был сравнительно прост и поковырять проект не составляло труда, то, зайдя на какой-нибудь опенсовас проект, я сталкиваюсь с тем, что нихуя не понимаю. Тысячи файлов, назначение которых не ясно, а состав их вызывает небольшой шок, так как в книжках подобным даже и не пахло. А все эти файлы разбросаны по куче каталогов, в которых ожидаешь увидеть одно, а встречаешь совсем другое.
Собственно, надеюсь, что кто-нибудь из анончиков знает какие-нибудь проекты, которые можно проанализировать начинающему крестоносцу. Или, может быть, есть какой-нибудь хороший блоггер, который в подробностях пояснил за проект\составил с нуля рабочую программу не из 1-2 файлов, а действительно хороший демо-проект. Или, может быть, сняли какой-нибудь screen-cast, где пилят какую-нибудь простецкую мелочь, аки в похапе запилить гостевую книгу.
Ну-с, анон, надеюсь на тебя. Ты часто мне помогал, помоги и сейчас.
Если на PHP я нагуглил простые cms, которые я погонял деббагером и запилил подобие для себя, а позже вовсе пересел на фреймворки, то с С++ подобное в моем исполнение не взлетает.
>>447677 Да блядь, эти все книги содержат академические примеры, которые толком никуда нельзя применить. Уже дико заебало читать книжки, пилить очередной считыватель файла. Никакого прогресса, никаких целей - абсолютная стагнация.
У меня есть проект, который меня адски толкает вперед - автоматизированный парник. Это мне действительно интересно и я готов с этим работать, но у меня нет хорошей концепции - банально не знаю, куда засунуть какой кусок кода. Собственно, поэтому хочу почитать другие проекты, понять, как строится структура проекта и его скелет. Ну и всякие другие технические вопросы.
>>447675 >-Стоит ли пилить отдельный класс. В зависимости от ситуации. Например, если у тебя в одном классе собралось под сотню методов, то это сигнал к тому, чтобы изменить иерархию и вынести какую-то функциональность в отдельные классы. Опять же, классы, состоящие из одного-двух методов чаще всего - плохая идея. Ищи баланс. >-А как разместить файлы? Файлы проекта? Обычно кладут в подпапку src, если есть много файлов, относящихся к какой-то части архитектуры приложения, то их еще в отдельную подпапку, скажем, src/dialog, src/stored, и т.п. >-Где хранить данные? В базе данных. Очень советую присмотреться к SQLite, если только у тебя там не супер-пупер хайлоад с миллиардом пользователей. >-А может быть стоит использовать готовые библиотеки? Не может, а совершенно точно нужно их использовать. Велосипеды полезны только для обучения. >-Может быть, уже есть готовый паттерн, а я просто ебуся в жопу? Вполне возможно, что есть, но не советую тратить время на их зубрежку. Половину паттернов я интуитивно использовал еще когда даже слова такого не слышал. Если ты не конченый долбоеб, то сам будешь использовать паттерны, даже не задумываясь об этом. Хотя, по названиям и областям применения пробежаться стоит, но не заморачиваясь об этом.
Что касается проектов - смотри в сторону Qt (заодно рекомендую его как фреймворк). Документация отличная, код довольно качественный, есть множество примеров небольших приложений. По поводу же чего-то более крупного - только гуглить. Я например ни одной статьи на эту тему припомнить не могу.
>>447683 Спасибо, вот уже хоть что-то. Сейчас я попытаюсь расписать концепцию своей грядки, лол. Достаточно абстрактно, ибо дохуя технических вопросов все ещё не решено. Запощу сюда - похуй, все равно опенсовас и ничего принципиально нового нет.
>Что касается проектов - смотри в сторону Qt Я тут покумекал и пока решил остановиться на веб движке. Понравилась эта концепция очень.
>>447685 >Я тут покумекал и пока решил остановиться на веб движке. Каком именно? Это, к слову, сложновато для новичка, не рекомендую. Тот же WebKit в Qt содержит столько же (или даже больше) кода, сколько все остальные его части.
>>447690 Ну вот банальный пример, с которым я столкнулся, когда начал набрасывать проект. У меня есть основной класс, который координирует работу всего приложения (Titan). Он инициализирует работу, устанавливает связь с контроллером(физическим), проверяет входные данные, ждет команды от пользователя и т.д.
С другой стороны, у меня есть файл, которые содержит базовую конфигурацию проекта. Конфигурация, скорее всего будет в JSON формате и скорее всего я перемещу её в БД, ибо >2015 >срать в файлы. Сижу и думаю, запилить функцию, которая читает данные из файла прямо в Titan, или запилить отдельный класс, который вытащит нужные данные и сформирует массив, который будет передан в Titan для анализа?
Склоняюсь ко второму варианту, но если уж пилить класс, то очень гибкий. Типа для работы с JSON формата.
>>447688 Пока без идей. Мне просто QT тащить не очень-то и хочется. Хотя опять же, я пока об этом не задумываюсь. Сейчас главное прототипирование, так как даже физической части проекта нет. Поэтому чисто воды консолеебство.
>>447693 Ты неправильно понимаешь классы. Класс - это не замена функции. Класс - это "данные с приделанными к ним функциями для выполнения каких-то действий над этими данными", если простым языком. Так что в твоем случае класс должен заменить массив (для большего удобства, чтоб ничего не выковыривать из массива и не парсить внутри Titan). А вообще, то что ты привел, это типичный God object - антипаттерн. Лучше так не делать. Для связи с контроллером сделай отдельный класс, который будет преобразовывать сигналы от контроллера в события или вызывать забинденные на них методы; обработку команд от пользователя предоставь еще одному классу (лучше в отдельном потоке, чтобы ничего не блочить); проверку входных данных возложи на следующий класс, который одновременно будет являться представлением этих данных в удобном для дальнейшей работы формате. Ну и так далее.
На подробное описание дохуя времени уйдет, поэтому кратенько алгоритм работы системы. И я видимо не совсем понимаю, видимо, основные концепции.
>>447697 >заменить массив Особенно я не понял вот это. Возможно, кто-нибудь предложит примерную архитектуру приложения.
Алгоритм работы: 1. Инициализация сервера. Смотрим базовую конфигурацию (Что подключено к системе, какие задачи стоят, где размещена база etc) 2. Открываем сокет с контроллеров(Aruduino) и требует опрос сенсоров, которые подключены к системе. 3. Aruduino опрашивает сенсоры, формирует ответ в JSON формате(?) и отсылает обратно на серверную часть. 4. Принятие решения. Серверная часть сверяет показания сенсоров с планом действий, который заложен пользователем (если температура упала, то включить лампы, etc). Если показания сенсоров находятся в пределах нормы, то система простаивает n-секунд и ожидает мануальной команды от пользователя. Вновь отсылает запрос контроллеру на опрос сенсора. Если показания сенсоров выходят за пределы нормы, то серверная часть отсылает команду к контроллеру (например, включить лампы).
Пока это минимальный функционал, дальше есть ещё тысяча и одна функция, но до них ещё очень далеко.
>>447701 >Особенно я не понял вот это. Ну епта, у тебя в массиве же будут, скажем, строки (ибо разные типы туда ты не запихаешь). А тебе их надо будет потом частично в bool, частично в int, частично во что-то еще переделать. А тут был бы вместо массива класс с уже готовыми распарсенными полями, типа class X {int count; std::satring path; bool isThatFeatureEnabled}; >1. Инициализация сервера. Смотрим базовую конфигурацию (Что подключено к системе, какие задачи стоят, где размещена база etc) Нахуя? Это все необязательно прямо при запуске делать. Пример из того же Qt: у тебя есть файл конфигов (.ini, .conf), создаешь объект QSettings s; и далее, где надо: s.value("count").toInt(); s.value("path").toString(); и т.д. >ожидает мануальной команды от пользователя И блокируется, пока пользователь что-то не введет, т.к. в крестах нет таймаута ввода. Потому это и должно быть в отдельном потоке, который в крайнем случае можно и убить.
>>447705 > я вообще не понимаю, как запилить программу.
Пили итертивно, выбери минимум возможностей и пили с архитектурой, какая под руку подвернётся.
> Смотрим базовую конфигурацию Возьми какую-нибудь библиотеку, не парься тут вообще.
> где размещена база А база тебе зачем? Для хранения правил? Кажется, если правила - это что-то что пользователь должен редактировать, то тупо ещё один конфиг, лежащий рядом с твоей программой — решение куда лучшее, чем бд.
Допустим, в качестве минимума реализовываем тупые правила вида "Если X > 10 сделать_действие"
Ок, как их хранить? Зависит от числа правил и ожидаемой скорости работы. Вот точка потенциального расширения (другой способ хранения, другой алгоритм поиска) — самое время выделить сущность, которая принимает на вход состояние твоей системы и возвращает сработавшие правила (или требуемые действия).
Для начала можешь просто хранить как список структур {свойство, знак сравнения, число, команда}
Ожидание ввода пользователя и работа с контроллёром — тоже выглядит как две отдельные сущности.
>>447710 >И хули делать? Закрыть сосач и начать пробовать, пытаться. Само собой нихуя не сделается. Тебя же никто не заставляет сюда код выкладывать, что получится, то и ладно. С опытом будет все лучше и лучше получаться, все через это проходят.
>>441690 Пишет запутавшийся Java-developer про библиотеки C++. Дайте ссылку, пожалуйста, на статью которая пояснит за подключение библиотек dll/lib/a/so, и какая между ними разница в использовании. Не понимаю какова разница, кроме того, что so и dll динамичные, а a и lib - статичные. Ну и что a и lib - unix-like, а dll - windows. Но зачем статичность/динамичность, в чём профиты и разница в подключении к проекту в VS и прочих IDE?
>>447756 >so и dll динамичные Их подключит ядро операционной системы, вызов пойдёт через указатель на функцию (дополнительный прыжок по оперативной памяти), >a и lib - статичные Их подключит линкер, вызов пойдёт напрямую, параметры будут переданы через стек, >зачем статичность/динамичность, в чём профиты и разница В оптимизациях, а если исходники подключать, то функцию в код подставят, см. книжжшки по написанию компиляторов.
IMHO, ещё: - в библиотеках не надо создавать глобальные переменные, - в библиотеках не надо создавать новые области памяти без крайней на то необходимости, - в библиотеках не надо ещё много чего, т.к. библиотеку вызывают и другие программы, И в таком случае лучше статическая линковка.
>>447765 > Их подключит ядро операционной системы, вызов пойдёт через указатель на функцию (дополнительный прыжок по оперативной памяти),
Не совсем ядро, а динамический линковщик (во всяком случае, если речь идёт о линуксах), но в общем — сказанному верить.
>>447756 Алсо, чисто организационный момент. Некоторые библиотеки довольно большие и разделяемые между множеством приложений (Qt, например) и линковать статически оную в каждый исполняемый файл системы довольно глупо.
>>447683 >В базе данных. Очень советую присмотреться к SQLite С трудом прикрутил эту хуевину. Сейчас проект собирается с тремя варнингами. Почему эта библиотека такая ебливая?
Warning 1 warning LNK4075: ignoring '/INCREMENTAL' due to '/LTCG' specification Warning 2 warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:LBR' specification Warning 3 warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:librar
>>447911 https://ideone.com/Qwgnjr Думаю, что с УБЫВАНИЕМ и ВОЗРАСТАНИЕМ сам разберёшься. С++ референсис тебе в помощь. Ну и ещё partial_sort тоже посмотри. Но тут он был не нужен.
>>447922 Охуенные стори, бро. Ты бы книжку почитал для ньюфань. Или погуглить попробовал.
Сделать можно это так: 1. Ищешь наименьший элемент. Запоминаешь его позицию. Т.е. arr[n], где n позиция меньшего элемента. 2. Юзаешь алгоритм сортировки, гугли сразу СОРТИРОВКА ПУЗЫРЬКОМ, самая простейшая. Сортируешь массив начиная от arr[n] до arr[arr_size].
И блядь, читай литературу в шапке треда, ибо подобные вопросы далеко ни раз описаны в трудах различных авторов.
Посоны, подскажите дебилу. Есть например helloworld.cpp, и я внем хуяк, написал в нем #include <QTCore>. Ну значит g++ говорит что нету такой хуйни. Что делать? Проги с использованием qt либ можно только через qmake собирать? В системе либы qt4 стоят.
>>447765 >so и dll динамичные >Их подключит ядро операционной системы, вызов пойдёт через указатель на функцию (дополнительный прыжок по оперативной памяти) нет тут 2 варианта
>>447837 Сууука, я никак не могу сообразить с архитектурой программы.
Вот есть функция int main(). Дальше что? Куда должна идти программа? Почему нет смысла инициализировать в самом начале? Ведь нужно представление о среде иметь и т.д? Что в классе Titan должно быть? Почему я пилю по антипаттерну? Разве нельзя оставить Titan, который просто принимает решения по факту? Куда вообще логику приложения положить? В каком классе должна находиться та часть, которая отвечает за принятие решений?
>>447968 Ну, у меня как у новичка такой проблемы нет - я вообще не представляю архитектуру программы изначально. Поэтому я поочерёдно пишу некие куски (модули) и тестирую их на образцах данных.
Кстати, совершенно не разделяю идеи лепить классы куда ни попадя. Если у тебя модуль состоит из трёх функций, одна из которых основная, а две вспомогательные, на кой чёрт вообще классы нужны. Можешь в namespace обернуть.
Я вообще ебал в рот это ООП, правда, задачки у меня в основном (полу-)обучающие и небольшие, может поэтому ещё не успел оценить.
>Вот есть функция int main(). Дальше что? Куда должна идти программа? Ну это вообще философские вопросы. Инт мэйн - с неё всё начинается и ею всё заканчивается, всё выделение памяти, общение с ОС и т.д. Почему не войд? В идеале должен быть возвращён ноль, чтобы показать, что ошибок при выполнении не было.
>>448033 Пиздец. Сейчас кодил мелкую математическую задачу. Дико обосрался с векторами, динамическими массивами и прочим говном. Дико стыдно. Забился под шконку вместе с учебником. Совсем охуел, лезу в серьезные вещи, когда основ не понимаю.
Но вот я подключаю библиотеку, а там сразу .h, .lib и .dll. Зачем сразу всё? Какие комбинации вообще возможны и зачем они нужны. Пожалуйста, укажите все возможные комбинации, иначе я ничего не понимаю, когда сталкиваюсь с такой фигнёй.
>>448087 Да, я гайды по CMake читал, но на таким вещам почему-то не уделяют внимания, а для меня шок, лол. Т.е. .dll можно смело удалять из папки и всё будет работать?
>>448101 Хорошо. Библиотеку подключил, добавил .lib в Linker->Inputs в VS2012, добавил нужные пути в проект. Но при старте Start Without Debugging получаю ошибку, что невозможно найти библиотеку. Решается добавлением .dll в папку Realese. Тут у меня 2 вопроса: 1) Почему .dll, а не .lib (пробовал без .dll - не зарабаотало, а с .dll всё o.k.) 2) Как решить эту проблему, чтобы автоматически копировалась нужная .dll библиотека?
>>448104 Нет. Никаким другим способом ты порядок поиска не задашь. Сахар это когда вместо длинной конструкции тебе предлагается использовать короткую, но делающую абсолютно то же самое.
>>448112 Нихуя ты не понял, и тот анон тоже не прав. Вот лежит у тебя в системной папке файл jopa.h, относящийся к какой-то библиотеке. А в своем проекте ты тоже создаешь файл jopa.h, и если бы поиск осуществлялся только в каком-то одном порядке, тебе бы пришлось указывать абсолютный путь (иначе какой-то из файлов вообще никогда нельзя было бы подключить).
>>448113 Это же и есть говно, когда зависимость в коде от положения файла на диске. Притом порядок ещё нечётко регламентирован. Уж лучше путь относительно проекта указать, чем надеяться, что файл заинклудится правильно.
>>448114 Че ты несешь вообще? Ты хоть один проект собирал когда-нибудь? (laba_2 не считается.) Какие блять пути относительно проекта, ты понимаешь, что на разных системах все в разных местах лежит? Пиздец просто. А так да, система заголовочных файлов по сравнению с import в других языках весьма уебищна. Как бы мне кресты ни нравились. но с этим не поспоришь.
http://ideone.com/wUVy7z Чому код компилится? Ведь A::foo() и B::foo() имеют разные сигнатуры, а следовательно это разные функции и должно происходить не переопределения, а простая перегрузка и получаться, что A::foo() просто не определена. Объясните мне тупому.
>include <cstdint> //C++ std version of stdint.h >include <cstdlib> //C++ std version of stdlib.h
Т.е. include <> -- это обычно для стандартной библиотеки. .h в конце не пишется, компилятор должен понимать, что обращение идёт именно к ней. При этом сишные хэдеры также являются частью стандартной библиотеки, если перед названием хэдера после < добавить c. Кстати, имеется категорическая рекомендация использовать std::malloc() а не просто malloc(), чтобы у твоей среды разработки не было сомнений, что ей использовать. Маллок просто как пример, можешь его вообще не использовать.
>include "bicycle.h" >include "your_mom.h"
А эти файлы должны находиться в той же папке, где находятся и всё .cpp файлы. Т.е. это твои собственные хэдеры, в которых ты можешь объявлять функции и определять глобальные константы, включать хэдеры стандартных библиотек, писать развёрнутые комментарии по версиям и прочее // (всё равно там мало кода).
По крайней мере, так делаю я. Если кто желает обоссать меня по делу, я буду только рад.
>>448149 Декларация функции/метода это просто обещание компилятору что такая функция существует, встретив его он просто продолжает дальше, а не бросается проверять есть ли действительно у функции определение (на самом деле компилятор плюсов и не может в общем случае такое проверить, например определение функции может быть в другом translation unit). И если нигде дальше метод/функция не используется то все ок. Проверка на существование функции происходит на стадии уже линковки, а попытка линковки происходит только если функция/метод действительно вызывается где-либо.
>>448150 > .h в конце не пишется, компилятор должен понимать
на самом деле, в stl лежат как раз такие файлы cmath, cstdlib, которые просто инклюдят math.h, stdlib.h.
>А эти файлы должны находиться в той же папке, где находятся и всё .cpp файлы
Не обязательно. Как выше объяснялось, "..." начинает посик с текущей папки, потом поднмиается до корневой папки проекта, потом переменные для инклудов, потом системные пути. Так что твой файлы могут лежать где угодно.
>>448155 >на самом деле, в stl лежат как раз такие файлы cmath, cstdlib, которые просто инклюдят math.h, stdlib.h. Мне казалось, там есть тонкости. Вроде того, что они не инклюдят файл целиком, а лишь отдельные сущности, потому что какие-то сущности могут быть чутка изменены. Кто-то может прояснить.
>Не обязательно. Как выше объяснялось, "..." начинает посик с текущей папки, потом поднмиается до корневой папки проекта, потом переменные для инклудов, потом системные пути. Так что твой файлы могут лежать где угодно. Подразумевается, что свои-то хэдеры ты будешь держать в той же папке. Ну и да, в Вижуал студии ни черта не ищется по директориям выше, просто говорит "нет файла".
>>448168 Что >>448159 и требовалось доказать -- плюсовые хэдеры могут быть расширены (от их использования в любом случае не проиграешь). Так что я предлагаю при возможности инклюдить >>448150 хэдеры исключительно из стандартной библиотеки (особенно сишные), и при вызове сишных функций использовать std:: дабы снять все вопросы по возможному двоякому трактованию пространства имён.
Мало ли кто вдруг по пьяни маллок переопределит для какого-то модуля.
После даунгрэйда с vs 2013 на vs 2012 получаю следующую ошибку:
--------------------------- Microsoft Visual Studio --------------------------- Unable to read the project file "deviceQuery_vs2012.vcxproj".
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v6.5\1_Utilities\deviceQuery\deviceQuery_vs2012.vcxproj(44,5): The imported project "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\BuildCustomizations\CUDA 6.5.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. --------------------------- ОК ---------------------------
В чём может быть проблема? Это решение открывается легко на другом ПК, где сразу стояла vs 2012 (собственно из-за этого и сделал даунгрэйд на втором)
>>448154 >>448149 A::foo() и B::foo() - разные функции. Следовательно A::foo() не определена и В является абстрактным классом. Все потомки абстрактных классов, в которых не определены чисто виртуальные функции так же являются абстрактными. Код компилируется потому что он корректен. А вот создать объекты типов А или В не получится.
>>448190 Абстрактность никак не влияет на то что программа компилируется. Меняется только то где выскочит ошибка. Если метод обявлен как pure virtual - то при попытке инстанциировать класс, если будет объявлен как простой метод без реализации то будет ошибка линковщика, если метод используется. Если нет то все скомпилируется, даже если клас инстанциируется (без последующих вызовов отсутсвующего метода).
>>448213 Дебаггеры, блять, для кого придумали? Чему равно i в момент краша? Какой массив a в момент краша? Хули ты принес кусок нихуя в тред? У нас экстрасенсов не водится.
спрошу тут: как преобразовать данный код (из сдиез) wow.Asm.AddLine("fs mov eax, [0x2C]"); wow.Asm.AddLine("mov eax, [eax]"); wow.Asm.AddLine("add eax, 8"); wow.Asm.AddLine("mov dword [eax], {0}", objectManager);
wow.Asm.AddLine("push 0"); wow.Asm.AddLine("push 0"); wow.Asm.AddLine("push 0"); wow.Asm.AddLine("push {0}", id); wow.Asm.AddLine("call {0}", CASTSPELLBYID); wow.Asm.AddLine("add esp,16"); wow.Asm.AddLine("retn"); и из с++ билдер __asm { MOV EDI, Id // Помещаем WID в регистр EDI MOV EBX, 0x00630790 // Помещаем адрес клиентской функции таргета MOV EAX,DWORD PTR DS:[BA] // PUSH EDI // ; /Arg1 MOV ECX,DWORD PTR DS:[EAX+0x20] // ; | ADD ECX,0x0EC // ; | CALL EBX // ; \elementc.00606A70 } поставить под синтаксис gcc компилятора вида __asm (""); статью я раз десять перечитывал, все равно не понял в чем ошибка: переменные джисиси отказывается видеть, как их грамотно передавать я таки не понял __asm ("movl %eax, 0x2C"); __asm ("movl %eax, %eax"); __asm ("add %eax, 8"); __asm ("movl %eax, OM");
Я тут пробовался на работу. Просили мультитрединг под нагрузкой, C++11 и всякое такое -- заданием была факторизация большого объема чисел в многопоточном режиме. Написал штуку: http://www.fayloobmennik.net/4681759
Меня не взяли.
Собственно, интересно услышать твое мнение, почему.
>>448322 Код не читал и не запускал, но 10000 как максимальное возможное число выглядит очень подозрительно. Проверь хотя бы как оно будет работать на числах до 2^64, с меньшими ограничениями в задаче вообще смысла нет.
>>448329 Это было прописано в условии задачи. Сама по себе программа не ломается для любых чисел, которые влезают в uint64_t, разве что можно будет слегка ускорить алгоритм факторизации.
В заданных условиях она кушает 10 миллионов чисел за время от полсекунды до пяти, что вроде бы топовый результат.
>>448342 Переопределение операторов << и >> лютейшая параша. У std::vector есть конструктор, принимающий в себя кол-во элементов (а ты делаешь resize, никанон) Именование переменных — параша из 90х. camelCase сейчас стандарт. Префиксные и постфиксные подчеркивания — ад для моего утонченного вкуса. Инкапсуляция потоков — спорно. Можно было вынести. Три newline между функциями. Ну зачем? for разбит на 3 строчки. Опять же зачем? Комментарии на русском. Сразу минус. Еще бы транслитом переменные называл. Куча инклудов в хэдере, где они нахуй не сдались. Увеличит время рекомпиляции при некоторых кондициях. (мне надоело, жди еще кого-нибудь)
>>448358 В чем параша с переопределением? Насчет конструктора принял. Инкапсуляция ради соблюдения ООП -- не хотелось делать один godlike-объект. Насчет инклюдов -- не понял, поясни, в чем беда?
Относительно стиля же, имхо, здесь каждый работает так, как ему удобно, да и переучить человека в общем никаких проблем не вызывает, так что вряд ли это было важным критерием оценки. Думаешь, все-таки было?
Переменные я пишу через подчеркивания, потому что мне нравится видеть разницу: кэмел-кейс -- функции, маленькие через подчеркивания -- переменные. Ньюлайны для логического разбиения функций по группам, мне так удобнее искать. Фор -- опять же, для удобства. Здесь форы мелкие, а бывает, что условия довольно большие в записи, и так проще понять, что где. Насчет комментариев -- имхо, проблемы глупых вендоблядков, нормальные посоны держат свои файлы в utf8.
>>448370 >нормальные посоны держат свои файлы в utf8 Речь не об этом, а о том, что комментарии на любом языке кроме английского - зашквар. >Переменные я пишу через подчеркивания Опять же речь немного не об этом, а о хуйне вида _var или var_. Так уже много лет НИПРИНЯТО.
Здравствуй, ананас. Подскажи, пожалуйста, актуальна ли няшная и кресты? Сейчас получается так, что в основном, я хуярю интерфейсы к железкам, да системный код. Целиком и полностью кроссплатформу. На крестах, в основном, пишу уже врапперы, к-е отдаю ДРУГИМ ДЕВЕЛОПЕРАМ.
Из-за чего, по сути, опыта в крестах я набираюсь крайне мало. Хотя и претензий к моим наработкам не возникает, даже наоборот, но есть ли путь дальше? Как кодить на крестах и начать жить? Ибо меня сразу пихают в низкий уровень, как только рассказываю о своём опыте. Хотя на собеседованиях активно дрочили именно по плюсам. И отвечал всё изи. Обычно я отказываюсь от вакансий, нежели мне отказывают.
>>448379 Это не снобизм, на английском вся техническая терминология обычна куда более очевидна, однозначна и общепринята. Кроме того, годный программист владеет английским на достаточном уровне, чтобы комментировать на нем было как минимум так же удобно - следовательно собеседун может расценить комментарии на русском как признак плоховатого знания английского.
>>448370 >Насчет инклюдов -- не понял, поясни, в чем беда? Ну вот скажем Factorizer.h Зачем в .h-нике iostream и cmath? они что, используются непосредственно в этом заголовочнике? Нет. Тогда зачем пользователю знать о том, что они где-то вообще используются? А если они изменятся, рекомпиляция может занять чуть больше времени. А если такие ошибки делать постоянно, то incremental build будет работать часами. Поэтому нормальные люди подключают только необходимые заголовки в каждом translation unit.
>>448438 Этот прав. В нормально написанном коде исключения не нужны вообще. Если для работы со средой они еще имеют право применяться, то исключения для проверки собственных выражений это "ну хуй знает, может сработает, может нет". Программист должен понимать, что делает его код.
Не могу нагуглить. Я скачал библотеку и хочу использовать ее в Visual Studio 2013. Как мне все подключить? Есть какой-нибудь общий гайд или же для каждой библотеки все индивидуально?
string str; //записываем слово из файла, пока не встретим пробел getline(file, str, ' '); //первую букву слова переводим в нижний регистр string::iterator i = str.begin(); tolower(звездочка i); //вырезаем из слова все знаки препинания for(; i != str.end(); ++i) { if(!isalnum(звездочка i) && звездочка i != '\n' && звездочка i != '-') str.erase(i); }
Проблемы две. При переводе первой буквы к нижнему регистру реально нифига не происходит. Вторая - стопорит на переборе и удалении элементов в цикле. Читал, что с erase кое-где ломаются итераторы, и надо ставить i--, но это тоже не помогает. Нид хелп. BOOST и самопальные функции не предлагать, желательно также обойтись без <algorithm>. В общем что я делаю не так?
#include <iostream> #include <cmath> using namespace std; int f1(int i) { i=2; return i; } int main () { int i =1; f1(i); int f1_result = f1 (i); cout<<i<<endl; return 0; } Не работали глобальные переменные, решил проверить на тривиальном примере, всё равно не пашет. подскажите плз (ответ кстати от наличия int f1_result = f1 (i ); не зависит), только начал учить программирование
>>441690 Реквестирую объяснение, как работает функция rotate.
Задание: Передвинуть элементы массива a размерности n таким образом, чтобы элемент с индексом new_0 стал начальным, и вернуть индекс, который получил элемент, бывший начальным.
Появились вопросы: 1) Как поменять элементы массива в случайном порядке? 2) Что такое невозрастающая пирамида и как проверить, не является ли массив ею? 3) Как проверить, является ли массив b перестановкой массива a?
Хочу в скором времени перебираться на Linux, и думаю что юзать буду для разработки программ(ну и игрулек конечно). Смотрю в сторону разных IDE, очень нравится CLion, поясните за CMakeLists, поясните за MinGW(я вроде понял что то вроде порта сборщика под винду), так же смотрю на Qt. Поясните каким образом мне делать не консольные приложения на CLion, в Qt понятно, я строю как на WPF, но в CLion я чет не понял пока что(потому что долбаеб). Так же поясните за компиляторы G++, GCC, Intel C++ и так далее. Ну так как Linux то наверно GCC лучше будет. Было бы неплохо если бы знающий человек отписал что к чему, плюсы минус и куда двигаться, и сильно ли я пострадаю если съебну с винды на линух и буду там разрабатывать и под винду и под линукс? P.S. Сильно хуями не обкладывайте мне 18 лет, пытаюсь не быть ебаным биомусором.
Мне тут небольшая библиотека перепала с компьютерной литературой, решил вот с плюсов начать, до этого немного мог в жаваскрипт плюс паскаль на школьном уровне лол, но не суть. Так вот, там аж 3 книги по плюсам, две Шилдта - базовый курс и "искусство с++", и самоучитель Васильева. С какого автора лучше вкатиться будет?
Двачик, есть очень простой вопрос, но нормальное решение как-то не очевидно. В общем есть строка std::wstring вида "0102030A0B0C", нужно разбить на вектор/массив строк вида {"01", "02", "03", "0A", ... }. Кроме тупого перебора циклом есть в стандартной библиотеке способы это сделать?
>>454360 Если я правильно понял, это происходит из-за того, что я сравниваю символ с разыменованным указателемa == *(array+i) - можно так записать на элемент символьного массива. А как тут этого избежать-то? Как жить, что делать?
Волею судеб надо разобратьсь с куском говна на крестах, запись в файл, конкретно. В куске кода отвечающего за запись документа в файл, вызывается [int _write] функция из файла write.c 10й вижлы. Пробежался по ней дебагом, она доходит до винапишной функции
>>446679 Божественный язык. Единственный язык после Святого Ассемблера, которые честен и нежен с тобой как первоклассница и не пытается тебя наебать через строчку.
только въезжаю в C++, раньше писал на C под микроконтроллеры. Поясните по хардкору почему VisualStudio в WinForms генерирует обработчики событий в хедере а не в .cpp. Что за хуйня?