
- •Лабораторная работа № 5 Тема: Функции и процедуры в с#
- •Теоретические сведения Процедуры и функции - методы класса
- •Процедуры и функции. Отличия
- •Описание методов (процедур и функций). Синтаксис
- •Список формальных аргументов
- •Тело метода
- •Вызов метода. Синтаксис
- •Вызов метода. Семантика
- •Почему у методов мало аргументов?
- •Поля класса или функции без аргументов?
- •Пример: класс Account
- •Функции с побочным эффектом
- •Оператор return
- •Рекурсия
- •Процедуры и массивы
- •Задача №1
- •Задача №2
- •Задача №3
- •Задача №4
- •3. Содержание отчета.
- •4. Вопросы для защиты по лабораторной работе:
Процедуры и массивы
Для передачи массива в процедуру или функцию необходимо:
В процедуру достаточно передавать только сам объект - массив. Все его характеристики (размерность, границы) можно определить, используя свойства и методы этого объекта.
Когда массив является выходным аргументом процедуры, как аргумент C в процедуре MultMatr, выходной аргумент совсем не обязательно снабжать ключевым словом ref или out (хотя и допустимо). Передача аргумента по значению в таких ситуациях так же хороша, как и передача по ссылке. В результате вычислений меняется сам массив в динамической памяти, а ссылка на него остается постоянной. Процедура и ее вызов без ключевых слов выглядит проще, поэтому обычно они опускаются. Заметьте, в процедуре GetSizes, где определялись границы массива, ключевое слово out, сопровождающее аргументы, совершенно необходимо.
Может ли процедура-функция возвращать массив в качестве результата? В C# ответ на этот вопрос положителен.
программа 1:
class Class1
{
static int fff(int[]d)
{int s=0;
for(int i=0;i<6;i++)
s=s+d[i];
return s;
}
static int fff1(int[,]d)
{
int s=0;
for(int i=0;i<6;i++)
for(int j=0;j<3;j++)
s=s+d[i,j];
return s;
}
[STAThread]
static void Main(string[] args)
{
int [] a = new int [6];
int [,] a1 = new int [6,3];
Random rnd= new Random();
for(int i=0;i<6;i++)
a[i]=rnd.Next(0,10)-5;
for(int i=0;i<6;i++)
for(int j=0;j<3;j++)
a1[i,j]=rnd.Next(1,10);
foreach (object item in a )
Console.Write("\t {0}", item);
Console.WriteLine();
int r=fff(a);
Console.WriteLine("{0} bb",r);
for(int i=0;i<6;i++)
{
for(int j=0;j<3;j++)
Console.Write("\t {0}", a1[i,j]);
Console.WriteLine();
}
r=fff1(a1);
Console.WriteLine("\n{0} bb1",r);
Console.WriteLine();
}
}
программа 2:
class Class1
{
static int[] fff(int[]d)
{
for(int i=0;i<6;i++)
d[i]=d[i]-5;
return d;
}
static int[,] fff1(int[,]d)
{
for(int i=0;i<6;i++)
for(int j=0;j<3;j++)
d[i,j]=d[i,j]*(-1);
return d;
}
[STAThread]
static void Main(string[] args)
{
int [] a = new int [6];
int [] t = new int [6];
int [,] a1 = new int [6,3];
Random rnd= new Random();
for(int i=0;i<6;i++)
a[i]=rnd.Next(0,10);
for(int i=0;i<6;i++)
for(int j=0;j<3;j++)
a1[i,j]=rnd.Next(1,10);
foreach (object item in a )
Console.Write("\t {0}", item);
Console.WriteLine();
t=fff(a);
foreach (object item in t )
Console.Write("\t {0}", item);
Console.WriteLine();
for(int i=0;i<6;i++)
{
for(int j=0;j<3;j++)
Console.Write("\t {0}", a1[i,j]);
Console.WriteLine();
}
a1=fff1(a1);
for(int i=0;i<6;i++)
{
for(int j=0;j<3;j++)
Console.Write("\t {0}", a1[i,j]);
Console.WriteLine();
}
Console.WriteLine();
}
}
Практическое задание
Задача №1
Сколькими способами можно отобрать команду в составе 5 человек из 8 кандидатов, из 10 кандидатов, из 11 кандидатов? Вычисления оформить в виде функции.
В порт в среднем заходит 3 корабля в день. Какова вероятность того, что в порт придет 2 корабля; 4 корабля? Вычисления оформить в виде функции.
Два спортсмена начинают одновременно движение из одной точки. Первый начинает движение со скоростью 10 км/час и равномерно увеличивает скорость на 1 км за каждый час. Второй начинает движение со скоростью 9 км/час и равномерно увеличивает скорость на 1,6 км за каждый час. Выяснить какой из спортсменов преодолеет больший путь через 1 час, 4 часа. Вычисления путей оформить в виде функции.
Два спортсмена начинают одновременно движение из одной точки. Первый начинает движение со скоростью 10 км/час и равномерно увеличивает скорость на 1 км за каждый час. Второй начинает движение со скоростью 9 км/час и равномерно увеличивает скорость на 1,6 км за каждый час. Определить, когда 2-й спортсмен догонит первого. Вычисления оформить в виде функции.
В партии из K изделий имеется L дефектных. Для контроля выбираются R изделий. Определить вероятность того, что S изделий будут дефектными. Решить задачу для K=10, L=5, R=4, S=2; и K=10, L=4, R=5, S=3. Вычисления оформить в виде функции.
Два треугольника заданы координатами своих вершин A, B, C. Вычислить площади треугольников с помощью формулы Герона и определить какой из них имеет большую площадь. Данные для первого треугольника: A(1;1), B(4;2), C(2;3,5). Для второго треугольника: A(1;2), B(4;1), C(3;3,5). Вычисления оформить в виде функции.
Футболист ударом ноги посылает мяч вертикально вверх с высоты 1м и с начальной скоростью 20м/сек. На какой высоте мяч будет через 1 с, 3 с, 4 с. Вычисления оформить в виде функции.
Круг задан координатами центра Q и координатами одной из точек окружности (точка Z ). Внутри круга содержится квадрат, заданный координатами трех своих вершин А, В, С. Произвольно выбирается точка внутри круга. Найти вероятность того, что эта точка попадет в квадрат. Задачу решить для Q(4,5), Z(7,5), A(2,4), B(4,6),C(2,6) и для Q(5,4), Z(5,7), A(5,3), B(3,5;4,5),C(5,6). Вычисления оформить в виде функции.
Искомая вероятность
равна.
Футболист ударом ноги посылает мяч вертикально вверх с высоты 1м и с начальной скоростью 20м/сек. Определить, когда мяч будет на высоте 5м, 10м. Вычисления оформить в виде функции.
Определить вероятности того, что среди 5 детей одной семьи нет ни одной девочки, две девочки, три девочки, четыре девочки, 5 девочек. Вероятность рождения девочки и мальчика одинакова (р=0,5, q=1-p).
(из n детей m девочек). Вычисления оформить в виде функции.
Футболист ударом ноги посылает мяч вертикально вверх с высоты 1м и с начальной скоростью 20м/сек. Определить с точностью до 0,25 с, когда и на какой максимальной высоте окажется мяч в течение 4 с. Вычисления оформить в виде функции.
Круг задан координатами центра Q и координатами одной из точек окружности (точка Z ). Внутри круга содержится треугольник, заданный координатами своих вершин А, В, С. Произвольно выбирается точка внутри круга. Найти вероятность того, что эта точка попадет в треугольник. Задачу решить для Q(4,5), Z(7,5), A(2,4), B(5,5),C(3,6) и для Q(5,4), Z(5,7), A(3,3), B(7,5),C(5,6). Вычисления оформить в виде функции.
Искомая вероятность
равна.
Футболист ударом ноги посылает мяч вертикально вверх с высоты 1м и начальной скоростью 20м/сек. Определить с точностью до 0,25 с, когда и на какой высоте будет максимальная скорость мяча в течение 4 с. Вычисления оформить в виде функции.
Два спортсмена начинают движение из одной точки. Первый начинает движение со скоростью 10 км/час и равномерно увеличивает скорость на 1 км за каждый час. Второй начинает движение со скоростью 9 км/час и равномерно увеличивает скорость на 1,6 км за каждый час. Определить с точность до 0,25 часа, когда и каким окажется максимальное расстояние между спортсменами в течение 5 часов. Вычисления оформить в виде функции.
Стрелок производит по мишени 5 выстрелов. Вероятность попадания в мишень при каждом выстреле 0,6. Вычислить вероятность попадания в мишень : ни разу, 1 раз, 2 раза, 3 раза, 4 раза, 5 раз. Определить когда будет максимальная вероятность. Вычисления оформить в виде функции.