Я знаю, что тут все очень умные люди и мой вопрос вообще аля высер, но я все равно спрошу. Как сделать чтобы в case 1 выполнялось условие для D. То есть мне нужно сделать так чтобы при вводе месяца - 1 и дня - 32 или 0 он выдавал мол неправильная дата. Но он проверяет только одно условие с M, так как в свиче стоит M, но если допустис в switch поставить D, чтобы он проверял и второе условие, то при вводе день - 2 он выдает месяц "февраль". Знаю что можно сделать иначе, но мне нужно именно так, иначе препод выебет мне мозги.
Я чего-то не понимаю, нахера ты иф точкой с запятой закрываешь? У тебя эти условия вообще эффекта не имеют, не? И разве логическое и/или имеют приоритет ниже = <>, что ты скобками сравнение не выделяешь?
Не понимаю, у тебя в свитче расписаны варианты для разных значений M, зачем ты пишешь case 1:, и потом какие-то условия туда пихаешь? Почитай хорошо как свитч работает.
>>196179613 (OP)>так чтобы при вводе месяца - 1 и дня - 32 или 0 он выдавал мол неправильная датаif(M == 1 && D<=0 && D >= 31) cout<<"неправильная дата";Ну и тебе нужно это прописать сразу после ввода и все месяца прописать. В идеале зациклить ввод пока пользователь не введет корректные данные
>>196179613 (OP)Ты делаешь switch по месяцам, внутри каждого кейса с соответствующим номером месяца, проверяй с помощью if валидность дня для этого месяца, в зависимости от результата if выводи сообщение. синтаксис if: if(<1>) {<2>}где <1> это твоё условие, а <2> это код, который должен выполниться в случае если условие истинно
>>196179613 (OP)Ты понимаешь, что в кейсе у тебя M = 1? Зачем ты проверяешь что-то, если там у тебя всегда 1?
>>196179613 (OP)Точка с запятой завершает оператор if. Ни один if у тебя на пикче ничего не делает. Также вот это условие выглядит ошибочным: M<=31
>>196180181Бля я неправильно написал, извиняюсь. Например, я ввожу месяц 1 - это январь ( в январе допустим от 1 до 31 дней) после того как я ввел месяц, я ввожу день, допустим 32 и тут он мне должен написать что мол неправильная дата так как 32 дней нету в данном диапазоне. И кста "неправильная" дата я делаю через default.
>>196179613 (OP)Суть свича в следующемЕсли M:=1 то=2 то=3 тоЭто типа много ифов. Судя по тому, что ты написал ыт этого не понимаешь. Пойми и перепиши. А потом покажи.
>>1961797811) Case switch уже заменяет пачку ifов. Нахуя ты внутри ещё раз ифами всё покрываешь.2) Если ни в один кейс не попадаешь, то выдай дефолтное сообщение что неправильный месяц / день.3) Называй переменные нормально, сука! НАЗЫВАЙ ЗНАЧИМЫМИ ИМЕНАМИ БЛЯДЬ! Сам потом каждый раз будешь думать щито такое d.4) Почему ты не проверяешь месяц сразу после ввода? Сначала даешь ввести оба, потом долго и нудно проверяешь все данные сразу. Проверяй сразу после ввода и предлагай ввести ещё раз. While (M>13 && M<0){предлагаем ввести опять}. И то хуита может выйти.Впрочем, вероятно я тоже где-то наебался, поправьте меня если что.>>196179874А ведь он ещё небось бюджетное место чьё-то занимает.
>>196179613 (OP)const char^ month_names[12] = {"Январь", "Февраль", ...}int month;std::cin >> month;std::cout << minth_names[month-1] << std::endl;
>>196179613 (OP)Switch (m){ Case 1: If(d<=0 && d=>"кол-во дней в месяце") Printf("все хуйня, давай по новой);Else printf("январь);Break;И так для каждого месяца, в дефолте выводишь "все хуйня" У тебя свитч это уже набор ифов, тебе не нужно проверять в каждом кейсе М, учитывая что ты юзаешь брейк и не проваливаешься в следующий. Учи теорию
>>196179613 (OP)Обосрался жиденько. Нахуя ты внутри кейса делаешь дополнительные ненужные чеки месяца, додя? У тебя свитч по М, значит М будет равно кейсу.Это еще не говоря о том, что проще сделать статическую мапу вида {1:"Январь", 2:"Февраль", ...} и тупо брать название месяца оттуда, в плюсах это вроде Vector.
>>196181040> статическую мапу вида {1:"Январь", 2:"Февраль", ...} и тупо брать название месяца оттуда, в плюсах это вроде Vector.
>>196179613 (OP)Какой же ты онанист, блядь.Сделай вектор пар месяц-количество дней и ебни пару проверок и один вывод.
>>196179613 (OP)Ну а собственно что тебя остановило?case 1: {if(D >=1 && M <= 31)cout << "Январь" << endl;elsecout << "мол неправильная дата";
>>196179613 (OP)Вас пидоры-учителя заставляют писать using namespace? Это зашквар вообще-то, надо пропистывать явно std::cout, std::endl.
Нахуя ты кучу раз проверяешь диапазон 1-12?Проверь это один раз перед свитчами и посылай вводить заново, если не в диапазоне.А в свитч кейз тебе уже объяснили что надо писать
>>196182697Это окей. Но как сделать чтобы в каждом месяце он проверял чтобы не превышал какое-то кол-во дней. Допустим я ввожу месяц февраль и если я ввожу день 29 то он должен выдавать "неправильная дата" и так для каждого месяца
>>196183204ДелаешString[] mesyaci = new String[]{"Январь", "Февраль"};int[] maksimalnieDni = new int[]{31, 29};int vvedenoeChislo;cin >> vvedenoeChislo;String mecyac = mesyaci[vvedenoeChislo-1];int maxDney = maksimalnieDni[vvedenoeChislo-1]Ну ты понел да? Сори за жава синтаксис.
>>196183557Что такое string? Никогда не юзал такое и не видел. Просто препод ебанат доебется до любой хуйни. Скажет мол я не сам сделал
>>196183770Это из жавы, строковый тип. В плюсах это string с маленькой буквы из std::string, но для целей твоей лабы это все нахуй не нужно, можно использовать просто char*
>>196184030Switch - это просто синтаксический сахар для избавления от кучи if else. Функционально он делает почти ту же хуйню.
>>196184182Даны два целых числа: D (день) и M (месяц), определяющие правильную дату не високосного года. Вывести значение D и M для даты, предшествующей указанной.
>>196184296> Даны два целых числа: D (день) и M (месяц), определяющие правильную дату не високосного года. Вывести значение D и M для даты, предшествующей указанной.Ну ананасик, ты не пробовал просто погуглить для начала?http://www.cyberforum.ru/cpp-beginners/thread580907.html
>>196184296Формально тебе не нужно тут проверять правильность D и M. Но если хочешь то конечно можешь.Думаю тут подразумевается что то вроде:switch(M){case 1: //janif(D = 1)cout << "dec 31"elsecout << D-1}
>>196179613 (OP)значения натуральные числаелсе принт неправильная датаЗачем, если можно как-то заблокировать?Я не понимаю что тебе надо. Не похуй разве не?
>>196179613 (OP)>if D>=1 && M<=31Переменную поменяй. Нахуя ты сравниваешь дни и месяцы (которых у тебя какого-то хуя 31)?
>>196179613 (OP)На всякий случай, ну мало ли ты не знаешь.if(cond);do_something_if_cond();означаетif(cond) {};do_something_always();
>>196184266>Switch - это просто синтаксический сахар для избавления от кучи if elseХуйца сосни. Куча if'ов будет проверяться по очереди, пока не встретится совпавшее условие, а switch сразу на нужный case прыгает.
>>196184266Сомневаюсь, иначе бы не было такой хуйни, что ты не можешь там переменные юзать. Скорее всего там через jmp как-то делается на примитивном уровне.
>>196184266Да, погуглил, тот анон прав, ты обосрался, там создаётся таблица кейсов и типа сразу прыгается в table[case], поэтому и ограничения дикие на то, что может быть кейсом в отличие от ифа, т.к. это индекс массива по сути.
>>196187578In my experience (limited to single threaded code though), modern C++ compilers (especially MSVC which does a better job than GCC in general) optimize really well. It's interesting to compare the assembly generated for the same operations in VC6 and VC2008/2010.In line with what was mentioned below, VC6 used a series of lea to seek (a*x+b)th byte in a structure whereas VC2010 just uses a single multiply.And something I was surprised by, VC6 always used fnstsw ax; test ax, 40h; jz $+16; to compare floating point values. VC2010 uses jp instead, I'd presume for a good reason as well.Anecdote: One time and one time only I witnessed GCC write more "clever" code than MSVC, though I haven't benchmarked this: switch(val) { case 1: case 2: case 6: case 15: return foo; default: return bar; }Both compilers returned > 15 normally, but optimized differently: MSVC compiled this into a normal two-step jumptable mov eax, table1[dl] // assuming dl contains val, table1 contains either 1 for bar or 0 for foo jmp table2[al] // contains addresses of two branchesGCC did the equivalent of this: return ((1 << val) & ((1 << 1) | (1 << 2) | (1 << 6) | (1 << 15))) ? foo : bar ;
>>196179613 (OP)Я за такой код заставил бы писать курсовую по этой теме на 30 листов и поставил бы затем 3. Потому что явно человек для корочки учится и ему похуя что там стоит за предмет у него.
>>196187408Будто table[n] ощутимо быстрее, чем if (x == n), ага.>>196187494Жава программы работают в жава машине, определение необходимого количества памяти для которой выделяется по хитровыебанному алгоритму. Тк недостаток памяти - это гораздо хуевее, чем избыток, то получаются подобные ситуации.
>>196187745>Будто table[n] ощутимо быстрее, чем if (x == n), ага.Пфф, ясный хуй. Тупо jmp ^(table + n) или куча cmp jmp и тд.
>>196187745>Будто table[n] ощутимо быстрее, чем if (x == n), ага.Да, jmp table[n] быстрее, чем for (i=0; i<x; i++) if (i == n) {...}
>>196187494Он обращается к Locale, наверняка эта ебола грузит всякие языковые-культурные файлы, ну знаешь там, описания как записывать большие числа в Киргизском.
>>196187821Вовсе не факт. Если таблица смещений вылетит из кэша, а то и в своп, можно знатно пососать.
>>196187930Слушай, ну обратиться по индексу за O(1) или перебирать за O(n) есть же разница, ну ты совсем не шаришь что ли.
>>196188097Это потому, что там значения не по порядку шли.Вот тут нормально все сделано - https://godbolt.org/z/0EtC8Umov eax, valueadd eax, -2cmp eax, 3ja слишком_многоjmp qword ptr [8*rax + оффсет]
>>196187939Интересный у тебя массив указателей const char*. Не подскажешь, где именно в памяти находится ячейка с адресом "nov"?
>>196179613 (OP)Наверно уже ответили, а я все равно тупой, поэтому сам спрошу.Разве case это не выбор, а у тебя условия при чем в каждом 1<< M <<12. Хуйня какая-то, но тебе наверно уже сказали что ты хуйню написал. В смысли рили ты чо за парашу написал?Как я вижу с учетом что умственно отсталый: case(m) {if {1<< m << 12} }}а нахуй потом проверять m уже внутри case если он у тебя как параметр?
>>196188399В джаве целые числа от -128 до +127 работают быстрее остальных, потому что закешированы соответстующие Integer. Можно еще через рефлексию поменять, и во всей программе 2 превратить в 99 например.
>>196188471>Почему должен быть промах?Потому что в этом суть jmp. Стреляешь по воробьям, попал - ты король, не попал - пососал
>>196188527Так не, в ifах тоже же jmp, я думал типа обращение к таблице джампов, оно может быть в кеше или нет, а если ты про сам джмп тогда не понимаю, там тоже ведь джп.
>>196179613 (OP)Не знаю я плюсы, но тебе нужен массив месяцев и максимального кличества дней в этом месяце, а ты мутишь какую-то дичь. Смотришь больше или меньше введенное число относительно длины массива. Потом по индексу берешь месяц
>>196188527Криво написал, ты говоришь, вот в свиче если не повезёт мы проебём 100 мс, ок, но если дело в джампах, то и через обычные иф елсы мы тоже потенциально их проебём.
>>196179613 (OP)Добавь в If для D и ничего больше не надо:? D > 31 && D<=0 : << cout "Такого дня в месяце не существует"
Не устаю проигрывать с подобных тредов.>ДВОЩ ПОМОГИ НАПИСАТЬ ЛАБА 2-3 ПРО МЕСЯЦЫспустя 60 постов>SWITCH БУДЕТ БЫСТРЕЕ ИЗ-ЗА JUMP TABLE, ТАМ О(1) БЛЯ>ПРОМАХИ КЕША ЕБА, А ЕЩЕ СМОТРИ, ЧТО В АССЕМБЛЕРНОМ КОДЕ ТА ЖЕ ХУЙНЯ>ЧИСЛА ПО ПОРЯДКУ, ТЫ НЕ УЧЕЛ КЕШИРОВАНИЕ ЧИСЕЛ УЕБА>ПОЧЕМУ ЖАВА ЖРЕТ МЭМОРИ
>>196188686Да при чем тут это, const char months[] - это массив указателей, тобишь months будет указателем на первый указатель в массиве. Хотел бы сделать просто массив написал бы const char months[] или const char months
>>196189104Ну и что? "abcd" это const char[5], массив таких будет как тот анон написал, типа ты предлагаешь std::string юзать? Но зачем?
>>196189104Ой, бля, молчи уже лучше. Причем здесь потоки? Массивы константных си-строк - это одно и то же и в нормальном си и в плюсах.
>>196189220Так ты прикинь, твой вариант не подойдёт, им препод сказал через свич делать лол, я хуею с такого обучения.
>>196189299Ну, можно и на свитчах сделать. Они же не продакшен пилят, а языковые конструкции осваивают. Для того на свитчах и задал, чтобы школоло поигрался с ними и понял, как в реальном коде это потом использовать можно.
>>196189299А что не так с обучением? Судя по оп посту ОП хуевенько понимает суть свитча и как раз для этого и нужна лаба. Это же не реальная задача, не codegold и не пэт проект. Задача - тупо разобраться как работает свитч
>>196189509Ну по индусски пишешь, гораздо логичнее через массив сделать, ты такой делаешь, приносишь а тебе в ответ неет, надо по индусски. На свичи можно сотни нормальных задач придумать.
>>196189589Например сделать менюшку с выбором ответов и чтобы ты нажимал клавишу и тебе что-то делалось там.
>>196189577Если ты уже на первом курсе охуенно разбираешься и понимаешь где индусский код, а где - не индусский, то тебе можно сразу медальку давать.
>>196189721Ну бля, ты вот подъёбываешь меня, но правда это же хуита какая-то, вот пример задачки с менюшкой чем она хуже в качестве обучения языково конструкции? Ничем.
>>196189800А так уже считай обработчик событий получится, всяко пизже календарей, студент сделает и такой бля я крут.
>>196179613 (OP)когда вижу что такие дегенераты лезут войти - радуюсь, что у меня не сильная конкуренция
>>196189802Держи в курсе, жирдяй. >>196189800Ты имеешь ввиду задачу типа:выводим на экранвыбери действие1. Пощекотать очко2. Ласкать ональные губы ?При небольшом количестве вариантов, студент не поймет как свитч избавляет от бойлерплейта. При большом - задача станет громоздкой, как и код. Ведь одно дело вывести месяц и другое - какую-то неведомую хуйню.Я понимаю твое негодование, тк задача тупая и унылая для опытного человека, но ОПу сойдет.
>>196189577Какой в пизду массив, индус хренов. Надо пилить через хэшмапу с туплами, и проверять рейнджами.
>>196190227> Я понимаю твое негодование, тк задача тупая и унылая для опытного человека, но ОПу сойдет.Ну может быть, ок, ладно.
>>196190267STL наверное у них еще только через год-полтора, не гони лошадей и не мешай учебному процессу
>>196190032В горе говна все равно больше шанс золото найти, которое круче тебя будет писать код, в любом случае вайтишники - плохо.