Добавить в цитаты Настройки чтения

Страница 94 из 502

<b>Целая часть числа равна 10 </b>

<b>Дробная часть числа равна 0.125</b>

Метод GetParts() возвращает два фрагмента информации. Во-первых, целую часть исходного числового значения переменной n обычным образом с помощью оператора return. И во-вторых, дробную часть этого значения посредством параметра fгас типа out. Как показывает данный пример, используя модификатор параметра out, можно организовать возврат двух значений из одного и того же метода.

Разумеется, никаких ограничений на применение параметров out в одном методе не существует. С их помощью из метода можно возвратить сколько угодно фрагментов информации. Рассмотрим пример применения двух параметров out. В этом примере программы метод HasComFactor() выполняет две функции. Во-первых, он определяет общий множитель (кроме 1) для двух целых чисел, возвращая логическое значение true, если у них имеется общий множитель, а иначе — логическое значение false. И во-вторых, он возвращает посредством параметров типа out наименьший и наибольший общий множитель двух чисел, если таковые обнаруживаются.

<b>// Использовать два параметра типа out. </b>

<b>using System; </b>

<b>class Num {</b>

<b>  /* Определить, имеется ли у числовых значений переменных х и v общий множитель. Если имеется, то * возвратить наименьший и наибольший множители посредством параметров типа out. */ </b>

<b>  public bool HasComFactor(int x, int y,</b>

<b>          out int least, out int greatest) {</b>

<b>  int i;</b>

<b>  int max = x &lt; у ? x : y; </b>

<b>  bool first = true;</b>

<b>  least = 1; </b>

<b>  greatest = 1;</b>

<b>  // Найти наименьший и наибольший общий множитель. </b>

<b>  for(i=2; i &lt;= max/2 + 1; i++) {</b>

<b>    if( ((y%i)==0) &amp; ((x%i)==0) ) {</b>

<b>      if (first) { </b>

<b>        least = i; </b>

<b>        first = false;</b>

<b>      }</b>

<b>      greatest = i;</b>

<b>    }</b>

<b>  }</b>

<b>  if(least != 1) </b>

<b>    return true; </b>

<b>  else </b>

<b>    return false;</b>

<b>  }</b>

<b>}</b>

<b>class DemoOut {</b>

<b>  static void Main() {</b>

<b>    Num ob = new Num(); </b>

<b>    int lcf, gcf;</b>

<b>    if(ob.HasComFactor(231, 105, out lcf, out gcf)) {</b>

<b>      Console.WriteLine(&quot;Наименьший общий множитель &quot; +</b>

<b>            &quot;чисел 231 и 105 равен &quot; + lcf) ;</b>

<b>      Console.WriteLine(&quot;Наибольший общий множитель &quot; +</b>

<b>            &quot;чисел 231 и 105 равен &quot; + gcf);</b>

<b>    }</b>

<b>    else</b>

<b>      Console.WriteLine(&quot;Общий множитель у чисел 35 и 49 отсутствует.&quot;);</b>

<b>    if(ob.HasComFactor(35, 51, out lcf, out gcf)) {</b>

<b>      Console.WriteLine(&quot;Наименьший общий множитель &quot; +</b>

<b>             &quot;чисел 35 и 51 равен &quot; + lcf);</b>

<b>      Console.WriteLine(&quot;Наибольший общий множитель &quot; +</b>

<b>             &quot;чисел 35 и 51 равен &quot; + gcf);</b>

<b>    }</b>

<b>    else</b>

<b>      Console.WriteLine(&quot;Общий множитель у чисел 35 и 51 отсутствует.&quot;);</b>

<b>  }</b>

<b>}</b>

Обратите внимание на то, что значения присваиваются переменным lcf и gcf в методе Main() до вызова метода HasComFactor(). Если бы параметры метода HasComFactor() были типа ref, а не out, это привело бы к ошибке. Данный метод возвращает логическое значение true или false, в зависимости от того, имеется ли общий множитель у двух целых чисел. Если он имеется, то посредством параметров типа out возвращаются наименьший и наибольший общий множитель этих чисел. Ниже приведен результат выполнения данной программы.

<b>Наименьший общий множитель чисел 231 и 105 равен 3 </b>

<b>Наибольший общий множитель чисел 231 и 105 равен 21 </b>

<b>Общий множитель у чисел 35 и 51 отсутствует.</b>