Блять, не могу разобраться с двумерными массивами в с++. Как сдвигать элементы по диагонали вниз вправо в массиве 3х3? В программировании хлебушек и не понимаю почти нихуя.
#include <iostream> #include<iomanip> #include <cstdlib> using namespace std; int main() { setlocale(LC_ALL, "Russian"); const int n = 3, m = 3; const int w = 4; int ar[n][m]; srand(time(NULL)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (rand() % 2) { ar[j] = rand() % 100; } else { ar[j] = rand() % 100 * (-1); } } } cout << "Исходный массив" << endl; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cout << setw(w) << ar[j]; } cout << endl; }
for (int k = 0; k < n; ++k) { for (int l = 0; l < m; ++l) { for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (i + 1 == n and j + 1 == m) { continue; } else { if (j + 1 == m and ar[j] > ar[i + 1][0]) { int t = ar[j]; ar[j] = ar[i + 1][0]; ar[i + 1][0] = t; } else { if (ar[j] > ar[j + 1]) { int t = ar[j]; ar[j] = ar[j + 1]; ar[j + 1] = t; } } } } } } } cout << "Сортированный массив" << endl; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cout << setw(w) << ar[j]; } cout << endl; } return 0; } Есть код с чем-то подобным, как из него сделать решение оп-поста?
+1 в первую цифру индекса, +1 во вторую? Объекту с индексом [2,2] присваиваешь все, что есть у объекта с индексом 1,1, потом объекту с индексом 1,1 даёшь все, что есть у индекса 0,0, а индексу 0,0 даёшь что-то новое. В теории так, хз, как это в с++ писать. мимо-два месяца учу с#
>>234134864 не использовать локаль вообще нахуй никогда если ты не пишешь приложения, которые должны быть локализованы. локаль это пиздец монструозная и ненужная хуета
>>234135578 Диагональ от 0,0 и до конецмассива,конецмассива должна сдвигаться на +1 элемент, как я его понял. Объект 0,0 теперь будет объектом 1,1 и т.д.
>>234134497 (OP) <kznm/ Нормально опиши задание. А то блять сдвигать в массиве. А на место сдвинутого хуй ставить или что? А по смыслу тебе придется хуярить циклы в цикле. Рекомендую через while но ради боженьки ограничь цикл а то замастабируешь до out of memory
>>234135966 А, пф, тогда просто создай объект, который не входит в массив, и до начала цикла присвой ему все свойства объекта 2,2. После цикла сделай этот объект элементом массива с индексом 0,0. Панятна?
>>234135991 Ты непонятно нарисовал, рисуй ещё раз. У тебя не все клеточки куда-то переходят после перестановки. Что делать с теми, от которых ты не нарисовал стрелочки?
>>234136500 Я извиняюсь, а как ты собираешься нормально реализовать функцию без объявления ещё одной переменной, чтобы сохранять какое-то значение? Ну хочешь написать метод, который будет объявлять внутри себя эту переменную - пиши. По итогу все равно будет тот же самый процесс, не?
>>234136614 Так нахуй что то объявлять если есть какойто раномный массив и он уже наполнен? Остается доебаться до опа чтобы он выложил что надо сделать.
>>234136710 Дядя, по-моему ты путаешься. Если у тебя есть a=1, b=2, то ты не можешь поменять их значения, не объявив ещё одну переменную. По-любому придется сделать c=a, a=b, b=c Чтобы по итогу было b=1, a=2. В этом задании то же самое.
>>234136757 Ну так изи же, просто херачишь алгоритм внутри алгоритма, плюс банальная перестановка значений двух переменных с помощью определения ещё одной переменной. Понял или не понял? Могу написать в с# код, если не понял ещё.
>>234136757 Ну и че непонятного. Для обычных перемещений так, как тебе уже расписали, а для краевых с особым условием, проверку там ебани для выхода за пределы массива, и укажи куда кому следовать.
>>234137394 А что с эффективностью такого способа? Операция присваивания выполняется быстрее, чем сложения/вычитания? Понятно, что памяти больше используется, но получается ли быстрее?
>>234136901 >Если у тебя есть a=1, b=2, то ты не можешь поменять их значения, не объявив ещё одну переменную. Можешь. a = a xor b b = a xor b a = a xor b
>>234137394 Гений в треде, лол. Почему я раньше до такого не додумался? да, кстати, как это будет выглядеть, если у тебя вместо a и b будут объекты твоего кастомного класса со своими кастомными свойствами? Все равно придется создать объект ещё один и ему присвоить все свойства? Да и со string то же самое. То, что ты написал, работает только для чисел, вроде?
>>234137624 >>234137703 >>234137734 Да что так что эдак, все-равно компилятор на релизе все как надо оптимизирует. Без глубоких знаний различий архитекур и работы процессора ты его не переоптимезиоуешь, так что срать.
>>234137626 А че бы и нет?) Нужно же хоть где-то понтануться
>>234137657 Да не такой уж это и костыль. Просто задачка.
ВСЕМ АХТУНГ! Кто хочет войти-в-ойти, на собесе часто задают задачку про перемену мест переменных без третей переменой. Вот вам решение
>>234138047 >Да что так что эдак, все-равно компилятор на релизе все как надо оптимизирует. Без глубоких знаний различий архитекур и работы процессора ты его не переоптимезиоуешь, так что срать. Да я не вчитывался в твоё решение просто, да, одна хуйня.
>>234138167 Блин, а как так делать? Есть где-то видосики или почитать что-то? Для бинарных чисел ведь не работает обычная математика? У них там свои операции, не? Я слишком мало знаю.
>>234138199 Залезь внутрь этой функции и почитай как она работает. Та же херня с третьей переменной, но с тысячей проверок и защитой от долбоебов (от того и медленнее)
>>234134497 (OP) У тебя row-major? 1. Сдвигаешь указатель на начало матрицы на строку влево и на 1 элемент вправо. 2. Фиксишь граничные эффекты. Эффективность! Память! Грайндкор!
>>234138302 Да нет, работает. Те же десятичные числа, просто их меньше и все. Ну и у них есть ещё дополнительные логические операции. А вообще забей на это. Как я уже выше писал, компилятор и так и эдак все оптимизирует, главное писать так, что бы потом любой прочитать мог и что б не стыдно было
>>234137394 >>234137624 >>234137673 В общем, мне стало интересно, я решил сам проверить. Как ни странно, метод с дополнительной переменной оказался быстрее в максимальном упрощении. Много лет уже не писал код, критика не принимается.
>>234139483 Ну, первый семестр профильного вообще нихуя не было. История, русский язык, всякая такая хуета. Потом основы с++. Типы данных, стандартные библиотеки, потоки данных (консольные, файловые), и т.п. Потом учили Qt. Паралельно с этим учили Delphi реально классная тема. Замутить какую-нибудь оконную приколюху (жаль фото не осталось) или субдшку простенькую - в самый раз. Отдельно учили ООП. На третьем курсе институту пришел пиздос, и мы почти всю оставшуюся программу осваивали за пол года. На некоторые предметы по 3 пары приходилось. Тогда шла пыха, хтмл и прочее. Нихуя в такой кранч понять не возможно, и мы тупо весь семестр играли в "Жизнь На Арене" кастомка третьего варкрафта. Ещё сети были. Угорал в циско пакет тресйсере, бухой обжимал витуху и играл в Жизнь На Арене с преподом, лол. Проходили базы данных, ещё. Нормальные формы, sql и все такое. Ща скоро будем курач писать.
Так по теме больше особо не было. Были ОХУЕННЫЕ матан, философия и правоведение, из-за преподов. Столько стеба и троллинга с их стороны было, просто не счесть боже, верни меня на мой второй курс
>>234140786 В дебаге. Правда, я хз, что это вообще. Я не погромист нихуя. Просто мой вуз решил на 1 курсе, что все инженеры должны освоить основы алгоритмов и С++.
>>234141277 Да это вообще прикол какой-то. Я один ноль добавил, и сделал по 5 замеров для большей точности. И опять результаты изменились. >>234141404 В релизе всё мгновенно выполняется и нули выдаёт. Хз.
>>234141579 Специально для тебя перезамерил без инициализации переменной с в последних двух циклах. То есть она только в первом осталась, где используется.
Пиздец, вы реально не можете задачу ОПа решить? Сто постов высрали какой-то хуйни, а нормального ответа так до сих пор и нет. На словах все сеньоры 500кк/нс, а на деле все слились, как куски говна.
>>234142992 Да тут корме полутора анонов никто и не решал, лол. А вообще пускай прокачивает математическое мышление, если хочет нормально прогать. Ну или веб-макакай что в принципе ничего плохого
>>234137518 Так ты дебил прост, я тоже не люблю возиться с поддержкой национальных языков, но ничего монструозного в этом нет >>234134864 Он дебил прост
>>234144611 Ну по >>234136757 очевидно, что элемент a[j] встает на место a[(i+1)%N][(j+1)%N]. Остальное уже как сделать так, чтобы элементы не затирали друг друга при перемещении. Я для этого сдвигаю их задом наперед, таким образом достаточно предварительно запомнить первый элемент, чтобы по окончанию водрузить его на положенное место. Ну и не придумал ничего лучшего, чем обрабатывать по диагоналям, а так может и получше можно что придумать, чтобы на кэш-промахах не всосать на больших массивах, но мне лень.
Блять, декремент к обоим сторонам массива, за реализацией хуячь в любой учебник, там всё есть. Сука, потом они хотят идти работать на хорошие должности, рот ебал
>>234146441 Да чё бугуртить-то так? Ну промахнулись с профессией, спасибо такому лютому форсу про 300кк/нсек, ну бывает. Один хуй если ты хороший специалист, то с работой проблем не будет