Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_Информатика.docx
Скачиваний:
17
Добавлен:
16.09.2019
Размер:
1.33 Mб
Скачать

Вопрос 45. Организация методов в c#. Формальные и фактические параметры.

Подпрограммы – метод класса.

[атрибуты] [модификация] {void/Тип_результата} имя_метода ([список_формальных_параметров])

Static void Main()

Static int Summa (int n)

  1. Процедура – некоторое действие, которое ничего не возвращает. Вызов процедуры является оператором.

Static void Solve ()

{

Console.WriteLine(“Решение”);

}

Вызов: Solve()

  1. Функция – всегда вычисляет некоторое значение, возвращаемое в качестве результатов (используется в выражениях – стоит справа от знака присваивания).

Static double Pi()

{

Return 3.14;

}

Static void Main ()

{

Double R=15;

Double S=Pi()*R*R;

}

Параметры используются для обмена информацией с методом – локальная переменная, которая при вызове элемента принимает значение соответствующего аргумента. Область действия – весь метод.

Формальные – параметры, которые используются при объявлении метода, т.е. сигнатуре. Типы:

  1. Параметр-значение:

Тип метод (тип_параметра имя)

double f(double x) {}

Параметр значения не может быть изменен подпрограммой, так как метод получает копии значений аргументов.

int AmountDig (int x)

{

int count=0;

while(x>0)

{

count++;

x/=10;

}

return count;

}

Вызов:

Int c=AmountDig(x);

  1. Ссылочный параметр. Приставка ref. Подпрограмма может изменить значение передаваемого параметра, так как методу передаются копии адресов аргументов в памяти.

Тип_метода имя_метода (ref тип_параметра имя)

Swap (ref int a; ref int b)

{

int c=a;

a=b

b=c

}

int x=5;

int y=6

Вызов:

swap (ref x, ref y);

  1. Выходные параметры. Ключевое слово out. Параметру, отмеченному out внутри метода необходимо хотя бы один раз присвоить значение.

Static void Divide (int A, int B, out int Result, out int Remainder)

{

Result=A/B;

}

int x=10

int y=3;

int a,b;

Вызов:

Divide(x,y, out a, out b);

  1. Params – количество переменных неизвестно. Внутри метода к ним обращаются, как к обычным элементам массива. Должен быть только один и располагаться в конце списка аргументов:

Тип_метода имя_метода (params тип_параметра имя_параметра)

Console.WriteLine (string s; params object [] Args)

Метод называется перегруженным, если существует больше 1 метода с одинаковыми именами, отличающимися формальными параметрами.

Фактические – передаются в метод вместо формальных при вызове метода.

F=factorial (5);

Количество фактических параметров, их последовательность, типа должны строго соответствовать списку формальных параметров.

Рекурсия – метод вызывает сам себя (прямая рекурсия). Косвенная – два или более метода вызывают друг друга.

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

Static int fact (int n)

{

if (n==1||n==0) return 1; //терминальная ветвь (выход)

return n*fact(n-1); //рекурсивная ветвь

}

Восходящая рекурсия – ответ строится постепенно и передается в виде параметра рабочей памяти до тех пор, пока не будет достигнута терминальная ситуация.

static long fact(int n, long f)

{

if (n == 0 || n == 1) return f; //терминальная ветвь

return fact(n - 1, n * f); //рекурсивная ветвь

}

// При вызове fact(5,1) вызываются: fact(4,5), fact(3,20), fact(2,60), fact(1,120)