Главная страница

Лабораторная работа. Лабораторная работа "Методы и функции, 2 часть"


Скачать 65.79 Kb.
НазваниеЛабораторная работа "Методы и функции, 2 часть"
АнкорЛабораторная работа
Дата02.03.2023
Размер65.79 Kb.
Формат файлаdocx
Имя файлаЛабораторная работа.docx
ТипЛабораторная работа
#963773

Лабораторная работа “Методы и функции, 2 часть”

Пример №1. В Стандарте C# для иллюстрации независимости аргумента от изменений параметра, передаваемого по значению, приведена следующая программа:

Код программы:

using System;

class Program

{

static void F(int p)

{

p++;

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

}

static void Main()

{

int a = 1;

Console.WriteLine("pre: a = {0}", a);

F(a);

Console.WriteLine("post: a = {0}", a);

}

}

Протокол выполнения:



Пример №2. Написать функцию, возвращающую значение минимального из четырех аргументов. Программа может быть такой:

Код программы:

using System;

class Program

{

static double min2(double z1, double z2)

{

return z1 < z2 ? z1 : z2;

}

static double min4(double x1, double x2, double x3, double x4)

{

return min2(min2(min2(x1,x2),x3),x4);

}

static void Main()

{

Console.WriteLine(min4(24, 8, 4, 0.3));

}

}

Протокол выполнения:



Пример №3. Чтобы метод мог с помощью параметров изменять внешние по отношению к методу объекты, соответствующие им параметры должны иметь модификатор ref, т. е. передаваться по ссылке. Для иллюстрации этой возможности модифицируем программу 09_04.

Код программы:

using System;

class Program

{

static void FR(ref int p)

{

p++;

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

}

static void Main()

{

int a = 1;

Console.WriteLine("pre: a = {0}", a);

FR(ref a);

Console.WriteLine("post: a = {0}", a);

}

}

Протокол выполнения:



Пример №4. Переменная real инициализирована, переменные iPart, dPart не имеют значений до обращения к методу.

Код программы:

using System;

class Program

{

static void fun(double x, out int integer, out double fra)

{

integer = (int)x;

fra = x - integer;

}

static void Main()

{

double real = 53.93;

double dPart;

int iPart;

fun(real, out iPart, out dPart);

Console.WriteLine("iPart={0}, dPart = {1}", iPart, dPart);

}

}

Протокол выполнения:



Пример №5. Если параметр с типом ссылки передается методу по значению, то в теле метода создается копия использованного аргумента (копия ссылки).

Код программы:

using System;

class Program

{

static void sorting(int[] vector)

{

int t;

for (int i = 0; i < vector.Length - 1; i++)

for (int j = i + 1; j < vector.Length; j++)

if (vector[i] > vector[j])

{

t = vector[i];

vector[i] = vector[j];

vector[j] = t;

}

}

static void arrayPrint(int[] a, string формат)

{

int i;

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

Console.Write(формат, a[i]);

}

static void Main()

{

int[] array = { 1, 4, 8, 2, 4, 9, 3 };

arrayPrint(array, "{0,6:d}");

Console.WriteLine();

sorting(array);

Console.WriteLine("Измененный массив:");

arrayPrint(array, "{0,6:d}");

Console.WriteLine();

}
}

Протокол выполнения:



Пример №6. Метод может вернуть ссылку на этот объект как значение, возвращаемое функцией в точку вызова.

Код программы:

using System;

class Program

{

static int[] newAr(uint numb)

{

int[] temp = new int[numb];

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

temp[i] = (i + 1) * (i + 1);

return temp;

}

static void Main()

{

int[] vector = newAr(6);

foreach (int el in vector)

Console.Write(el + " ");

Console.WriteLine();

}

}

Протокол выполнения:



Пример №7. В качестве примера объявления и использования метода с параметром приведем программу с методом для вычисления значений полинома:

Код программы:

using System;

class Program

{

static double polynom(double x, params int[] coef)

{

double result = 0.0;

for (int i = 0; i < coef.Length; i++)

result = result * x + coef[i];

return result;

}

static void Main()

{

Console.WriteLine(polynom(3.0, 3, 1, 2));

}

}

Протокол выполнения:



Пример №8. В том случае, когда требуется метод, принимающий произвольное число параметров любых разных типов, Дж. Рихтер предлагает

Использовать параметр вида params object[].

Код программы:

using System;

class Program

{

static void DisplayTypes(params object[] objects)

{

foreach (object o in objects)

Console.WriteLine(o.GetType());

}

static void Main()

{

DisplayTypes("yes", 432, new object());

}

}

Протокол выполнения:



Пример №9. Параметр, снабженный модификатором params, обеспечивает передачу аргументов по значению. Следующая программа иллюстрирует это правило.

Код программы:

using System;

class Program
{

static void varParams(params int[] ar)

{

for (int i = 0; i < ar.Length; i++)

{

ar[i] *= 2;

Console.Write("ar[{0}]={1} ", i, ar[i]);

}

}

static void Main()

{

int a = 2, b = 3, c = 5;

varParams(a, b, c);

Console.WriteLine("\na={0}, b={1}, c={2}", a, b, c);

}

}

Протокол выполнения:



Пример №10. После каждой сортировки выводятся значения элементов на консольный экран. Текст программы и полученные результаты поясняют сказанное.

Код программы:

using System;

class Program

{

static int even_odd(int x, int y)

{

if (x % 2 != 0 & y % 2 == 0) return 1;

if (x == y) return 0;

return -1;

}

static int drop(int x, int y)

{

if (x < y) return 1;

if (x == y) return 0;

return -1;

}

static void Main()

{
int[] ar = { 4, 5, 2, 7, 8, 1, 9, 3 };

Array.Sort(ar, even_odd);

foreach (int memb in ar)

Console.Write("{0} ", memb);

Console.WriteLine();

Array.Sort(ar);

foreach (int memb in ar)

Console.Write("{0} ", memb);

Console.WriteLine();

Array.Sort(ar, drop);

foreach (int memb in ar)

Console.Write("{0} ", memb);

Console.WriteLine();

}

}

Протокол выполнения:



Пример №11. Кортеж можно использовать в качестве параметра, аргумента и возвращаемого методом результата.

Код программы:

using System;

class Program

{

static ref int F(int[] arr)

{

int index = 0, max = int.MinValue;

for (int k = 0; k < arr.Length; k++)

if (max < arr[k])

{ index = k; max = arr[k]; }

return ref arr[index];

}

static void Main()

{

int[] massiv = { 1, 2, 3, 4, 0 };

Console.WriteLine("Max = " + F(massiv));

F(massiv) = 23;

Console.WriteLine("Max = " + F(massiv));

}

}

Протокол выполнения:



написать администратору сайта