Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курс лекций CS (первый семестр)

.pdf
Скачиваний:
7
Добавлен:
20.05.2015
Размер:
2.69 Mб
Скачать

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Пример программы нахождения площади прямоугольника, заданной ширины и длины.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

 

{

 

class Program

 

{

 

static int S(int A,int B)

 

{

 

int Pl;

 

Pl=A*B;

// return A*B;

return Pl;

 

}

 

static void Main(string[] args)

 

{

 

int l,h,s;

Console.WriteLine("Какая длина?"); l=Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Какая ширина?"); h=Convert.ToInt32(Console.ReadLine()); s=S(l,h);

Console.WriteLine("Площадь равна {0}",s);

}

121

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

}

}

Результат.

Обычно оператор return является последним оператором функции, так как после его выполнения функция завершает свою работу даже, если он не является последним оператором функции. Управление передается на оператор следующий после вызова функции.

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

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static double Sr(int A,int B, bool t)

{

if (t)

return Math.Sqrt(A * B);

122

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

else

return (A + B)/2.0;

}

static void Main(string[] args)

{

Console.WriteLine("Среднее арифмитическое 2 и 3 равно

{0}",Sr(2,3,false)); Console.WriteLine("Среднее геометрическое 2 и 3 равно

{0}",Sr(2,3,true));

}

}

}

Результат.

123

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №18.

Работа с функциями.

В качестве входящих параметров в функцию можно передавать массивы.

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static int MaxValue(int[] intArray,int n)

{

int maxVal = intArray[0]; for (int i = 1; i < n; i++)

if (intArray[i] > maxVal) maxVal = intArray[i];

return maxVal;

}

static void Main(string[] args)

{

const int n = 10;

int[] myArray = new int [n]{ 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 }; int maxVal = MaxValue(myArray,n);

Console.WriteLine("The maximum value in myArray is {0}", maxVal);

}

}

}

124

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Результат:

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

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static int MaxValue(int[,] b,int k,int r)

{

int s = 0;

for (int i = 0; i < k; i++)

for (int j = 0; j < r; j++) s = s + b[i,j];

return s;

}

static void Main(string[] args)

{

Console.WriteLine("Количество строк?");

int n = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Количество столбцов?"); int m = Convert.ToInt32(Console.ReadLine());

125

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

int[,] myArray=new int [n,m]; for (int i=0;i<n;i++)

for(int j=0;j<m;j++) myArray[i,j]=i+j;

for (int i = 0; i < n; i++)

{

for (int j = 0; j < m; j++) Console.Write("{0}\t",myArray[i, j]);

Console.WriteLine();

}

int rez = MaxValue(myArray,n,m); Console.WriteLine("Сумма элементов массива {0}", rez);

}

}

}

Результат:

Массивы параметров.

В С# предусмотрена возможность задания одного (и только одного) специального параметра функции. Этот параметр, который обязательно должен располагаться последним, известен под названием массива параметров. Он позволяет при обращении к функциям использовать переменное количество параметров. Массив параметров описывается посредством ключевого слова params. Массивы параметров служат одним из способов упрощения кода, поскольку благодаря им не приходится передавать массивы из вызывающего кода. Напротив, можно передать несколько параметров одного и того же типа, которые помещаются в массив для последующего использования внутри функции.

126

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

При описании функции с массивом параметров применяется следующий код:

static <возвращаемыйТип> <имяФункции>(<п1Тип> <п1Имя>,…,params <тип>*+ <имя>)

{

return <возвращаемоеЗначение>;

}

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

<имяФункции> (<п1 >, . . . , <значение1>, <значение2>, . . .) ;

В данном случае <значение1>, <значение2> и т.д.— значения типа <тип>. Они используются для инициализации массива с именем <имя>. Никаких ограничений на количество параметров, которые могут быть здесь заданы, не существует; единственное предъявляемое к ним требование — они все должны быть одного типа <тип>. Можно вообще не задавать ни одного параметра.

Пример. Рассмотрим пример нахождения суммы заранее неизвестного числа слагаемых.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static int sumVals(params int[] vals)

{

int sum

= 0;

 

foreach

(int

val in vals)

sum

+= val;

127

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

return sum;

}

static void Main(string[] args)

{

int sum = sumVals(1, 5, 2, 9, 8) ; Console.WriteLine("Summed Values = {0}", sum);

}

}

}

Результат:

128

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №19.

Передача параметров по значению и по ссылке.

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

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Func(int k)

{

Console.WriteLine("\nМы в функции!");

Console.WriteLine("Передали значение k={0}", k);

k *= 2;

Console.WriteLine("Имеем k={0}", k);

}

static void Main(string[] args)

{

int x = 5;

Console.WriteLine("x={0}", x);

Func(x);

Console.WriteLine("\nПосле функции!");

Console.WriteLine("x={0}", x);

129

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

}

}

}

Результат.

Если необходимо, чтобы значение переменной, передаваемое в функцию менялось в функции, необходимо передавать параметр по ссылке. Это означает, что функция будет работать именно с той переменной, которая использовалась при вызове функции, а не с переменной, которая имеет то же значение. Следовательно, любые изменения переменной, использовавшейся функцией, отразятся на значении переменной, использовавшейся в качестве параметра. Для этого при описании параметра необходимо воспользоваться ключевым словом ref. Вторично ключевое слово ref необходимо использовать при вызове функции (это обязательное требование, поскольку тот факт, что параметр описан как ref, является неотъемлемой частью сигнатуры функции).

Рассмотрим предыдущий пример с использованием передачи параметров по ссылке.

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Func(ref int k)

{

Console.WriteLine("\nМы в функции!");

Console.WriteLine("Передали значение k={0}", k);

130