4+ИСПОЛЬЗОВАНИЕ+ФУНКЦИЙ. 4. 1 Цель лабораторной работы
Скачать 0.5 Mb.
|
4 ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ – МЕТОДОВ ЯЗЫКА C# 4.1 Цель лабораторной работы Изучение данных и методов класса и приобретение практических навыков по созданию консольных приложений с использованием методов (функций). 4.2 Теоретические сведения 4.2.1 Понятие метода Язык C# является объектно-ориентированным языком программирования и главную роль в нем играют классы. При этом класс рассматривается как тип данных, который в качестве своих составляющих (наряду с другими) содержит поля класса (его данные) и методы класса (его функции). Методы класса "служат" данным, занимаясь их обработкой. В языке C# функции существуют только как методы некоторого класса, они не существуют вне класса. В языке C# нет специальных ключевых слов – method, procedure, function, но сами понятия, конечно же, присутствуют. Синтаксис объявления метода позволяет однозначно определить, чем является метод – процедурой или функцией. 4.2.2 Формат записи метода класса Формат записи метода класса имеет следующий вид: void или тип_метода имя_метода(список_формальных_параметров) { тело метода } Если вместо типа метода задано значение void, то метод работает как процедура. Если слово void отсутствует, а задан тип метода, то метод работает как функция. Обязательным при описании заголовка метода является указание типа метода, имени метода и круглых скобок, наличие которых необходимо и в том случае, если сам список формальных параметров отсутствует. Имя метода и список формальных параметров составляют сигнатуру метода (необходимые элементы при использовании метода в программе). Заметьте, в сигнатуру не входят имена формальных параметров, здесь важны типы аргументов. В сигнатуру не входит и тип метода. Например, метод процедуру можно представить следующим образом: void poisk() {…}; и ее использование в программе ограничивается следующим указанием: poisk(); Метод функция при объявлении имеет тип, например: int kol() {…}; и при использовании в программе должна присваиваться переменной целого типа (в соответствии с типом метода), например: d = kol(); 4.2.3 Формальные параметры метода класса Список формальных параметров метода может быть пустым и это довольно типичная ситуация для методов класса. Список может содержать фиксированное число параметров, разделяемых символом запятой. Формат записи одного формального параметра: [ref или out или params] тип_параметра имя_параметра Значения, указанные в квадратных скобках, являются необязательными. Обязательным является указание типа и имени параметра. Несмотря на фиксированное число формальных параметров, есть возможность при вызове метода передавать ему произвольное число фактических параметров. Для реализации этой возможности в списке формальных параметров необходимо задать ключевое слово params. Оно может появляться в объявлении лишь для последнего параметра списка, объявляемого как массив произвольного типа. При вызове метода этому формальному параметру соответствует произвольное число фактических параметров. Содержательно все параметры метода разделяются на три группы: входные, выходные и обновляемые. Параметры первой группы передают информацию методу, их значения в теле метода только читаются. Параметры второй группы представляют собой результаты метода, они получают значения в ходе работы метода. Параметры третьей группы выполняют обе функции. Их значения используются в ходе вычислений и обновляются в результате работы метода. Выходные параметры всегда должны сопровождаться ключевым словом out, обновляемые – ref. Что же касается входных параметров, то они задаются без ключевого слова. Если параметр объявлен как выходной с ключевым словом out, то в теле метода обязательно должен присутствовать оператор присваивания, задающий значение этому параметру. В противном случае возникает ошибка еще на этапе компиляции. Тело метода представляет собой последовательность операторов и описаний переменных, заключенную в фигурные скобки. Если речь идет о теле функции, то в блоке должен быть хотя бы один оператор, возвращающий значение функции в форме return <выражение> (тип выражения должен совпадать с типом функции). Переменные, описанные в теле метода, считаются локальными в этом методе. В записи операторов тела метода участвуют имена локальных переменных метода, имена полей класса (для методов они рассматриваются как глобальные переменные класса) и имена параметров метода. 4.3 Пример выполнения задания на лабораторную работу Рассмотрим чисто учебную программу для работы с массивом с помощью методов. Задача 4.1 Сформировать массив из 20 случайных целых чисел в диапазоне от минус 50 до 50. Напечатать его. Выполнить сдвиг значений массива на 1 разряд влево. Программу оформить в виде методов, реализующих каждое задание задачи. В методах использовать входные, выходные и обновляемые параметры. Предусмотреть меню. В соответствии с условиями задачи необходимо разработать 3 метода: – создание массива (используем выходной параметр для массива); – печать массива (используем входной параметр для массива); – сдвиг массива (используем обновляемый параметр для массива). Для организации меню программы используем цикл while и оператор switch (); Исходный код программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { public static void sozd( out int [] ma) { ma = new int [20]; Random rnd = new Random (); for ( int i = 0; i < 20; i++) ma[i] = rnd.Next() % 101 - 50; Console .WriteLine( "Массив создан !!" ); } public static void zadvig( ref int [] ma) { int k; for ( int i = 0; i < 19; i++) { k = ma[i]; ma[i] = ma[i + 1]; ma[i + 1] = k; } Console .WriteLine( "Сдвиг массива на 1 разряд выполнен !" ); } public static void prinmas( int [] ma) { for ( int i = 0; i < 20; i++) Console .Write( " {0}" , ma[i]); Console .WriteLine(); } static void Main() { int [] a = new int [20]; int k = 0; string buf; while (k < 4) { Console .WriteLine( "1 - Создать массив 20 чисел" ); Console .WriteLine( "2 - Переместить массив на 1 разряд влево" ); Console .WriteLine( "3 - Печать массива" ); Console .WriteLine( "4 - Выход из программы" ); Console .WriteLine( "Введите пункт меню программы" ); buf = Console .ReadLine(); k = Convert .ToInt32(buf); switch (k) { case 1: sozd( out a); break ; case 2: zadvig( ref a); break ; case 3: prinmas(a); break ; default : break ; } } } } } Работа программы: 1 - Создать массив 20 чисел 2 - Переместить массив на 1 разряд влево 3 - Печать массива 4 - Выход из программы Введите пункт меню программы 1 Массив создан !! 1 - Создать массив 20 чисел 2 - Переместить массив на 1 разряд влево 3 - Печать массива 4 - Выход из программы Введите пункт меню программы 3 -24 -20 40 46 -26 -16 -45 -46 -39 32 38 -38 -18 -2 3 -26 -40 -17 -34 -39 1 - Создать массив 20 чисел 2 - Переместить массив на 1 разряд влево 3 - Печать массива 4 - Выход из программы Введите пункт меню программы 2 Сдвиг массива на 1 разряд выполнен ! 1 - Создать массив 20 чисел 2 - Переместить массив на 1 разряд влево 3 - Печать массива 4 - Выход из программы Введите пункт меню программы 3 -20 40 46 -26 -16 -45 -46 -39 32 38 -38 -18 -2 3 -26 -40 -17 -34 -39 -24 1 - Создать массив 20 чисел 2 - Переместить массив на 1 разряд влево 3 - Печать массива 4 - Выход из программы Введите пункт меню программы 4.4 Домашнее задание на лабораторную работу Используя метод-функцию вычислить сумму ряда для заданного в режиме диалога x (х>0 и х<1). Вычисления заканчиваются, когда очередной член ряда по модулю становится меньше введенной точности =0.0001: 3 !* 4 8 * 5 * 2 3 !* 3 5 * 2 3 !* 2 2 3 1 1 1 4 4 3 3 2 2 3 x x x x x 4.5 Индивидуальные задания для СРС Внимание! В учебных целях каждый метод-функция или метод- процедура выполняемой задачи должен иметь выходные и обновляемые формальные параметры. Без использования этих параметров индивидуальное задание не принимается к защите. 4.5.1 Случайным образом формируются координаты 20 отрезков (Y1,Y2) и (X1,X2). Значения координат – целые числа от 0 до 100. Определить номер отрезка, имеющего максимальную длину. Использовать метод-процедуру. 4.5.2 Написать программу вычисления ряда: Y= 100 0 1 * 2 ) 10 / * ) 1 * 2 sin( * ) 1 * 2 /( ( N N x N N x , где x – задаётся в режиме диалога в интервале от 0 до 1; N – изменяется от 0 до 100 с шагом 1. Использовать метод-функцию. 4.5.3 Написать программу вычисления корней квадратного уравнения вида ax 2 +bx+c = 0. Значения a, b и c вводить в режиме диалога. Предусмотреть проверку существования корней уравнения и выдать соответствующие сообщения. Для решения задачи использовать метод-процедуру. 4.5.4 Используя метод-функцию вычислить значение C: )! ( ! ! M N M N M N C Если число N больше 0, вычисляет N!, в противном случае – на экран выдается соответствующее сообщение. Значения Nи M формируются случайным образом или задаются в режиме диалога. 4.5.5 Имеется круг, заданный координатами центра (50,50) и радиусом = 30. Случайным образом формируются 10 точек (x,y) – координаты в диапазоне от 0 до 100. Определить и сколько точек попало в круг. Использовать метод- процедуру. 4.5.6 Вычислить сумму Y = 1*2*3+2*3*4+3*4*5+…+(n-1)*n*(n+1), n задаётся в режиме диалога. Использовать метод-функцию. 4.5.7 В цикле 20 раз формируются случайные целые числа в диапазоне от 0 до 100. Напечатать все значения этих чисел. Использовать метод-функцию для определения max и min чисел. Напечатать их. 4.5.8 Вычислить сумму ряда для заданного в режиме диалога и |x|>1. ! 5 * ! 4 ! 4 * ! 3 ! 3 * ! 2 6 4 2 x x x y Вычисления продолжать до тех пор, пока очередной член ряда не становится меньше 0.0001. Использовать метод-функцию. 4.5.9 Случайным образом формируются координаты X и Y 100 точек. Диапазон значений координат от -150 до +150. Подсчитать и напечатать количество точек, расположенных на каждой четверти. Отдельно учитывать точки, расположенные на осях координат. Использовать метод-процедуру. 4.5.10 Используя метод-функцию вычислить сумму ряда для заданного |x| > 0. 2 1 3 5 0 1 1 1 1 1 ln 2 2 1 1 2 1 3 5 n n x x x x n x x x Вычисления заканчиваются, когда очередной член ряда по модулю становится меньше 0.0001. 4.5.11 Случайным образом формируются координаты А(X,Y) и В(X,Y) ста прямоугольников заданных противоположными вершинами. Диапазон значений координат от -150 до +150. Подсчитать и напечатать количество прямоугольников расположенных в верхней и нижней половинах системы координат(если вершины расположены в разных половинах, то этот вариант исключается из рассмотрения). Использовать метод-процедуру. 4.5.12 Используя метод-функцию вычислить сумму ряда для x = 5. 1 2 1 3 5 0 1 1 1 1 arct g 1 2 2 2 1 3 5 n n n x x x n x x x Вычисления заканчиваются, когда очередной член ряда по модулю становится меньше 0.0001. 4.5.13 Сформировать массив 20 целых случайных чисел в диапазоне от минус 30 до 30. Напечатать его. Поменять местами максимальный и минимальный элементы массива. Напечатать новый массив. Каждое действие оформить в виде методов-процедур. 4.5.14 Случайным образом формируются координаты X и Y 60 точек. Диапазон значений координат от -150 до +150. Вывести список точек, расстояние между которыми максимально, а сами точки находятся в разных четвертях. Использовать метод-процедуру. 4.5.15 Сформировать массив 100 целых случайных чисел в диапазоне от 0 до 9. Напечатать его. Найти и напечатать число, чаще других, встречающееся в массиве. Каждое действие оформить в виде методов-процедур. 4.5.16 Используя метод-функцию вычислить сумму ряда для заданного в режиме диалога |x|<1 и m=-1. Вычисления заканчиваются, когда очередной член ряда становится меньше 0.0001: ! ) 1 )...( 1 ( ! 3 ) 2 )( 1 ( ! 2 ) 1 ( ! 1 1 ) 1 ( 3 2 n m x n n m m m x m m m x m m x m x 4.5.17 Сформировать массив 25 целых случайных чисел в диапазоне от минус 40 до 60. Напечатать его. Найти 3 max числа и поместить их в начало массива (сортировку чисел использовать запрещается). Напечатать новый массив. Каждое действие оформить в виде методов-процедур. 4.5.18 Случайным образом формируются координаты X и Y 60 точек. Диапазон значений координат от -150 до +150. Вывести список точек, расстояние между которыми минимально, а сами точки находятся в одной четверти. Использовать метод-процедуру. 4.5.19 Вычислить сумму ряда для заданного x. Вычисления заканчиваются, когда очередной член ряда становится меньше 0.001: 7 5 3 ) ( 7 5 3 x x x x x arctg Использовать метод-процедуру. 4.5.20 Случайным образом формируются координаты А(X,Y) и В(X,Y) ста прямоугольников заданных противоположными вершинами. Диапазон значений координат от -150 до +150. Подсчитать и напечатать количество прямоугольников расположенных на каждой четверти (если вершины расположены в разных четвертях, то этот вариант исключается из рассмотрения). Использовать метод-процедуру. 4.6 Контрольные вопросы для защиты отчета на СРСП 4.6.1 Понятие метода класса языка C#. Пример. 4.6.2 Формат записи метода класса языка C#. 4.6.3 Какие спецификаторы доступа методов класса вы знаете? Пример. 4.6.4 Механизмы обмена данными методов класса с static void Main() в языке C#? 4.6.5 Какие входные формальные параметры методов класса Вы знаете? Пример. 4.6.6 Какие выходные формальные параметры методов класса Вы знаете? Пример. 4.6.7 Какие обновляемые формальные параметры методов класса Вы знаете? Пример. 4.6.8 Понятие функции в языке C#. Пример. 4.6.9 Как и где задается тип функции в языке C#? Пример. 4.6.10 Понятие процедуры в языке C#. Пример. 4.6.11 Понятие локальных и глобальных переменных метода класса языка C#. Пример. 4.6.12 Какие «имена» могут участвовать в записи операторов тела метода класса языка C#? 4.6.13 Можно ли внутри одного метода (например, void Main()) объявлять другой метод? Пример. 4.6.14 Понятие рекурсии. Пример. 4.6.15 Достоинства и недостатки рекурсии. |