неделя, 10 декември 2017 г.

Деление на числа (оператор /)

Делението на числа се извършва с оператора /. Той работи различно при цели и при дробни числа.
  • Когато делим две цели числа, се извършва целочислено деление и полученият резултат е цяло число с отрязана дробна част. Например 11 / 3 = 3.
  • Когато делим две числа, от които поне едното е дробно, се извършва дробно деление и полученият резултат е дробно число, както в математиката. Например 11 / 4.0 = 2.75. При невъзможност за точно разделяне, резултатът се закръгля, например 11.0 / 3 = 3.66666666666667.
  • Целочисленото деление на 0 предизвиква грешка по време на изпълнение (runtime exception).
  • Дробното деление на 0 не предизвиква грешка, а резултатът е +/- безкрайност или специалната стойност NaN. Например 5 / 0.0 = ∞.
Ето няколко примера за използване на оператора за делене:
int a = 25;
int i = a / 4;      // извършваме т.нар. целочислено деление:
                    // резултатът от тази операция ще бъде 6 – дробната част се отрязва, 
                    // тъй като извършваме деление с цели числа
double f = a / 4.0;    // 6.25 – дробно деление. Изрично сме указали числото 4 да се интерпретира
                    // като дробно, като сме добавили десетичната точка, следвана от нула
int error = a / 0;  // Грешка: целочислено деление на 0
Да разгледаме и няколко примера за целочислено деление (запомнете, че при деление на цели числа в езика C# резултатът е цяло число):
Да разгледаме няколко примера за деление на дробни числа. При дробно делене резултатът винаги е дробно число и деленето никога не дава грешка и работи коректно със специалните стойности +∞ и -∞:
При отпечатването на стойностите  и -∞ на конзолата може да излязат ?, защото конзолата в Windows не поддържа коректно Unicode и поврежда повечето нестандартни символи, букви и специални знаци. Горният пример най-вероятно ще изведе следния резултат:
+
7.5
?
-?
NaN

Съединяване на текст и число

Операторът + освен за събиране на числа служи и за съединяване на текст (долепяне на два символни низа един след друг). В програмирането съединяване на текст с текст или с число наричаме "конкатенация". Ето как можем да съединяваме текст и число с оператора +:
Забелязвате ли нещо странно? Може би очаквахте числата a и b да се сумират? Всъщност конкатенацията работи отляво надясно и горният резултат е абсолютно коректен. Ако искаме да сумираме числата, ще трябва да ползваме скоби, за да променим реда на изпълнение на операциите:

Числени изрази

В програмирането можем да пресмятаме и числови изрази, например:
var expr = (3 + 5) * (42);
В сила е стандартното правило за приоритетите на аритметичните операции: умножение и деление се извършват винаги преди събиране и изваждане. При наличие на израз в скоби, той се изчислява пръв, но ние знаем всичко това от училищната математика.
+

Пример1: изчисляване на лице на трапец

Да напишем програма, която въвежда дължините на двете основи на трапец и неговата височина (по едно дробно число на ред) и пресмята лицето на трапеца по стандартната математическа формула:
Ако стартираме програмата и въведем за страните съответно 34 и 5, ще получим следния резултат:
+
3
4
5
Trapezoid area = 17.5

Пример2: периметър и лице на кръг

Нека напишем програма, която при въвеждане радиуса r на кръг изчислява лицето и периметъра на кръга / окръжността.
+
Формули:
  • Лице = π * r * r
  • Периметър = 2 * π * r
  • π ≈ 3.14159265358979323846…
Нека изпробваме програмата с радиус r = 10:

Пример3: лице на правоъгълник в равнината

Правоъгълник е зададен с координатите на два от своите два срещуположни ъгъла. Да се пресметнат площта и периметъра му:
rectangleArea
В тази задача трябва да съобразим, че ако от по-големия x извадим по-малкия x, ще получим дължината на правоъгълника. Аналогично, ако от по-големия y извадим по-малкия y, ще получим височината на правоъгълника. Остава да умножим двете страни. Ето примерна имплементация на описаната логика:

Използваме Math.Max(a, b), за да намерим по-голямата измежду стойностите a и b и аналогично Math.Min(a, b) за намиране на по-малката от двете стойности.
При стартиране на програмата със стойностите от координатната система в условието, получаваме следния резултат: