О, спасибо за комментарий) Именно такого рода ищу (для поддержания мотивации) Вы сейчас на каком уроке? Или уже всё прошли?) В каких видео возникли трудности?
@@60jib_i3_tejie8 всем все дается по разному. если ты считаешь что тебе сложно попробуй изучить что то по проще. например html. а так сложно мне тоже и мне 25.
Очень долго не получалось решить эту задачу и совершенно не понимал код в видео, в итоге отложил это дело и просто обучался дальше. Через пару недель попробовал посидеть и порешать, в итоге всё получилось. Сейчас спустя какое-то время вернулся к этому уроку, в итоге полностью понял написанный код. Так что не расстраивайтесь сильно, если не получается что-то, и не делайте сразу выводов, что сфера не ваша. Продолжайте и у вас обязательно получится
Скажу честно, это первое действительно сложное дз для меня, я его делал по видео, но все равно часть кода не понимал, пока не пересмотрел раз 5 и сам писал код раз 6,чтобы понимать каждую строчку в коде, спасибо за уроки, сейчас понимаю, что это легко)
Знал, что в первом цикле с заполнением массива должно быть осуществлено главное условие ДЗ. Знал, что нужен будет break или continue. Знал, что нужна конструкция if. Подозревал, что понадобится вложенный цикл. Но всё-равно не смог:( Но был близок.
Тоже думал, что потребуется, например, continue, но после не придумал, как его применить. Решил использовать вложенные циклы while (проверял условие положения двух переменных - i и j) и if (сверял два элемента массива) - а всё это было вложено в цикл for. До этого, конечно, хорошо занимался на информатике в школе, но весьма сильно подзабыл материал, и язык в школе был совсем другой.
5 часов упорного мозгового штурма были не зря. Без откладки я бы никогда в жизни не справился, ведь это действительно самая полезная вещь для программистов. За весь предоставленный контент и домашку я искренне благодарю
Это очень крутое задание. На самом деле пришлось попотеть. Кстати я сделал по другому. Но главное получилось🎉 Спасибо за такие подробные и продуманные уроки!!!
"Возможно сложно для восприятия" :))) Это охрененный скачек сложности в сравнении с прошлыми уроками... И без разрисовки алгоритма на бумаге такое поднять не реально...
Нечего не разрисовывал и написал. Код правда полное говно, но зато написал сам. Вот так получилось: #include #include #include // содержит time() using namespace std; int main() { setlocale(LC_ALL, "rus"); srand(time(NULL)); const int SIZE = 19; //объявляем константу int Arr[SIZE]{}; //объявляем массив с количеством элементов SIZE int a = 0, b = 0, rand_number = 0; for (int f = 0; f < SIZE; f++) { a = 0; for (; a == 0;) { rand_number = rand() % 20; for (int i = 0; i < SIZE; i++) { if (Arr[i] == rand_number) { break; } else if (Arr[i] != rand_number && i == SIZE - 1) { Arr[f] = rand_number; a = 1; break; } else if (Arr[i] != rand_number) { continue; } } if (a == 1) { continue; } } } for (int f = 0; f < SIZE; f++) { cout
Это вполне нормально. Просто нужно сесть и напрячь мозги разок. Думаешь = развиваешься. Это не столь сложно, как кажется. На таком этапе и отсеиваются те, кому лень.
Я понял, как что и чего включает, но одновременно осознаю что такую конструкцию я бы не придумал. По крайней мере с той наренированность в логике алгоритмов что есть сейчас.
А я вообще пошла не тем путем. Я сразу заполнила массив рандомными числами, а потом пыталась их сравнивать между собой и заменять результаты. Может идея и имела место быть, но реализация подкачала и я сдалась ((( Стыдно прям. Но были уже у меня такие задачи, которые я не могла решить. Итогом многодневных мозговых штурмов становилось частичное выгорание: возникала мысль, что я слишком тупая для программирования вообще и какой смысл дальше учиться, если уже на начальном этапе я не могу решить задачу. Как-то так. Искреннее спасибо комментаторам: во-первых, понимаю, что не я одна не решила, во-вторых, спасибо за комментарии относительно того, что через пару десятков уроков данная задача покажется легкой и понятно. Отдельно спасибо автору видео. Оно до сих пор актуально, востребовано) привет из 2024 )))
Можно сразу заполнить если писать так: void main() { setlocale(LC_ALL, "Russian"); srand(time(NULL)); const int ARRAY_SIZE = 10; int arr[ARRAY_SIZE]; cout
В голове это сложно представить... Но по частям касался капельку и представлял как примерно должно работать, но не увидел банальных вещей... Я разачарон в себе что не смог решить данную задачу.. Разобрал код очень досконально и понял как это работает... Не собираюсь опускать руки! Практика, практика и ещё раз Практика! Надо улучшать логистику и познания и только тогда можно чего-то достичь! Классный курс! Спасибо. Надеюсь смогу это же написать на 120 уроке..
Потратил больше 6-ти часов на выполнение этого задания. Долго не получалось, но в итоге смог сделать. Правда, с использованием Goto, что не очень, конечно. Код так себе, но работает. Главное, что получилось, и я сделал это сам, своими силами, не подсматривая. Хочу сказать спасибо Вам за ваши уроки и отладчику, без которого я бы не смог анализировать свои ошибки.
Я думал, что немного подсмотрел решение, а оказывается почти один в один содрал) Но все равно рад, что понял как работает. Для тех, кто пытается решить: Напишу, вдруг кому-то поможет). У меня в начале возникли сложности из-за того, что пытался сначала подставить число в массив, а уже потом сравнивать его с другими, в голове получалась каша и непонимание, что делать дальше. Когда подсмотрел, что сначала надо сгенерировать, потом проверить на совпадения, и уже только потом подставлять в ячейку массива, стало гораздо проще. решил вот так (собственно только ИФы немного иначе получились, а так все как на видосе): void main() { setlocale(LC_ALL, "ru"); srand(time(NULL)); const int SIZE = 10; int arr[SIZE]; for (int i = 0; i < SIZE; ) { int newRandom = rand() % 20; bool alreadyThere = false;
В общем минут 10, нехило подгоревшая пятая точка и получилось сделать, правда не так как у вас. Но вроде работает, проверил на работоспособность уменьшив разброс с 20 до 10, в итоге получил числа до 10 без повторений. Вот решение #include "stdafx.h" #include #include using namespace std; void main() { srand(time(NULL)); int arr[10];
Спасибо большое за ваши уроки, в особенности это видео мне очень пригодилось, так как в процессе изучения С++ с этой темой в массивах были проблемы. Премного вам благодарна😌🤗 С каждым видео понимаю больше и узнаю что-то новое и полезное!
Переписал раз 10 код программы, осталось до конца разобраться как именно работает тут булевая переменная. Решил, буду отрабатывать каждое ДЗ пока не смогу самостоятельно никуда не подсматривая написать эту программу и досконально объяснить каждую строчку кода!
Я как человек , который 10 дней занимаюсь по урокам Сергея, и изучаю С++, не смог решить данное ДЗ. Возможно кто-то из умных скажет, что это изи, но по факту, без опыта программирования (я имею ввиду ВООБЩЕ без опыта), точно не решить это ДЗ. Люди, которые без опыта решили это ДЗ, либо методом тыка через отладчик находили решение, либо хз как. Буду и дальше изучать, руки не опускаю. Ничего страшного не произошло. Дальше разберусь. Спасибо за урок, ДЗ, и разбор ДЗ!
У меня все почилось кроме одинаковвых чисел , только с ними не разобрался . Примерная реализация была но решил не ломать голову а посмотреть . СПАСИБО СЕРГЕЙ!
Мой код: #include #include using namespace std; int main() { srand(time(NULL)); const int SIZE = 10; int arr[SIZE]; for (int i = 0; i < SIZE; i++) { again: arr[i] = rand() % 100; for (int c = 0; c < i; c++) { if (arr[i] == arr[c]) { goto again; } } } for (int i = 0; i < SIZE; i++) { cout
С моей любимой меткой: ( Просто перезаполняем элемент массива, если есть совпадение.) for (int i = 0; i < lenght; i++) { label1: arr[i] = rand() % 20; for (int j = 0; j < i; j++) { if (arr[j] == arr[i]) { goto label1; } } } С декрементом i вместо метки тоже вариант.
@@yourai3339 Действительно , тут большинство решило эту задачу тыкая пальцем в небо , ибо для решения этой задачи информации из предыдущих уроков недостаточно.
А я создал массив и каждое число проверял, и если были повторы, менял на случайное и снова проверял и менял, так поэлементно. Всё получилось. Здесь как раз мы сначала число генерируем, а потом проверяем на совпадение со всеми элементами массива и отбраковываем, либо присваиваем его следующему элементу. Всё элементарно, оказывается. Изящно, я бы сказал.
Главное правило. Не пить слабые алкогольные напитки во время и перед учебой. Так и ничего и не понял. На следующий день - всё понятно, разобрался. Сергей, спасибо за разбор домашнего задания, оно оказалось сложным, но после ваших объяснений и самостоятельной работы с отладчиком все стало понятно.
Переписывал код 5 раз, но это это того стоило, правда, у меня вышло все иначе но код рабочий, создал другой массив в котором содержались числа от 1 до 20 и был цикл который при создании нового элемента заменял идентичное число 20 (имхо так как это число не могло сгенерироваться) и все заработала
Ееееее, когда делал ДЗ, я написал более оптимальное решение!!! Не кардинально, но, как мне кажется, лучше! Для нуба - это круто!!! for (int i = 0; i < LENGTH; i++) { mass[i] = rand() % 20; for (int j = 0; j < i; j++) { if (mass[i] == mass[j]) { mass[i] = rand() % 20; j = -1; } } }
Блиннн.Смотрела твои уроки про массивы и ты там сказал если не знаете как заполнять рандомными числами ,то смотрите предыдущий урок.Так я пришла сюда.Затем ты здесь сказал смотреть предыдущий урок если не знаете что это такое😮Я пошла смотреть твой предыдущий урок
Всё понял, про то, что можно в отладчике другие цифры вбивать. Хороша фишка. Только у меня не работает так отладчик. Снимите видео, как его правильно настроить.
2 года назад уже выполнял это задание сейчас снова занялся программированием и дошёл до этого задания, думал несколько часов, слооооожно. Решил только после просмотра видео
Может это кому-то покажется проще. Спасибо за уроки! int main() { setlocale(LC_ALL, "Rus"); srand(time(NULL)); const short SIZE = 10; short a[SIZE]; for (short i = 0; i < SIZE; i++) { a[i] = rand() % 20; for (short t = 0; t < i; t++) { if (a[i] == a[t]) { i--; break; } } } for (short i = 0; i < SIZE; i++) { cout
Лол. У меня почти такой же как и у тебя) Только я воспользовался гоуту const int size = 10; int array[size]; for (int i = 0; i < size; i++) { array[i] = rand() % 20; loop: for (int j = 0; j < i; j++) { if (array[j] == array[i]){ array[i] = rand() % 20; goto loop; } } } for (int i = 0; i < 10; i++) { cout
@@ЭдуардЛьвович-ъ4о второй цикл, в котором i--, предназначен для проверки на существование точно такого же числа. Если такое число уже имеется, то необходимо запустить конкретно для этой переменной цикл ещё раз, т.к. при завершении первого цикла i увеличится на единицу, его(i) необходимо заранее уменьшить.
Жесть, раз пять хотел уже глянуть ответ в ютубе но потом себя останавливал и спустя 3 часа таки сделал правда не как автор но все же работает)) Код сделал так что в консоли видно что там происходит, для тех кому интересно. #include #include using namespace std; int main() { setlocale(0, ""); int const SIZE = 10; int arr[SIZE]{}; srand(time(NULL)); for (int i=0; i < SIZE; i++) { cout
Сочинял этот код 2 часа, получилось почти тоже самое что и в разборе, но во вложенном цикле допустил ошибку(если это конечно ошибка) в условии выхода из цикла у меня было j < SIZE а у вас j < i. Спасибо за уроки!
Выполняя это задание не просто создавал константный массив для заполнения его случайными числами. А написал программу с возможностью выбора количества генерируемых случайных чисел. И с возможностью задать границ, в диапазоне между которыми должны быть значения сгенерированых чисел. В процессе поиска "границ возможного" и ошибок обнаружил, что используемая библиотечная функция генерирует числа только в пределах "половины типа short" - от нуля и до 32 767. Думаю, это стоит отметить в задании ))
Задачка легкая, но это не помешало ей убедить меня взять листок и нарисовать схему. Я ещё не смотрел это видео, потому-что гордость велила разобраться самому. Теперь когда я из (как такое простое задание может занимать столько времени и сил) перешёл в (Сам все сделал по красоте) мое ЧСВ выросло до уровня джуна. Короч я написал код который перед тем как заполнять массив рандом чисел кидает их в временную переменную которая в свою очередь циклом проходит по каждому сектору массива. Для этого в начальном состоянии массива сделал так чтоб неинициализированные переменные были нулями. Int mass[ten] = {}; а после сверять временную переменную с каждым нулем и в итоге цикл будет заполнять 0 числами и с каждым новым числом проходить проверку на повторение.
@@ЕвгенийСорочук-з6у вау, это очень мотивирует, потому что когда что-то не получается то начинаешь думать что ты очень тупой для программирования или просто что это не твоё, но ваш комментарий теперь будет для меня пинком
То же самое, не додумался сделать через bool, пытался написать собственный велосипед, в итоге не получалось либо нормально выйти из цикла, не сломав ничего, либо код ломался полностью.
Не обязательно делать булевую, это понты. Можно и интовую с присваиваеванием ей значений 0 или 1. А потом проверкой значений и на основании проверки дальнейшими действиями. Но для понтов есть буль :)
Оххх капец я на этом задание просидел дня 3-4 думал все и не как не мог придумать решения пока не посмотрел метод сортировки и после него еще час сидел и думал, и все придумал спустя время все тщательно проверяя в отладке, я его выполнил с использованием goto!!!
Задача действительно была сложной, заняла 2 дня, в сумме часов 6, однако была выполнена полностью и самостоятельно, вот таких задач хочется видеть больше
Здравствуйте! Я являюсь новичком в программировании на С++. Но считаю, что код написанный мной (приведенный далее) более эффективен, чем тот который изложен автором на видео. Так как в моём коде используется одно условие IF вместо двух, и не происходит прыжков из вложенного цикла в первый цикл, а потом обратно во вложенный для проведения повторной операции для одного и того же элемента массива. При малом количестве элементов массива конечно это не будет заметно, но например если задать размер массива более 30000, то думаю будет заметна разница (хотя у меня дальше 32768 элемента почему то не идет, почему не разбирался). А вообще спасибо автору за отличные уроки!!! :) ----------------------------------------------------------------------- int i, n, rnd; //Объявление переменных const int SIZE = 200; //Размер массива srand(time(NULL)) //ГЕНЕРАЦИЯ МАССИВА С ПРОВЕРКОЙ НА СОВПАДЕНИЯ for (i = 0; i < SIZE; i++) { cout
srand(time(NULL)); я вообще пошёл через второй массив, в который записал значения, которые могут попасться по условию задачи, потом я начал сравнивать полученное число со вторым массивом и записывать в тот индекс о, а в случае когда мы попали в тот же индекс массива то начинаем перебирать второй с 0 до 20 и первое свободное значение мы записываем в массив который выводим на экран... Вообщем, очень круто! спасибо int const SIZE = 10; int array[SIZE]; int between; int arrayTwo[20]; //second array with space equal amount of your available random numbers bool help; for (int i = 0; i
Самое интересное ДЗ. Сделал практически так же) только с небольшой вариацией: #include #include using namespace std; void main() { setlocale(LC_ALL, "ru"); // Массив на 10 элементов, числа от 0 до 20 без одинаковых значений srand(time(NULL)); const int SIZE = 10; int MyArray[SIZE]; int Var; bool IsExist; //Если забить массив 0 - то это нехорошо, т.к. противоречит условию, что ВСЕ числа должны быть рандомными //Если не забивать массив никак - там будут случайные числа, но полученные НЕ методом rand //Поэтому забьем массив числом 21; for (int i = 0; i < SIZE; i++) { MyArray[i] = 21; } for (int i = 0; i < SIZE; ) { Var = rand() % 20; IsExist = false; for (int a = 0; a < i; a++) { if (MyArray[a]==Var) { IsExist = true; break; } } if (!IsExist) { MyArray[i] = Var; i++; } } for (int i = 0; i < SIZE; i++) { cout
все домашки до,были трудноватые но после просмотра все понимал и делал сам.Но эта задачка трудна,вазможно из-за недостатка знаний в теме функций.вернусь позже сюда и пересмотрю этот урок,в скором времени.
Так проще и быстрей: int const SIZE = 10; int arr[SIZE]; for (int i = 0; i < SIZE; i++) { link: arr[i] = rand()%20; for (int i2 = 0; i2 < i; i2++) { if (arr[i] == arr[i2]) { goto link; } } }
@@AOKostyuk он делает код нечитабельным и существует только для того, чтобы работал старый код, написанный с ним. Но под такую мелкую задачу он отлично подходит.
сделал это задание логически подумав, как это должно работать, и это не работало, хотя не понимал почему не работает, т.к. по логике все правильно, потратил кучу времени чтобы понять что не так, пока не решил запустить через дебагер и тогда я понял, что не задал значение переменным в цикле, а просто объявил их, так что если что-то не получается не забывайте про дебагер, полезная штука, можно себе кучу времени сэкономить
Ну, можно сказать... ходил я рядом. Вот одна из моих попыток. Я и костыли пробовал делать, с помощью 9 ветвлений if(). Если повезло, то массив заполнился полностью, естественно уникальными числами. Если не повезло, то массив заполнялся не полностью, т.к повторяющиеся цифры отбрасывались, а нормальное условие для новой генерации нового числа на незаполненную ячейку я не смог сделать. Ну, я догадывался, что по-любому нужен вложенный цикл, и оператор ветвления. Эх, печально. Но, это не повод бросать изучение языка программирования, опыт все таки имеет свойство накапливаться, да и мышление может меняться, как ты пишешь код. Я лет 5-6 назад тоже начинал заниматься программированием, в школе еще, тогда поленился подумать и бросил изучение, думал не мое. Но недавно вернуться решил в программирование, т.к все таки хочется. есть свои причины и желания. Конечно пожалел, что тогда отступил, все таки сколько времени упустил, за это время даже если бы шел маленькими шажками, то вероятно даже и программистом мог бы уже работать. Еще слово про опыт. Как раз таки причиной ухода, была школьная олимпиада по ЯП. Там была задачка на палиндром, которую я не смог решить. Когда вернулся в изучение ЯП, попалась задачка на палиндром, которую я решил, немного подумав над ней.
Какой-то длинный код. Я используя предыдущие уроки написал так: For (int i = 0; i < size; i++) { arr[i] = rand()%20; For (int j = 0; j < i; j++) { If (arr[i] == arr[j]) { i--; Continue; } } } Работает, как надо, меньше переменных, короче код
может такой вариант для кого-то окажется проще: int const SIZE = 10; int arr[10]; for (int n = 0; n < SIZE; n++) { arr[n] = rand() % 20; for (int i = 0; i < n; i++) { if (arr[n] == arr[i]) { n--; break; } } } for (int i = 0; i < SIZE; i++) { cout
Слишком морочный код, рациональней сделать так: int main() { setlocale(LC_ALL, "ru"); int const size = 5; int mass[size]; int randomBox; srand(time(NULL));
for (int i = 0; i < size; i++) { randomBox = rand()% size; for (int j = 0; j
Вот так на много проще используя всего один if: const int size = 10; int random, arr[size]; srand(time(NULL)); for (int i = 0; i < size; i++) { random = rand() % 20; for (int b = 0; b < size; b++) { if (arr[b] == random) { random = rand() % 20; b = -1; } } arr[i] = random; cout
Еле сделал, знал, что тут многие могут сдаться) , получилось вот так вот, это число цикл проверки. Ещё в конце сделал сумму чисел массива, и она всегда равна 190, значит всё правильно, хотя в начале сделал через goto xD(возвращал код до начала всего цикла), а потом понял, что нужно просто поставить m=0,j=0. for (int j = 0; j < SIZE; j++) { for (int m = 0; m < SIZE; m++) { if (m == j) { continue; } if (arr[m] == arr[j]) {
Немного забегая вперед с минимальным значением, но все работает, и тоже код получился чуть короче: void main() { setlocale(LC_ALL, "RUS"); srand(time(NULL));
const int SIZE = 10; int arr[SIZE]; int maxrangevalue = 20; int minvalue = maxrangevalue;
for (int i = 0; i < SIZE; i++) { arr[i] = rand() % maxrangevalue; for (int j = 0; j < i; j++) { if (arr[j] == arr[i]) { arr[i] = rand() % maxrangevalue; j = -1; } } if (arr[i] < minvalue) { minvalue = arr[i]; } cout
Вот что значит оптимизировать алгоритм. А я нафигачил так что сначала все записывается в память, а потом проверяется, и если есть совпадения, то генерится и записывается заново во все ячейки))) Но вывел себе в консоль подсказку какое число и в каких ячейках совпало))) Будем думать. Все что до этого смотрел запихал, и do while, и for, и goto))
Максимально непросто. Пожалуй, сложнейшее задание из всех вами выданных. Но, пожалуй, справился. #include //библиотека, которую мы подключаем #include using namespace std;/*без этой штуки пришлось бы больше писать*/ /* Операторы сравнения: < - меньше > - больше = больше либо равно Операторы равенства: == - равно != - не равно Логические операторы объединения и отрицательная инверсия: && - и || - или != - не Конструкция логического выбора if: Лесенка if - else if if(утверждение или выражение) { действие 1; } Альтернатива if-else: switch (какое-то значение) { case 1: ...; break; default: ...; break; } while (утверждение) { действие для повторения; } do { } while (true); for(...;...;...) { ... } goto = бяка ошибки: 1. не компилируется; (f5 OR f10, f9 also) */ int main() { setlocale(LC_ALL, "ru"); srand(time(NULL)); int const SIZE = 20; int arr[SIZE]; for (int i = 0; i < SIZE; i++) { arr[i] = rand() % 100; for (int q = 0; q < SIZE; q++) { if ((arr[i] == arr[q]) && (i != q)) while (arr[i] == arr[q]) { arr[i] = rand() % 100; } } } for (int j = 0; j < SIZE; j++) { cout
Если кто не понимает, как работает проверка на уникальность и зачем декремент "i--", запустите этот код. Он выведет все этапы проверок и в конце полученный массив. int main() { setlocale(LC_ALL, "ru"); srand(time(NULL)); int const ARRAY_SIZE=10; int range=20; int flag=0; int arr_1[ARRAY_SIZE]; for (int i = 0; i < ARRAY_SIZE; ++i) { int x=rand()%range; cout
Я почти сам сделал это задание, но не догадался с булевым значением , что так оказывается можно проверять. У меня была более сложная проверка он проверял весь массив и смотрел есть ли то рандомное чилсо в массиве
Как ни странно, додумался до почти того же, за исключением отсутствия проверочного alreadythere, но, тем не менее работает тоже исправно, занимает меньше строк(29) и ещё добавил личной прихотью увеличение всего массива на единицу, чтобы там нуля не было и было 20))
Мой вариант решения очень простой, в первом цикле задаются рандомные значения, во втором цикле берется значение arr[i] и сравнивается с остальными значениями в третьем цикле, если значение arr[i] совпадает с arr[j](другим элементом массива), то она дает новое рандомное число этой переменной и используется оператор goto go который заставляет программу опять перепроверить это же число еще раз, если все ок, то берется следующее #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); srand(time(NULL)); const int SIZE = 10; int arr[SIZE]; for (int i = 0; i < SIZE; i++) { arr[i] = rand() % 10; } for (int i = 0; i < SIZE; i++) { go:for (int j = 0; j < SIZE; j++) { if (arr[i] == arr[j] && i != j) { arr[i] = rand() % 10; goto go; } else { } } cout
Первое, что пришло в голову - это сравнивать значение данного элемента со значениями предыдущих. Собственно дел на 15 минут. #include #include using namespace std; int main() { setlocale(LC_ALL, "Rus"); srand(time(NULL)); const int SIZE = 10;
int arr[SIZE]; bool changing = false;
for (int i = 0; i < SIZE; i++) { for( ; ; ) { arr[i] = rand() % 20; if (i != 0) { for (int k = i - 1; k >= 0; k--) { if (arr[i] == arr[k]) { changing = true; break; } } if (changing == true) { arr[i] = rand() % 20; changing = false; } else break; } else break; } } for (int i = 0; i < SIZE; i++) { cout
Самая простая реализация (числа другие, но суть одна. Использовал goto, хотя можно было бы и откат переменной конечно же, но хотелось попробовать) int arr[10]{}; for (int i = 0; i < 10; i++) { link: arr[i] = rand()% 10 + 10; for(int j = i-1; j >= 0;j--) { if (arr[i] == arr[j]) goto link ; } }
фух, было сложно, но спасибо большое сам бы я такое дз не быстро сделал, и еще плюсом чуть шире стал смотреть на буливую переменную и массивы и так же на if & else, огромное спасибо сложная тема но усваивается хорошо))
Я бы момент после проверки сделал через гоу ту, пока такой вариант проверить не успел, надеюсь в пятницу смогу. Ваш вариант кстати не пришёл в голову, забыл что I++ можно потом написать после проверки дополнительной, было бы интересно потом сравнить скорость выполнения моего и вашего решений
Очень крутое задание!Я лично сначала как обычно заполнил массив,а потом занялся сортировкой ,сравнивая текущий элемент(например k) со всеми следующими после увеличивал k на единицу.Когда я доходил до максимального элемента отправлялся в обратное путешествие ,делая то же самое только в обратную сторону.Правда -это всё же неправильное решение ,ибо где-то на 10 итерации мне всё-таки попались одинаковые числа).Всё дело в том ,что когда я хожу вперёд и назад по массиву ,каждый раз числа позади текущего остаются в так называемой слепой зоне и я на них никак не влияю)Обидно,что не получилось решить ,но вся жизнь -это движение от поражения к поражению ,так что работаем дальше! ;)
Это неправильное решение(сам так сначала сделал) и одинаковые числа будут попадаться постоянно, если поставить диапазон rand равный кол-ву элементов массива, например. Но исправляется в одну строчку по сути: надо чтобы в ходе проверки при любом совпадении проверка сбрасывалась на самое начало и шла заново. Это костыль, но на малых числах работает хорошо.
Вернулся с 125 урока помня что где-то на час на этом задании подсел. Сейчас кажется таким легким. Крепитесь!
О, спасибо за комментарий) Именно такого рода ищу (для поддержания мотивации)
Вы сейчас на каком уроке? Или уже всё прошли?) В каких видео возникли трудности?
прошло 4 месяца после вашего коментария. мне бы очень хотелось знать как хорошо вы обучились и смогли ли уже найти работу?
Это нормально что мне сложно понять эти уроки, но мне 13?
@@60jib_i3_tejie8 всем все дается по разному. если ты считаешь что тебе сложно попробуй изучить что то по проще. например html. а так сложно мне тоже и мне 25.
@@el1oz155 ну попробую, я просто хочу изучить какой нибудь язык, чтобы уже к 18-20 мог более-менее сам зарабатывать.
Очень долго не получалось решить эту задачу и совершенно не понимал код в видео, в итоге отложил это дело и просто обучался дальше. Через пару недель попробовал посидеть и порешать, в итоге всё получилось. Сейчас спустя какое-то время вернулся к этому уроку, в итоге полностью понял написанный код. Так что не расстраивайтесь сильно, если не получается что-то, и не делайте сразу выводов, что сфера не ваша. Продолжайте и у вас обязательно получится
спасибо)
Спасибо,добрый человек,а то на этом дз мена настигло отчаяние 🥲
Задание, которое заставляет переосмыслить мои поверхностные знания о массивах и итерации.
Скажу честно, это первое действительно сложное дз для меня, я его делал по видео, но все равно часть кода не понимал, пока не пересмотрел раз 5 и сам писал код раз 6,чтобы понимать каждую строчку в коде, спасибо за уроки, сейчас понимаю, что это легко)
Знал, что в первом цикле с заполнением массива должно быть осуществлено главное условие ДЗ.
Знал, что нужен будет break или continue.
Знал, что нужна конструкция if.
Подозревал, что понадобится вложенный цикл.
Но всё-равно не смог:(
Но был близок.
Тоже думал, что потребуется, например, continue, но после не придумал, как его применить. Решил использовать вложенные циклы while (проверял условие положения двух переменных - i и j) и if (сверял два элемента массива) - а всё это было вложено в цикл for. До этого, конечно, хорошо занимался на информатике в школе, но весьма сильно подзабыл материал, и язык в школе был совсем другой.
Я сделал без if без break или continue. Чисто одними массивами, правда использовал их 4 штуки. Так что можно по разному решить
Я сделал без break, continue
@@alchevskiyтоже думаю про массивы, но подозреваю что можно сделать это проще без сильной "загрузки кода"
5 часов упорного мозгового штурма были не зря. Без откладки я бы никогда в жизни не справился, ведь это действительно самая полезная вещь для программистов. За весь предоставленный контент и домашку я искренне благодарю
Сложное задание... Знал, что нужно использовать цикл if, только не знал как реализовать...
согласен
if - это не цикл)
Евгений Пернач
молодец, хороший мальчик(сарказм)
ахаха тип правильно говорит
Конечно сложное. Если циклом называть условие, то будет сложно)
Это очень крутое задание. На самом деле пришлось попотеть. Кстати я сделал по другому. Но главное получилось🎉 Спасибо за такие подробные и продуманные уроки!!!
"Возможно сложно для восприятия" :)))
Это охрененный скачек сложности в сравнении с прошлыми уроками...
И без разрисовки алгоритма на бумаге такое поднять не реально...
Нечего не разрисовывал и написал. Код правда полное говно, но зато написал сам. Вот так получилось:
#include
#include
#include // содержит time()
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
const int SIZE = 19; //объявляем константу
int Arr[SIZE]{}; //объявляем массив с количеством элементов SIZE
int a = 0, b = 0, rand_number = 0;
for (int f = 0; f < SIZE; f++)
{
a = 0;
for (; a == 0;)
{
rand_number = rand() % 20;
for (int i = 0; i < SIZE; i++)
{
if (Arr[i] == rand_number)
{
break;
}
else if (Arr[i] != rand_number && i == SIZE - 1)
{
Arr[f] = rand_number;
a = 1;
break;
}
else if (Arr[i] != rand_number)
{
continue;
}
}
if (a == 1)
{
continue;
}
}
}
for (int f = 0; f < SIZE; f++)
{
cout
Это вполне нормально. Просто нужно сесть и напрячь мозги разок. Думаешь = развиваешься. Это не столь сложно, как кажется. На таком этапе и отсеиваются те, кому лень.
@@arteria-circumflexa6527 Отсеиванием ленивых вообще можно обозвать любую дичь :)
@@valerabruy6397 бля ахуенный код по нём немного может лучше начну читать коды
Самый тяжёлый урок из всех предыдущих для меня. Пол часа не мог понять как это работает.
кто то полчаса не мог понять , а кто то полтора((
я сам так и не решил.
*facepalm
Я так и не понял.
Я понял, как что и чего включает, но одновременно осознаю что такую конструкцию я бы не придумал.
По крайней мере с той наренированность в логике алгоритмов что есть сейчас.
раз 10 пересмотрела видео, еще столько же наверное написала этот код самостоятельно, сама искала ошибки, теперь наконец понимаю как это работает
Спасибо за урок с откладкой программы. Ошибки видно сразу при выполнение. Очень помогает
Его уроки очень понятливые, да и объяснения великолепные. Не зря 0 дизлайков под каждым видео.
А я вообще пошла не тем путем. Я сразу заполнила массив рандомными числами, а потом пыталась их сравнивать между собой и заменять результаты. Может идея и имела место быть, но реализация подкачала и я сдалась ((( Стыдно прям. Но были уже у меня такие задачи, которые я не могла решить. Итогом многодневных мозговых штурмов становилось частичное выгорание: возникала мысль, что я слишком тупая для программирования вообще и какой смысл дальше учиться, если уже на начальном этапе я не могу решить задачу. Как-то так. Искреннее спасибо комментаторам: во-первых, понимаю, что не я одна не решила, во-вторых, спасибо за комментарии относительно того, что через пару десятков уроков данная задача покажется легкой и понятно. Отдельно спасибо автору видео. Оно до сих пор актуально, востребовано) привет из 2024 )))
Можно сразу заполнить если писать так:
void main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
const int ARRAY_SIZE = 10;
int arr[ARRAY_SIZE];
cout
В голове это сложно представить... Но по частям касался капельку и представлял как примерно должно работать, но не увидел банальных вещей... Я разачарон в себе что не смог решить данную задачу.. Разобрал код очень досконально и понял как это работает...
Не собираюсь опускать руки! Практика, практика и ещё раз Практика!
Надо улучшать логистику и познания и только тогда можно чего-то достичь!
Классный курс! Спасибо.
Надеюсь смогу это же написать на 120 уроке..
ку, как успехи?
Потратил больше 6-ти часов на выполнение этого задания. Долго не получалось, но в итоге смог сделать. Правда, с использованием Goto, что не очень, конечно. Код так себе, но работает. Главное, что получилось, и я сделал это сам, своими силами, не подсматривая. Хочу сказать спасибо Вам за ваши уроки и отладчику, без которого я бы не смог анализировать свои ошибки.
*Блин, оказывается всё проще, чем ожидалось. Видели бы вы что я там намудрил*
А не сохранился ли у вас код от этого задания я осваю c++ и мне интересно как это задание делали другие "програмисты"
@Даниил Хмелевский Окей ВК есть
Ты кто
@@MRWOLFHACK Вот как я реализовал:
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand() % 20;
for (int j = 0; j < i; j++)
{
if (arr[i] == arr[j])
{
arr[i] = rand() % 20;
j = -1;
}
}
cout
@@leshiyni Точно так же думал и сделал, мороки вообще нету. Надо ток додуматься про откат второго цикла при совпадении)
Полтора часа думал как это сделать, но увидел начало этого ролика смог сам дописать код. Спасибо за уроки.
Я думал, что немного подсмотрел решение, а оказывается почти один в один содрал) Но все равно рад, что понял как работает.
Для тех, кто пытается решить:
Напишу, вдруг кому-то поможет). У меня в начале возникли сложности из-за того, что пытался сначала подставить число в массив, а уже потом сравнивать его с другими, в голове получалась каша и непонимание, что делать дальше. Когда подсмотрел, что сначала надо сгенерировать, потом проверить на совпадения, и уже только потом подставлять в ячейку массива, стало гораздо проще.
решил вот так (собственно только ИФы немного иначе получились, а так все как на видосе):
void main()
{
setlocale(LC_ALL, "ru");
srand(time(NULL));
const int SIZE = 10;
int arr[SIZE];
for (int i = 0; i < SIZE; )
{
int newRandom = rand() % 20;
bool alreadyThere = false;
for (int j = 0; j < i; j++)
{
if (arr[j] == newRandom)
{
alreadyThere = true;
break;
}
else
{
alreadyThere = false;
}
}
if (alreadyThere == false)
{
arr[i] = newRandom;
i++;
}
}
как успехи в программировнии?
Ещё раз здравствуйте, я понял, как здесь всё работает. Спасибо за понятные уроки. Побольше бы таких учителей.
В общем минут 10, нехило подгоревшая пятая точка и получилось сделать, правда не так как у вас. Но вроде работает, проверил на работоспособность уменьшив разброс с 20 до 10, в итоге получил числа до 10 без повторений. Вот решение
#include "stdafx.h"
#include
#include
using namespace std;
void main()
{
srand(time(NULL));
int arr[10];
arr[0] = rand() % 10;
//cout
Спасибо большое за ваши уроки, в особенности это видео мне очень пригодилось, так как в процессе изучения С++ с этой темой в массивах были проблемы.
Премного вам благодарна😌🤗
С каждым видео понимаю больше и узнаю что-то новое и полезное!
Переписал раз 10 код программы, осталось до конца разобраться как именно работает тут булевая переменная. Решил, буду отрабатывать каждое ДЗ пока не смогу самостоятельно никуда не подсматривая написать эту программу и досконально объяснить каждую строчку кода!
Большое Вам спасибо, за понятное, приятное изложение С++
Я как человек , который 10 дней занимаюсь по урокам Сергея, и изучаю С++, не смог решить данное ДЗ. Возможно кто-то из умных скажет, что это изи, но по факту, без опыта программирования (я имею ввиду ВООБЩЕ без опыта), точно не решить это ДЗ. Люди, которые без опыта решили это ДЗ, либо методом тыка через отладчик находили решение, либо хз как. Буду и дальше изучать, руки не опускаю. Ничего страшного не произошло. Дальше разберусь. Спасибо за урок, ДЗ, и разбор ДЗ!
Капец, я даун! Минут 5-10 не мог понять очевидное, а когда понял, то аж мурашки по коже пошли. Это круто и интересно. Спасибо за ваш труд)
Очень интересная задача, надо обязательно поэкспериментировать с вариантами исполнения.
У меня все почилось кроме одинаковвых чисел , только с ними не разобрался . Примерная реализация была но решил не ломать голову а посмотреть . СПАСИБО СЕРГЕЙ!
vi genialno obyasnaete Sergei ogromnoye spasibo
Полдня прошло пока дошло, еле нашел свою ошибку. Спасибо Сергей!
Я изначально догадался, что нужно юзать вложки и if, но не додумался как нужно реализовать. Я даже goto и continue использовал.
Я использовал goto
Зачем нужен был continue?
Мой код:
#include
#include
using namespace std;
int main()
{
srand(time(NULL));
const int SIZE = 10;
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
{
again:
arr[i] = rand() % 100;
for (int c = 0; c < i; c++)
{
if (arr[i] == arr[c])
{
goto again;
}
}
}
for (int i = 0; i < SIZE; i++)
{
cout
@@SaffronChipMCPE это год назад было, я не помню уже)
@@tolikbegyn9999 как успехи?
Добрый день, спасибо за уроки. В сочетании с книгой Лафоре полученые знания настолько дополняют друг друга, что с заданиями проблем не возникает.
пиар
@@viktorperov3104 какой пиар? чел, это очень популярная книга. я сама по ней учусь.
С моей любимой меткой: ( Просто перезаполняем элемент массива, если есть совпадение.)
for (int i = 0; i < lenght; i++)
{
label1:
arr[i] = rand() % 20;
for (int j = 0; j < i; j++)
{
if (arr[j] == arr[i])
{
goto label1;
}
}
}
С декрементом i вместо метки тоже вариант.
Я так же сделал, отвечаю😂
лайк от любителей опасной метки.
Первое ДЗ, которое так и не удалось реализовать своими силами. В принципе в голове решение крутиться, а вот в код перевести не получается.
@@johauk7038 ты серьёзно? ты вообще хоть смотришь уроки или так сразу делаешь?
@@yourai3339 Слишком грубо, у меня тоже не получалось нечего на первом языке но на втором это кажется проще простого.
@@yourai3339 Действительно , тут большинство решило эту задачу тыкая пальцем в небо , ибо для решения этой задачи информации из предыдущих уроков недостаточно.
А я создал массив и каждое число проверял, и если были повторы, менял на случайное и снова проверял и менял, так поэлементно. Всё получилось. Здесь как раз мы сначала число генерируем, а потом проверяем на совпадение со всеми элементами массива и отбраковываем, либо присваиваем его следующему элементу. Всё элементарно, оказывается. Изящно, я бы сказал.
Главное правило. Не пить слабые алкогольные напитки во время и перед учебой.
Так и ничего и не понял.
На следующий день - всё понятно, разобрался.
Сергей, спасибо за разбор домашнего задания, оно оказалось сложным, но после ваших объяснений и самостоятельной работы с отладчиком все стало понятно.
Иногда без 100 грамм не разобраться
Переписывал код 5 раз, но это это того стоило, правда, у меня вышло все иначе но код рабочий, создал другой массив в котором содержались числа от 1 до 20 и был цикл который при создании нового элемента заменял идентичное число 20 (имхо так как это число не могло сгенерироваться) и все заработала
Вау, сам не догадался, но после работы с отладчиком разобрался, спасибо!
Ееееее, когда делал ДЗ, я написал более оптимальное решение!!! Не кардинально, но, как мне кажется, лучше! Для нуба - это круто!!!
for (int i = 0; i < LENGTH; i++)
{
mass[i] = rand() % 20;
for (int j = 0; j < i; j++)
{
if (mass[i] == mass[j])
{
mass[i] = rand() % 20;
j = -1;
}
}
}
Действительно, вполне логично. Спасибо за подсказку!
Я долго с этим кудахтался, пока с for не перешел на while. Совсем по своему получилось, зато работает
Получилось в итоге вот:
int main()
{
int err=1, num, size=10, x=20, i=0;
int cell[size];
srand(time(0));
for (int i; i
Блиннн.Смотрела твои уроки про массивы и ты там сказал если не знаете как заполнять рандомными числами ,то смотрите предыдущий урок.Так я пришла сюда.Затем ты здесь сказал смотреть предыдущий урок если не знаете что это такое😮Я пошла смотреть твой предыдущий урок
В этом видео показана ещё одна интересная фишка для работы с отладчиком.
Чё за видео? Кинь сюда, Учитель!
Всё понял, про то, что можно в отладчике другие цифры вбивать. Хороша фишка. Только у меня не работает так отладчик. Снимите видео, как его правильно настроить.
а у тебя какого года VS?
17
Самолайк залог успеха.
2 года назад уже выполнял это задание
сейчас снова занялся программированием и дошёл до этого задания, думал несколько часов, слооооожно. Решил только после просмотра видео
все доходчиво и понятно, спасибо за труды
Может это кому-то покажется проще. Спасибо за уроки!
int main()
{
setlocale(LC_ALL, "Rus");
srand(time(NULL));
const short SIZE = 10;
short a[SIZE];
for (short i = 0; i < SIZE; i++)
{
a[i] = rand() % 20;
for (short t = 0; t < i; t++)
{
if (a[i] == a[t])
{
i--;
break;
}
}
}
for (short i = 0; i < SIZE; i++)
{
cout
Лол. У меня почти такой же как и у тебя) Только я воспользовался гоуту
const int size = 10;
int array[size];
for (int i = 0; i < size; i++) {
array[i] = rand() % 20;
loop:
for (int j = 0; j < i; j++) {
if (array[j] == array[i]){
array[i] = rand() % 20;
goto loop;
}
}
}
for (int i = 0; i < 10; i++)
{
cout
Привет, можешь кратко объяснить почему i - - ?
@@ЭдуардЛьвович-ъ4о второй цикл, в котором i--, предназначен для проверки на существование точно такого же числа. Если такое число уже имеется, то необходимо запустить конкретно для этой переменной цикл ещё раз, т.к. при завершении первого цикла i увеличится на единицу, его(i) необходимо заранее уменьшить.
@@ivanberezhanskyi жиза
@@ivanberezhanskyi как успехи? уже прошел курс?
Жесть, раз пять хотел уже глянуть ответ в ютубе но потом себя останавливал и спустя 3 часа таки сделал правда не как автор но все же работает)) Код сделал так что в консоли видно что там происходит, для тех кому интересно.
#include
#include
using namespace std;
int main()
{
setlocale(0, "");
int const SIZE = 10;
int arr[SIZE]{};
srand(time(NULL));
for (int i=0; i < SIZE; i++)
{
cout
Сочинял этот код 2 часа, получилось почти тоже самое что и в разборе, но во вложенном цикле допустил ошибку(если это конечно ошибка)
в условии выхода из цикла у меня было j < SIZE а у вас j < i. Спасибо за уроки!
Очень подробно рассказано!
Выполняя это задание не просто создавал константный массив для заполнения его случайными числами. А написал программу с возможностью выбора количества генерируемых случайных чисел. И с возможностью задать границ, в диапазоне между которыми должны быть значения сгенерированых чисел. В процессе поиска "границ возможного" и ошибок обнаружил, что используемая библиотечная функция генерирует числа только в пределах "половины типа short" - от нуля и до 32 767. Думаю, это стоит отметить в задании ))
Задачка легкая, но это не помешало ей убедить меня взять листок и нарисовать схему. Я ещё не смотрел это видео, потому-что гордость велила разобраться самому. Теперь когда я из (как такое простое задание может занимать столько времени и сил) перешёл в (Сам все сделал по красоте) мое ЧСВ выросло до уровня джуна. Короч я написал код который перед тем как заполнять массив рандом чисел кидает их в временную переменную которая в свою очередь циклом проходит по каждому сектору массива. Для этого в начальном состоянии массива сделал так чтоб неинициализированные переменные были нулями. Int mass[ten] = {}; а после сверять временную переменную с каждым нулем и в итоге цикл будет заполнять 0 числами и с каждым новым числом проходить проверку на повторение.
Спасибо за уроки!!!
Лично я решил с помощью goto
Отличное задание.
Я его так решил 😉
int const SIZE = 20;
int const DIP = 20;
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand() % DIP;
int j = 0;
do
{
if (arr[i] == arr[j])
{
arr[i] = rand() % DIP;
j = -1;
}
j++;
} while (j < i);
}
как успехи?
Довольно интересное решение с логической переменной для итерации
Видно, не один я не смог решить это задание. Оно сложное для меня
Я тоже не смог, но как сказал мой одногруппник: "все с опытом придет. главное не бросать это дело". =)
@@ИгорьРевенков-я8г Одногруппник прав. Спустя 2 года изучения плюсов в универе меня пригласили на собес в компанию
@@ЕвгенийСорочук-з6у круто. Спс вам за мотивацию.)
@@ЕвгенийСорочук-з6у и как там?)
@@ЕвгенийСорочук-з6у вау, это очень мотивирует, потому что когда что-то не получается то начинаешь думать что ты очень тупой для программирования или просто что это не твоё, но ваш комментарий теперь будет для меня пинком
Я тоже долго не мог понять как реализовать. Во время еды меня осенило и я побежал записывать пока не забыл)
Можно ещё сделать чтобы потом все эти цифры выводились в строку по возрастанию или убыванию) во тема для ДЗ)
Почти угадал с следующим ДЗ)
Йепать, бро. Да это прям для шевеления извилинами превосходно подходит! И для итерации головной боли от урока к уроку 😀😀😀
Не получилось к сожалению сделать. Понял что цикл нужен и if проверка, но не допёр делать булевую переменную))) попробую второе задание
То же самое, не додумался сделать через bool, пытался написать собственный велосипед, в итоге не получалось либо нормально выйти из цикла, не сломав ничего, либо код ломался полностью.
А я без bool справился 😋
Не обязательно делать булевую, это понты.
Можно и интовую с присваиваеванием ей значений 0 или 1. А потом проверкой значений и на основании проверки дальнейшими действиями.
Но для понтов есть буль :)
@@vitusink6445 а можно вообще без дополнительной переменной: и без булевой, и без интовой.
@@philomelnightingale6263 И как?
Если вывести через сиаут описание того что делается в каждом цикле и значения переменных получается такой забавный лог в консоли:
Отработал первый цикл, сгенерированно число: 3
Присваиваю в ячейку массива: 0 значение: 3
Отработал первый цикл, сгенерированно число: 2
Проверяю массив: 3
Присваиваю в ячейку массива: 1 значение: 2
Отработал первый цикл, сгенерированно число: 3
Проверяю массив: 3
Нашел повторение: 3
Отработал первый цикл, сгенерированно число: 6
Проверяю массив: 3
Проверяю массив: 2
Присваиваю в ячейку массива: 2 значение: 6
Отработал первый цикл, сгенерированно число: 1
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Присваиваю в ячейку массива: 3 значение: 1
Отработал первый цикл, сгенерированно число: 8
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Присваиваю в ячейку массива: 4 значение: 8
Отработал первый цикл, сгенерированно число: 4
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Присваиваю в ячейку массива: 5 значение: 4
Отработал первый цикл, сгенерированно число: 5
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Присваиваю в ячейку массива: 6 значение: 5
Отработал первый цикл, сгенерированно число: 9
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Присваиваю в ячейку массива: 7 значение: 9
Отработал первый цикл, сгенерированно число: 9
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Проверяю массив: 9
Нашел повторение: 9
Отработал первый цикл, сгенерированно число: 9
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Проверяю массив: 9
Нашел повторение: 9
Отработал первый цикл, сгенерированно число: 7
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Проверяю массив: 9
Присваиваю в ячейку массива: 8 значение: 7
Отработал первый цикл, сгенерированно число: 3
Проверяю массив: 3
Нашел повторение: 3
Отработал первый цикл, сгенерированно число: 7
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Проверяю массив: 9
Проверяю массив: 7
Нашел повторение: 7
Отработал первый цикл, сгенерированно число: 8
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Нашел повторение: 8
Отработал первый цикл, сгенерированно число: 6
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Нашел повторение: 6
Отработал первый цикл, сгенерированно число: 7
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Проверяю массив: 9
Проверяю массив: 7
Нашел повторение: 7
Отработал первый цикл, сгенерированно число: 2
Проверяю массив: 3
Проверяю массив: 2
Нашел повторение: 2
Отработал первый цикл, сгенерированно число: 4
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Нашел повторение: 4
Отработал первый цикл, сгенерированно число: 5
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Нашел повторение: 5
Отработал первый цикл, сгенерированно число: 5
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Нашел повторение: 5
Отработал первый цикл, сгенерированно число: 7
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Проверяю массив: 9
Проверяю массив: 7
Нашел повторение: 7
Отработал первый цикл, сгенерированно число: 5
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Нашел повторение: 5
Отработал первый цикл, сгенерированно число: 3
Проверяю массив: 3
Нашел повторение: 3
Отработал первый цикл, сгенерированно число: 0
Проверяю массив: 3
Проверяю массив: 2
Проверяю массив: 6
Проверяю массив: 1
Проверяю массив: 8
Проверяю массив: 4
Проверяю массив: 5
Проверяю массив: 9
Проверяю массив: 7
Присваиваю в ячейку массива: 9 значение: 0
3
2
6
1
8
4
5
9
7
0
Для продолжения нажмите любую клавишу . . .
int arr7[SIZEARRAY];
for (int i = 0; i < SIZEARRAY; i++)
{
arr7[i] = rand() % 20;
for (int j = i-1; j >= 0; j--)
{
if (arr7[i]==arr7[j])
{
arr7[i] = rand() % 20;
j+i;
}
}
cout
Оххх капец я на этом задание просидел дня 3-4 думал все и не как не мог придумать решения пока не посмотрел метод сортировки и после него еще час сидел и думал, и все придумал спустя время все тщательно проверяя в отладке, я его выполнил с использованием goto!!!
Задача действительно была сложной, заняла 2 дня, в сумме часов 6, однако была выполнена полностью и самостоятельно, вот таких задач хочется видеть больше
Здравствуйте!
Я являюсь новичком в программировании на С++.
Но считаю, что код написанный мной (приведенный далее) более эффективен, чем тот который изложен автором на видео.
Так как в моём коде используется одно условие IF вместо двух, и не происходит прыжков из вложенного цикла в первый цикл, а потом обратно во вложенный для проведения повторной операции для одного и того же элемента массива.
При малом количестве элементов массива конечно это не будет заметно, но например если задать размер массива более 30000, то думаю будет заметна разница (хотя у меня дальше 32768 элемента почему то не идет, почему не разбирался).
А вообще спасибо автору за отличные уроки!!! :)
-----------------------------------------------------------------------
int i, n, rnd; //Объявление переменных
const int SIZE = 200; //Размер массива
srand(time(NULL))
//ГЕНЕРАЦИЯ МАССИВА С ПРОВЕРКОЙ НА СОВПАДЕНИЯ
for (i = 0; i < SIZE; i++)
{
cout
Диапазон типа int начинается с -32768 до 32768, такое свойство интересное, поэтому и 32768 это последнее число.
srand(time(NULL));
я вообще пошёл через второй массив, в который записал значения, которые могут попасться по условию задачи, потом я начал сравнивать полученное число со вторым массивом и записывать в тот индекс о, а в случае когда мы попали в тот же индекс массива то начинаем перебирать второй с 0 до 20 и первое свободное значение мы записываем в массив который выводим на экран... Вообщем, очень круто! спасибо
int const SIZE = 10;
int array[SIZE];
int between;
int arrayTwo[20]; //second array with space equal amount of your available random numbers
bool help;
for (int i = 0; i
Самое интересное ДЗ. Сделал практически так же) только с небольшой вариацией:
#include
#include
using namespace std;
void main()
{
setlocale(LC_ALL, "ru");
// Массив на 10 элементов, числа от 0 до 20 без одинаковых значений
srand(time(NULL));
const int SIZE = 10;
int MyArray[SIZE];
int Var;
bool IsExist;
//Если забить массив 0 - то это нехорошо, т.к. противоречит условию, что ВСЕ числа должны быть рандомными
//Если не забивать массив никак - там будут случайные числа, но полученные НЕ методом rand
//Поэтому забьем массив числом 21;
for (int i = 0; i < SIZE; i++)
{
MyArray[i] = 21;
}
for (int i = 0; i < SIZE; )
{
Var = rand() % 20;
IsExist = false;
for (int a = 0; a < i; a++)
{
if (MyArray[a]==Var)
{
IsExist = true;
break;
}
}
if (!IsExist)
{
MyArray[i] = Var;
i++;
}
}
for (int i = 0; i < SIZE; i++)
{
cout
Первая из домашек, что не додумался, с начала курса(( Радует, что не один я... Может еще есть шанс?))
Как прогресс?)Сам сижу на этой задаче несколько дней(
все домашки до,были трудноватые но после просмотра все понимал и делал сам.Но эта задачка трудна,вазможно из-за недостатка знаний в теме функций.вернусь позже сюда и пересмотрю этот урок,в скором времени.
Так проще и быстрей:
int const SIZE = 10;
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
{
link:
arr[i] = rand()%20;
for (int i2 = 0; i2 < i; i2++)
{
if (arr[i] == arr[i2])
{
goto link;
}
}
}
Согласен. Пока так и не понял в чем провинился GOTO.
@@AOKostyuk он делает код нечитабельным и существует только для того, чтобы работал старый код, написанный с ним. Но под такую мелкую задачу он отлично подходит.
сделал это задание логически подумав, как это должно работать, и это не работало, хотя не понимал почему не работает, т.к. по логике все правильно, потратил кучу времени чтобы понять что не так, пока не решил запустить через дебагер и тогда я понял, что не задал значение переменным в цикле, а просто объявил их, так что если что-то не получается не забывайте про дебагер, полезная штука, можно себе кучу времени сэкономить
Замечательный курс
жесть,я ишел в правильном направлении но до конца никак не додумал как сделать,спасибо за обьяснения
* Самые понятные, видео уроки по c++, на всём (RU) youtube *
Крутое и понятное
решение!
ЗЫ: Спасибище за уроки (:
Очень доступно и качественно
Переменную alreadyThere лучше объявлять и инициализировать внутри цикла, сделал его область видимости более локальной.
Ну, можно сказать... ходил я рядом.
Вот одна из моих попыток.
Я и костыли пробовал делать, с помощью 9 ветвлений if(). Если повезло, то массив заполнился полностью, естественно уникальными числами. Если не повезло, то массив заполнялся не полностью, т.к повторяющиеся цифры отбрасывались, а нормальное условие для новой генерации нового числа на незаполненную ячейку я не смог сделать.
Ну, я догадывался, что по-любому нужен вложенный цикл, и оператор ветвления. Эх, печально.
Но, это не повод бросать изучение языка программирования, опыт все таки имеет свойство накапливаться, да и мышление может меняться, как ты пишешь код.
Я лет 5-6 назад тоже начинал заниматься программированием, в школе еще, тогда поленился подумать и бросил изучение, думал не мое. Но недавно вернуться решил в программирование, т.к все таки хочется. есть свои причины и желания. Конечно пожалел, что тогда отступил, все таки сколько времени упустил, за это время даже если бы шел маленькими шажками, то вероятно даже и программистом мог бы уже работать.
Еще слово про опыт. Как раз таки причиной ухода, была школьная олимпиада по ЯП. Там была задачка на палиндром, которую я не смог решить. Когда вернулся в изучение ЯП, попалась задачка на палиндром, которую я решил, немного подумав над ней.
Помню сидел над этим) ну, это кажется легким спустя время
Какой-то длинный код. Я используя предыдущие уроки написал так:
For (int i = 0; i < size; i++)
{
arr[i] = rand()%20;
For (int j = 0; j < i; j++)
{
If (arr[i] == arr[j])
{
i--;
Continue;
}
}
}
Работает, как надо, меньше переменных, короче код
Я тоже такой код написал:
massiv[0] = rand() % 20;
for (int i = 1; i < SIZE; i++)
{
massiv[i] = rand() % 20;
for (int j = 0; j < i; j++)
{
if (massiv[i] == massiv[j])
{
i--;
}
}
}
for (int i = 0; i < SIZE; i++)
{
cout
а вот если после i-- gjcnfdbnm j=i, то проверятся будет до первого совпадения и код короче.
Реализовал иначе. Если найдено совпадение, применял i-- чтобы вернуться на элемент и перезаписать в него случайное число
оп, я также сделал
Спасибо! Пригодилось для игры Бык и Коровы.
может такой вариант для кого-то окажется проще:
int const SIZE = 10;
int arr[10];
for (int n = 0; n < SIZE; n++)
{
arr[n] = rand() % 20;
for (int i = 0; i < n; i++)
{
if (arr[n] == arr[i])
{
n--;
break;
}
}
}
for (int i = 0; i < SIZE; i++)
{
cout
Скажу как есть. Я не смогу сам это сделать. Теперь можно поливать меня помоями
Слишком морочный код, рациональней сделать так:
int main()
{
setlocale(LC_ALL, "ru");
int const size = 5;
int mass[size];
int randomBox;
srand(time(NULL));
for (int i = 0; i < size; i++)
{
randomBox = rand()% size;
for (int j = 0; j
Вот так на много проще используя всего один if:
const int size = 10;
int random, arr[size];
srand(time(NULL));
for (int i = 0; i < size; i++)
{
random = rand() % 20;
for (int b = 0; b < size; b++)
{
if (arr[b] == random)
{
random = rand() % 20;
b = -1;
}
}
arr[i] = random;
cout
Почти такой же код написал, но во втором for ограничителем можно поставить i, а не size, чтобы лишние циклы не прогонять
Еле сделал, знал, что тут многие могут сдаться) , получилось вот так вот, это число цикл проверки. Ещё в конце сделал сумму чисел массива, и она всегда равна 190, значит всё правильно, хотя в начале сделал через goto xD(возвращал код до начала всего цикла), а потом понял, что нужно просто поставить m=0,j=0.
for (int j = 0; j < SIZE; j++)
{
for (int m = 0; m < SIZE; m++)
{
if (m == j)
{
continue;
}
if (arr[m] == arr[j])
{
arr[j] = rand() % 20;
m = 0;
j = 0;
}
}
}
Немного забегая вперед с минимальным значением, но все работает, и тоже код получился чуть короче:
void main()
{
setlocale(LC_ALL, "RUS");
srand(time(NULL));
const int SIZE = 10;
int arr[SIZE];
int maxrangevalue = 20;
int minvalue = maxrangevalue;
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand() % maxrangevalue;
for (int j = 0; j < i; j++)
{
if (arr[j] == arr[i])
{
arr[i] = rand() % maxrangevalue;
j = -1;
}
}
if (arr[i] < minvalue)
{
minvalue = arr[i];
}
cout
Вот что значит оптимизировать алгоритм. А я нафигачил так что сначала все записывается в память, а потом проверяется, и если есть совпадения, то генерится и записывается заново во все ячейки))) Но вывел себе в консоль подсказку какое число и в каких ячейках совпало))) Будем думать. Все что до этого смотрел запихал, и do while, и for, и goto))
Спасибо за урок!
Максимально непросто. Пожалуй, сложнейшее задание из всех вами выданных. Но, пожалуй, справился.
#include //библиотека, которую мы подключаем
#include
using namespace std;/*без этой штуки пришлось бы больше писать*/
/*
Операторы сравнения:
< - меньше
> - больше
= больше либо равно
Операторы равенства:
== - равно
!= - не равно
Логические операторы объединения и отрицательная инверсия:
&& - и
|| - или
!= - не
Конструкция логического выбора if:
Лесенка if - else if
if(утверждение или выражение)
{
действие 1;
}
Альтернатива if-else:
switch (какое-то значение)
{
case 1:
...;
break;
default:
...;
break;
}
while (утверждение)
{
действие для повторения;
}
do
{
} while (true);
for(...;...;...)
{
...
}
goto = бяка
ошибки:
1. не компилируется;
(f5 OR f10, f9 also)
*/
int main()
{
setlocale(LC_ALL, "ru");
srand(time(NULL));
int const SIZE = 20;
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
{
arr[i] = rand() % 100;
for (int q = 0; q < SIZE; q++)
{
if ((arr[i] == arr[q]) && (i != q))
while (arr[i] == arr[q])
{
arr[i] = rand() % 100;
}
}
}
for (int j = 0; j < SIZE; j++)
{
cout
Если кто не понимает, как работает проверка на уникальность и зачем декремент "i--", запустите этот код. Он выведет все этапы проверок и в конце полученный массив.
int main() {
setlocale(LC_ALL, "ru");
srand(time(NULL));
int const ARRAY_SIZE=10;
int range=20;
int flag=0;
int arr_1[ARRAY_SIZE];
for (int i = 0; i < ARRAY_SIZE; ++i) {
int x=rand()%range;
cout
Я справился с этим:
for(int i=0; i
Я почти сам сделал это задание, но не догадался с булевым значением , что так оказывается можно проверять. У меня была более сложная проверка он проверял весь массив и смотрел есть ли то рандомное чилсо в массиве
Как ни странно, додумался до почти того же, за исключением отсутствия проверочного alreadythere, но, тем не менее работает тоже исправно, занимает меньше строк(29) и ещё добавил личной прихотью увеличение всего массива на единицу, чтобы там нуля не было и было 20))
Мой вариант решения очень простой, в первом цикле задаются рандомные значения, во втором цикле берется значение arr[i] и сравнивается с остальными значениями в третьем цикле, если значение arr[i] совпадает с arr[j](другим элементом массива), то она дает новое рандомное число этой переменной и используется оператор goto go который заставляет программу опять перепроверить это же число еще раз, если все ок, то берется следующее
#include
#include
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
srand(time(NULL));
const int SIZE = 10;
int arr[SIZE];
for (int i = 0; i < SIZE; i++) {
arr[i] = rand() % 10;
}
for (int i = 0; i < SIZE; i++) {
go:for (int j = 0; j < SIZE; j++) {
if (arr[i] == arr[j] && i != j) {
arr[i] = rand() % 10;
goto go;
}
else {
}
}
cout
О, боже! goto? За что?!!
На держи, я исправил)
#include
#include
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
srand(time(NULL));
const int SIZE = 10;
int arr[SIZE];
for (int i = 0; i < SIZE; i++) {
arr[i] = rand() % 10;
}
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (arr[i] == arr[j] && i != j) {
arr[i] = rand() % 10;
j = 0;
}
else {
}
}
cout
Андрей Окси зачем else пустой писать?
Добрый день.
Возможно я тороплюсь с вопросом!!!
Но чем отличается библиотека от ???
Кстати у меня все работает без этих и не каких ошибок, почему так?
Первое, что пришло в голову - это сравнивать значение данного элемента со значениями предыдущих. Собственно дел на 15 минут.
#include
#include
using namespace std;
int main() {
setlocale(LC_ALL, "Rus");
srand(time(NULL));
const int SIZE = 10;
int arr[SIZE];
bool changing = false;
for (int i = 0; i < SIZE; i++)
{
for( ; ; )
{
arr[i] = rand() % 20;
if (i != 0)
{
for (int k = i - 1; k >= 0; k--)
{
if (arr[i] == arr[k])
{
changing = true;
break;
}
}
if (changing == true)
{
arr[i] = rand() % 20;
changing = false;
}
else
break;
}
else
break;
}
}
for (int i = 0; i < SIZE; i++)
{
cout
Самая простая реализация (числа другие, но суть одна. Использовал goto, хотя можно было бы и откат переменной конечно же, но хотелось попробовать)
int arr[10]{};
for (int i = 0; i < 10; i++) {
link:
arr[i] = rand()% 10 + 10;
for(int j = i-1; j >= 0;j--) {
if (arr[i] == arr[j])
goto link ;
}
}
фух, было сложно, но спасибо большое сам бы я такое дз не быстро сделал, и еще плюсом чуть шире стал смотреть на буливую переменную и массивы и так же на if & else, огромное спасибо сложная тема но усваивается хорошо))
Я бы момент после проверки сделал через гоу ту, пока такой вариант проверить не успел, надеюсь в пятницу смогу. Ваш вариант кстати не пришёл в голову, забыл что I++ можно потом написать после проверки дополнительной, было бы интересно потом сравнить скорость выполнения моего и вашего решений
Очень крутое задание!Я лично сначала как обычно заполнил массив,а потом занялся сортировкой ,сравнивая текущий элемент(например k) со всеми следующими после увеличивал k на единицу.Когда я доходил до максимального элемента отправлялся в обратное путешествие ,делая то же самое только в обратную сторону.Правда -это всё же неправильное решение ,ибо где-то на 10 итерации мне всё-таки попались одинаковые числа).Всё дело в том ,что когда я хожу вперёд и назад по массиву ,каждый раз числа позади текущего остаются в так называемой слепой зоне и я на них никак не влияю)Обидно,что не получилось решить ,но вся жизнь -это движение от поражения к поражению ,так что работаем дальше! ;)
Это неправильное решение(сам так сначала сделал) и одинаковые числа будут попадаться постоянно, если поставить диапазон rand равный кол-ву элементов массива, например. Но исправляется в одну строчку по сути: надо чтобы в ходе проверки при любом совпадении проверка сбрасывалась на самое начало и шла заново. Это костыль, но на малых числах работает хорошо.