Страница 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 < у ? x : y; </b>
<b> bool first = true;</b>
<b> least = 1; </b>
<b> greatest = 1;</b>
<b> // Найти наименьший и наибольший общий множитель. </b>
<b> for(i=2; i <= max/2 + 1; i++) {</b>
<b> if( ((y%i)==0) & ((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("Наименьший общий множитель " +</b>
<b> "чисел 231 и 105 равен " + lcf) ;</b>
<b> Console.WriteLine("Наибольший общий множитель " +</b>
<b> "чисел 231 и 105 равен " + gcf);</b>
<b> }</b>
<b> else</b>
<b> Console.WriteLine("Общий множитель у чисел 35 и 49 отсутствует.");</b>
<b> if(ob.HasComFactor(35, 51, out lcf, out gcf)) {</b>
<b> Console.WriteLine("Наименьший общий множитель " +</b>
<b> "чисел 35 и 51 равен " + lcf);</b>
<b> Console.WriteLine("Наибольший общий множитель " +</b>
<b> "чисел 35 и 51 равен " + gcf);</b>
<b> }</b>
<b> else</b>
<b> Console.WriteLine("Общий множитель у чисел 35 и 51 отсутствует.");</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>