Информатика и технология программирования


           

Поэтому само по себе наличие


Поэтому само по себе наличие в выражении операнда большей разрядности еще не гарантирует правильности вычислений для больших значений. Это видно на примере, где используется переменная типа long для хранения произведения переменных типа int . Ошибка состоит в том, что операция умножения все равно будет производиться с целыми размерности int , что может привести к потере значащих цифр произведения:



int a,b; long c;
c = a * b; // Неправильно

c = (long)a * b; // Правильно

Операция присваивания, операция "
запятая" и условная операция позволяют выполнять многие действия "на лету", не выходя за пределы синтaксиса выражения в условных выражениях оперaторов if, while , например:



while ((c=getchar()) !='*') {...c...}

Здесь в переменной c запоминается результат функции, вызванной во время проверки условия в операторе while, с целью дальнейшего его использования в теле оператора.



while (x0=x1, x0 &#62 0) {... x1 =f(x0) ...}

Присваивание выполняется во время проверки условия в операторе цикла.



for (...; d&#62 0 ? a&#62b : b&#62=a; ...) {...}

В зависимости от значения переменной d меняется условие продолжения цикла for .

При наличии в программе нескольких вариантов выбора по группе условий программа становится "сильно ветвистой", например:



if (a&#60b)
if (a&#60c)
if (b&#60c) {...} // a &#60 b &#38&#38 a &#60 c &#38&#38 b &#60 c

else {...} // a &#60 b &#38&#38 a &#60 c &#38&#38 b &#62=c

else
if (b&#60c) {...} // a &#60 b &#38&#38 a &#62=c &#38&#38 b &#60 c

else {...} // a &#60 b &#38&#38 a &#62=c &#38&#38 b &#62=c

else ...

Можно воспользоваться тем, что операция сравнения дает целый результат (1 или 0) и сформировать переменную, принимающую уникальное значение для каждой комбинации сравнений. Тогда программа примет хотя и менее понятный, но зато более регулярный вид:



int n; n = (a &#60 b)*4 + (a &#60 c)*2 + (b &#60 c);
switch(n)
{
case 0:... break; // a &#62=b &#38&#38 a &#62=c &#38&#38 b &#62=c

case 7: ... break; // a &#60 b &#38&#38 a &#60 c &#38&#38 b &#60 c

}


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий