Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

If (!double.TryParse(input, out u))

throw new Exception("Ошибка в формате данных!");

В данном фрагменте U – имя переменной типа double, которая будет

представлять в программе введённое пользователем значение напряжения.

Для генерации исключения при семантической ошибки используем такой код:

if (U != 110 & U != 127 & U != 220)

throw new Exception(input+" - недопустимое значение!");

Все приведённые операторы разместим в try-блоке, вслед за которым поместим

обработчик исключений (catch-блок), где будем подсчитывать их количество. Всю

конструкцию try/catch поместим в цикл. Тем, кто забыл раздел физики,

посвящённый

электричеству ,

напомним ,

что

мощность ,

потребляемая

сопротивлением R при его включении в сеть с напряжением U, вычисляется по

формуле U2/R. Программа в целом может быть такой:

// 16_05.cs - исключения для проверки вводимых данных

using System;

class Program {

static void Main() {

double U, R=100;

int counter = 0; // Счетчик исключений

while (true) {

Console.Write("Введите напряжение (110, 127, 220): ");

try

{

string input = Console.ReadLine();

If (!double.TryParse(input, out u)

)

throw new Exception("Ошибка в формате данных!");

if (U != 110 & U != 127 & U != 220)

throw new Exception(input+" - недопустимое значение!");

}

catch (Exception ex)

{

Console.WriteLine(ex.Message);

if (counter++ >= 2)

{ Console.WriteLine("Трижды ошиблись!"); return; }

continue;

}

break;

} // end of while

Console.WriteLine("Потребляемая мощность: {0,5:f}", U*U/R);

}

}

Результат выполнения программы:

* Первый сеанс:

Введите напряжение (110, 127, 220): 120<ENTER>

120 - недопустимое значение!

Введите напряжение (110, 127, 220): 110f<ENTER>

Ошибка в формате данных!

Введите напряжение (110, 127, 220): asd<ENTER>

Ошибка в формате данных!

Трижды ошиблись!

* Второй сеанс:

Введите напряжение (110, 127, 220): 127<ENTER>

Потребляемая мощность: 161,29

Как реагировать на особые ситуации в теле метода, рассмотрим на примере

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

пространства. Векторы будем передавать методу с помощью двух параметров-

ссылок на массивы.

При обращении к методу могут быть по ошибке использованы аргументы,

представляющие массивы с разным количеством элементов. Предусмотрим защиту

от такой ошибки, посылая исключение в случае неравенства размеров массивов-

аргументов. Тогда первые строки кода метода могут быть такими:

static double scalar(double[ ]x, double[ ]y)

{ if(x.Length!=y.Length)

throw new Exception(“Неверные размеры векторов!”);

Обработку исключений, формируемых методом при ошибке в его аргументах,

обычно выполняют в коде, из которого выполнено обращение к методу. (Там, где

заданы конкретные аргументы.) В следующей программе обращения к методу

scalar() размещены в try-блоке. Первое обращение корректно, во втором допущена

ошибка – размеры массивов-аргументов не совпадают. Текст программы:

// 16_06.cs - исключения в теле метода

using System;

class Program {

static double scalar(double[ ] x, double[ ] y) {

if (x.Length != y.Length)

throw new Exception("Неверные размеры векторов!");

double result = 0;

for (int i = 0; i < x.Length; i++)

result += x[i] * y[i];

return Math.Sqrt(result);

}

static void Main( )

{

try {

Console.WriteLine("scalar1="+

scalar(new double[ ] {1,2,3,4}, new double[ ] {1,2,3,4}));

Console.WriteLine("scalar2="+

scalar(new double[ ] {1,2,3,4}, new double[ ] {1,2,3}));

}

catch (Exception ex){

Console.WriteLine(ex.Message);

}

}

}

Результат выполнения программы:

scalar1=5,47722557505166

Неверные размеры векторов!

Соседние файлы в папке CSBasicCourse2ndedPodbelsky