Цикл преобразования 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!