Методы на языке C#

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    801,78 Кб
  • Опубликовано:
    2015-05-30
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Методы на языке C#

Аннотация

 

Данная работа состоит из двух частей. Первая часть посвящена теме "Методы на языке С#". В ней будет описано об основном методе Main (), без которого не начнется работа программы, о вариантах его написания, о ключевых словах ref и out, и this. А так же уделено внимание перегрузке методов и рекурсивному вызову метода. Каждая тема, для лучшего понимая, сопровождается примером с комментариями. К тому же будет описано, что такое модификаторы доступа и для чего они нужны. Во второй части представлены программы по темам: "Двумерные массивы", "Строки", "Поля и методы", "Работа с цифрами числа", "Наследование" "Массивы, методы". Каждый пример темы сопровождается кодом программы, объяснением алгоритма и скриншотом, на котором виден результат выполнения. Для некоторых программ приведена таблица входных и выходных данных, а для тех, которые содержат условный оператор, построена часть блок-схемы.

Содержание

 

Часть 1. Теоретическая часть

Описание метода. Модификаторы

Немного о методе Main ()

Варианты написания метода Main ()

Перегрузка методов

Ключевые слова ref и out. Примеры использования

Рекурсивный вызов метода

Пример программы "Рекурсивный вызов"

Ключевое слова this

Часть 2. Практическая часть

Задача 1 по теме "работа с цифрами числа"

Задача 2 по теме "Наследование"

Задача 3 по теме "Поля и методы"

Задача 4 по теме "Строки"

Задача 5 по теме "Массивы, методы"

Список используемой литературы

Часть 1. Теоретическая часть

Описание метода. Модификаторы


"В общем виде объявление метода выглядит так:

Модификатор тип_возв_значения Имя (параметры)

{

Код (действия);

return значение; // в случае, если тип функции НЕ void

}

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

Тип_возв_значения - тип данных результата работы метода.

Параметры - список формальных параметров (один или несколько), с указанием их типов.

Модификатором может выступать public, protected, internal и private, с помощью них определяется доступен ли метод внешним классам или наследникам. ” [2]- методы можно вызывать только в методах самого класса.- методы будут доступны для методов класса и классов, которые связаны с исходным отношением "родитель - потомок".

К public - методам можно обращаться из любого места программы.

Модификатор доступа internal используется для методов, доступных всем классам, определенным в конкретной сборке. Если модификатор доступа не указан, по умолчанию методы считаются закрытыми (private).

Обращение к методу происходит посредством его вызова из метода Main, при котором на место формальных подставляются фактические параметры (их типы должны совпадать).

Немного о методе Main ()


public static void Main ()

{

Console. WriteLine ("Hello World”);

}

"В данном случае тип значения, которое возвращает метод, равен public static void (открытый, статичный, пустой). ” [2]

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

В фигурных скобках (обозначающих начало и конец метода) идет код, т.е. действия, которые выполняет метод. В моем случае это вывод на консоль сообщения - Console. WriteLine ("Hello World”);. Эта строка - вызов метода другого класса. Вызов осуществляется следующим образом:

Имя_объекта. Имя_метода (Параметры);

Если метод находится в объекте, из которого вызываем, то можно вызвать так Имя_метода (Параметры);

С основного метода начинается работы программы, не зависимо в начале или в конце всего кода он расположен. Для удобства его лучше располагать ниже всех методов.

Благодаря тому, что описание и реализация находятся в одном файле, код становится более компактным и мобильнее, "что является одной из основных особенностей технологии.net” [2].

 

Варианты написания метода Main ()


static void Main ()

{

}int Main ()

{Целое_число;

}void Main (string [] args)

{

}public int Main (string [] args)

{

return Целое_число;

}

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

Таким образом, метод может возвращать пустое значение или число, или не принимать никаких параметров вообще либо принимать массив строк.

"Почему в качестве параметра передается именно массив строк? Потому что, когда операционная система вызывает программу, может передать ей в качестве параметров одну строку. Это уже сама программа разбивает монолитную строку на массив, а разделителем выступает пробел" [2].

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

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

 

Перегрузка методов


Когда возникает ситуация, что нужно создать схожий по функциональности метод, и чтобы не придумывать новые имена можно создать такой же метод, только чтобы система различала их, помогут параметры (их тип и количество). Использование нескольких методов с одним и тем же именем, но с различными параметрами - это перегрузка методов.

Например, "в классе Console для печати какого - либо сообщения существует 19 перегруженных методов WriteLine ():

·WriteLine () - записывает текущий признак конца строки в стандартный выходной поток;

·WriteLine (double) - записывает текстовое представление вещественного числа в стандартный выходной поток;

·WriteLine (String) - записывает заданную строку в стандартный выходной поток;

·WriteLine (String, object []) - записывает текстовые представления заданного массива объектов в стандартный выходной поток с использованием заданных сведений о форматировании и т.д." [2]

Пример программы:

public void user ()

{. WriteLine ("Пустой метод\n");

{. WriteLine ("Имя пользователя: {0}",Name);

}void useru (string Name, string Sername)

{. WriteLine ("Имя пользователя: {0}\nФамилия пользователя: {1}",Name, Sername);

}void useru (string Name, string Sername, byte Age)

{. WriteLine ("Имя пользователя: {0}\nФамилия пользователя: {1}\nВозраст: {2}", Name, Sername, Age);

}Program

{void Main (string [] args)

{user1 = new UserInfo ();

// Разные реализации вызова перегружаемого метода

user1. useru ();. useru ("Сидоров", "Петр", 14);

Console. ReadLine ();

}

}

Для первого метода, при обращении из главного, в скобках указывать ничего не нужно, т.к. у него нет параметров. А вот для следующего метода нужно будет указать всего лишь один параметр, и на консоли появится, в данном случае, имя пользователя.

Чтобы на экран вывело имя и фамилию, то нужно использовать третий способ перегрузки. И последнему методу соответствуют 3 параметра: имя, фамилия и возраст.

Ключевые слова ref и out. Примеры использования


Для того чтобы в функцию передать не значение, а саму переменную, (чтобы ее можно было изменять) в объявлении этого метода перед именем параметра нужно указать ключевое слово ref. Передавать нужно именно переменную, проинициализированную, т.к. "внутрь метода будет передана ссылка на память переменной, а не ее значение, метод будет работать с его значением напрямую, а не через свою локальную переменную” [2]. Причем, ref необходимо ставить перед каждой переменной.

"Массив theArray объявлен в вызывающем (метод Main) и инициализирован в методе FillArray. Затем элементы массива возвращаются вызывающему и отображаются. ”

class TestOut

{

static void FillArray (out int [] arr)

{

arr = new int [5] { 1, 2, 3, 4, 5 }; // Инициализация массива

}

static void Main ()

{

int [] theArray; // Инициализация не требуется

// Передача массива вызывающему, используя out

FillArray (out theArray);

// Вывод на консоль. Console. WriteLine ("Array elements are: ");(int i = 0; i < theArray. Length; i++)

{. Console. Write (theArray [i] + " ");

}. Console. ReadLine ();

}

}

// Array elements are: 1 2 3 4 5

Массив theArray инициализирован в вызывающем (метод Main) и подставляется в метод FillArray при помощи параметра ref. Некоторые из элементов массива обновляются в методе FillArray. Затем элементы массива возвращаются вызывающему и отображаются.

class TestRef

{void FillArray (ref int [] arr)

{

// Создание массива

if (arr == null)

{= new int [10];

}

// Заполнение[0] = 1111;[4] = 5555;

}void Main ()

{

// Инициализация массива [] theArray = { 1, 2, 3, 4, 5 };

// Передача массива, используя ref

FillArray (ref theArray);

// Вывод на консоль. Console. WriteLine ("Array elements are: ");(int i = 0; i < theArray. Length; i++)

{. Console. Write (theArray [i] + " ");

}. Console. ReadLine ();

}

}

// Array elements are: 1111 2 3 4 5555

Пример использования методов:


static void Zapol (ref int [,] a)

{(int i = 0; i < a. GetLength (0); i++)

{(int j = 0; j < a. GetLength (1); j++)

a [i, j] = 0; // заполняем массив нулями

}

Приходит матрица, возможно, уже заполненный нулями, но не факт, перебираем строки столбцы и записываем в них нули. Вызывающий метод возвращает их себе.

static void Tabl (int [,] a)

{. WriteLine ("Массив - ");(int i = 0; i < a. GetLength (0); i++)

{(int j = 0; j < a. GetLength (1); j++)

{. Write ("{0, 2}",a [i,j]); // выводим массив(j == a. GetLength (1) - 1)

{. WriteLine ();

}

}

} Console. WriteLine ();

}

Этот метод дан в качестве примера, поскольку он выводит полученную матрицу.

{. WriteLine ("Размерность строк = ");n = int. Parse (Console. ReadLine ());. WriteLine ("Размерность столбцов = ");m = int. Parse (Console. ReadLine ());[,] mas = new int [n, m];(ref mas);(mas); }

Вызывающий метод.

 


Рекурсивный вызов метода


Рекурсивный вызов метода - это когда метод вызывает сам себя.

void MethodName ()

{

MethodName ();

}

"Такой метод корректен с точки зрения программирования на языке C#, но не корректен для выполнения” [2]. Т.к. он будет бесконечно вызывать сам себя, и программа зависнет. Необходим выход, т.е. такое состояние, при котором рекурсия прервется. Обычно его используют в ситуациях, когда легко свести и сходную задачу к задаче того же вида, но с другими исходными данными, например, уменьшение размерности задачи, переход в новую точку и пр.

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

 

Пример программы "Рекурсивный вызов"

Program

{

// метод поиска факториала целого числа

static int Factorial (int n)

{

// условие выхода из рекурсии

if (n==1 || n==0) return 1;

return n*Factorial (n-1); // рекурсивный вызов

}void Main (string [] args)

{n;. WriteLine ("Введите n: "); k=Factorial (n); // первый вызов функции

Console. WriteLine ("{0}! ={1}",n,k);

}

Рис. Схема рекурсии

Ключевое слова this


При вызове метода ему автоматически передается неявно заданный аргумент, который представляет ссылку на объект, для которого вызывается метод. Эта ссылка называется ключевым словом this. "Рассмотрим пример программы, создающий класс Rect, который инкапсулирует, т.е. делает доступными только внутри класса, значения ширины и длины прямоугольника и включает метод area (), вычисляющий площадь фигуры” [1].

Оно обеспечивает доступ к текущему экземпляру класса. Одно из возможных применений ключевого слова this состоит в том, чтобы исключить неоднозначность контекста, которая может возникнуть, когда входящий параметр (int w) назван так же, как поле данных данного типа (int width). Разумеется, в идеале необходимо просто придерживаться соглашения об именовании, которое не может привести к такой неоднозначности.

class Rect {int width;int height;Rect (int w, int h) {. width = w; // здесь можно было бы и не использовать this

this. height = h; }int area () {

return this. width * this. height; } // перемножаются копии переменных, связанные с вызывающим объектом

}UseRect {static void Main () {r1 = new Rect (4,5);r2 = new Rect (7,9);. WriteLine ("Площадь прямоугольника r1: ” + r1. area ());. WriteLine ("Площадь прямоугольника r2: ” + r2. area ()); }

}

Т.к. синтаксис позволяет, чтобы имя параметра и локальной переменной совпадало с именем переменной экземпляра. Например,

public Rect (int width, int height) {. width = width;. height = height; }

В этом случае локальное имя будет скрывать переменную экземпляра. И для доступа к скрытой переменной используют ссылку this.

метод язык алгоритм программа

Часть 2. Практическая часть


Задача 1 по теме "Работа с цифрами числа"


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

Нужно найти первую и третью цифру в дробной части числа. Для этого само число умножим на 10, отбросим дробную части с помощью явного преобразования и найдем остаток от деления ( ( (int) dd) % 10). Этот остаток и будет первой цифрой в дробной части. Аналогично найдем третью, только умножим изначальное число на 1000.

. Write ("Введите вещественное число: ");

double d = double. Parse (Console. ReadLine ());

double dd = d*10; // чтобы найти первую после,ddd = d * 1000; // чтобы найти третью после,

int p1 = ( (int) dd) % 10; // переменная запоминающая ту самую первую цифру

int p2 = ( (int) ddd) % 10; // переменная запоминающая третью цифру

double a1 = d - p1/10.0 + p2/10.0; // меняем 1 и 3 после запятой

double a2 = a1 - p2/1000.0 + p1/1000.0; // меняем третью на первую

Console. WriteLine (a2);. ReadLine ();

d

dd

ddd

P1

P2

A1

A2

123,456

1234,56

123456

4

6

123,656

123,654

98,765

987,65

98765

7

5

98,565

98,567

234,987

2349,87

234987

9

7

234,789

6,561

65,61

6561

5

1

6,161

6,165


Задача 2 по теме "Двумерные массивы"

Fill (a) - заполняет массив А по правилу (на примере массива 4х5):


Создаем массив определенной размерности, при помощи цикла по "i" перебираем строки, а циклом по "j" - столбцы. И заполняем массив элементами, используя формулу Math. Abs (j - i) + 1.

static void Fill (out double [,] a)

{= new double [4,5];(int i = 0; i < a. GetLength (0); i++) // пробегаем по строкам

{(int j = 0; j < a. GetLength (1); j++) // пробегаем по столбцам

{[i, j] = Math. Abs (j - i) + 1; // заполняет как в таблице

}

}

}

Рис.2.1 Результат работы программы

Transp (a, m) - выполняет транспонирование элементов массива.

Если матрица квадратная (т.е. число строк равно числу столбцов), то, используя, 2 цикла for, пробегающие по строкам и столбцам. В дополнительную переменную записываем строку (начиная с первой), а в координаты прошлой строки записываем столбец. На место этого столбца записываем строку из дополнительной переменной. Так и происходит замена строк на столбцы и наоборот.

static void Transp (double [,] a, int n, int m)

{(a. GetLength (0) == a. GetLength (1))

{(int i = 0; i < a. GetLength (0); i++)

{(int j = i; j < a. GetLength (1); j++)

{t = a [i, j];[i, j] = a [j, i];[j, i] = t;

}

}

}Console. WriteLine ("Транспонирование не выполнено");

}

До

После транспортирования

12345 12345 12345 12345 12345

11111 22222 33333 44444 55555

156 123

Транспонирование не выполнено

98765 54321 12345 67890 00000

95160 84270 73380 62490 51500

111111 000000 777777

Транспонирование не выполнено

5555 6655 7777 8877

5678 5678 5577 5577

13579 24680 97531 08642 12345

12901 34782 56563 78344 90125

Рис. 2.2 Таблица входных и выходных данных

 


 

 

 

                                                        нет

 

 

                   да

 

 

Рис.2.2 Часть блок-схемы

Рис.2.3 Результат работы программы

static void Main (string [] args)

{[,] a;. Write ("Введите размер строки: ");n = int. Parse (Console. ReadLine ());

Console. Write ("Введите размер столбца: ");

int m = int. Parse (Console. ReadLine ());(out a);(a, "a");(a,n, m);(a, "a");. ReadLine ();

}

 

Задача 2 по теме "Наследование"


Написать программу, в которой создается иерархия классов.

а. Определить иерархию классов.

б. Реализовать классы.

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

Класс Experiment базовый (предок) его потомками будут классы Test и Exam. Они унаследуют имя преподавателя (string), имя дисциплины (string) и оценку (int). Собственное у Test будет кол-во (int) и тип вопросов (bool). У Exam будет проходной бал (int). Конструктор для инициализации первоначальных данных.

class Experiment

{string name_prep;string name_discpl;int val;Experiment (string name_prep, string name_discpl, int val)

{. name_prep = name_prep;. name_discpl = name_discpl;. val = val;

}void SetPrep (string FIO) { name_prep = FIO; }int GetVal () { return val; }void SetDiscpl (string Disc) { name_discpl = Disc; }string GetPrep () { return name_prep; }string GetDiscpl () { return name_discpl; }string Info ()

{string. Format ("Экзамен по предмету {0} под руководством {1}", name_discpl, name_prep);

}void Show () { Console. WriteLine (Info ()); }

Для классов - потомков приведу их конструкторы, т.к. методы аналогичны методам базового класса (изменить или получить какое - либо название или величину). Ключевое слово base служит для доступа к элементам базового типа из дочернего класса. В описании конструктора потомка вместо this. name_discpl, можно применить base (name_discpl) и в скобках через запятую перечислить наследованные поля.

class Exam: Experiment

{int bal;Exam (string name_discpl, string name_prep, int val, int count_ask, bool close_ask, int bal)

{(bal >= 0 || bal <= 100) this. bal = bal;this. bal = 0;

}Test: Experiment

{int count_ask;bool close_ask;Test (string name_discpl, string name_prep, int val, int count_ask, bool close_ask)

: base (name_discpl, name_prep, val) { }

Рис. 3.1 Часть блок-схемы для условного оператора " if ”

Рис. 3.2 Диаграмма классов

Рис. 3.3 Результат работы программы

Задача 3 по теме "Поля и методы"


Расширить содержание класса "Круг"

Для этого:

.        Изменить диаграмму класса.

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

.        Добавить к тексту программы операторы, вызывающие новые методы и проверяющие корректность их работы.

Периметр изменится, если изменить радиус по формуле Rad = P / (2 * Math. PI). Для вычисления расстояния до начала координат по т. Пифагора находим расстояние от центра до н. к. и вычитаем радиус, чтобы найти необходимое расстояние (result = Math. Sqrt (Xc * Xc + Yc * Yc) - Rad). Для изменения координат центра необходимо просто ввести другие х и у. Определить периметр можно используя классическую формулу 2 * Math. PI * Rad.

class Circle

{Name;double Xc, Yc;Rad;void ToZero () {. }void SetRadius (double R) // изменить значение радиуса

{(R >= 0) Rad = R; // новую переменную (значение радиуса) присваиваем Rad’у

}void SetSquare (double Value) {.);

}void SetPerimeter (double P) // изменить значение периметра

{(P>0) Rad = P / (2 * Math. PI);

}void SetCenter (double X, double Y) // изменить координаты центра

{= X; Yc = Y;

}void MoveX (double dx) {. } void MoveY (double dy) // перенести круг по оси OY

{

Yc += dy; // к значению по у прибавляем смещение

}void Assign (Circle c) {. }

public void AssignTo (Circle с) // скопировать свои характеристики на другой круг

{

с. Xc = Xc; с. Yc = Yc; с. Rad = Rad;

}double GetSquare () {. }double GetPerimeter () // определение периметра окружности

{

return 2 * Math. PI * Rad; // периметр по формуле

}

public double RoFromZero () // определение расстояния до нач. коорд.

{result = Math. Sqrt (Xc * Xc + Yc * Yc) - Rad;(result < 0) result = 0;result;

}bool isEqual (Circle c) {. }double RoFromOX () {. }string Info () {. }Circle (string aName) {. }Circle (string aName, double aRad) {. }Circle (string aName, double aRad, double aXc, double aYc) {. }void Main (string [] args)

{. WriteLine ("Работа с классом Circle");a = new Circle ("A"); Console. WriteLine (a. Info ());b = new Circle ("B"); Console. WriteLine (b. Info ());c = new Circle ("C", 5, 2,3); Console. WriteLine (c. Info ());. WriteLine (c. Info ());. MoveX (10.2);. WriteLine (b. Info ());. SetSquare (14); c. Yc = 9.8;. WriteLine (c. Info ());. Assign (c);. WriteLine (b. Info ());. WriteLine

("___________________________________________________");. WriteLine ("Площадь В: {0: F3} см^2", b. GetSquare ());. WriteLine

("___________________________________________________");. WriteLine ("Расстояние от В до ОХ: {0: F3} см", b. RoFromOX

());. WriteLine

("___________________________________________________");. WriteLine ("Круги В и С равны: {0}", b. isEqual (c));. ToZero ();. WriteLine (b. Info ());. WriteLine

("___________________________________________________");. WriteLine ("Круги B и C равны: {0}", b. isEqual (c));. WriteLine (c. Info ());. WriteLine (b. Info ());. SetRadius (41);. WriteLine (b. Info ());. SetPerimeter (512);. WriteLine (b. Info ());. SetCenter (47, 65);. WriteLine (b. Info ());. MoveY (84.6);. WriteLine (a. Info ());. AssignTo (b);. WriteLine (b. Info ());. WriteLine

("___________________________________________________");. WriteLine ("Периметр B: {0: F3} см", b. GetPerimeter ());. WriteLine

 ("___________________________________________________");. WriteLine ("Расстояние от В до НАЧАЛА КООРДИНАТ: {0: F3} см",. RoFromZero ());. ReadLine ();

}

Рис.4.1 Диаграмма класса.

Рис. 4.2 Результат работы программы

Задача 4 по теме "Строки"


Заданы два предложения (в виде 2-х строк), слова которых разделены одним или несколькими пробелами. Распечатать "в столбик" все слова первого предложения, которые не встречаются во втором предложении.

Объявляем массив разделителей, указываем, что слова в строках разделены одним пробелом. Split возвращает строковый массив, содержащий подстроки данных строк, разделенных пробелом. Для каждой некой строки ss в строке mss крутим цикл, и если слова не одинаковые, то выводим их.

static void T9 (string st21, string st22)

{[] razd = new char [] { ' ' };[] mss = st21. Split (razd);[] mss1 = st22. Split (razd);(string ss in mss)

{b = true;(int i = 0; i < mss1. Length; i++)

{(ss == mss1 [i]) b = false;

}(b) Console. WriteLine (ss);

}

}void Main (string [] args)

{. WriteLine ("Введите строку ");st21 = Console. ReadLine ();

Console. WriteLine ("Введите еще строку ");st22 = Console. ReadLine ();. WriteLine ("Cлова первого предложения, которые не встречаются во втором предложении: ");

T9 (st21, st22);. ReadLine ();

}

Рис. 5.1 Результат работы программы

Строка 1

Строка 2

Результат

Имеют обмен внешними ресурсами

Не имеют обмен с ресурсами

внешними

Отрицательные элементы множества

Массива положительные

Указанные ниже

Указанные изменения

ниже

Солнце греет сильнее

Чем батарея греет

Солнце сильнее

Курсовая работа

Домашняя работа

курсовая

Привет мир

Пока мир

привет

Рис. 5.2 Таблица входных и выходных данных

Задача 5 по теме "Массивы, методы"


Написать программу, которая заполняет элементы массива X, состоящего из n элементов (n≤10 вводится) случайными вещественными числами от - 8 до 8. Требуется распечатать данный вектор в строчку, выполнить в нём указанные ниже изменения, и в строчку распечатать вектор, получаемый в результате каждый i-ый элемент заменить его соседом, если сосед один, или наиболее близким к нему по значению соседом, если соседних элементов два.

Создадим новый массив, в который скопируем исходный массив, чтобы не испортить его. Первый и последний элементы заменяем следующим и предыдущим. Т.к. они имеют только по одному соседу. Для остальных сравниваем его соседей и заменяем наиболее близким. Для того чтобы узнать какой сосед ближе по значение применим формулу Math. Abs (m [i] - m [i - 1]) < Math. Abs (m [i] - m [i + 1], в которой сравниваем разности числа с предыдущим и со следующим, и берем их модули. Выводим результат.

static void Work (ref int [] m, int n

{ int [] y = new int [m. Length];

m. CopyTo (y, 0); // доп массив[0] = m [1]; y [n - 1] = m [n - 2]; // заменяем соседом если один сосед

for (int i = 1; i < m. Length - 1; i++)(Math. Abs (m [i] - m [i - 1]) < Math. Abs (m [i] - m [i + 1])) y [i] = m [i - 1];y [i] = m [i + 1];= y;

}void Print (string name, int [] m)

{. WriteLine ("***** ВЫВОД МАССИВА в столбик******");

for (int i = 0; i < m. Length; i++). WriteLine ("{0} [{1,2}] = {2,3}", name, i, m [i]);

}void Fill (out int [] m, int n)

{= new int [n];rnd = new Random (); // заполняем случайными числами от - 8 до 8

for (int i=0; i< m. Length; i++)[i] = rnd. Next ( (-8),8);

}void Main (string [] args)

{[] mas;. Write ("Ограничение - ");n = int. Parse (Console. ReadLine ());

if (n > 10) Console. WriteLine ("Привышено число элементов");

{. WriteLine ("Случайный массив от - 8 до 8");(out mas, n); // метод заполнения("mas", mas); // метод вывести на экран(ref mas, n); // метод выполняющий изменения("mas", mas); // метод выводит на экран измененный массив

}

 

Рис. 6.1 Результат работы программы

Ограничение

На входе

Результат

4

-5 - 5 2 1

-5 - 5 1 2

6

-3 1 5 7 - 3 - 5

1 5 7 5 - 5 - 3

8

-2 4 1 7 - 8 - 7 4 1

4 1 4 1 - 7 - 8 1 4

3

-5 3 - 1

3 - 1 3

7

-1 - 4 - 3 3 - 4 - 1 4

-4 - 3 - 4 - 3 - 1 - 4 - 1

5

1 7 - 3 5 2

7 1 5 2 5

Рис. 6.2 Таблица входных и выходных данных

Список используемой литературы


1.      Шилдт, Г. С# 4.0: полное руководство: Пер. с англ. / Герберт Шилдт. - М.: ООО "И.Д. Вильям с", 2011. - 1056с.

2.      Фленов, М.Е. Библия С#. - 2-е изд., перераб. и доп. - СПб.: БХВ-Петербург, 2011. - 560с.: ил. + CD-ROM

.        Электронный ресурс. Александр Ерохин "Перегрузка методов." http://professorweb.ru/my/csharp/charp_theory.

.        Андрианова, А.А. Объектно-ориентированное программирование на С#: Учебное пособие / А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова. - Казань: Казанский (Приволжский) федеральный университет, 2012. - 134с.

.        Электронный ресурс. Microsoft "Передача массивов при помощи параметров ref и out (Руководство по программированию на С#)" http://msdn. microsoft.com/ru-ru/library/szasx730. aspx

Похожие работы на - Методы на языке C#

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!