Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структура программы.doc
Скачиваний:
8
Добавлен:
23.12.2018
Размер:
162.3 Кб
Скачать

Структура и разновидности функций

В C#, как и в других языках, функции используют для двух целей:

  • Для написания алгоритмов, которые должны выполняться многократно с разными исходными данными.

  • Как средство структурирования программы: большие задачи целесообразно разделить на подзадачи, которые затем будут реализованы функциями.

Пример 1.

Найти номер первого отрицательного элемента в одномерном массиве, при отсутствии отрицательных возвращать отрицательное значение.

void Nom1(out int k, int []mas)

{

int i;

k=-8;

for(i=0;i<mas.Length;i++)

if(mas[i]<0){k=i;break;}

}

Параметр k получает значение в результате выполнения функции.

Второй вариант:

int Nom2(int []mas)

{

int i;

k=-8;

for(i=0;i<mas.Length;i++)

if(mas[i]<0){k=i;break;}

return k;

}

Пример 2.

Найти номер первого элемента одномерного массива в заданном интервале после заданного элемента. При его отсутствии – вернуть в качестве ответа заданный номер.

void Number(ref int k,double c1,double c2,double[]mas)

{

for(int i=k;i<mas.Length;i++)

if (mas[i] > c1 && mas[i] < c2) { k = i; break; }

}

Параметр k должен иметь значение до обращения к функции (отсутствие значения – синтаксическая ошибка!) и может менять своё значение в результате выполнения функции. Параметры с1 и с2 передаются по значению и могут быть лишь исходными данными в функции.

Использование в качестве параметров двумерных массивов, в том числе и неровных, не вносит ничего нового, и мы на этом останавливаться не будем.

Разновидности формальных параметров-переменных

Формальные параметры-переменные могут быть переданы как по значению, так и по ссылке.

По умолчанию – по значению.

Для организации передачи по ссылке используют ключевые слова:

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

оut позволяет получить в функции новое значение для параметра.

Использование массивов в качестве формальных/фактических параметров и в качестве результата функции

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

Процедурное программирование в c#

Функция из примера 1.

namespace ConApp3

{ class Program

{ static void Nom1(out int k, int[] mas)

{ int i;

k = -8;

for (i = 0; i < mas.Length; i++)

if (mas[i] < 0) { k = i; break; } }

static void Main(string[] args)

{ int[] m ={5,9,2,6,7,56,-100};

int p;

Nom1(out p, m);

if (p < 0) Console.WriteLine("Нет отрицательных");

else

Console.WriteLine("Номер элемента "+p);

Console.ReadLine(); } }}

Главная функция Main находится внутри класса Program и, поэтому имеет полное право работать его функциями с любым атрибутом доступа. Чтобы можно было вызывать функцию без создания экземпляра класса необходимо объявить функцию статической static. Обратите внимание на то, что и при вызове функции присутствует атрибут out.

Функция из примера 2.

namespace ConApp3

{ class Program

{ void Number(ref int k, double c1, double c2,double[] mas)

{ for (int i = k; i < mas.Length; i++)

if (mas[i] > c1 && mas[i] < c2)

{ k = i; break; } }

static void Main(string[] args)

{ double[] m ={5.1,9.4,2.7,6.8,7.1,56.8,100.0};

int q=2;

Program myclass = new Program(); //1

myclass.Number(ref q, 8.0, 15.0, m); //2

Console.WriteLine("Номер элемента "+q);

Console.ReadLine(); } } }

В этом примере описатель static отсутствует, поэтому перед вызовом функции необходимо создать экземпляр класса (строка // 1). После этого вызовы всех функций из класса Program выполняют через квалификатор (строка // 2). Обратите внимание на то, что и при вызове функции присутствует атрибут ref.

В завершение параграфа приведем пример, содержащий функции:

  • ввода массива,

  • обработки массива – нахождение среднего арифметического.

В отличие от многих языков программирования в C# результатом функции может быть и массив