Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2023, 21:58   #21
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

В книге, пожалуй, не совсем удачно сформулировали. Т.к. card имеет диапазон значений от 0 до 51, то "card / 13" будет иметь диапазон от 0 до 3. Это не способ получения случайных значений в диапазоне от 0 до 3, а констатация факта. Например:
Код:
int val = rand_0toN1(50); // диапазон от 0 до 49
r = val % 10; // младший разряд числа val, диапазон от 0 до 9
s = val / 10; // старший разряд числа val, диапазон от 0 до 4
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 04.03.2023, 23:05   #22
Damyen
Пользователь
 
Регистрация: 14.03.2022
Сообщений: 32
По умолчанию

А разве card/13 будет сужать диапазон? Разве функция сначала не получит случайное значение card, а потом его разделит на 13 ?
Damyen вне форума Ответить с цитированием
Старый 05.03.2023, 04:12   #23
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от Damyen Посмотреть сообщение
Разве функция сначала не получит случайное значение card, а потом его разделит на 13 ?
Да, но тем самым сузит диапазон значений s. Поделите каждое число из диапазона от 0 до 51 на 13 и получите новый диапазон (от 0 до 3).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.03.2023, 21:56   #24
Damyen
Пользователь
 
Регистрация: 14.03.2022
Сообщений: 32
По умолчанию

Спасибо. А почему в книге написано в нижней строчке, что значение переменной cards_remaining увеличивается на единицу? В той строчке, которую я пометил галкой, там же оператор декремента стоит (--). Он же уменьшает на единицу вроде.
Изображения
Тип файла: jpg Вопрос3.jpg (69.8 Кб, 1 просмотров)

Последний раз редактировалось Damyen; 06.03.2023 в 22:15.
Damyen вне форума Ответить с цитированием
Старый 06.03.2023, 22:28   #25
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Очевидная очепятка автора (переводчика).
macomics вне форума Ответить с цитированием
Старый 07.03.2023, 01:29   #26
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

macomics прав про опечатку. Старайтесь сверяться с книгой на оригинальном языке:
"Every time a card is drawn, this variable is decreased by 1."
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.03.2023, 13:34   #27
Damyen
Пользователь
 
Регистрация: 14.03.2022
Сообщений: 32
По умолчанию

А если объявить массив чисел за пределами основной функции main(), и не обозначить значения чисел внутри массива, то массив будет полностью заполнен нулями?
Damyen вне форума Ответить с цитированием
Старый 09.03.2023, 14:10   #28
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Damyen Посмотреть сообщение
А если объявить массив чисел за пределами основной функции main(), и не обозначить значения чисел внутри массива, то массив будет полностью заполнен нулями?
Такие массивы стоит воспринимать, как заполненные мусором. Не стоит думать, что они будут заполнены чем-то осмысленным. Но в целом да. Если массив объявляется в секции неинициализированных данных, тогда при загрузке программы эта секция будет обнулена (под неё будет выделена память заполненная нулевыми байтами). Но ещё раз повторю - на это не стоит полагаться, а считать, что в массиве мусор и его надо обнулить.

Ещё при использовании переменных из секции неинициализированных данных вы можете столкнуться с ошибкой повторного доступа. Скажем у вас есть функция, которая осуществляет манипуляции с такой переменной. Но при её первом вызове состояние переменной будет таким, как при загрузке программы, а при повторном уже нет. Если в расчётах функция полагает, что в переменной 0, тогда на выходе уже будет посчитанное значение, которое и останется в переменной до повторного вызова. И куда запутаннее дело будет, если переменной пользуются несколько функций. Тогда можно получить ситуацию, что при одних обстоятельствах первой вызвана одна функция, а при других - вторая. И тогда придётся искать ошибку отсутствующей инициализации общей переменной в неопределённых обстоятельствах.

Другое дело массивы выделяемые динамически. При запросе для них памяти вы можете указать необходимость её обнуления и тогда этим пользоваться (воспринимать массив как обнулённый).

А в целом компилятор на такое выдаёт ошибки и не получится оставить переменную без начальных значений.

Последний раз редактировалось macomics; 09.03.2023 в 14:23.
macomics вне форума Ответить с цитированием
Старый 09.03.2023, 20:01   #29
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

macomics, да вроде стандарты C и C++ гарантируют инициализацию нулями глобальных переменных.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.03.2023, 20:27   #30
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
вроде стандарты C и C++ гарантируют инициализацию нулями глобальных переменных
Но в случае с Windows и Linux приложениями этим занимается не C/C++ программа, а операционная система система. Не стоит на это полагаться.

И я описал случаи, когда это может создать не очевидные ошибки.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по C и C++ jonikster Общие вопросы C/C++ 25 17.11.2017 09:10
Вопросы Ilai Помощь студентам 5 29.10.2014 21:35
Вопросы по БД Rost93 PHP 9 28.06.2011 22:18
Вопросы по С++ Fantazerishka Общие вопросы C/C++ 2 19.05.2010 06:52