Изучение C++ для начинающих / #5 - Случайные числа. Разработка Калькулятора
ฝัง
- เผยแพร่เมื่อ 15 มิ.ย. 2024
- За урок вы научитесь создавать случайные числа, ознакомитесь с использованием пространства имен и дополнительно разработаете небольшую программу по типу калькулятора.
✅ Полезные ссылки:
- Курс по C++: itproger.com/course/cpp/5
⏰ Тайм-коды:
00:00 - Начало
00:20 - Получение данных от пользователя
02:40 - Проверка данных
06:45 - Использование Switch Case
09:35 - Математические операции
14:00 - Пространство имен
15:55 - Случайные числа
19:55 - Заключительная часть
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life 🚀
Инстаграм itProger: / itproger_official
Группа FaceBook - goo.gl/XW0aaP
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #itProger 👨🏼💻
- Все уроки по хештегу #itprogerLessons
хорошо что есть такие ролики ибо в универе уже задали решать задачки, а как начинающий с нуля, даже базы не знаю 😢 спасибо большое за труд ❤
Спасибо за такой огромный труд. Автор просто супер!!!
Спасибо за эти уроки, все понятно, качественно, подробно!
Курс супер классный, для меня, как будто в самом начале вы дали задание, сделать такой вот примитивненький калькулятор через if else и switch case, не смотря то, как напишите такую программу вы, я самостоятельно попытался изучить что мне было непонятно, и уже после самостоятельно мне удалось написать оба варианта, видя успех, и осознание того, что я понимаю что я делаю есть желание изучать c++ дальше))
Видики шикарны, смотрю на одном дыхании. Спасибо!
Очень благодарен за ваш труд.
Спасибо за столь ценные уроки!
А ще можна ось так от без else. Сьогодні експериментував )).
float a, b, c;
char p;
std::cin >> a;
std::cin >> b;
std::cin >> p;
if (p == '+') { c = a + b; }
if (p == '-') { c = a - b; }
if (p == '*') { c = a * b; }
if (p == '/') { c = a / b; }
std::cout
як я зрозумів тут мається на увазі без "else if" це не доречне використання логічних виразів так як буде перевірятись кожна умова хоча при вірності однієї з них інші вірними бути не можуть тому варто використовувати "else if" де після знаходження вірної умови наступні перевірятись не стануть
Спасибо за урок!
Спасибо за видео!
time(NULL) оч плохой вариант для seed. Потому что время выдаётся с точностью до секунды. Это оч плохо ибо если вы будете дёргать перезагрузку генератора случайных чисел чаще , а при последовательном вызове rand это почти наверняка у вас получится повторяющиеся последовательности случайных чисел. По сути эта функция выдаёт эту последовательность со сдвигом. Если мы хотим хорошую хаотичность то надо дёргать srand не реже чем через 16 генераций. И использовать для этого наносекундный таймер а не этот секундный. Если реже то числа или последовательности будут повторяться...и вобще для генерации лучше использовать не эту тупую функцию а получше, которая даёт длинную последовательность псевдослучайных чисел. Качество генератора случайных чисел или как говорят его энтропия это оч важный параметр Чем выше она тем лучше. Особенно это видно в играх которые постоянно генеярт всякие случайные числа. Если плохой генератор то игра будет так же плохой ваши персонажи и их поведение будет предсказуемым и в игру станет неинтересно играть! Это оч важная тема для тех кто собирается писать игрушки.
Приведи пример пж классной функции и как это все вписать
кто нибудь откройте форточку ...
он прав
Он прав@@mason4302
Спасибо за инфу
Спасибо автору!
Большое спасибо, полезно потратил время я считаю
Спасибо искал норм калкуятор для практики
Калькулятор: создан✅
Теперь я C++ разработчик
Ну дак а что ищо нужно😅
Готов к работе за 100к/мес, буду создавать сотни калькуляторов в смену)
Спасибо
Мы ждём 6-части
Большое спасибо, очень интересные уроки, решила учить в качестве хобби, мой потолок в компьютерах это включать диспетчер задач, но у вас всё очень понятно
как успехи?
Здравствуйте, можете помочь с этой ошибкой?
'rand' was not declared in this scope
Начал изучать плюсы после жс и питона. Ну в принципе пока что мне язык нравится.
Подскажите пожалуйста,, почему у меня на последней строке с res ошибка. Под res зеленая линия зигзагом, ПОЧЕМУ ТАК?
это ни на что не влияет
Зелёная линия в большинстве IDEA означает, что это слово не распознано. Скорее всего там просто синтаксическая ошибка (пока не посмотрел видео).
Нечего себе. Я с 1 по 5 урока буду втягивать информацию, но пока изучаю только теорию
тема с зависимостью рендера случайного числа от времени не раскрыта. В остальном огонь
заметил, что рандомные числа, которые создает эта функция всегда идут от меньшего к большему
1 > 7 > 17 > 27 > 34 и т.д
можно ли это как-то исправить?
У меня также
Реально
У меня такого нет...
Сдал?
Здравствуйте! Смотрю Ваш курс, очень нравится, все понимаю, хотя от программирования далек. Спасибо большое. Объясните, пожалуйста, как понять, куда ставить >, когда мы используем Cin и cout? В какую сторону стрелочки должны быть в каким случаях?
cout > потому что эту информацию получается вводят в программу, это я так понял этот материал
@@prettydazz cout имеет значение c вывод. std::cout num1; Показываешь что ввод пользователя нужно записать туды >> в перменную num1.
также можно было сделать и наоборот но для понятие ее людям сделали так и вообще все можно было сделать как в yoptaScript но это уже бред и учите машинный код а не эту фигню@@cryptedddd2940
дякую
18:25 мы вызываем в srand функцию time с параметром NULL srand(time(NULL)); и здесь ты говоришь что теперь мы не зависим от времени.
Разве не наоборот???
Как раз зависимость от текущего времени нам и позволяет получать различные значения в функции rand().
Или ты просто упростил для новичков чтобы не сбились ?
Или я не понимаю?
ты прав. тут не совсем рандомные числа генерируются. лучше изучить это самостоятельное. Используется линейный конгруэнтный метод, а srand устанавливает seed этой формулы
Вопрос по случайным числам. Заметил, что функция из видео генерирует случайные числа всегда в большую сторону. Поставил диапазон до 100. Числа всегда идут от меньшего к большему, а когда доходит до границы диапазона, то следующее число обязательно будет самым маленьким. А когда решил расширить диапазон чисел до 1000 и более, то заметил, что тенденция такая же. Но при этом увеличение идет незначительное, на 10-15 пунктов. Как сделать генерацию более рандомной?
за два часа залпом 5 видео посмотрел очень просто и интересно смотреть. Включил сокроть воспроизведение на 1.75 и кайфую
16:07 функция rand() не возвращает число между 0 и 1, она возвращает целое число в диапазоне от 0 до RAND_MAX. по дефолту RAND_MAX = 32767
почему-то пишет, что "rand" и
"srand" не объявлены (пишу на codeblocks)
С таким написание кода по рандомным числам последующие запуски программы всегда дают результат не сильно отличный от предыдущего в большую сторону. Все равно есть закономерность получения рандомных чисел. Как уйти от этого?
Никак) закономерность будет всегда, просто человек её предугадать не может
Можешь записывать последний запуск или завершение программы в файл (секунды с начала эпохи допустим) и при следующем запуске брать это число и от него уже через какую то функцию генерировать (допустим разделить на текущее время). Но мне хватало простой генерации от текущего времени
Лестница в небо. Бесконечно высокая. Но состоит из отдельных маленьких ступенек.
Преподаватель поднимается по ним плавно, не спеша, по порядку. С ним идти ЛЕГКО!
Классные видео, все понятно
Но такой вопрос: если человек в вел два числа допустим 5 и 0
На ноль делить нельзя, что в таком случае делать?
Я знаю что это вроде можно обойти, но как?
Можно при операции деления проверять num2, если 0 то выводить то что нельзя делить на ноль
Можно через try - catch
Обработка исключений, так как деление на ноль вызовет ошибку мы можем её поймать и вывести что на ноль делить нельзя, но вариант с проверкой мне нравится больше
можно более подробно о том, что значит зависимость от времени?
Значит что рандомное число, которое создалось не будет зависить от времени, к примеру то, что новое число сгенерируется через 5 минут.
@@HS-ng7hw спасибо большое! =)
Почему при вводе диапазона от 2 до 5 в ранде может выйти 6?
строчка int result = 2 + rand() % 5
нет операции деления с остатком потому что стандартная операция / выполняет не ту операцию для целых чисел. в компе такой операции нет, но а С++ да. по сути это неправильная её трактовка. И когда в школе проходят деление то так тоже не делают. Всегда когда делят нацело подразумевается неполное частное и остаток. Т.е 2 числа в качестве результата а не одно! Но в С++ так не запишешь. Хотя в Питоне к примеру легко. А в С++ можно вернуть только 1 число: либо неполное частное, либо остаток. Отсюда и 2 операции. Но на самом деле это одна операция выдающая сразу 2 числа. Есть функция div возвращающая сразу 2 числа. Но она работает только для знаковых чисел. Для беззнаковых такой функции нет...
А для чего функцию рандома прибавлять к единице? У меня и без единицы всё работает. Не понял этот момент
Это начало диапазона, можно установить нужное число, второе число количество чисел. Пример 3+rand()%15 - получите от3 до 18
Можно использовать using namespace std
как на macbook в консоли vscode убрать все ненужные данные?
по типу расположения файлов, репозиториев, подключения библиотек?
В консоли vs хз, а просто в консоли cls
Если я вас правильно понял, вы просто должны зайти в настройки, порыться и отключить ненужные окна
5.24, автор, если читаете комментарии, какая у вас ошибка? научитесь их признавать и объяснять, чтобы люди с полного нуля не лазили по всему интернету часами ища ответ. я лучше уйду к авторам которые "прошу прощения я ошибся, здесь надо по-другому сделать". в анрил энжин у вас так же, заговариваетесь и путаете местами определения. я не могу понять в чем моя ошибка, я только пытаюсь учиться, но если все сделано точь-в-точь как на видео, но при этом ваше видео обрезается на моменте ошибки и начинается с того момента где уже получилось компиллировать, о чем то это наверно говорит.
А как получить рандомный символ например я хочу получить символ умножения или вычитания ?
создашь список символов или строку из символов и таким же образом как он будешь создавать рандомный индекс и вытаскивать элемент с этим индексом из списка или строки))
num уже как родной
Спасибо за урок, у меня такая проблема, когда ввожу (char math;) конечно без скобок, у меня выдает ошибку "использование имени типа не допускается", в чем может быть проблема? предлагает записать как (char; math;).
и кстати когда уже написал (char math;) после нажатия на ентер, вся эта строка уходит правее, появляется отступ, как будто я нажал на tab, с чем это связано может быть
Нужно было весь код скинуть, а не часть
4:22 а если я напишу вот так :
if (math == '+')
std::cout
if (math == '+') {
std::cout
ну у меня просто там свои приколы, внешне прикольно чтобы выглядело тоже хотелось))00
харош
@@wave.xddzls2595
ошибкой не будет, просто лучше будет записать результат в определенную переменную, в дальнейшем тебе это пригодится
а у меня почему-то else if не работает
Товарищи, нужна помощь! Я, почему-то, не могу создать два исходных файла для проекта (ну, типо, 1 файл - 1 урок, а 2 файл - 2ой урок). Пишет, что не может найти исходный файл и так со всеми исходными файлами в проекте, но если оставить только один файл, то всё будет работать. Что делать?
Ошибка визуал студио это что-то с чем-то, попробуй использовать онлайн компилятор С++
Если у вас выдает ошибки, то просто напишите заново строку , а если не то , то не забывайте ставить ";" в конце
после ролика заметил что процент числа слишком скушный и сделал так чтобы первая переменная a находилась рандомом и делилась с б
покажите, как и где применяются сокращенные операции, не могу сообразить.
Допустим цикл for
for (int i = 0, i < 5; i++)
Тут первый параметр объявление переменной i типа int, дальше условие цикла - пока i < 5, а дальше что будет происходить с i на каждой итерации цикла - то есть прибавляется 1
Так же можно делать в while или do-while
while (i < 5) {
i++;
}
Ну так то много где, намного удобнее писать ведь так i = i + 1 → i += 1 → i++
А я так понял не про инкремент и декремент имелось ввиду.
Когда тебе нужно перезаписать переменную от себя же. Тоесть умножить на два будет вместо a = a * 2 → a *= 2
Когда захочешь и где захочешь
У меня ошибки хотя скорее всего из за вода на телефоне у меня нет компьютера но я делаю всё в точь в точь что не так у меня ошибки выводит 😢
если сдам экзамен по программирование на С++, то подпишусь. Он если что сегодня утром будет)
Сдал?
СДАЛ?
Мы переживаем)
Сдал?
CДАЛ?
Ну как, сдал или нет?
к меня выдает в результатах какую чушь посмотрите код он правильный
switch (math) {
case '+':num3 = num1 + num2; break;
case '-':num3 = num1 - num2; break;
case '*':num3 = num1 * num2; break;
case '/':num3 = num1 / num2; break;
}
он как будто рандомные значения выдает
Твои уроки очень полезны! Как же меня бесит что все команды на английском языке 😢
Возможно ли эти команды перевести на русский
Подскажите как вы так быстро выводите не копируя текст?
выделил текст и нажал Cntrl + C что бы скопировать и Cntrl + V что бы вставить
Удивительно но у меня тоже рандомное число именно 2
вот это удивление просто чудо нафиг как такое возможно ты чтоли маг волшебник или просто выбил число с шансом 5 к 100 и офигиваешь
ну по сути да выбил число с шансом 5 к 100 и офигиваю@@mason4302
а что надо нажать чтоб получить Error?
В коде идет проверка на "+, -, *, /"
И если эта проверка не нашла не одного из этих значений
То запуститься default который выдаст на экран текст с надписью error
ПОЧЕМУ У МЕНЯ С++ НЕ РАБОТАЕТ КОД БУКВАЛЬНО КАК У ТЕБЯ
; или :
Я немногг не понял, заяем случайные числа нужны
Ну рандом много где используется. Банально в игре - на сколько от 1 до 6 выпадет кубик? Или море других ситуаций.
@@user-rx9ve9bw1y а понял, спасибо
ну емае ну нельзя было раньше про пространство имен рассказать (
Про случайные числа плохо обьяснили
45 умножить на 2 будет 90? программа сработала неверно
ти че дурак?
А что не так? 45*2=90
10:23 бан
Default не работает
Что то не то пишешь наверное
А ВЫ НЕ ДУМАЛЯ ЧТО ПРОПИСАТЬ USING NAMESPACE STD БЫСТРЕЕ БЛЯТЬ