Думаю, поможет разобраться тем, кто плохо понимает принципы С++, да и сами программки кое в чём пригодятся. Всё, естественно, простое и консольное (хотя попробую потом перевести на графический интерфейс).
Если вы ну вообще не знаете С++, но хотите знать - вам для начала сюда: www.programmersclub.ru/main/
Квадратные уравнения и случайные числа
1. Школьникам посвящается: решение квадратных уравнений.
Скачать (открывать архив с помощью 7-Zip!)
Ну, с самой программой всё просто: вводим коэффициенты (можно даже дробные (в качестве разделителя используем точку), но не ставьте слишком много знаков после запятой - из-за особенностей типа float может выдать неточный результат) при иксе, программа вычисляет корни. Внимание: если дискриминант получится отрицательный, выведет комплексные корни. А теперь заглянем во внутренности - то бишь в исходный код:
Составлено по "новым" стандартам - многие include-файлы без расширения, плюс строка using namespace std;. Теперь по порядку (текста много, поэтому не использую комментарии в коде, а пишу отдельно):
1) Инклуды. iostream - стандартный заголовочный файл ввода-вывода, подключается практически во всех консольных программах. cmath - файл, содержащий описания математических функций (тригонометрические, извлечение квадратного корня, возведение в степень и т.п.). А locale - для отображения в консоли русских символов. Если вы изучали Basic или Pascal, то наверняка обращали внимание, что консольные программы вместо русских букв в выводимом тексте отображают кракозябры. Так вот, в С++ этого легко избежать аж двумя способами. Первый - подключение локали и особое оформление ввода-вывода. Второй - в Visual Studio и других современных средах можно настроить сохранение в DOS-кодировке (но для программ с графическим интерфейсом кодировку придётся опять менять, поэтому я предпочитаю первый способ).
2) wcout.imbue(locale(".866")); - эта строка задаёт расширенный вывод (wcout вместо стандартного cout) и использование кодировки DOS-866. Если в вашей программе нужна поддержка и кириллического ввода - продублируйте строку и замените wcout на wcin.
3) wcout << L"Введите коэффициенты: "; - каждый раз, когда программа должна выводить русский текст, перед открывающими кавычками поставьте L.
4) Ну а дальше - алгоритм решения: вычисление дискриминанта и корней. * - знак умножения. А sqrt() - извлечение квадратного корня, для чего нам и понадобилось включить cmath.
5) Обратите внимание на system("pause") в конце. Это добавлено для того, чтобы программа не закрывалась немедленно по выполнении, а ждала сигнала пользователя (нажатия любой клавиши).
2. Ролевикам посвящается - консольный дайсометатель.
Скачать
Принцип действия основан на генераторе случайных чисел в диапазонах, задаваемых пользователем (указываем число граней каждого дайса, потом число самих дайсов, и жмём Enter).
А здесь программа содержит уже 2 функции - стандартную main и пользовательскую diceroller (осуществляющую собственно "броски"). Обртите внимание: функция rand() генерирует псевдослучайные значения; чтобы сделать их истинно случайными, надо до неё вызвать srand(time(0)). Чтоб вызвать rand и srand, понадобилось включить stdlib.h (да, этот файл с расширением), а вот для time - time.h. Функция main выполняется первой, поэтому программа сначала запрашивает число граней и дайсов, потом вызывает srand, потом уже просчитывает собственно "бросок". Как это происходит:
1) Если вам нужно просто сгенерировать случайное число в диапазоне от нуля до некоего числа, то для этого достаточно вызвать rand()%<число или переменная>; (внимание! число генерируется в диапазоне от нуля до <указанное число>-1!). Если нижний предел должен быть отличен от нуля, то выражение принимает вид rand()%<число или переменная>+<минимальное число>;. В данном случае нам нужен диапазон от единицы до максимального номера грани, поэтому и +1.
2) Но дайс-то может понадобиться и не один! Соответственно, функцию придётся вызывать неопределённое заранее число раз, и при этом складывать все выдаваемые значения (если мы бросаем, к примеру, 2 обычных игральных кубика, и на одном выпало 3, на другом 5, то результаты складываются и получаем мы 8). Поэтому я использовала цикл while и 2 дополнительные переменные - counter и diceroll. diceroll показывает результат отдельного броска, а counter - вспомогательная переменная, начальное значение которой присваивается из числа дайсов (задаваемого пользователем). Цикл уменьшает значение counter за каждую итерацию и выполняется до тех пор, пока оно не достигнет нуля. А end_value - сумма бросков, обновляющаяся каждый раз (пока не знаю, как заставить отображаться только последнее значение).
3) А ещё вы можете задавать любое значение, лишь бы целое, так что это не только дайсомёт (или если вы разрабатываете ролевую систему и вам нужен нестандартный дайс, сия штука это с лёгкостью обеспечит).
В помощь изучающим программирование
Думаю, поможет разобраться тем, кто плохо понимает принципы С++, да и сами программки кое в чём пригодятся. Всё, естественно, простое и консольное (хотя попробую потом перевести на графический интерфейс).
Если вы ну вообще не знаете С++, но хотите знать - вам для начала сюда: www.programmersclub.ru/main/
Квадратные уравнения и случайные числа
Если вы ну вообще не знаете С++, но хотите знать - вам для начала сюда: www.programmersclub.ru/main/
Квадратные уравнения и случайные числа