Материал: Разработка консольных приложений в Visual Studio .NET. практикум. Ганцева Е.А

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Соответствие формальных и фактических аргументов

Между списком формальных и списком фактических аргументов должно выполняться соответствие по числу, порядку следования, типу и виду аргументов.

Если в первом списке n формальных аргументов, то фактических аргументов должно быть не меньше n (соответствие по числу).

Каждому i-му формальному аргументу ставится в соответствие i-й фактический аргумент.

Если последний формальный аргумент объявлен с ключевым словом params, то ему ставятся в соответствие все оставшиеся фактические аргументы (по порядку).

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

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

- допускает преобразование к типу T;

- совпадает c типом T или является его потомком.

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

В момент вызова метода выполнение начинается с вычисления фактических аргументов.

Ключевым словом ref полезно в целях экономии памяти снабжать и входные аргументы. В этом случае не будет создаваться копия аргумента, за счет чего экономятся память и время, что важно при работе со сложными и объемными типами данных.

Функции с побочным эффектом

Функция называется функцией с побочным эффектом, если помимо результата, вычисляемого функцией и возвращаемого ей в операторе return, она имеет выходные аргументы с ключевыми словами ref и out.

// Функция с побочным эффектом

static int f(ref int a)

{

return(a++);

}

static void Main(string[] args)

{

long p=1;

int[] p2={1, 2, 3};

int pin=3;

A(out p,pin);

Console.WriteLine(p);

A(out p, p2);

Console.WriteLine(p);

double pd, p3d=2;

double [] p4d={2,3,4};

A(out pd, p3d);

Console.WriteLine(pd);

A(out pd,p4d);

Console.WriteLine(pd);

f(ref pin);

Console.WriteLine(pin);

}

Хороший стиль объектно-ориентированного программирования не рекомендует использование таких функций.

Выражения, использующие функции с побочным эффектом, могут потерять свои прекрасные свойства, присущие им в математике. Если f(a) - функция с побочным эффектом, то a+f(a) может быть не равно f(a) +a, т.е. теряется коммутативность операции сложения.

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

static int f(ref int a)

{ return(a++); }

static void TestSideEffect()

{

int a = 0, b=0, c=0;

a =1; b = a + f(ref a);

a =1; c = f(ref a)+ a;

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

}

Рис. 18. Результаты работы метода с побочным эффектом

Контрольные вопросы

1. Для чего используется скобки [ ]?

2. К какому типу относятся массивы?

3. Как задать многомерный массив?

4. Какие методы существуют для обработки массива?

5. Можно ли объявить функцию с типом void?

6. Чем отличаются параметры выходные от обновляемых?

7. Для чего в списке аргументов используется слово params?

8. Как задать аргументы функции Main()?

Содержание и порядок выполнения работы

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

Вариант 1

1. Составить функцию, которая, получив два массива, определяет, равны ли они. Используя эту функцию решить следующую задачу: если три массива равны между собой, создать четвертый массив, все элементы которого равны утроенным элементам исходных, в противном случае создать массив, склеив все три исходных массива в порядке 1, 2 и 3.

2. Составить программу, которая получает матрицу Х размерностью m*n и целое число К. Программа формирует новую матрицу, осуществив циклический сдвиг всех строк исходной матрицы вверх К раз.

Вариант 2

1. Составить функцию, которая для упорядоченного массива чисел, определяет с помощью метода «бинарного поиска», является ли некоторое заданное число элементом этого массива. Используя эту функцию решить следующую задачу: для упорядоченного массива и заданного числа создать новый массив путем добавления в него этого числа в начало массива, если это число не является его элементом. Если массив не подвергнут изменению, выдать об этом соответствующее сообщение.

2. Составить программу, которая получает матрицу Х размерностью m*n и формирует новую матрицу, построив ее из исходной перестановкой строк: первой с последней, второй с предпоследней и т.д.

Вариант 3

1. Даны два целочисленных массива. Определить их симметрическую разность, т.е. такой массив, в который включены те элементы исходных массивов, которые входят в первый, но не входят во второй, и наоборот входят во второй, но не входит в первый.

2. Составить программу, которая получает матрицу Х размерностью m*n и матрицу Y размером m*n. Программа формирует матрицу Z размером m*n, где элемент (i, j) матрицы Z равен сумме элементов i-й строки матрицы X, которые отсутствуют в j–м столбце матрицы Y.

Вариант 4

1. Даны два целочисленных массива. Определить два массива, которые являются их разностью. В первый массив включить те элементы, которые входят в первый, но не входят во второй. Во второй массив включить элементы, которые входят во второй массив, но не входят в первый.

2. Составить программу, которая получает матрицу Х размерностью m*m и находит минимальный и максимальный элементы матрицы. Если оба элемента находятся под главной диагональю, то формируется новая матрица, из которой удалены строки и столбцы, на пересечении которых находятся эти элементы, в противном случае новая матрица не формируется и на экран выдается сообщение об этом.

Вариант 5

1. Дан массив действительных чисел. Создать новый массив, в который поместить элементы следующим образом: первым поместить максимальный элемент исходного массива, затем минимальный; далее максимальный и минимальный из оставшихся элементов и т.д.

2. Составить программу, которая получает матрицу Х размерностью m*n и вектор А, размером k. Программа формирует новую матрицу, в которой элементы исходной матрицы, которые совпали с одним из элементов вектора А, заменяются 0. Если в новой матрице есть строки или столбцы, все элементы которых равны 0, то об этом выдается сообщение.

Функция Main()

Функция является точкой входа в приложение на C#.

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

static void Main()

static void Main(string[] args)

static int Main()

static int Main(string[] args)

args – получает параметры командной строки.

Чтобы задать аргументы командной строки, надо открыть окно Properties для приложения, выбрать страницу Configuration Properties/Debugging и в поле Command Line ввести через пробел аргументы.

Рис. 19. Определение аргументов командной строки

static void Main(string[] args)

{

Console.WriteLine("{0} аргументов в командной строке", args.Length);

foreach( string s in args)

Console.WriteLine(s);

}

Рис. 20. Вывод аргументов командной строки

Вариант 6

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

2. Составить программу, которая получает матрицу В размерностью n*n и проверяет свойство , где В- исходная матрица, Т означает транспонирование. Составьте функции транспонирования матрицы и сравнения двух матриц на равенство.

Вариант 7

1. Составить функцию, которая определяет, является ли заданное натуральное число простым. Используя эту функцию решить следующую задачу. Задан массив из М натуральных чисел. Сформировать из него новый массив, поместив в него из исходного массива только простые числа.

2. Составить программу, которая получает матрицу В размерностью m*n и формирует новую матрицу, удалив из исходной столбец и строку, на пересечении которых находится наибольший по модулю элемент.

Вариант 8

1. В одну и ту же переменную последовательно вводятся М действительных чисел, среди которых могут встретиться одинаковые числа. Сформировать массив, в который поместить только разные числа. Запомнить их порядковые номера при вводе. Новый массив вывести на экран с их старыми номерами.

2. Составить программу, которая получает матрицу В размерностью m*n и формирует новую матрицу, включив в нее только те строки, элементы которых не образуют арифметической прогрессии. Если таких строк не найдено, то новая матрица не формируется и об этом выдается сообщение.

Вариант 9

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

2. Составить программу, которая получает матрицу А размерностью m*n и формирует новую матрицу, поместив в нее только те строки из исходной матрицы, которые образуют монотонную последовательность.

Вариант 10

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

2. Составить программу, которая получает матрицу Х размерностью m*n и если в исходной матрице есть строки и столбцы, все элементы которой равны 0, то программа уплотняет исходную матрицу влево и вверх, а затем формирует новую матрицу, поменяв местами строки и столбцы. Программа выдает на экран исходную и сформированную матрицу, сообщив, уплотнялась ли исходная матрица.

Вариант 11

1. В массив заданной размерности N ввести произвольные числа. Создать новый массив, поменяв местами столько равноудаленных от K-го элемента элементов массива, сколько возможно (K задано). Напечатать модифицированный массив.

2. Составить программу, которая получает матрицу Х размерностью m*n и и число К. Если программа находит число К среди элементов исходной матрицы, то она удаляет из исходной матрицы столбцы с элементом, равным К, в противном случае программа формирует новую матрицу, записав в нее только четные строки. Программа выдает на экран исходную матрицу и новую, если ее удалось создать.

Вариант 12

1. В одномерный массив размерности N ввести произвольные числа. Ввести число К. Если в исходном массиве чисел больше чем К, то массиве выполнить кольцевой сдвиг массива так, чтобы его первый максимальный элемент оказался на K-м месте (N и K заданы). Кольцевой сдвиг массива выполняется всеми его элементами так, что элементы “выталкиваемые” из массива в одну сторону занимают освободившиеся место с другой стороны. Если К больше или равно числу элементов в исходном массиве, то создать новый массив, добавив в начало исходного массива число К. Напечатать модифицированный массив.

2. Составить программу, которая получает матрицу Х размерностью m*n и и вектор А, размером m. Каждому элементу вектора поставлена в соответствие строка с тем же номером. Программа сортирует вектор А в порядке возрастания и формирует новую матрицу, расположив строки исходной матрицы в том же порядке, что и элементы вектора после сортировки.

Вариант 13

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

2. Составить программу, которая получает матрицу Х размерностью m*n и вектор A размером к. Программа формирует новую матрицу, в которую включены только те строки, которые содержат хотя бы одно число из вектора А.

Вариант 14

1. Ввести два одномерных массива разной размерности, каждый из которых содержит разные числа. Удалить из первого массива числа, содержавшиеся во втором. При удалении элементов массива он должен быть «сжат» перемещением оставшихся элементов в массиве. Если какое-либо число из второго массива не встретилось в первом ни разу, вывести соответствующее сообщение. Напечатать измененный массив.

2. Составить программу, которая получает матрицу Х размерностью m*n и вектор A, размером m. Строку с номером i назовем отмеченной, если соответствующий i элемент вектора A больше 0, и неотмеченной – в противном случае. Программа формирует новую матрицу по следующему правилу: все отрицательные элементы в отмеченных строках исходной матрицы в формируемой матрице заменяет на –1, положительные заменяет на 1, а нулевые остаются без изменений. Не отмеченные строки исходной матрицы копируются в новую матрицу в обратном порядке.

Вариант 15

1. В массив заданной размерности N ввести произвольные числа. Ввести число К. Если К меньше N, то в исходном массиве изменить порядок следования элементов в нем на обратный порядок отдельно до и отдельно после К-го элемента массива. В противном случае создать новый массив, исключив из исходного массива первый и последний элемент. Напечатать модифицированный массив, или новый массив, если он создан.

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

Вариант 16

1. Пусть дан массив а1...аn. Создать новый массив, переставив а1...аn так, чтобы вначале в массиве шла группа элементов, больших того элемента, который в исходном массиве располагается на первом месте, а затем - сам этот элемент, потом - группа элементов, меньших или равных ему.

2. Составить программу, которая получает матрицу А размерностью m*n и формирует из нее матрицу В, поменяв местами строки и столбцы.

Вариант 17

1. Даны действительные числа а1...аn , b1...bm , (а1<= а2.<=...<=аn ). Получить натуральные числа k1...km , такие, что ki - это решение задача поиска места bi среди а1...аn , ( i=1,...,m). Применить алгоритм деления пополам. В функции ввода последовательности чисел предусмотреть контроль ввода в порядке возрастания их значений.

Источник: https://studfile.net/preview/16562901/