Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Проектирование функций. Тестирование задачи




 

Функция main:

Входные величины Выходные величины
Имя Назначение Диапазон Имя Назначение Диапазон
M Число строк и столбцов матрицы A и число элементов вектора X Целое число      
K Число строк и столбцов матрицы B и число элементов вектора Y Целое число      

Алгоритм:

1. Ввод m,k

2. Вызов функции inpmatr(m,A)

3. Вызов функции inpmatr(k,B)

4. Вызов функции inpvect(m,X)

5. Вызов функции inpvect(k,Y)

6. P=chis0(m,A)

7. Q=chis0(k,B)

8. ЕСЛИ P<Q ТО

8.1. Z=max(m,A)

8.2. j=1

8.3. ПОКА j£m ВЫПОЛНИТЬ

8.3.1.CH=sum(j,m,A,X)

8.3.2. Cj=CH+Z

8.3.3. j=j+1

ПОКА ВСЕ

8.4. Вызов функции outrez(m,C)

ИНАЧЕ

8.5. Z=max(k,B)

8.6. j=1

8.7. ПОКА j£k ВЫПОЛНИТЬ

8.7.1.CH=sum(j,k,B,Y)

8.7.2.Dj=CH-Z

8.7.3. j=j+1

ПОКА ВСЕ

8.8. Вызов функции outrez(k,D)

ЕСЛИ ВСЕ

 

 

Функция inpmatr:

Входные величины Выходные величины
Имя Назначение Диапазон Имя Назначение Диапазон
a Число строк и столбцов матрицы Целое число X Матрица Целые числа

Алгоритм:

1. i=1

2. ПОКА i£a ВЫПОЛНИТЬ

2.1. j=1

2.2. ПОКА j£a ВЫПОЛНИТЬ

2.2.1. Ввод Xi,j

2.2.2. j=j+1

ПОКА ВСЕ

2.3. i=i+1

ПОКА ВСЕ

 

Функция inpvect:

Входные величины Выходные величины
Имя Назначение Диапазон Имя Назначение Диапазон
a Число элементов вектора Целое число V Вектор Целые числа

Алгоритм:

1. i=1

2. ПОКА i<=a ВЫПОЛНИТЬ

2.1. Ввод Vi

2.2. i=i+1

ПОКА ВСЕ

 

Функция outrez:

Входные величины Выходные величины
Имя Назначение Диапазон Имя Назначение Диапазон
b Число элементов вектора Целое число      
V Вектор Целые числа      

 

Алгоритм:

1. i=1

2. ПОКА i<=b ВЫПОЛНИТЬ

2.1. Вывод Vi

2.2. i=i+1

ПОКА ВСЕ

Функция chis0:

Входные величины Выходные величины
Имя Назначение Диапазон Имя Назначение Диапазон
A Число строк и число столбцов матрицы Целое число c Число нулевых элементов на главной диагонали матрицы Целое
T Матрица Целые числа      

Алгоритм:

1. c=0

2. i=1

3. ПОКА i<=a ВЫПОЛНИТЬ

3.1. ЕСЛИ Ti,i=0 ТО

3.1.1. c=с+1

ЕСЛИ ВСЕ

3.2. i=i+1

ПОКА ВСЕ

4. Возврат c

 

Функция max:

Входные величины Выходные величины
Имя Назначение Диапазон Имя Назначение Диапазон
A Число строк и число столбцов матрицы Целое число mx Максималь-ный элемент матрицы Целое число
X Матрица Целые числа      

Алгоритм:

1. mx=X1,1

2. ii=1

3. ПОКА ii<=a ВЫПОЛНИТЬ

3.1. jj=1

3.2. ПОКА jj<=a ВЫПОЛНИТЬ

3.2.1.ЕСЛИ Xii,jj>mx ТО

3.2.1.1.mx= Xii,jj

ЕСЛИ ВСЕ

3.2.2.jj=jj+1

ПОКА ВСЕ

3.3. ii=ii+1

ПОКА ВСЕ

4. Возврат mx

 

Функция sum:

Входные величины Выходные величины
Имя Назначение Диапазон Имя Назначение Диапазон
a Номер строки матрицы Целое число s Сумма произведений строки матрицы на вектор Целое число
b Число столбцов матрицы Целое число      
T Матрица Целые числа      
V Вектор Целые числа      

Алгоритм:

1. j=1

2. s=0

3. ПОКА j£b ВЫПОЛНИТЬ

3.1. s=s+Ta,jVj

3.2. j=j+1

ПОКА ВСЕ

4. Возврат s

Тесты:

Номер теста Назначение теста Входные данные Выходные данные
  Максимальный элемент матрицы равен нулю m=2 A=0 -4 -2 -7 X=(2,6) C=(-24 -46)
  Максимальный элемент матрицы не равен нулю k=2 B=2 6 1. 8 Y=(7,8) D=(67 104)

 

Функции в языке C#

Определение функции

Если записать код

static void Write ()

{Console.WriteLine("Текст из функции"); }

static void Main(string[] args)

{Write (); Console.ReadKey(); }

то он представляет собой две функции Main и Write.

Определение функции состоит из следующих элементов.

· Два ключевых слова: static и void.

· Имя функции, за которым следуют круглые скобки

· Заключенный в фигурные скобки блок кода, который подлежит выполнению.

При выполнении любого приложения С# первой вызывается та содержащаяся в нем функция, которая выступает в роли точки входа, а при завершении выполнения этой функции завершается и работа всего приложения. Весь исполняемый код на С# должен обязательно иметь такую точку входа. Это функция Main.

Ключевое слово void служит для обозначения того, что функция не возвращает никакого значения.

Далее идет код, вызывающий функцию, который выглядит следующим образом:

Write ();

Здесь просто вводится имя функции, а за ним — круглые скобки без содержимого. При достижении программой во время выполнения этой точки, будет запускаться код, содержащийся внутри функции Write ().

Использование круглых скобок как в определении, так и в вызове функции, является обязательным.

Возвращаемые значения

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

Например, можно создать функцию GetString() с возвращаемым значением типа string. Использовать такую функцию в коде можно следующим образом:

string myString;

myString = GetString ();

Можно также создать функцию GetVal () с возвращаемым значением типа float.

Такая функция может участвовать в математическом выражении:

float myVal,multiplier = 5.3;

myVal = GetVal()* multiplier;

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

· Указание в объявлении функции типа возвращаемого значения вместо ключевого слова void.

· Использование ключевого слова return для завершения выполнения

функции и передачи возвращаемого значения в вызывающий код.

При достижении оператора return управление выполнением программы сразу же возвращается вызывающему коду. Никакие строки кода после этого оператора больше не выполняются, хотя это вовсе не означает, что операторы return могут размещаться только в последней строке тела функции. Оператор return можно использовать и ранее в коде, например, после выполнения какой-то ветви алгоритма.

static float GetVal()

{ float checkVal;

if (checkVal < 5) return 4.7;

return 3.2; }

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

static float GetValO

{float checkVal;

if (checkVal < 5) return 4.7; }

Здесь получается, что в случае, если значение checkVal ≥ 5, не будет выполнено никакого оператора return, что является недопустимым. Все пути обработки должны обязательно приводить к оператору return.

Параметры

Когда функция должна принимать параметры, следует указать следующее:

· список принимаемых функцией параметров вместе с их типами в именами в определении этой функции;

· соответствующий список параметров в каждом вызове этой функции.

Это подразумевает использование показанного ниже кода, в котором может присутствовать любое количество параметров, при этом для каждого из них должен указываться тип и имя:

static <возвращаемый_тип> <имя_функции> (<тип_параметра> <имя_параметра>,...)

{ return <возвращаемое_значение>; }

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

static float Product(float paraml, float param2)

{ return paraml * param2; }

Соответствие параметров

При вызове функции параметры должны указываться в точности как в определении функции, то есть соответствующего типа, в соответствующем количестве и соответствующем порядке. Например, функцию

static void MyFunction(string myString, float myFloat)

{

}

нельзя вызывать так: MyFunction(8.6, "Hello");

Здесь в качестве первого параметра передается значение float, а в качестве второго — значение string, что не соответствует порядку, в котором эти параметры были указаны в определении функции.

Эту функцию также нельзя вызывать и следующим образом:

MyFunction("Hello");

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

Пример параметра-массива

static int MaxValue (int [ ] intArray)

{ int maxVal = intArray[0];

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

{ if (intArray[i] > maxVal) maxVal = intArray[i]; }

return maxVal;}

static void Main(string [ ] args)

{ int[] myArray = {1, 8, 3, 6, 2, 5, 9, 3, 0, 2};

int maxVal = MaxValue(myArray);

Console.WriteLine("Максимальное значение массива равно {0}", maxVal);

Console.ReadKey ();

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

Выходные параметры

Для изменения значения параметра можно указывать, что параметр является выходным параметром, используя ключевое слово out, которое применяется в виде модификатора перед параметром как в определении, так и в вызове функции.

Две особенности выходных параметров:

· В качестве параметра out можно применять неинициализированную переменную.

· Параметр out должен трактоваться как неприсвоенное значение функцией, которая его использует.

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

Для примера рассмотрим функцию MaxValue (), которая возвращает максимальное значение в массиве. Изменим ее так, чтобы она позволяла получать индекс того элемента, в котором находится максимальное значение.

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

Чтобы добиться такого поведения, достаточно добавить параметр out, изменив функцию, как показано ниже:

static int MaxValue (int [] intArray, out int maxlndex)

{ int maxVal = intArray[0]; maxlndex = 0;

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

{ if (intArray[i] > maxVal)

{ maxVal = intArray[i]; maxlndex = i; } }

return maxVal; }

Использовать эту функцию можно так:

int[] myArray = {1, 8, 3, 6, 2, 5, 9, 3, О, 2};

int maxIndex;

Console.WriteLine("Максимальное значение myArray равно {0}",

MaxValue(myArray, out maxlndex));

Console.WriteLine("Первое вхождение этого значения встречается в элементе {0}", maxlndex + 1);

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...