Цикл преобразования 8-ми разрядов
for (char n = 7; n >= 0; n--)
if ((unsigned char)(b / Math::Pow(2, n)) == 1) {
s = s + "1"; // Добавление разряда
b = b - (unsigned char)Math::Pow(2, n); // Уменьшение b
}
Else
s = s + "0"; // Добавление разряда
return s;
}
int main() {
unsigned char b = 1, b2 = ~b;
Console::WriteLine("Инверсия разрядов целого числа (байта):");
Console::WriteLine("Значение байта без инверсии: {0,3}; " +
"двоичная форма: {1}", b, ByteToStr(b));
Console::WriteLine("Значение байта с инверсией: {0,3}; " +
"двоичная форма: {1}", b2, ByteToStr(b2));
Console::ReadLine();
return 0;
}
/* Вывод:
Инверсия разрядов целого числа (байта):
Значение байта без инверсии: 1; двоичная форма: 00000001
Значение байта с инверсией: 254; двоичная форма: 11111110
*/
Пример 2.9. Иллюстрация использования сдвиговых операторов.
#include "stdafx.h"
using namespace System;
// Преобразование беззнакового целого числа (1 байт) в двоичную форму
String^ ByteToStr(unsigned char b) {
Код функции смотри в примере 2.5
}
int main() {
unsigned char b = 1;
Console::WriteLine("Сдвиг разрядов целого числа (байта):");
for (unsigned char i = 0; i <= 8; i++) {
Console::WriteLine("Значение байта: {0,3}; " +
"двоичная форма: {1}", b, ByteToStr(b));
b <<= 1;
}
Console::ReadLine();
return 0;
}
/* Вывод:
Сдвиг разрядов целого числа (байта):
Значение байта: 1; двоичная форма: 00000001
Значение байта: 2; двоичная форма: 00000010
Значение байта: 4; двоичная форма: 00000100
|
|
Значение байта: 8; двоичная форма: 00001000
Значение байта: 16; двоичная форма: 00010000
Значение байта: 32; двоичная форма: 00100000
Значение байта: 64; двоичная форма: 01000000
Значение байта: 128; двоичная форма: 10000000
Значение байта: 0; двоичная форма: 00000000
*/
Условная операция ?: является единственной тернарной операцией (имеющей три операнда):
<условие> ? <выражение_1> : <выражение_2>;
Например:
int a = 1, b = 4, c;
c = (а > b) ? a : b; // Результат: c = 4
a = (c > 0) ? ++a : ++b; // Результат: a = 2
Методы класса System::Match
(http://msdn.microsoft.com/ru-ru/library/system.math)
Таблица 2.5. Поля и основные методы класса System::Math
Члены | Описание |
Поля | |
E | Представляет основание натурального логарифма, определяемое константой e = 2.71828182845904523536. |
PI | Представляет отношение длины окружности к ее диаметру, определяемое константой π = 3.14159265358979323846. |
Методы | |
double Abs(double d); | Возвращает модуль аргумента. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Int16, Int32, Int64) |
double Acos(double d); | Возвращает угол в радианах по его арккосинусу |
double Asin(double d); | Возвращает угол в радианах по его арксинусу |
double Atan(double d); | Возвращает угол в радианах по его арктангенсу |
long BigMul(int x, int y); | Возвращает произведение двух 32-разрядных чисел |
double Ceiling(double d); | Возвращает наименьшее целое число, которое больше или равно аргументу. Имеется перегруженный метод для типа Decimal |
double Cos(double d); | Возвращает косинус угла d в радианах |
double Cosh(double d); | Возвращает гиперболический косинус угла d в радианах |
int DivRen (int a, int b, out int R); | Возвращает результат деления двух целых чисел и остаток R как выходной параметр. Имеется перегруженный метод для типа Int64 |
double Exp(double d); | Возвращает Е в степени d |
double Floor(double d); | Возвращает наибольшее целое, которое меньше или равно заданному числу. Имеется перегруженный метод для типа Decimal |
double IEEERemainder (double a, double b); | Возвращает остаток от деления а на b |
double Log(double d); | Возвращает натуральный логарифм числа d. В перегруженном методе вторым параметром передается основание логарифма |
double Log10(double d); | Возвращает десятичный логарифм числа d |
double Max (double a, double b)); | Возвращает максимальное из двух чисел. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64) |
double Min (double a, double b); | Возвращает меньшее из двух чисел. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, UInt64) |
double Pow (double a, double b); | Возвращает результат возведения числа а в степень b |
double Round(double a); double Round (double a, Int32 n); | Округляет число а до ближайшего целого (или до n разрядов). Имеется перегруженный метод для типа Decimal |
int Sign(double a); | Возвращает -1, 0 или +1, когда число а, соответственно, меньше нуля, равно ему или больше нуля. Имеются перегруженные методы для всех математических типов (Decimal, Single, SByte, Int16, Int32, Int64) |
double Sin(double a); | Возвращает синус угла а в радианах |
double Sinh(double a); | Возвращает гиперболический синус угла а в радианах |
double Sqrt(double a); | Возвращает корень квадратный из а |
double Tan(double a); | Возвращает тангенс угла а в радианах |
double Tanh(double a); | Возвращает гиперболический тангенс угла а в радианах |
double Truncate(double a) | Возвращает целую часть заданного числа a. Имеется перегруженный метод для типа Decimal |
|
|
|
|
Пример 2.10. Использование методов класса System::Math для определения высоты, площади и углов трапеции по ее известным сторонам.
Дано: Трапеция ABCD; основания: a = 20 см, c = 10 см, бок. стороны: b = 8 см, d = 6 см. Найти: h, S, α, β. |
Формулы: (ф-ла Герона);
|
|
=> ;
;
sin α = h / b ; Ðαрад = arcsin α ; Ðαград = αрад · 180 / π ;
sin β = h / d ; Ð βрад = arcsin β ; Ð βград = βрад · 180 / π .
#include "stdafx.h"
using namespace System;
int main() {
double a = 20.0; // Большее основание
double c = 10.0; // Меньшее основание
double b = 8.0; // Левая сторона
double d = 6.0; // Правая сторона
Console::WriteLine("Основания трапеции равны {0} и {1} см, " +
"боковые стороны – {2} и {3} см", a, c, b, d);
Вычисление высоты трапеции
double p = (a - c + b + d) / 2.0;
double S_ABD = Math::Sqrt(p * (p - a + c) * (p - b) * (p - d));
double h = 2.0 * S_ABD / (a - c);
Console::WriteLine("Высота трапеции: " + h.ToString() + " см");
Вычисление площади трапеции
double S_ABCD = (a - c) * h / 2.0;
Console::WriteLine("Площадь трапеции: " +
S_ABCD.ToString() + " кв.см");
Дата добавления: 2018-04-05; просмотров: 299; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!