Это копия, сохраненная 28 марта 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
>>426100
http://ideone.com/xSDeAx
Ну очевидно же:
Если переменная скорости по оси 0: возвращает новую координату положения по одно оси (которая не 0) с учетом скорости и шага.
Если переменная скорости по оси не 0: возвращает новую координату с учетом угла , скорости и шага.
Посмотрел еще раз и поня, хуйню написал.
Как в двухмерном динамическом массиве найти максимумы строк?
Нет-нет, ты меня не понял. Я знаю что означает этот код. Но для чего он предназначен? Что такое b?
В идеале у тебя в классе typeof(b) должна быть член-функция animate(int step), которая делает все это говно. и ты просто вызываешь
b.animate(timeStep); // ясный и понятный читателю код, причем b само оперирует своими членами
А то, что у тебя - это открытая реализация, суть говнокод.
для каждой строки {
максимум это минимальное возможное значение
пока не конец строки {
если текущий элемент больше максимума, то максимум это текущий элемент
}
вывести максимум
}
map maximum
b - 2Д объект с координатами, вектором направления и скоростью. Считай, что этот код - внутренности animate
хорошо бы полный код увидеть. Если это внутренности animate, то все норм (я правда так и не понял как это ты так охуенно учитываешь угол просто выполняя деление)
>>я правда так и не понял как это ты так охуенно учитываешь угол просто выполняя деление
Все тригонометрические функции углов - это же ОТНОШЕНИЯ, лалка.
Хуя ты выебнулся, сечешь фишку-то.
так все-таки, нахуя тебе тангенс и арктангенс в данном конкретном случае, ЛАЛКА
http://ideone.com/KpiBCB
for (int x : v) {...}
Есть ли у такой записи преимущества/недостатки по сравнению с обычным for(int i=0; i<v.size(); ++i)?
А по сравнению с итераторами?
По идее, x = v. Алсо, я бы предпочёл писать
>vector<int> v = {1,2,3,5,8,13};
>for(unsigned int n = v.size(), i=0; i < n; ++i) {}
Ну сука ёбаная разметка, сожрала i в квадратных скобках. Пошёл в /d бампать тред о возврате [code].
Твой код трудно читаем.
Вместо запихивания размера вектора в дополнительную переменную, мог бы просто сравнивать сразу с ним. Конпелятор такое оптимизирует.
У меня на выводе из переменной числа такие.
Погуглил, не нашел как переменную засунуть в функцию эту
Как ты ее выводишь то, блять? Код давай или иди на хуй. Как же вы заебали.
Катись к хуям со своей парашей. Английский он в школе не учил, а дуину у мамки выпросил и туда же. Чепуш блять. Бери примеры из IDE и мануалы с оффсайта и разбирайся. И английский учи. Либо копай картошку как все неграмотное было и не выебывайся.
foreach - это сахар для итератора. С учетом того, что итератор у вектора тупо указатель на элемент, то разницы не будет абсолютно никакой.
Смотря как x объявлена. Если ссылкой, то да, не будет, а если просто переменной, то она будет копироваться, и ее изменение не отразится на изменении соответствующего элемента контейнера.
Вообще-то важно, иначе теряется смысл в unsigned. Если там будет тип более емкий, чем то, что ты объявил, то точно так же будет оверфлоу, как и в случае с signed.
Хуйню ты городишь. Достаточно, чтобы количество перевалило за 2^32, это уже превысит вместимость unsigned int.
We're in Student::calcTuition
We're in Student::calcTuition
У меня же получается :
We're in Student::calcTuition
We're in GraduateStudent::calcTuition
Это книга слишком старая? Или есть такие компиляторы понимающие полиморфизм по-своему?
>Это книга слишком старая?
Она не только старая, это вообще параша из параш. Либо дохлого страуса читай, либо прату. Прата предпочтительней для новичка, страус слишком сложен будет.
ДА СУКА БЛЯДЬ ЁБАНЫЕ ЗВЁЗДОЧКИ
У страуса книга с гусями есть для ньюфагов.
А часто встречается массив размером 2^31 (размер unsigned int без учета всех этих -1)? Так что смысла писать unsigned никакого. А если уж выебываться, то до конца.
size_t используется для индексации std::vector (QVector, например, использует int), плюс size_t равен размеру машинного слова, значит компилятор все равно преобразует переменную к этому размеру.
Пишут, что в gcc есть, в msvc тоже. Правда, надо включать какие-то опции. А вообще, с чего бы ей не быть?
Шилд, Прат, Лафоре.выбирай на вкус
И так как сделать по высшему разряду задание типа "в двумерном массиве записать сумму столбцов втакуюто строку а сумму строк в такойто столбец"
Сажи студентодауну, не умеющему по-человечески объяснить условия. Жри свою пыль, сука.
Читать твои высеры в стиле /b/ ? Напиши нормально и не выебывайся. Условия задания, метод ввода данных, метод вывода данных.
Ты недопонял меня что неудивительно. Перечитал сам ахуел. Мне не нужно чтобы за меня кто то решал мои лабы. Мне нужно чтобы кто то с опытом сказал как сделать их максимально качественно.
Так или иначе вот задание.
" Задан двумерный массив вещественных чисел размерностью (M+1)x(N+1). В строку m+1 "
Про методы i/o ничего не сказано. Значит будем делать из файла и клавиатуры.
Копипастить на смарте неочень.
Задан двумерный массив вещественных чисел размерностью (M+1)x(N+1). В строку m+1 записать суммы элементов по столбцам, в столбец n+1 записать суммы элементов по строкам, а в элемент Am+1,n+1 записать сумму всех элементов массива. Результат вывести на экран.
сравни с end()
Непонятно что ты при этом хочешь узнать. Нет единственно верного православного стандарта качества для подобных микропроектов. Просто запиши в нужный столбец сумму строк и в нужную строку сумму столбцов, посчитав ее через циклы for. Потом посчитай сумму всех элементов в последнем строке и столбце и запиши ее в нужный элемент. Можешь даже рандомные числа делать. Пользователь задает из консоли размерности массива, ты генерируешь числа, считаешь нужные столбцы и выводишь все это на экран матрицей.
>>442667
Ребят, я не настолько даун. Сам костяк лабы я естественно сделал. Мне бы узнать чтобы сделать ещё.
Вот пример как сделал простейшу лабу один из хороших студентов
"Напечатать все простые числа, не превосходящие заданное число"
По мимо самой лабы. Был сделан ввод и вывод из файла, экрана, ввод виде эксп., каким то образом предусматривался ввод сумашедших чисел выходящих за приделы int, к всему этому программа занимала около 2мб. Если про сборщик я ещё знаю то про буферезированный вывод я услышал впервые при защите этой лабораторной работы.
Вот это я понимаю выполнение обычной лабы на высшем уровне.
Так-то мне интресно узнать что можно ещё можно влепить туда.
>ввод и вывод из файла
Ввод одного числа из файла? Зачем?
>выходящих за приделы int
Но входящих в unsigned long long?
>программа занимала около 2мб
В оперативной памяти или на диске? Если на диске, то это дохуя. А если в оперативке, то это либо пиздеж, либо просто грамотная настройка компилятора
>ввод виде эксп
Подсчет простых чисел предполагает ввод действительного числа? Зачем?
double value; scanf("%lf",&value);
> Ввод одного числа из файла? Зачем?
Ввода не было из файла. Случайно сказанул.
> Но входящих в unsigned long long?
Какоето ограничение присутствовало, да. Но точную цифру не скажу.
> >программа занимала около 2мб
> В оперативной памяти или на диске? Если на диске, то это дохуя. А если в оперативке, то это либо пиздеж, либо просто грамотная настройка компилятора
В оперативке. При миллионе. Это дал его "алгоритм оптимизации. ". Его сущность я не знаю.
> >ввод виде эксп
> Подсчет простых чисел предполагает ввод действительного числа? Зачем?
> double value; scanf("%lf",&value);
Предполагает ввод любого числа. Он даже scanf не использовал. getch и читал посимвольно. Вот и получается в любом виде предусматривается.
В общем все ясно, он просто какой-то упоротый любитель низкого уровня. Все это не нужно. Тебе с головой хватит стандартного scanf, только референс почитай, он может очень хорошо читать любой ввод.
Ясно. Спаичбо.
А про буфферизированный вывод можешь что-нибудь рассказать? В гугле как-то плохо описано.
FILE предоставляет тебе буферизованый ввод-вывод. Гугли референсы. Есть поддержка стандартных stdin и stdout.
Хмм.
Возможно я не так выразился.
Имелось ввиду вывод данных по мере их обработки. 100эл. нашло 100 показало и так до конца.
А тут-то в чем проблема? И зачем это нужно вообще, кроме дешевых понтов?
>>442778
Конкретно в твоем случае с массивами я вижу это так: ты читаешь размерности массивов из потока ввода, создаешь один массив - для суммы столбцов и одну переменную - для суммы строк. Далее ты читаешь по одному элементу из потока ввода, выводишь его в поток вывода и увеличиваешь переменную и соответствующий элемент массива сумм столбцов на этот элемент. Когда строка кончается ты выводишь сумму этой строки в поток вывода и обнуляешь ее. Когда заканчиваются столбцы, ты выводишь массив с суммами столбцов, параллельно считая его сумму и выводишь ее в самом конце. Таким образом у тебя в памяти хранится только 1 массив размером со строку. Вот такая вот оптимизация получается.
Ну типо если введёшь большое число то обработка естественно займёт некоторое время. Пользователю может показаться что программа зависла. А так он видит постоянно еёв работе и всё отлично.
Ну а проблема в реализации естественно
Ну сначала задание выполнить надо а потом уже готовое вывести. И это типо долго
А выводить 100 значений до завершения это типа можно? Что, блять, за бред? Ты совсем ебанутый какой-то, не пиши сюда больше.
Вывод по мере выполнения и вывод после полного завершения. Разницу чувствуешь ? какой то ты тупенький. всё разжевывать надо
Пошел на хуй, чепуш, он тебе дело говорит. Учись иди, а не на сосачах кукарекай. Макака взрастил поколение дегенератов, блять.
Моя проблема в том, что один параметр уже занят под mutex, а мне надо передать ещё один, содержащий handle другого потока. (Мне нужно вызвать функцию ResumeThread изнутри потока, что бы пробудить другой.)
>>443027
Тогда новая проблема возникает.
Хотя я туплю, наверное.
Так я получаю указатель:
\tDoubleParam D;
\tstruct D pD;
Указатель запихиваю в функцию CreateThread(...,&pD,...)
С ходу visual studio ошибок не обнаруживает, но при сборке выдаёт (в строке с функцией CreatThread):
cannot convert argument 3 from 'DWORD (__stdcall )(DoubleParam)' to 'LPTHREAD_START_ROUTINE'
Третий аргумент - это как раз тот самый &pD.
Точнее третий параметр - это handle самого потока, а в четвёртый как раз пытаюсь запихнуть указатель.
>cannot convert argument 3 from 'DWORD (__stdcall )(DoubleParam)' to 'LPTHREAD_START_ROUTINE'
Ну так ёба, третий параметр это LPTHREAD_START_ROUTINE lpStartAddress, указатель на ThreadProc. О чём тебе и сообщается в тексте ошибки. В MSDN пройди, будь так любезен.
Да, я прочитал эту хуйню. И я прекрасно понимаю текст ошибки. Давай этот шматок кода в ideone или картинкой.
Всё разобрался. Всё из-за того, что в определении потока(DWORD WINAPI Bee(void D) ) вместо void D всякую хуйню писал.
опять * пропали
Не получится. Ты будешь бежать сюда за любым тупейшим вопросом, который за минуту решается при помощи мозга или гугла. Если сильно повезет, то какой-нибудь омежка-долбоеб сделает все за тебя, но вероятнее просто поешь сажи. Знаний так и не прибавится.
Хуйню несёшь. Я же говорил что работу уже сделал. Просто спросил про личные стандарты качества у pr. А ты записал уже в долбаёбы-ниосиляторы. В общем не знаю что с тобой не так и зачем так агрится.
Нет никаких "стандартов качества" в этом плане. Как самому не стыдно, так и делай. Находи баланс между красотой кода и ленью.
Но есть вещи о которых я пока просто напросто не знаю. Как про тот же буф. вывод. А вообще пока хочу задрать эту планку как можно выше. Чтобы потом та самая середина давалась мне легко.
>"хуй"
и
>'хуй'
в каком случае используются одиночные, а в каком двойные кавычки?
Одиночный только для символа. Строчки в двойных
Про буферизованный вывод читай в гугле или книжках. Лучше в гугле. Легче тебе середина не дастся, всегда будет лень. Умение != желание.
Все, разобрался. Нельзя вызывать std::swap внутри move_constructor, ибо он всегда вызывает этот самый конструктор. Код поправил тоже.
Нужно задать квадратную матрицу, чтобы элементы на гл. диагонали были равны 1, ниже 0, выше - сумме индексов.
Как сделать, чтобы индексы считались с 1, а не с 0 без костылей?
http://pastebin.com/fXtTCDb5
Опс, в глаза продолбился, у него всё правильно ( т.н. unifying assignmemnt)
Допустим тебе нужна матрица 5 на 5.
Создаёшь двумерный массив 6 на 6. На элементы с нулевыми индексами внимание не обращаешь.
Если он оконный, то отправь ему сообщения, в т.ч. по DDE.
Еще раз спасибо за помощь. Про тебя я не забыл, анон. Препода напряг, думает. Как будет новая инфа - отпишусь.
Фигура #2.
:3
Распиливаешь фигуру на три прямоугольника. Потом PtInRect для каждого.
уебывай, тупая вниманиеблядь
>блять, ты гений.
>Это то я уже сделала
>Я не знаю, как в if правильно условие написать
>Я перепробовала кучу вариантом
А ты смешная
//If vertex inside polygon
bool IfVertexInsidePolygon(const Vertex& vertex, const Polygon& polygon) {
int i, j, nvert = polygon.getSize();
bool c = false;
for(i = 0, j = nvert - 1; i < nvert; j = i++) {
if (((polygon.GetY() >= vertex.GetY()) != (polygon[j].GetY() >= vertex.GetY()))
&& (vertex.GetX() <= (polygon[j].GetX() - polygon[j].GetX())
* (vertex.GetY() - polygon.GetY())
/ (polygon[j].GetY() - polygon.GetY())
+ polygon.GetX())) {
c = !c;
}
}
return c;
}
Сумме индексов матрицы, индексы в матрицах начинаются не с 0 ведь, а с 1. А в плюсах массив начинается с 0, а значит и индексы равны 0.
А прибавить 2 не судьба?
Билять, а разве эти фигуры не формулами задаются? Там же не строгое соответствие по клеточкам?
Парни, я написал код, собственно, функция, переводящая число в 2-ю систему исчисления, работает коряво. (Задание для ньюфагов, так что массивы и вообще всякие штуки, сложнее 2+2 нельзя юзать)
Верней, все 3-х значные числа она переводит правильно, а, например, число 5000 не переводит - вообще не работает. Четырёхзначные числа вообще переводит неверно или не переводит. Вопрос, почему?
Просчитал всё на бумаге, алгоритм тот же. Пошагово проверил, в первом цикле void print_in_binary(int x) на определенном этапе в значение num записывается число с двойками и четверками (Хотя такого не может быть, лол), может, просто необходимо использовать другие типы переменных? Но, вроде как, int вмещает огромные натуральные числа.
Нет. Схуяли? float в любом исполняемом файле будет 32 бита.
В том, что ты пытаешься записать бинарное представление в одну переменную. Естественно ее переполняет.
Если сокету установлен флаг O_NONBLOCK, будут ли работать connect функция как cancel point?
Пруфы где? ide-шку кидай.
Спасибо огромное.
Но почему когда я пытаюсь сделать это функцией
int NaturalCheck(float N)
{
\tfloat integral = 0.0f;
\tfloat fractional = 0.0f;
\tfloat num = N;
\tfractional = modf(num, &integral);
\tif ((num >= 0) && (fractional == 0.0))
\t{
\t\treturn 1
\t}
\telse
\t{
\t\treturn -1;
\t}
\t
}
принимаемое значение мутирует. Например в 7.006e-045#DEN при вводе 5.01
Нашёл где ошибка но не могу понять её суть.
Ошибка при передачи значения.
Если написать
printf("%d\n", NaturalCheck(5.01));
все будет отлично
но если задать с клавиатуры
printf("%d\n", NaturalCheck(N));
Мутирует.
Причём если объявить
double N=5.01
Мутирует
Так бывает вообще ?
Проверь.
#include <stdio.h>
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));
}
https://ololoepepe.me/board
https://github.com/ololoepepe/ololord
С последнего вброса допилил несколько бесполезных фич (перечислены в новостях). Например, подгрузка постов и постинг нескольких картинок (только в /h/).
желательно на английском
Стандартными средствами реализовать проверку типа реально?
Признавайтесь, хуесосы, кто из вас такой внимательный читатель?
Ну я тип тралльнул нимношк разбань пабратски а?
на самом деле сходи нахуй. Я беларус мне всё можно. У меня айпи динамический ахзохзох
Есть некоторая проверка на правильность ввода из определённого численного диапазона. Если проверка проваливается ввод предлагается заново. Но если при вводе ввести символ scanf уже никак не воспринимается. Происходит зацикливание. Обнуление переменной также не помогает.
Мы тут проконсультировались со штатным телепатом, у тебя ошибка в пятнадцатой строке.
/ 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.
Картинка для привлечения внимания.
бля, разметку прострал
Не пойду. Разбанится само через сутки, заодно и проверю, разбанится ли.
Ну и введи символ "с" например вместо числа.
Будет всё тоже зацикливание без возможности повторного ввода.
Ну при неправильном вводе сам scanf() вернёт 0 но я ведь не об этом.
Мне интересно почему при вводе символа в переменную типа double она уже не доступна для повторного ввода.
Да кто тебе такое сказал? Просто символ остается в потоке. Его надо нормально прочитать оттуда.
Да и не нужено мне символ читать.
Я добиваюсь того чтобы при неправильном вводе выбило ошибку и далее следовало предложение повтора ввода.
Например ожидается ввод чисел с 1 до 3. Если ты введёшь 5 проверка выбьет ошибку и предложит повторить ввод. Но если ты внезапно ввёл символ scanf() вернёт 0 как ошибку но повторный ввод необходимого значения уже невозможен. Как добится этого самого повторного ввода если scanf пропускается ?
stackoverflow подсказывает что вот так
http://ideone.com/EwRgQ4
Ты бы гуглить научился штоле. Надоел уже с банальными вопросами.
Ну на самом деле я додумался предварительно fflush(stdin) сделать, но так всё же лучше. Спасибо.
Привести пример используя компилируемый и интерпретируемый языки.
с минимумом операторов и вызовов функций
Нет, скорее вы меня. лол.
Тебе уже говорили.
Если число больше либо равно нулю и дробная часть равна нулю, то число натуральное.
Воспринимай эту одну строчку как псевдокод на любом языке.
А как проверить в одну строчку на любом языке является ли произвольное число простым?
На любом
На C++ не компилируется. Дело в том, что я с недавнего времени работаю исключительно в Linux. Создаю файл prostoe.txt, копирую туда твою строчку !(any(simple_less_than(x), divides(x))), сохраняю, в окне DOS пишу gcc prostoe.txt и мне дос какие-то ошибки выдает. Не компилируется. gcc - это правильно 100%, мне так знающие люди сказали использовать. Кодировка может неправильная.
Меня предупреждали, что в сообществе С++ мне не будут помогать. Что вы все злые и угрюмые.
Просто в твоем языке либо нету функций any, simple_less_than, и divides, либо они называются по-другому
Придется тебе написать их самому.
Значит теперь мне надо написать не только расчет простого числа, но и эти функции в одну строчку на любом языке? Какой же сложный этот С++. А в этих функциях будут тоже функции? Подскажите сразу в общем случае - как мне написать любую функцию в одну строчку на любом языке, и я уже пойду отсюда.
> Подскажите сразу в общем случае - как мне написать любую функцию в одну строчку на любом языке, и я уже пойду отсюда.
Обычно используют точку с запятой. И тогда можно писать все операторы в одну строчку.
!(any(simple_less_than(x), divides(x))) ; any simple_less_than divides
Все равно в досе одни ошибки.
Вот, пожалуйста.
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
c:\>
Только у меня в линуксе.
Я хочу у себя попробовать в линуксе, но немогу найти диск c: как ты его открыл, демон?
Поставь директх 12
Вы меня тут за идиота держите? Я opengl только через неделю начну изучать. Я знаю, что сейчас мне не нужны дрова на видюху. Я просто английского не знаю, а так бы уже давно скомпилировал.
Ты линукс то поставь в винду сначала. Для windows мне сказали линукс это с сайта mingw.
Там просто библиотеки из дров видЯхи лижат.
Попробуй ещё вишмастер поставить тож врое ничо taq
Я поставил линукс отсюдава https://www.gentoo.org/ , но не в винду, а в отдельный винчестер, как мне теперь быть?
Наверное это потому что у тебя линукс не настроенный, у тебя в нем буквы белые, а в правильном должны быть зеленые.
Проверь настройки линукса.
Так проблема в том, что в языке любых функций нет, или в линуксе? Одни говорят, что программисты только в линуксе работают, другие теперь говорят, что он не настроенный. Я вот чувствовал, что линукс не настроенный на самом деле. Функции, получается, надо убрать из файла?
Какой же сложный этот С++. Как мне настроить линукс? Может подскажешь как мне вообще без линукса это сделать. Только обязательно в одну строчку. Язык - любой.
> Как мне настроить линукс?
Вот хорошая статьи http://habrahabr.ru/hub/linux/
> вообще без линукса это сделать. Только обязательно в одну строчку. Язык - любой.
Можно поставить Wolfram Mathematica там есть http://reference.wolfram.com/language/ref/PrimeQ.html
Но у меня же linux под windows (если быть совсем точным, то я с ним в досе работаю, как видно на скриншоте), разве можно его настраивать как обычный?
И я уже устал ставить всякое. Ты уверен, что в Wolfram Mathematica я смогу написать любую функцию в одну строчку на С++? Там тоже gcc? Как компилировать? Если ты уверен, что там точно так же, как на любом языке можно сделать, то я конечно же поставлю.
> Если ты уверен, что там точно так же, как на любом языке можно сделать, то я конечно же поставлю.
Инфа 100%, слово ананаса, брат жив.
Сначала С++ в совершенстве хочу освоить. Потом все остальные языки (но на следующей неделе opengl начну, поэтому возможно python пропущу). Я же прошу подсказать любую функцию, чтобы на любом языке можно было сделать.
Какой игорь можно написать с консольной графикой (инбифо крузис), да так, что бы это было ну хоть немного свеже и не ебучий морской бой и не блядские крестики нолики или какая то текстовая хуета.
Алсо пикстронгли рилейтед
Проиграл.
>>444515
Напиши консольный шутан. Без псевод 3д. Ну что-то типа контры https://ru.wikipedia.org/wiki/Contra.
Мне что то кажется, что для этого маловато места будет в консоли, не? Да и настолько пиздатое я вряд ли смогу. Но возможно действительно сделать что то подобное. Еще предложения?
Ну так-то консольку ж ресайзить можно. Пущай будет требованием сделать консоль определенного размера, чтобы было играбельно. Да и как контра в плане концепта. Пущай мобы и игрок будут размером в один символ. Собственно на скриншоте у тебя вполне играбельный пример даже с дефолтной консолью.
Вообще еще гоночки можно сделать. Или арканоида.
Ну смотри, тут два способа.
Первый - ты используешь системный терминал. В таком случае очищаешь консоль полностью и рисуешь заново. В таком случае у тебя вывод будет "моргать", т.к дабл буфера тут естественно нет.
Второй - ты создаешь обычное окно и рендеришь в нем текст сам с закосом типа консоль. Так обычно и делают, собственно. В таком случае ты уже будешь работать с обычными фреймами. Тут у тебя и дабл буфер есть, и рисовать можно более пеструю хуйню. В этом случае можно либо просто на окне рисовать (GDI+, в Qt QPainter и еще всякая хуйня, загуглишь), или непосредственно с GPU будешь работать (OGL, DX). Для твоей задачи обычного рисования на окне с головой хватит.
Понял,спасибо за ответы.
В продолжение темы:
Как обнаружить посторонние элементы при вводе в тип double например ?
Поясню: при обычном вводе символов asdf scanf() возвращает 0. Это понятно. Но при вводе сначало числа а потом символов никаких некорректных вводов не обнаруживается 1sdf. Как обнаружить посторонние символы при вводе со scanf() ?
Посмотри еще ncurses - библиотека для работы с консолью. В консоли можно интресные вещи делать, можешь посмотреть sanctuaryRPG. Можешь попробывать текстовую адвенчуру сделать (гугли inteactive fiction) - там лексический парсер, подобная хуйня. Можно написать движок для более простых текстовых квестов, типа как в космических рейнджерах - это достаточно просто, при этом нужны определенные архитектурные решения (формат файла с игрой, возможность прикрутить ASCII графон и т.п.) - на курсовую может потянуть, помоему.
http://ideone.com/l2GkBc
Меня смущает reinterpret_cast и полиморфные объекты. Всегда ли они смогут опознать какую функцию необходимо вызывать, если reinterpret_cast делать для объекта-обертки над полиморфными объектами?
опасно манипулируешь объектами. Но в целом, код валидный. всякие std/boost::function так и делают.
В чем задача? Здесь я вижу извернутую реализацию вызова по интерфейсу.
Да есть либа одна на Си. Пилю высокоуровневую обертку, нужны коллбэки (представлены интерфейсами в обертке). В библиотеке они принимают на вход void* и возвращают его юзеру при вызове коллбэка. В общем-то все так и есть, как в приведенном коде.
P.S: saveAInst и issueInst делюаются в сишной либе, я их для примера так реализовал. Конечно они не используют new, delete и глобальную переменную.
Если честно: не знаю. Мне почему-то кажется, что дать пользователю интерфейс будет лучше. Надо будет подумать.
>Как обнаружить посторонние символы при вводе со scanf() ?
Никак, scanf - это убогое некроговно из 70-х, используй strtod.
да, если они во вложенных скоупах. в одном нет, разумеется.
[code]#include <stdio.h>
/ копирование ввода на вывод; 1-я версия /
main()
{
int с;
с = getchar();
while (с != EOF) {
putchar (c);
с = getchar();
}
}
[/code]
Выполняю его и ничего не происходит, думаю ладно может так и надо, так как в потоке вроде как и нечему копировать-выводить, однако дальше предлагают два упражнения:
Упражнение 1.6. Убедитесь в том, что выражение getchar() != EOF получает значение 0 или 1 .
Упражнение 1.7. Напишите программу, печатающую значение EOF.
А как я напишу, если даже не узнаю, работает код или нет?
K&R C устарел лет 20 назад.
Читай что-нибудь из Beginner секции
http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list
Спасибо, помогло.
>Кроме того, вспомните, что многие шаблоны используют другие шаблоны, и таким образом, компилятор должен выполнять каскадную перекомпиляцию таких шаблонов (и их единиц трансляции), и этот рекурсивный процесс продолжается до тех пор, попока не будут выполнены все каскадные инстанцирования (реакция нормального пропрограммиста в такой ситуации: "Какое счастье, что я не занимаюсь реализацией подподдержки экспорта в компиляторе!").
Мейерс конечно повеселей но Шаттер тоже норм.
Поясните, в чем прикол? И как вообще работает исполненение программы в условии?
1. взяли dst и src
2. присвоили dst = src
3. сравнили dst с null
4. заинкрементили значения
там точно присваивание? может ==?
Точно. Написано, что для копирование строк.
Оператор '=' возвращает rvalue, тоесть выражение 'a = b' равно b. В цикле инкрементируются указатели, значения из src сохраняются в dst, пока не встретися 0 и цикл не прервется. По соглашению 0 находится в конце массивов char представляющих строки.
Можешь на примере показать?
Пытался делать
return(a1,a2,a3,a4)
Но в программе она ссать хотела какую я переменную хочу вывести
Можно массив возвратить, или через параметры (указатели передавать).
Да, ошибся от усталости.
http://ideone.com/Bwf6rF
Вот правильное решение. Что-то я не сразу твой ответ заметил, бывает.
Используйте pair или кортежи например, или вообще в vecror хуярь
stringstream htmls;
htmls << L"<html><body>";
if(msgCount == 0)
{
htmls << L"<p>Сообщений нет.</p>";
}
else
{
for(int i = 0; i < msgCount; i++)
{
htmls << L"<div><h1>" << msgs.title << L"</h1><p>" << msgs.body << L"</p></div>";
}
}
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&) () ()
Уже третий день мозг ебу, что за хрень?
Тоесть если в массиве 5 структур, но окошко ни разу не открывалось - все отрабатывает нормально и окошко закрывается. Добавляю структуру в массив, открываю окно = SEGFAULT. Начальное число структур в массиве не играет абсолютно никакой роли, вылетает только при попытке отработать увеличенный массив относительно того, который обрабатывался в первый раз.
Сорян, не могу в объяснения
Код на pastebin или ideone.
Ставь брекпоинты и ищи конкретную строку (вызов функции) на которой падает. Если сегфолт то ты с памятью проебался, индекс не тот или нулевой указатель разименовываешь. Например, когда ты добавляешь структуру она на самом деле не добавляется (или добавляется на на то место куда надо) и когда ты читаешь последний елемент - там ноль. Это надо тестить, проверь все индексы, все указатели, попытайся уточнить строку или блок кода на котором сегфолт.
Спасибо! Нашел обишку.
Подскажите, как добавлять в уже существующий массив в динамической памяти элементы? Например
int Array1 = [5, 6, 9]
int Array2 = [2, 3]
// Array1 = [5, 6, 9, 2, 3]
Это почти всю прогу надо переписывать =(
> там не int(звездочка), a Message(звездочка). sruct Message = {}
Драйвера на видюху переустановил и не надо будет.
вот и перепиши. пишешь на плюсах - используй возможности плюсов, а не си-стайл.
Если только у тебя там не перфоманс-критикал код. хотя и в этом случае вектор можно использовать
Да бляха, вы издеваетесь? Какого хуя вы пытаетесь что-то сделать, даже не попытавшись почитать книгу или еще чего-нить? Вы думаете, что вас тут языку учить будут? Надеюсь тебе никто не покажет, как это сделать.
Дрова на видяху обновил?
Кратко отражает суть треда.
Можешь описать в двух словах, как оно работает? За что отвечает цпп, за что другие вещи (и какие тоже поясни)?
а ну-ка в пизду эту кодлу петухов тем более что всё равно не нашёл интересующей инфы там
На пальцах поясни, как всё работает. Я в крестах из сетевого только с сокетами вручную работал, не из приятных экспириенс. Я так понял, что всё сетевое взаимодействие берёт на себя CppCMS, т.е. он биндит твой сокет на прослушку сокетов клиентов и всё прочее в этом стиле. Ну и положим, что мой браузер присылает тебе запрос. Хули дальше происходит?
Какой-то javascript, охуеть вообще. Он где работает? На стороне клиента или у тебя? Нихуя не понятно короче.
Да ты пиздец нубас
Проследуй в пхп тренд
Напиши имиджборду
Тогда будешь понимать
И приходи
Вообще, было бы неплохо, чтобы кто-то написал текст о веб-программировании, как что происходит
Но всем в падлу
Джаваскрипт почти всегда исполняется на клиенте
Сервер-сайд язык (в данном случае цпп) генерит странички. Вставляет в шаблоны данные из базы данных, например.
Потом веб-сервер их отдает.
А джаваскрипт все это свистит и пердит и шлёт ajax запросы к серверу для динамической подгрузки условных данных из условной базы данных.
При чем тут илитарность, маня? Не вижу просто смысла помогать тупому школьнику, который еще даже гуглить не научился.
http://ideone.com/ncGvZP
Столкнулся во с такой строчкой:
circle(int x, int y, int r, color fc, fstyle fs):
xCo(x), yCo(y), radius(r), fillcolor(fc), fillstyle(fs)
{ }
не могу никак понять, нахуя нужны все переменные в скобках после circle, и нахуя их присваивать инициализируемым полям.
В учебнике это объяснено? Если да, то ты мудак, раз не понял. Если нет, то мудак автор, и такой учебник нужно скорее выкинуть/удалить.
на клыка тебе спустил, маня. Доебался до мелких букв, охуеть. Попустись, щенок.
Вообще-то я часто тут отвечаю тем, кто задает нормальные вопросы, а не "пасаны у миня лаба как сделоть чтоб пичатала матрицу через сраку маиво препада, он миня так папрасил".
Нормальный вопрос - нормальный ответ. Нехуй превращать тред в сборище умственно отсталых.
Давайте еще начнем спрашивать "как присвоить значение переменной", или "зачем нужна точка с запятой". Тот петушило выше задал вопрос как раз из той серии.
Какой ебан делал пикчу? Что за неграмотное быдло?
>your mother is so fat that recursive calculation of her mass causing to stack overflow
В ингрише допустимо пропускать that, примеры ищи в литературе (не знаю как в деловом языке, но в художественной литературе такое допустимо и встречается).
окончил языковую гимназию, еще не все забыл-кун
>...of her mass causing to...
И понял что это жир толще этой самой мамаши. Так что на хуй послан.
>>446585
>>446588 Какие-то невнятные вскукареки. Что-то не вижу ссылочек на сайтики с грамматикой.
Итаааак, давайте разберем по частям..:
>your mother is so fat,
твоя мать такая жирная зпт.
>the recursive computing her mass causes a stack overflow
рекурсивная функция вычисления её массы случай на переполнение стека
Всё правильно?
Что же корпус бритаешьего язычка?:
to causing: http://bnc.bl.uk/saraWeb.php?qy=to+causing&mysubmit=Go
causing:http://bnc.bl.uk/saraWeb.php?qy=causing&mysubmit=Go
Что-то мне намекает, что щкольник клипавший эту картиночку просто долбоеб. Вропчем, как и все сипипи петушки итт.
>её массы случай на переполнение стека
Ебал ее рука. To cause - это глагол. Переводится как "вызывает", "является причиной".
азаза
>Но как быть с толстой вычислительной функции её массы?
Откуда я знаю, какое говно тебе в голову в твоей гимназии залили. Для меня предложение выглядит нормальным, для нейтивов - тоже:
http://www.google.ru&q=your+mother+is+so+fat+stack+overflow
> герундий настоящего времени.
хуюндий, герундий не выступает в роли определения, а здесь определяется слово function
> неграмотное отсутствие that
ну ты пиздец https://www.google.by/search?q=can+i+omit+that&ie=utf-8&oe=utf-8&gws_rd=cr&ei=Tyr6VJ_BGMmP7AbVr4GAAQ
>>446638
>герундий не выступает в роли определения
Но ведь function здесь не глагол, выступающий в роли определения, что бы computing его характеризовал как причастие.
>гугл
Да я загуглил уже. Странно, я могу читать и понимать, но выражать мысли и удерживать часть прочитанного в памяти - трудновато. Неужели сибляди во всем виноваты?
>Но ведь function выступающий в роли определения (по твоему мнению) - здесь не глагол, что бы computing был как характеристика-причастие к этому глаголу.
Пофиксил, для понятности.
> >Но ведь 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
пиздануться блядь
более неудобного и костыльного языка в жизни не видел
ебал мамку страуструпа, прости господи
Нет, не так.
ОШИБКА В <<ЖОПА_ХУЙ::ГОВНО_ПИЗДА><ПИДОР-КЛАДБИЩЕ([СУКА_ЯЕБУ::АНАЛ_ЖИРАФА](<T><ЕБАНИСЬ_В КОНЕЦ>)*)(ЕБАНЫЙНАХУЙ_ОСЁЛ)<ЖРИ_КАЛ(РАС_РАС_РАС)>
ПИДОРЫ БЛЯДЬ НАЛЕПИЛИ В 15000 СТРОК ХУЙНИ КОТОРАЯ 2+2 СКЛАДЫВАЕТ, НАКОПИРОВАЛИ В ДЕСЯТОК ФАЙЛОВ И ЗАВЯЗАЛИ ДРУГ НА ДРУГА. ТЕПЕРЬ ПОПРАВИТЬ НЕБОЛЬШУЮ ХУЙНЮ - ЭТО ПЕРЕПИСАТЬ ПОЛСИСТЕМЫ
Нет. Исключения - это исключения, неожиданная ситуация.
Хотя бывает, что исключения используют для подъёма из рекурсии. В парсерах, например. Но это очень плохо.
Поддвачну этого, дело говорит. Еще дополню, что исключения лучше кидать только тогда, когда ситуация на самом деле исключительная и от разработчика не зависящая (скажем, файловая система наебнулась). А если ошибка вызвана неверными параметрами или тем что сервер недоступен - тут лучше флаг ошибки (возвращаем кортеж с элементом-флагом или передаем out-parameter в виде ссылки/указателя).
Ничтожество, ты лишь тупая скотина, дрочащая на хуй пойми что.
Когда этот недоязык окончательно канет в лету, ты похватишь нехилый баттхерт, выблядок сучий. Приятного дня.
Перейду на другой без лишнего шума. Отчего тебе так печет? Тебя заставляет кто-то на крестах писать? Да? Меняй работу. Нет? Ну так не пиши на крестах.
Чет парашная у него видать шарага, раз заставляют на каком-то конкретном языке писать. Я в свое время сразу преподу сказал, чтоб он со своими дельфями сам в очко долбился, а я буду писать на том, на чем хочу. При этом, заценив результат, он меня потом всегда другим в пример ставил. Так что все от самого себя зависит.
Появилась мелкая задачка, а именно напилить простейший односторонний 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? Или есть другие варианты?
Что посоветуете, господа?
Посоветую как минимум не писать на чистых крестах, а воспользоваться библиотеками/фреймворками. Еще лучше будет, если ты таки покажешь код (с указанием того места, где у тебя работает не так как надо).
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()
Просто чтобы показать, что описывать функцию можно и вне тела класса, посто объявив её предварительно?
Если да, до для чего стоит двойное двоеточие, и что оно в данном случае обозначает? Вроде оно указывает на метод класса, но ведь и без него можно записать функцию.
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()
Просто чтобы показать, что описывать функцию можно и вне тела класса, посто объявив её предварительно?
Если да, до для чего стоит двойное двоеточие, и что оно в данном случае обозначает? Вроде оно указывает на метод класса, но ведь и без него можно записать функцию.
Еще один уебок с вопросами "зачем нужна точка с запятой". Погугли что-то типа "c++ class declaration and definition".
Если коротко, то предполагается, что ты отделаешь объявление класса от его определения. Когда что-то больше лаба_2 напишешь, начнешь догадываться, зачем это нужно.
> описывать функцию можно и вне тела класса
Принято реализацию всех методов выносить из определения класса, возможно кроме inline. ДвоеточиеОператор разрешения контекста нужно чтобы показать что это метод класса, а не просто функция. Если не понимаешь зачем нужен метод а не функция, удали всю эту хуйню (объявление метода, и сам метод сделай функцией) и попытайся переписать функцию таким образом чтобы она работала с тем же результатом что и метод в коде Лафоре.
Вообще то тебя бы ссаными тряпками нужно прогнать, но добродвач же.
"Двойное двоеточие" - разрешения контекста (вроде так называется) конкретно указывает для какого класса ты пишешь функцию display, в общем указывает из какого пространства имен ты вызываешь/берешь функцию/переменную/итд.
На хуй твоя мать ко мне ходит, чепушило.
Потому что "ЛЕНЬ ГУГЛИТЬ СПРОШУ АНОНА". Да, для программиста, можешь спокойно убирать компилятор все поймет и все равно норм откомпилирует.
А зачем тогда этот тред вообще существует?
Чтобы в (i++) раз обсасывать давно обсосанное, или раз за разом уныло холиварить?
Да
По действию идентичны, в машинном коде сложно сказать как будет, может порядок инструкций будет другой, но количество то же, а может и одинаковый, от компилятора зависит. Ну а в контексте качества кода второй вариант лучше, т.к. легче читается.
>>446841
Уж явно не для вопросов по синтаксису. Вот хотя бы для того что >>446844 спрашивает, это еще более-менее.
ладно, тогда так:
http://ideone.com/q416dH
в какой-то момент программа перестаёт реагировать на агрумент функции sleep()
как значительно ускорить выполнение программы, и что этому мешает?
достаточно подходит под тематику треда?
Нихуя не понял тебя. Какой-то бред сумасшедшего. Как она реагировать должна? Сплясать что ли? Но вообще, Sleep принимает целое число (количество миллисекунд), так что твое .00000005 превращается в 0. https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms686298%28v=vs.85%29.aspx
Так в виде объектов и функций и представляю. Не помню как раньше было, но в какой-то момент поймал себя на том, что думаю функциями и объектами.
Это самая тяжеловесная часть. Мало того, что ты заставляешь систему найти утилиту cls.exe (а может и не .exe, хуй вашу винду знает), так еще и запустить ее. А при запуске она еще и очищает консоль. Хотя последнее хуйня по сравнению с предыдущими действиями.
В чем профит указателей?
чем принципиально отличается
int x, y =10;
x = y
от
int x, y =10, ptr;
ptr = &y;
x = ptr;
Как минимум в том, что стек не бесконечный, поэтому надо объявлять объекты, занимающие много памяти, в куче, то есть при помощи new. А new возвращает указатель, очевидно. Это раз.
Далее, при копировании такого большого объекта (если в функцию его передаешь, например) тратится еще столько же памяти и лишние такты процессора. А при передаче по указателю нихуя не тратится (размером указателя в 4 (вроде бы) байта можно пренебречь).
И еще есть разные ситуации, когда нужны указатели, но мне лень их описывать.
Как минимум наличием самого указателя.
Как максимум ты вроде в X передаёшь адрес У. Он будет равен ~ 25346.
Вот если бы ты написал
int x, y;
y = &x;
то ты бы мог иметь как бы 2 названия одной переменной. присваивать значение 4 иксу через y=4;
Видиш перед У в конце звёзочку? и я не вижу, а она есть.
а это все разве всё не изучается в спецдисциплине "байтоёбство"?
существуют ли инструменты, чтобы посмотреть, на паботу с памятью прямо во времЯ компиляции? Гле научиться всем этим нюансам работы с памятью, ведь нигде прямым текстом не пишется: работа с указателяти на объекты предпочтительнее работы с самими объектами. просто же объясняется про возможность обращения по ссылке и по значению, и всё
Подумай как ты, например, список будешь делать без указателей.
Здравый смысл?
При передаче по значению ты копируешь весь объект и передаешь копию. Если функция проводит какие-то операции над копией, оригинальный объект останется неизменным.
При передаче по ссылке ты работаешь непосредственно с объектом, не создавая копии. Функция может его поменять.
Т.е. никаких нюансов тут нет, что больше подходит под конкретное техзадание - то и используешь.
Для передачи в функцию можно использовать ссылку. Для остальных случаев выделение и очистку памяти разве не лучше ли обарачивать в класс?
Реальное приминение указателей - массивы, деревья и другие структуры, неразыменованный указатель нахуй никому не нужен. Так зачем выделять память для единственного объекта?
Мне нравится С++, но меня вводит в недоумение сишный стиль жонглирования указателями. Осообенно, когда функция выделяет память и возвращает указатель.
Есть же оптимизация возвращаемого значения. Кто потом это гавно будет отлавливать?
Чет у меня аж жир потек из монитора, иди ка ты на хуй.
Причем здесь shared_ptr, еблан?
Разговор о том, что можно обойтись без указателей вне объектов, и без умных в том числе.
Нельзя без них обойтись, толстячок. Тебе уже все про стек и кучу было сказано, но ты же с пятью классами церковно-приходской школы умнее всех комитетов.
> В чем профит указателей?
Чтобы изменять объекты по указателям, например, изнутри функции. По-моему это самое охуенное применение.
>ведь нигде прямым текстом не пишется: работа с указателяти на объекты предпочтительнее работы с самими объектами.
О не эффективности передачи объектов по значению не писал только ленивый.
Известно что malloc возвращает NULL при недостаточном объеме памяти. Но после этого область эта область памяти недоступна так что это использовать врядле удасться.
Нужно дергать системное API. B WinAPI есть
https://msdn.microsoft.com/en-us/library/aa366589(VS.85).aspx
в остальных хуй знает, гугли
>Известно что malloc возвращает NULL при недостаточном объеме памяти
Не обязательно. Под линуксом ты можешь аллоцировать хоть экзабайт на 64-битной системе, и все упадет только когда физическая память закончится.
Почему плохо? Стандартом поведение маллока никак не регламентируется. Undefined behaviour. Каждый дрочит, как хочет.
Что было сказано, ебанько?
>Без указателей нельзя, но мне лень примеры искать.
Если в классе конструктор выделяет память, он выделяет его в куче и хранит только ебанных указатель, стек от этого не пострадает. Затем деструктор сам почистит все.
Зачем, я вас, крестодебилы, спрашиваю, вы выделяете память направо и налево? Нахуя плодить утечки и сегфолты? Есть этому оправдание?
>Зачем, я вас, крестодебилы, спрашиваю, вы выделяете память направо и налево?
Чтобы программа пошустрее работала + экономия памяти. Не использовать же контейнеры для больших объёмов данных.
>Нахуя плодить утечки и сегфолты?
Пиши сразу код в месте, где память должна быть освобождена, только и делов. А ещё умные указатели есть, правда я не знаю, как у них с производительностью/экономией памяти. Хотелось бы ознакомиться с научно-техническими статьями на сей счёт, если кто располагает. Вангую по памяти то же, что и с обычными указателями, а по быстродействию чуть медленнее.
Есть этому оправдание?
Ну конечно есть. Не буду же я без конца петушить std::vector, например, для целочисленных типов. Взял рассчитал, сколько тебе памяти нужно, до какого момента пробегать итерациями, когда освобождать. Лишний раз не освобождаешь / не занимаешь память.
То что ты, неосилятор, плодишь сегфолты, это твои проблемы. Нехуй делать еще одну жаву из крестов с тысячей лишних оберток и абстракций. Кресты не про это. Уебывай и пиши на чем хочешь, раз мозгов не хватает.
Есть одна задача -- плодится много экземпляров класса, и в каждый нужно передать одну и ту же константу, которая генерится в процессе. Как это лучше сделать?
Передавать каждому в конструктор не хочется, это криво и выглядит велосипедом. Делать глобалки, разумеется, тоже не хочется. Стоит сделать статическую инициализацию в конструкторе?
>Чтобы программа пошустрее работала + экономия памяти. Не использовать же контейнеры для больших объёмов данных.
>2015
>Примитивные оптимизации вместо продуманной архитектуры на языке с лучшими оптимизирующиеми компиляторами
>Не использовать же контейнеры для больших объёмов данных.
А для чего они тогда нужны?
Контейнеры - удобная и безопасная обертка для работы с динамическое памятью.
>Пиши сразу код в месте, где память должна быть освобождена, только и делов.
Как найти это место среди неопределенного числа вложенных рекурсивных вызовов и ветвлений?
>Не буду же я без конца петушить std::vector, например, для целочисленных типов.
Тебя никто не заставляет использовать STL, можно написать свой контейнер.
>Взял рассчитал, сколько тебе памяти нужно
>Лишний раз не освобождаешь / не занимаешь память.
А vector-то самопроизвольно выделяет память в случайные моменты времени в случайном количестве.
>до какого момента пробегать итерациями
begin()/end() для кого сделали?
>>447095
Ты что несешь, поехавший? Проверься на нуль терминатор, ты походу гавно наворачиваешь.
В процессе реализации возникла проблема. В классе есть static std::vector< int > i; После класса есть std::vector< int > i; Ругается на multiple definition.
Если не сложно, приведи пример, как это должно выглядеть, чтобы можно было инициализировать статический член в конструторе и забыть.
Фикс: после класса, конечно, std::vector< int > Class::i;
>После класса есть
Зачем он там есть? Если тебе нужно инициализировать его в конструкторе, то инициализируй его в конструкторе, а не объявляй новый.
Аргументы кончились, пошел бред и словесный понос, ясно.
Так, тут возникает другая трудность.
Я решил перенести этот вектор даже не в конструктор, а в функцию, где он используется. Чтобы один раз инициализировать и все. Но беда состоит в том, что функция эта лежит в треде, поэтому туда лезут два треда сразу и происходит сегафолт.
Если я переношу инициализацию в конструктор, то за пределами конструктора вектор не видно.
Как тут стоит поступить?
Делай синхронизацию, или используй атомарные оперцаии, или создавай объекты только в одном конкретном потоке (фабрику навернуть).
Объекты создаются в одном потоке. В каждом из объектов есть тред и функция, с которой этот тред запускается овер дохуя раз в секунду.
Поэтому все-таки хочется вынести инициализацию статики в конструктор, потому что он вызывается для каждого объекта последовательно, а не городить синхронизацию.
Что он от меня хочет? Когда использую в функции get strcpy, то получается какой то ужасный результат. Дело, наверное, в more(), но я не знаю, как ту штуку можно исправить.
на char in и на аргумент in внимания не обращайте, мне просто лень при возвращении к стандартному коду, где у get нет аргументов всё вилкой чистить.
inb4: пошёл нахуй, чепуш, мамку твою ебал
> Объекты создаются в одном потоке
Ну значит сегфолт не из-за того что куда-то лезут два треда. Ты где-то дергаешь нулевой указатель, или там удаляешь объект а потом пытаешся его использовать. Вообще у тебя вся архитектура как-то подозрительно выглядит, в каждом объекте по треду который стартуется дохуя раз это не очень то нормально. Подумай еще раз про общую структуру приложения.
Ты же задание не выполнил. Объявление функции должно быть get (char) а у тебя получилось char StringParser::get(char*)
>>447193
Да нет, с архитектурой вроде все норм -- все эти объекты это обертки для тредов. Там суть вот в чем -- в рабочей функции треда лежит статический вектор. Если он не заполнен, врубается его заполнение.
Так вот -- пока первый забравшийся в функцию тред заполняет, второй уже лезет дальше, где идет работа с этим вектором, и логично получает в итоге хуй.
Я пока придумал только один способ решения -- сделать после заполнения while по существованию вектора. Но это какой-то ебучий костыль.
Может все-таки есть способ объявить вектор статическим членом класса и генерить в конструкторе?
Можешь попробовать синглетон запилить.
Ну, то есть можно еще генерить статику в конструкторе, а потом копировать ее в член класса, по которому будет проверяться, но тогда придется хранить вектор в памяти много раз, а это ненужное засирание памяти.
Не, оно работает не так и очень много, пока программа на крашнется.
В стандартном варианте, где у функции гет нет аргументов, оно работает так:
вводишь 1/2\4,5
А оно выводит:
1
2
4
5
В этом варианте http://pastebin.com/P5ruKhb3
При вводе 4/4 и 5/5 выводит пикрил
Если я правильно понял, тебе нужно тчо-то типа сделать статический метод (метод класса) который будет инициализировать вектор (статический естественно). Раз объекты у тебя создаются в одном потоке, перед их созданием дергаешь метод с инициализацией вектора, потом начинаешь создавать объекты. Если из разных потоков то нужно убедится что метод будет вызван до попыток инстанциировать объекты. Совать его в конструктор не сильно хорошая идея, но можно с блокировками - при самом первом зодании берется мьютекс и после инициализции вектора освобождается. Остальные объекты (если есть) ждут освобождения мьютекса. Но если у тебя создание в одном потоке то этого нихуя не надо, проще вызывать статический метод и потом инстанциировать объекты.
О, большое спасибо! Это как раз то, что мне нужно!
Ты запустил стандартный код, где нужно только в одну строку ввести, которая является аргументом класса.
> Undefined behaviour.
UB там нет. Есть unspecified behavior в том, каким будет порядок и взаимное расположение нескольких выделенных областей памяти. Зато ясно написано, что к объекту можно обращаться до тех пор, пока он явно не будет освобожден. Про UB (а OOM Killer очень даже UB) при обращению к объекту не говорится.
Помогите,няши. Как вставить новые элементы в упорядоченный по убыванию массив не нарушая упорядоченности?
>массив
Никак. Только если создать новый массив, либо realloc. В любом случае придется пройти по массиву и перезаполнить его заново с учетом нового элемента (если новый массив), либо сместить "правую" часть (если realloc). А лучше использовать список.
Вставляешь куда надо, остальные элементы сдвигаешь.
>как мне понять что клиент отключился от сервера
Пингуй времяот времени, сделай так чтобы клиент перед штатным отключением предупреждал сервер.
> после того как пользователь открыл консольное окно сервер смог реконнектнуться
Тоже самое - постоянно пробывать подключиться к клиенту, пока он не ответит
Плюсач, подскажи хороший гайд по быстрому изучению особенностей свежего C++ (Что там сейчас модно, C++14?)
Программировал на плюсах несколько лет назад, сейчас возникла необходимость пособеседоваться на позицию плюсовика, в компании используются по возможности новые фичи компилятора (т.е. C++0x нужен, C++14 - скорее нужен, чем нет)
> (возвращаем кортеж с элементом-флагом или передаем out-parameter в виде ссылки/указателя).
А потом весь код, через строчку в if (error)? Я думал исключения придумали как раз чтобы не было этой хуйни.
Ну да, чтобы через строчку были try catch. Уебанство эти ваши исключения, раздражают куда больше проверок через строчку.
Плохая идея. Данный приём хорош или для очень больших матриц (в обоих измерениях одновременно), или для одномерных массивов практически вне зависимости от размера массива.
У Страуструпа был приёмчик в упражнении, когда он запили struct Month {}; где std::vector<Day> day; в конструкторе имеет 32 дня, чтобы к ним было удобно обращаться.
Ты, блядь, шутишь? Равно как и те, кто тебе отвечают. Тебе нужны тупо вложенные ифы одного уровня вложенности, не более, условия по y вложены в условия по x.
Даже если грамотно всё написать, можно по максимум избежать вложенностей. Вот вроде самым простым способом сделал.
http://ideone.com/VZrXXh
Был макакой, решил пересесть на плюсы. Нужны проекты, которые можно почитать и понять общие концепции. На github нихуя найти не могу, ибо
проекты до безумия сложны, либо проект состоит из одного файла на 2000 строк и может быть получится найти 2-3 комментария. Соответственно реквестирую ссылки на проекты, которые осилить может даже я.
Подробно:
Был макакой на похапе. Понял, что совсем не мое. Пересел на С, потом по совету знакомого взял C++. Изучил все азы, скорее даже сравнил их с похапе и довольно быстро усвоил, но столкнулся с проблемой, что не знаю, как пилить проект.
Концепция проекта есть, но я банально не знаю, как выполнить реализацию:
-Стоит ли пилить отдельный класс.
-А как разместить файлы?
-Где хранить данные?
-А может быть стоит использовать готовые библиотеки?
-Может быть, уже есть готовый паттерн, а я просто ебуся в жопу?
-etc.
Банально, вопросы организационного характера, но никакой информации я найти по этому не могу. Если PHP-код был сравнительно прост и поковырять проект не составляло труда, то, зайдя на какой-нибудь опенсовас проект, я сталкиваюсь с тем, что нихуя не понимаю. Тысячи файлов, назначение которых не ясно, а состав их вызывает небольшой шок, так как в книжках подобным даже и не пахло. А все эти файлы разбросаны по куче каталогов, в которых ожидаешь увидеть одно, а встречаешь совсем другое.
Собственно, надеюсь, что кто-нибудь из анончиков знает какие-нибудь проекты, которые можно проанализировать начинающему крестоносцу. Или, может быть, есть какой-нибудь хороший блоггер, который в подробностях пояснил за проект\составил с нуля рабочую программу не из 1-2 файлов, а действительно хороший демо-проект.
Или, может быть, сняли какой-нибудь screen-cast, где пилят какую-нибудь простецкую мелочь, аки в похапе запилить гостевую книгу.
Ну-с, анон, надеюсь на тебя. Ты часто мне помогал, помоги и сейчас.
Если на PHP я нагуглил простые cms, которые я погонял деббагером и запилил подобие для себя, а позже вовсе пересел на фреймворки, то с С++ подобное в моем исполнение не взлетает.
Был макакой, решил пересесть на плюсы. Нужны проекты, которые можно почитать и понять общие концепции. На github нихуя найти не могу, ибо
проекты до безумия сложны, либо проект состоит из одного файла на 2000 строк и может быть получится найти 2-3 комментария. Соответственно реквестирую ссылки на проекты, которые осилить может даже я.
Подробно:
Был макакой на похапе. Понял, что совсем не мое. Пересел на С, потом по совету знакомого взял C++. Изучил все азы, скорее даже сравнил их с похапе и довольно быстро усвоил, но столкнулся с проблемой, что не знаю, как пилить проект.
Концепция проекта есть, но я банально не знаю, как выполнить реализацию:
-Стоит ли пилить отдельный класс.
-А как разместить файлы?
-Где хранить данные?
-А может быть стоит использовать готовые библиотеки?
-Может быть, уже есть готовый паттерн, а я просто ебуся в жопу?
-etc.
Банально, вопросы организационного характера, но никакой информации я найти по этому не могу. Если PHP-код был сравнительно прост и поковырять проект не составляло труда, то, зайдя на какой-нибудь опенсовас проект, я сталкиваюсь с тем, что нихуя не понимаю. Тысячи файлов, назначение которых не ясно, а состав их вызывает небольшой шок, так как в книжках подобным даже и не пахло. А все эти файлы разбросаны по куче каталогов, в которых ожидаешь увидеть одно, а встречаешь совсем другое.
Собственно, надеюсь, что кто-нибудь из анончиков знает какие-нибудь проекты, которые можно проанализировать начинающему крестоносцу. Или, может быть, есть какой-нибудь хороший блоггер, который в подробностях пояснил за проект\составил с нуля рабочую программу не из 1-2 файлов, а действительно хороший демо-проект.
Или, может быть, сняли какой-нибудь screen-cast, где пилят какую-нибудь простецкую мелочь, аки в похапе запилить гостевую книгу.
Ну-с, анон, надеюсь на тебя. Ты часто мне помогал, помоги и сейчас.
Если на PHP я нагуглил простые cms, которые я погонял деббагером и запилил подобие для себя, а позже вовсе пересел на фреймворки, то с С++ подобное в моем исполнение не взлетает.
Да блядь, эти все книги содержат академические примеры, которые толком никуда нельзя применить. Уже дико заебало читать книжки, пилить очередной считыватель файла. Никакого прогресса, никаких целей - абсолютная стагнация.
У меня есть проект, который меня адски толкает вперед - автоматизированный парник. Это мне действительно интересно и я готов с этим работать, но у меня нет хорошей концепции - банально не знаю, куда засунуть какой кусок кода. Собственно, поэтому хочу почитать другие проекты, понять, как строится структура проекта и его скелет. Ну и всякие другие технические вопросы.
>-Стоит ли пилить отдельный класс.
В зависимости от ситуации. Например, если у тебя в одном классе собралось под сотню методов, то это сигнал к тому, чтобы изменить иерархию и вынести какую-то функциональность в отдельные классы. Опять же, классы, состоящие из одного-двух методов чаще всего - плохая идея. Ищи баланс.
>-А как разместить файлы?
Файлы проекта? Обычно кладут в подпапку src, если есть много файлов, относящихся к какой-то части архитектуры приложения, то их еще в отдельную подпапку, скажем, src/dialog, src/stored, и т.п.
>-Где хранить данные?
В базе данных. Очень советую присмотреться к SQLite, если только у тебя там не супер-пупер хайлоад с миллиардом пользователей.
>-А может быть стоит использовать готовые библиотеки?
Не может, а совершенно точно нужно их использовать. Велосипеды полезны только для обучения.
>-Может быть, уже есть готовый паттерн, а я просто ебуся в жопу?
Вполне возможно, что есть, но не советую тратить время на их зубрежку. Половину паттернов я интуитивно использовал еще когда даже слова такого не слышал. Если ты не конченый долбоеб, то сам будешь использовать паттерны, даже не задумываясь об этом. Хотя, по названиям и областям применения пробежаться стоит, но не заморачиваясь об этом.
Что касается проектов - смотри в сторону Qt (заодно рекомендую его как фреймворк). Документация отличная, код довольно качественный, есть множество примеров небольших приложений. По поводу же чего-то более крупного - только гуглить. Я например ни одной статьи на эту тему припомнить не могу.
Спасибо, вот уже хоть что-то. Сейчас я попытаюсь расписать концепцию своей грядки, лол. Достаточно абстрактно, ибо дохуя технических вопросов все ещё не решено.
Запощу сюда - похуй, все равно опенсовас и ничего принципиально нового нет.
>Что касается проектов - смотри в сторону Qt
Я тут покумекал и пока решил остановиться на веб движке. Понравилась эта концепция очень.
>Я тут покумекал и пока решил остановиться на веб движке.
Каком именно? Это, к слову, сложновато для новичка, не рекомендую. Тот же WebKit в Qt содержит столько же (или даже больше) кода, сколько все остальные его части.
>-Стоит ли пилить отдельный класс.
Ну вообще охуеть. Ты спрашиваешь стоит ли использовать хотя бы один класс в своём небольшом проекте, или в каком вообще случае создавать класс?
Ну вот банальный пример, с которым я столкнулся, когда начал набрасывать проект.
У меня есть основной класс, который координирует работу всего приложения (Titan). Он инициализирует работу, устанавливает связь с контроллером(физическим), проверяет входные данные, ждет команды от пользователя и т.д.
С другой стороны, у меня есть файл, которые содержит базовую конфигурацию проекта. Конфигурация, скорее всего будет в JSON формате и скорее всего я перемещу её в БД, ибо
>2015
>срать в файлы.
Сижу и думаю, запилить функцию, которая читает данные из файла прямо в Titan, или запилить отдельный класс, который вытащит нужные данные и сформирует массив, который будет передан в Titan для анализа?
Склоняюсь ко второму варианту, но если уж пилить класс, то очень гибкий. Типа для работы с JSON формата.
>>447688
Пока без идей. Мне просто QT тащить не очень-то и хочется. Хотя опять же, я пока об этом не задумываюсь. Сейчас главное прототипирование, так как даже физической части проекта нет. Поэтому чисто воды консолеебство.
Ты неправильно понимаешь классы. Класс - это не замена функции. Класс - это "данные с приделанными к ним функциями для выполнения каких-то действий над этими данными", если простым языком. Так что в твоем случае класс должен заменить массив (для большего удобства, чтоб ничего не выковыривать из массива и не парсить внутри Titan).
А вообще, то что ты привел, это типичный God object - антипаттерн. Лучше так не делать. Для связи с контроллером сделай отдельный класс, который будет преобразовывать сигналы от контроллера в события или вызывать забинденные на них методы; обработку команд от пользователя предоставь еще одному классу (лучше в отдельном потоке, чтобы ничего не блочить); проверку входных данных возложи на следующий класс, который одновременно будет являться представлением этих данных в удобном для дальнейшей работы формате. Ну и так далее.
>>447697
>заменить массив
Особенно я не понял вот это.
Возможно, кто-нибудь предложит примерную архитектуру приложения.
Алгоритм работы:
1. Инициализация сервера. Смотрим базовую конфигурацию (Что подключено к системе, какие задачи стоят, где размещена база etc)
2. Открываем сокет с контроллеров(Aruduino) и требует опрос сенсоров, которые подключены к системе.
3. Aruduino опрашивает сенсоры, формирует ответ в JSON формате(?) и отсылает обратно на серверную часть.
4. Принятие решения. Серверная часть сверяет показания сенсоров с планом действий, который заложен пользователем (если температура упала, то включить лампы, etc). Если показания сенсоров находятся в пределах нормы, то система простаивает n-секунд и ожидает мануальной команды от пользователя. Вновь отсылает запрос контроллеру на опрос сенсора. Если показания сенсоров выходят за пределы нормы, то серверная часть отсылает команду к контроллеру (например, включить лампы).
Пока это минимальный функционал, дальше есть ещё тысяча и одна функция, но до них ещё очень далеко.
>Особенно я не понял вот это.
Ну епта, у тебя в массиве же будут, скажем, строки (ибо разные типы туда ты не запихаешь). А тебе их надо будет потом частично в 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(); и т.д.
>ожидает мануальной команды от пользователя
И блокируется, пока пользователь что-то не введет, т.к. в крестах нет таймаута ввода. Потому это и должно быть в отдельном потоке, который в крайнем случае можно и убить.
Яснее стало с этим массивом, но теперь я вообще не понимаю, как запилить программу.
И хули делать? Как-то не пришли ни к какому решению? Неужто в традициях /pr/ меня отправят стаканчики убирать со столов в макдональдсе?
>Ты неправильно понимаешь классы.
>Класс - это "данные с приделанными к ним функциями для выполнения каких-то действий над этими данными"
?
> я вообще не понимаю, как запилить программу.
Пили итертивно, выбери минимум возможностей и пили с архитектурой, какая под руку подвернётся.
> Смотрим базовую конфигурацию
Возьми какую-нибудь библиотеку, не парься тут вообще.
> где размещена база
А база тебе зачем? Для хранения правил?
Кажется, если правила - это что-то что пользователь должен редактировать, то тупо ещё один конфиг, лежащий рядом с твоей программой — решение куда лучшее, чем бд.
Допустим, в качестве минимума реализовываем тупые правила вида "Если X > 10 сделать_действие"
Ок, как их хранить? Зависит от числа правил и ожидаемой скорости работы. Вот точка потенциального расширения (другой способ хранения, другой алгоритм поиска) — самое время выделить сущность, которая принимает на вход состояние твоей системы и возвращает сработавшие правила (или требуемые действия).
Для начала можешь просто хранить как список структур {свойство, знак сравнения, число, команда}
Ожидание ввода пользователя и работа с контроллёром — тоже выглядит как две отдельные сущности.
>И хули делать?
Закрыть сосач и начать пробовать, пытаться. Само собой нихуя не сделается. Тебя же никто не заставляет сюда код выкладывать, что получится, то и ладно. С опытом будет все лучше и лучше получаться, все через это проходят.
Пишет запутавшийся Java-developer про библиотеки C++. Дайте ссылку, пожалуйста, на статью которая пояснит за подключение библиотек dll/lib/a/so, и какая между ними разница в использовании. Не понимаю какова разница, кроме того, что so и dll динамичные, а a и lib - статичные. Ну и что a и lib - unix-like, а dll - windows. Но зачем статичность/динамичность, в чём профиты и разница в подключении к проекту в VS и прочих IDE?
>so и dll динамичные
Их подключит ядро операционной системы, вызов пойдёт через указатель на функцию (дополнительный прыжок по оперативной памяти),
>a и lib - статичные
Их подключит линкер, вызов пойдёт напрямую, параметры будут переданы через стек,
>зачем статичность/динамичность, в чём профиты и разница
В оптимизациях, а если исходники подключать, то функцию в код подставят, см. книжжшки по написанию компиляторов.
IMHO, ещё:
- в библиотеках не надо создавать глобальные переменные,
- в библиотеках не надо создавать новые области памяти без крайней на то необходимости,
- в библиотеках не надо ещё много чего, т.к. библиотеку вызывают и другие программы,
И в таком случае лучше статическая линковка.
> Их подключит ядро операционной системы, вызов пойдёт через указатель на функцию (дополнительный прыжок по оперативной памяти),
Не совсем ядро, а динамический линковщик (во всяком случае, если речь идёт о линуксах), но в общем — сказанному верить.
>>447756
Алсо, чисто организационный момент. Некоторые библиотеки довольно большие и разделяемые между множеством приложений (Qt, например) и линковать статически оную в каждый исполняемый файл системы довольно глупо.
>В базе данных. Очень советую присмотреться к SQLite
С трудом прикрутил эту хуевину. Сейчас проект собирается с тремя варнингами. Почему эта библиотека такая ебливая?
Warning\t1\twarning LNK4075: ignoring '/INCREMENTAL' due to '/LTCG' specification\t
Warning\t2\twarning LNK4075: ignoring '/EDITANDCONTINUE' due to '/OPT:LBR' specification\t
Warning\t3\twarning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:librar
Потому что проблемы спермоклоуна и говностудии. У меня все прекрасно работает.
Первые два, кстати, твоя спермостудия сама вызвала. Не знаю уж, каким образом. Кури https://msdn.microsoft.com/ru-ru/library/3ec25010.aspx
Третий либо ты, либо опять же студия вызывает. https://msdn.microsoft.com/ru-ru/library/6wtdswk0.aspx
Обрати внимание на
>/NODEFAULTLIB:librar
>librar
Это к SQLite явно никак не относится.
Помогите! Как разположить по убыванию отрицательные элементы массива, стоящие за первым минимальным элементом?
https://ideone.com/Qwgnjr
Думаю, что с УБЫВАНИЕМ и ВОЗРАСТАНИЕМ сам разберёшься. С++ референсис тебе в помощь.
Ну и ещё partial_sort тоже посмотри. Но тут он был не нужен.
это решённая задача? А можно решение без вот этой непонятной <algorithm>?
Охуенные стори, бро. Ты бы книжку почитал для ньюфань. Или погуглить попробовал.
Сделать можно это так:
1. Ищешь наименьший элемент. Запоминаешь его позицию. Т.е. arr[n], где n позиция меньшего элемента.
2. Юзаешь алгоритм сортировки, гугли сразу СОРТИРОВКА ПУЗЫРЬКОМ, самая простейшая. Сортируешь массив начиная от arr[n] до arr[arr_size].
И блядь, читай литературу в шапке треда, ибо подобные вопросы далеко ни раз описаны в трудах различных авторов.
Конечно можно, в армии все можно, дорогой. Потерпи чуток, призыв уже скоро.
Отлично. Это охуенно. 500 рублей, с предоплатой 300 рублей и я тебе сделаю. Раз читать, да думать нихуя не умеешь.
Ну тогда за отсос сделаю. Или handjob хотя бы.
>so и dll динамичные
>Их подключит ядро операционной системы, вызов пойдёт через указатель на функцию (дополнительный прыжок по оперативной памяти)
нет
тут 2 варианта
Сууука, я никак не могу сообразить с архитектурой программы.
Вот есть функция int main(). Дальше что? Куда должна идти программа? Почему нет смысла инициализировать в самом начале? Ведь нужно представление о среде иметь и т.д?
Что в классе Titan должно быть? Почему я пилю по антипаттерну?
Разве нельзя оставить Titan, который просто принимает решения по факту? Куда вообще логику приложения положить? В каком классе должна находиться та часть, которая отвечает за принятие решений?
Подскажите хоть какие-нибудь наброски, чтобы не обосраться сразу же, как открыл студию.
Господи. Пиши так, как тебе удобнее.
Ты на классы декомпозируешь программу потому что анон сказал тебе, что так правильно?
Я тебе выше предложил уже — выделяй в классы относительно независимые куски и пиши их. А потом вместе соберёшь.
Пиши как хочешь, потом поймешь почему и где ты мудак. Так все языки учатся. Не еби мозги, просто делай.
Ну, у меня как у новичка такой проблемы нет - я вообще не представляю архитектуру программы изначально. Поэтому я поочерёдно пишу некие куски (модули) и тестирую их на образцах данных.
Кстати, совершенно не разделяю идеи лепить классы куда ни попадя. Если у тебя модуль состоит из трёх функций, одна из которых основная, а две вспомогательные, на кой чёрт вообще классы нужны. Можешь в namespace обернуть.
Я вообще ебал в рот это ООП, правда, задачки у меня в основном (полу-)обучающие и небольшие, может поэтому ещё не успел оценить.
>Вот есть функция int main(). Дальше что? Куда должна идти программа?
Ну это вообще философские вопросы. Инт мэйн - с неё всё начинается и ею всё заканчивается, всё выделение памяти, общение с ОС и т.д. Почему не войд? В идеале должен быть возвращён ноль, чтобы показать, что ошибок при выполнении не было.
Пиздец. Сейчас кодил мелкую математическую задачу. Дико обосрался с векторами, динамическими массивами и прочим говном. Дико стыдно. Забился под шконку вместе с учебником. Совсем охуел, лезу в серьезные вещи, когда основ не понимаю.
> через строчку были try catch.
Неумение писать нормально код - это определено проблема try-catch, lol.
.h - описание интерфейса библиотеки. Нужно в любом случае.
Дальше два стула: статическая линковка с .lib или динамическая с dll.
Ты хоть один абзац про виды линковки прочитал?
Да, я гайды по CMake читал, но на таким вещам почему-то не уделяют внимания, а для меня шок, лол. Т.е. .dll можно смело удалять из папки и всё будет работать?
Ещё нубской вопрос:
http://stackoverflow.com/questions/21593/what-is-the-difference-between-include-filename-and-include-filename
Т.е. надо те хэдеры, которые сам объявляешь инклудить через "filename.h", а стандартные библиотеки и всякие Boost'ы через <filename.h>?
Разница в порядке поиска.
"" начинает с текущей папки, потом проектные, потом системные.
<> в обратном порядке, грубо говоря.
Ты прав.
Cmake - это система сборки, все же. Читай про линковку, статическую и динамическую.
Хорошо.
Библиотеку подключил, добавил .lib в Linker->Inputs в VS2012, добавил нужные пути в проект. Но при старте Start Without Debugging получаю ошибку, что невозможно найти библиотеку. Решается добавлением .dll в папку Realese.
Тут у меня 2 вопроса:
1) Почему .dll, а не .lib (пробовал без .dll - не зарабаотало, а с .dll всё o.k.)
2) Как решить эту проблему, чтобы автоматически копировалась нужная .dll библиотека?
>>448100
Т.е. по сути это синтаксический сахар?
Нет. Никаким другим способом ты порядок поиска не задашь. Сахар это когда вместо длинной конструкции тебе предлагается использовать короткую, но делающую абсолютно то же самое.
Хмм, ты прав.
Но мне кажется, что двойственность при линковке библиотек - уже плохая практика, когда всё зависит от кавычек или скобочек.
Заголовочные файлы никак не относятся к линковке, это отдельный процесс. Заебал, клоун. Нихуя не понимает и уже вылезает со своим мнением.
Это для упрощения жизни компилятору, чтобы он знал где искать, а не ворошил весь диск на каждом инклюде.
Нихуя ты не понял, и тот анон тоже не прав. Вот лежит у тебя в системной папке файл jopa.h, относящийся к какой-то библиотеке. А в своем проекте ты тоже создаешь файл jopa.h, и если бы поиск осуществлялся только в каком-то одном порядке, тебе бы пришлось указывать абсолютный путь (иначе какой-то из файлов вообще никогда нельзя было бы подключить).
Это же и есть говно, когда зависимость в коде от положения файла на диске. Притом порядок ещё нечётко регламентирован. Уж лучше путь относительно проекта указать, чем надеяться, что файл заинклудится правильно.
Че ты несешь вообще? Ты хоть один проект собирал когда-нибудь? (laba_2 не считается.) Какие блять пути относительно проекта, ты понимаешь, что на разных системах все в разных местах лежит? Пиздец просто.
А так да, система заголовочных файлов по сравнению с import в других языках весьма уебищна. Как бы мне кресты ни нравились. но с этим не поспоришь.
>А так да, система заголовочных файлов по сравнению с import в других языках весьма уебищна.
Я к этому и клоню.
В C++17 вроде должен появиться некий аналог import'ов.
Чому код компилится?
Ведь A::foo() и B::foo() имеют разные сигнатуры, а следовательно это разные функции и должно происходить не переопределения, а простая перегрузка и получаться, что A::foo() просто не определена. Объясните мне тупому.
>include <fstream>
>include <iostream>
>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 файлы. Т.е. это твои собственные хэдеры, в которых ты можешь объявлять функции и определять глобальные константы, включать хэдеры стандартных библиотек, писать развёрнутые комментарии по версиям и прочее // (всё равно там мало кода).
По крайней мере, так делаю я. Если кто желает обоссать меня по делу, я буду только рад.
Т.е. с <> только стандартные из стандартной библиотеки, а с "" всё остальное?
Декларация функции/метода это просто обещание компилятору что такая функция существует, встретив его он просто продолжает дальше, а не бросается проверять есть ли действительно у функции определение (на самом деле компилятор плюсов и не может в общем случае такое проверить, например определение функции может быть в другом translation unit). И если нигде дальше метод/функция не используется то все ок. Проверка на существование функции происходит на стадии уже линковки, а попытка линковки происходит только если функция/метод действительно вызывается где-либо.
> .h в конце не пишется, компилятор должен понимать
на самом деле, в stl лежат как раз такие файлы cmath, cstdlib, которые просто инклюдят math.h, stdlib.h.
>А эти файлы должны находиться в той же папке, где находятся и всё .cpp файлы
Не обязательно. Как выше объяснялось, "..." начинает посик с текущей папки, потом поднмиается до корневой папки проекта, потом переменные для инклудов, потом системные пути. Так что твой файлы могут лежать где угодно.
Ну по идее, да. Только вот лично мне непонятно со сторонними библиотеками типа Буста и т.д.
По логике, надо использовать "" и относительный путь:
>#include "../../govno/mocha.h"
Но лучше призвать людей, использующих библиотеки.
пути к библиотекам обычно указывают в настройках проекта, а в коде используют просто <boost/non_copyable.h>
<poco/huy.h>
<sgstd/vector.hpp>
>на самом деле, в stl лежат как раз такие файлы cmath, cstdlib, которые просто инклюдят math.h, stdlib.h.
Мне казалось, там есть тонкости. Вроде того, что они не инклюдят файл целиком, а лишь отдельные сущности, потому что какие-то сущности могут быть чутка изменены. Кто-то может прояснить.
>Не обязательно. Как выше объяснялось, "..." начинает посик с текущей папки, потом поднмиается до корневой папки проекта, потом переменные для инклудов, потом системные пути. Так что твой файлы могут лежать где угодно.
Подразумевается, что свои-то хэдеры ты будешь держать в той же папке. Ну и да, в Вижуал студии ни черта не ищется по директориям выше, просто говорит "нет файла".
http://lpaste.net/124370
8/16 строчки - #include <math.h>
дальше импорт функций в пространство имен std
Что >>448159 и требовалось доказать -- плюсовые хэдеры могут быть расширены (от их использования в любом случае не проиграешь). Так что я предлагаю при возможности инклюдить >>448150 хэдеры исключительно из стандартной библиотеки (особенно сишные), и при вызове сишных функций использовать std:: дабы снять все вопросы по возможному двоякому трактованию пространства имён.
Мало ли кто вдруг по пьяни маллок переопределит для какого-то модуля.
---------------------------
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 (собственно из-за этого и сделал даунгрэйд на втором)
>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v110\BuildCustomizations\CUDA 6.5.props
проверяй пути
>>448149
A::foo() и B::foo() - разные функции. Следовательно A::foo() не определена и В является абстрактным классом. Все потомки абстрактных классов, в которых не определены чисто виртуальные функции так же являются абстрактными.
Код компилируется потому что он корректен. А вот создать объекты типов А или В не получится.
Абстрактность никак не влияет на то что программа компилируется. Меняется только то где выскочит ошибка. Если метод обявлен как pure virtual - то при попытке инстанциировать класс, если будет объявлен как простой метод без реализации то будет ошибка линковщика, если метод используется. Если нет то все скомпилируется, даже если клас инстанциируется (без последующих вызовов отсутсвующего метода).
изменил длину, не помогло
Дебаггеры, блять, для кого придумали? Чему равно i в момент краша? Какой массив a в момент краша? Хули ты принес кусок нихуя в тред? У нас экстрасенсов не водится.
Нет, 500. Тонет же.
как преобразовать данный код (из сдиез)
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");
__asm ("push 0");
__asm ("push 0");
__asm ("push 0");
__asm ("push ID");
__asm ("call 0x00773400");
__asm ("add %esp, 16");
__asm ("retn");
как преобразовать данный код (из сдиез)
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");
__asm ("push 0");
__asm ("push 0");
__asm ("push 0");
__asm ("push ID");
__asm ("call 0x00773400");
__asm ("add %esp, 16");
__asm ("retn");
>>448310
Я тут пробовался на работу. Просили мультитрединг под нагрузкой, C++11 и всякое такое -- заданием была факторизация большого объема чисел в многопоточном режиме. Написал штуку: http://www.fayloobmennik.net/4681759
Меня не взяли.
Собственно, интересно услышать твое мнение, почему.
Код не читал и не запускал, но 10000 как максимальное возможное число выглядит очень подозрительно. Проверь хотя бы как оно будет работать на числах до 2^64, с меньшими ограничениями в задаче вообще смысла нет.
Это было прописано в условии задачи. Сама по себе программа не ломается для любых чисел, которые влезают в uint64_t, разве что можно будет слегка ускорить алгоритм факторизации.
В заданных условиях она кушает 10 миллионов чисел за время от полсекунды до пяти, что вроде бы топовый результат.
Ну тогда разве что им стиль/архитектура/названия переменных не понравились, хуй знает.
Насчет архитектуры -- хз. Вроде бы стандартное решение с кольцевым буфером и тредами в обертках.
Я тоже хуй знает. Поэтому надеюсь, что придет какой-нибудь эпик сноб и сможет мне разложить по полочкам, где я не няша.
Переопределение операторов << и >> лютейшая параша.
У std::vector есть конструктор, принимающий в себя кол-во элементов (а ты делаешь resize, никанон)
Именование переменных — параша из 90х. camelCase сейчас стандарт. Префиксные и постфиксные подчеркивания — ад для моего утонченного вкуса.
Инкапсуляция потоков — спорно. Можно было вынести.
Три newline между функциями. Ну зачем?
for разбит на 3 строчки. Опять же зачем?
Комментарии на русском. Сразу минус. Еще бы транслитом переменные называл.
Куча инклудов в хэдере, где они нахуй не сдались. Увеличит время рекомпиляции при некоторых кондициях.
(мне надоело, жди еще кого-нибудь)
В чем параша с переопределением?
Насчет конструктора принял.
Инкапсуляция ради соблюдения ООП -- не хотелось делать один godlike-объект.
Насчет инклюдов -- не понял, поясни, в чем беда?
Относительно стиля же, имхо, здесь каждый работает так, как ему удобно, да и переучить человека в общем никаких проблем не вызывает, так что вряд ли это было важным критерием оценки. Думаешь, все-таки было?
Переменные я пишу через подчеркивания, потому что мне нравится видеть разницу: кэмел-кейс -- функции, маленькие через подчеркивания -- переменные. Ньюлайны для логического разбиения функций по группам, мне так удобнее искать. Фор -- опять же, для удобства. Здесь форы мелкие, а бывает, что условия довольно большие в записи, и так проще понять, что где. Насчет комментариев -- имхо, проблемы глупых вендоблядков, нормальные посоны держат свои файлы в utf8.
Попугай-кун, вся суть if(error) это if(error) через строчку, а try-catch даёт возможность не засирать этим говном весь код.
>нормальные посоны держат свои файлы в utf8
Речь не об этом, а о том, что комментарии на любом языке кроме английского - зашквар.
>Переменные я пишу через подчеркивания
Опять же речь немного не об этом, а о хуйне вида _var или var_. Так уже много лет НИПРИНЯТО.
Подскажи, пожалуйста, актуальна ли няшная и кресты?
Сейчас получается так, что в основном, я хуярю интерфейсы к железкам, да системный код. Целиком и полностью кроссплатформу.
На крестах, в основном, пишу уже врапперы, к-е отдаю ДРУГИМ ДЕВЕЛОПЕРАМ.
Из-за чего, по сути, опыта в крестах я набираюсь крайне мало. Хотя и претензий к моим наработкам не возникает, даже наоборот, но есть ли путь дальше?
Как кодить на крестах и начать жить? Ибо меня сразу пихают в низкий уровень, как только рассказываю о своём опыте. Хотя на собеседованиях активно дрочили именно по плюсам. И отвечал всё изи. Обычно я отказываюсь от вакансий, нежели мне отказывают.
Ну, в принципе, я об этом знаю. Но имхо это тупой снобизм, если фирма не работает с иностранными компаниями в области написания кода.
А почему, кстати? Это неплохо позволяет понимать, является ли переменная членом класса, аргументом или локальной.
Это не снобизм, на английском вся техническая терминология обычна куда более очевидна, однозначна и общепринята. Кроме того, годный программист владеет английским на достаточном уровне, чтобы комментировать на нем было как минимум так же удобно - следовательно собеседун может расценить комментарии на русском как признак плоховатого знания английского.
>Насчет инклюдов -- не понял, поясни, в чем беда?
Ну вот скажем Factorizer.h
Зачем в .h-нике iostream и cmath? они что, используются непосредственно в этом заголовочнике? Нет. Тогда зачем пользователю знать о том, что они где-то вообще используются? А если они изменятся, рекомпиляция может занять чуть больше времени. А если такие ошибки делать постоянно, то incremental build будет работать часами. Поэтому нормальные люди подключают только необходимые заголовки в каждом translation unit.
А я считаю, что catch - такое же засирание кода. Иди на хуй. Это нарушает всю логику, потому что никакой исключительной ситуации нет.
Безграмотная пидораха оправдывается, найс.
Этот прав. В нормально написанном коде исключения не нужны вообще. Если для работы со средой они еще имеют право применяться, то исключения для проверки собственных выражений это "ну хуй знает, может сработает, может нет". Программист должен понимать, что делает его код.
Теперь понял. Я чистил, в принципе, от ненужных хедеров, но похоже не слишком тщательно.
Так вот они и проверили.
Как вы зеабели, дегенераты. Сказано же - перекат.
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
Бампаем твоей мамаши ротик.
string str;
//записываем слово из файла, пока не встретим пробел
getline(file, str, ' ');
//первую букву слова переводим в нижний регистр
string::iterator i = str.begin();
tolower(звездочка i);
//вырезаем из слова все знаки препинания
for(; i != str.end(); ++i)
{
\tif(!isalnum(звездочка i) && звездочка i != '\n' && звездочка i != '-')
\t\t\tstr.erase(i);
}
Проблемы две. При переводе первой буквы к нижнему регистру реально нифига не происходит. Вторая - стопорит на переборе и удалении элементов в цикле. Читал, что с erase кое-где ломаются итераторы, и надо ставить i--, но это тоже не помогает. Нид хелп. BOOST и самопальные функции не предлагать, желательно также обойтись без <algorithm>. В общем что я делаю не так?
Пользуйся pastebin, блядь.
http://pastebin.com/GUJmrqZH - решение с удалением я не проверял, но вообще как-то так.
И да, там с <algorithm>. Если без него, то можно заменить distance(str.begin(), i) на i - str.begin().
#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 ); не зависит), только начал учить программирование
Реквестирую объяснение, как работает функция rotate.
Задание: Передвинуть элементы массива a размерности n таким образом, чтобы элемент с индексом new_0 стал начальным, и вернуть индекс, который получил элемент, бывший начальным.
Пусть массив a[5] = {1,2,3,4,5}
new_ 0 = 2, a[new_0] =3
Как получить массив a = {3,4,5,1,2}?
1) Как поменять элементы массива в случайном порядке?
2) Что такое невозрастающая пирамида и как проверить, не является ли массив ею?
3) Как проверить, является ли массив b перестановкой массива a?
олдфаги давно перекатились в новый тред, некрофил.
>(num >= 0) && (fractional == 0.0))
>сравнивать число с плавающей точкой прямым сравнением
Поссал на дебила.
--std=c++14
P.S.
Сильно хуями не обкладывайте мне 18 лет, пытаюсь не быть ебаным биомусором.
Ну почему компилятор пишет, что array - это char * и выкидывает исключение?
Если я правильно понял, это происходит из-за того, что я сравниваю символ с разыменованным указателемa == *(array+i) - можно так записать на элемент символьного массива. А как тут этого избежать-то? Как жить, что делать?
Перекат:
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
Волею судеб надо разобратьсь с куском говна на крестах, запись в файл, конкретно.
В куске кода отвечающего за запись документа в файл, вызывается [int _write] функция из файла write.c 10й вижлы.
Пробежался по ней дебагом, она доходит до винапишной функции
BOOL WINAPI WriteFile(
_In_ HANDLE hFile,
_In_ LPCVOID lpBuffer,
_In_ DWORD nNumberOfBytesToWrite,
_Out_opt_ LPDWORD lpNumberOfBytesWritten,
_Inout_opt_ LPOVERLAPPED lpOverlapped
);
Дальше, видимо, эта функция кидает error. Где мне глянуть код ошибки?
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
https://2ch.hk/pr/res/448310.html
Простите великодушно, но я малость не въезжаю:
1) Почему gcc запускается без параметров?
2) Какое отношение эта строчка кода имеет к С++?
Спасибо.
Божественный язык. Единственный язык после Святого Ассемблера, которые честен и нежен с тобой как первоклассница и не пытается тебя наебать через строчку.
Это копия, сохраненная 28 марта 2015 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.