Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1432

.pdf
Скачиваний:
1
Добавлен:
07.01.2021
Размер:
1.15 Mб
Скачать

Алгоритм программы - примера

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

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

В программе используют вещественные переменные двойной точности s0, s, x, y, а также целочисленные переменные i, m, n. Все числовые методы в программе возвращают вещественное число двойной точности.

‘Пример 1.5

Module Module1

Sub Main()

Dim i, m, n As Integer Dim s0, s, x, y As Double

Console.WriteLine("Расчет площади методом Монте-Карло") Console.WriteLine()

m = 0 n = 1000 s0 = 1

Console.Write("Введите число точек ") n = Convert.ToInt32(Console.ReadLine())

For i = 1 To n

x = Rnd()

y = Rnd()

If (y < Math.Sin(x)) Then

m = m + 1

End If

Next

s = s0 * m / n

Console.WriteLine("Всего точек = " + Str(n))

19

Console.WriteLine("Внутри области = " + Str(m)) Console.WriteLine()

Console.WriteLine("Площадь = " + Str(Math.Round(s, 4))) Console.ReadLine()

End Sub

End Module

1.3. Задания на тему «Создание консольного приложения»

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

вертикальными прямыми

x = a и x = b, горизонтальной прямой

y = 0, а также кривой –

графиком функции y = f(x). Варианты

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

Таблица 1.2

Варианты заданий на тему «Создание консольного приложения»

Вариант

a

b

f(x)

 

 

 

 

1

0

1

Cos(x)

 

 

 

 

2

0

2

Sin(x)

 

 

 

 

3

0

1

Cos(x)*x^2

 

 

 

 

4

1

2

Sin(x)/x^2

 

 

 

 

5

0

1

Sin(x)*Cos(x)

 

 

 

 

6

0

1

Tg(x)

 

 

 

 

7

0

1

Sin(x)+Cos(x)

 

 

 

 

8

1

3

Sin(x)-Cos(x)

 

 

 

 

9

0

1

Sin(x^2)

 

 

 

 

10

0

1

Cos(x^2)

 

 

 

 

11

0

1

Sqrt(x)

 

 

 

 

12

1

2

x/Sqrt(x)

 

 

 

 

20

Порядок выполнения лабораторной работы

Создать новый проект: Файл – Создать проект – Язык Visual Basic

– Создать консольное приложение.

Добавить программный код в функцию Main.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

1.4. Обработка исключительных ситуаций

Ошибки, которые возникают во время выполнения программы, называются исключениями. В Visual Basic ошибки (также называемые исключениями) подразделяются на три категории: синтаксические ошибки, ошибки времени выполнения и логические ошибки.

Синтаксические ошибки

Синтаксические ошибки – это ошибки, выявляемые во время написания программного кода. Visual Basic проверяет код в процессе его ввода в окне Редактор кода и предупреждает при обнаружении ошибки, такой как неправильное написание слова или неправильное использование элемента языка. Синтаксические ошибки легко исправить в среде разработки непосредственно при возникновении. Оператор Option Explicit является одним из средств предотвращения синтаксических ошибок. Он требует предварительного объявления всех переменных, используемых в приложении. Таким образом, когда эти переменные используются в коде, опечатки немедленно обнаруживаются и могут быть исправлены.

Ошибки времени выполнения

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

21

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

Логические ошибки

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

Класс Exception

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

Классы исключений должны быть выведены из встроенного класса исключений Exception. Код обработки исключений обращается к экземпляру класса Exception, который позволяет извлекать сведения о любых возникших исключениях. Всякий раз при возникновении исключения устанавливается глобальный объект Err и создается новый экземпляр класса Exception. Свойства класса Exception (табл. 1.3) помогают в определении места возникновения, типа и причины исключений. Например, свойство Message возвращает текстовое сообщение, описывающее ошибку.

22

 

Таблица 1.3

 

Свойства класса Exception

 

 

Свойство

Описание

 

 

HelpLink

Ссылка на файл справки, связанный с этим исключением

 

 

HResult

Значение типа HRESULT – кодированное числовое значение,

сопоставленное определенному исключению

 

 

 

InnerException

Экземпляр объекта Exception, который вызвал текущее

исключение

 

 

Message

Краткое сообщение о текущем исключении

 

 

Source

Имя приложения или объекта, который вызвал ошибку

 

 

StackTrace

Строковое представление фреймов стека вызовов в момент

возникновения текущего исключения

 

 

 

TargetSite

Метод, создавший текущее исключение

 

 

 

Блок обработки исключений

Блок обработки исключений состоит из 4 частей: try, catch, throw, finally, из которых первые две обязательны. Программные инструкции, которые нужно контролировать, помещаются в try-блок. Информация об исключении, возникшем в try-блоке, перехватывается программным путем и обрабатывается с помощью catch-блока. Блок throw позволяет сгенерировать исключение вручную. Если при выходе из обработки исключений требуется обязательно выполнить некоторый код, то его размещают в блоке finally. Формат блока обработки исключений без throw выглядит так:

Try

[ Try-операторы ] [ Exit Try ]

[ Catch [ переменная [ As тип исключения ]] [ When выражение] [ catch-операторы ]

[ Exit Try ] ]

[ Catch ... ]

[ Finally

[ Finally-операторы ] ] End Try

23

Try-операторы – это один или несколько операторов, при выполнении которых может возникнуть ошибка.

Catch содержит предусмотренный действия в ответ на исключение, возникшее в блоке Try. Разрешено использование нескольких блоков Catch, при этом каждая инструкция Catch сравнивается в текстовом порядке, чтобы определить обрабатывает ли она исключение, которое возникло.

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

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

Инструкция Catch с предложением When перехватывает исключения, только если результат вычисления выражения равен True. Предложение When используется только после проверки типа исключения, и выражение может ссылаться на идентификатор, представляющий исключение.

Выражение типа Boolean используется для определения условий, при которых будет перехватываться данная ошибка. Обычно используется для фильтрации по номеру ошибки.

Сatch-операторы обрабатывают ошибки, возникшие в соответствующем блоке Try.

Exit Try зарезервированное слово, которое разбивает структуру Try...Catch...Finally. Выполнение возобновляется с кода, непосредственно следующего за оператором End Try. Инструкция Finally будет по-прежнему выполняться. Не допускается в блоках

Finally.

Finally всегда выполняется по окончании выполнения любой части оператора Try.

Finally-операторы выполняются после выполнения всех остальных действий по обработке ошибки.

End Try завершает структуру Try...Catch...Finally.

Локальные переменные блока Try недоступны в блоке Catch, поскольку это отдельные блоки. Если нужно использовать переменную в нескольких блоках, то следует объявить ее вне структуры Try...Catch...Finally.

24

Блок Try содержит код, в котором может возникнуть ошибка, а в блоке Catch содержится код обработки любой возникшей ошибки. Если ошибка возникла в блоке Try, то управление программой передается соответствующему блоку Catch.

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

Если инструкция Try не содержит ни одного блока Catch, то она должна содержать Finally.

Впримере ниже создан блок обработки ошибки.

Пример 1.6

Dim x As Integer = 1

Dim y As Integer = 0 Try

x = x \ y

Catch e As Exception When y = 0 Beep()

MsgBox("Деление на 0") Finally

Beep()

End Try

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

В следующем примере блок обработки исключений содержит три блока catch, определенных для обработки ошибок OverflowException, , IndexOutOfRangeException.

‘ Пример 1.7

Module Module1

Sub Main()

Dim b, c(2) As Integer Dim x As Double

Console.Write("Введите целое число от 1 до 3 = ") b = Convert.ToInt32(Console.ReadLine())

x = b

For i As Integer = 0 To 2 c(i) = i

25

Next

Try

'Здесь событие для OverflowException If b = 1 Then

For i As Integer = 1 To 100000 b = b * i

Next End If

'Здесь событие для DivideByZeroException Console.WriteLine(1 \ (b - 2))

'Здесь событие для IndexOutOfRangeException Console.WriteLine(c(b))

Catch e As DivideByZeroException

Console.WriteLine(e.Message)

Catch e As IndexOutOfRangeException

Console.WriteLine(e.Message)

Catch e As OverflowException

Console.WriteLine(e.Message)

Finally

Console.WriteLine("Завершен блок Try-Catch-Finally")

End Try

Console.ReadLine()

End Sub

End Module

Данная программа выдает короткое сообщение – свойство Message для одного из трех видов ошибок, которые возникают при вводе с клавиатуры чисел 1, 2 или 3. Для отображения более полных сведений о текущем исключении можно использовать другие свойства (см. табл. 1.3) или же показать все сведения об исключении, например:

Console.WriteLine(e.ToString)

26

1.1. Задание на тему «Обработка исключительных ситуаций»

Создать консольное приложение, содержащее блок обработки исключений для двух типов из табл. 1.4. В каждом catch-блоке отобразить значения трех свойств соответствующего исключения. Разработать программный код, который способен создавать ошибки – исключительные ситуации. Подготовить тестовые данные, подходящие для проверки программы.

 

Таблица 1.4

Примеры типов исключений

 

 

Исключение

Значение

 

 

ArgumentException

Недопустимый аргумент

 

 

ArgumentOutOfRangeException

Значение аргумента вне допустимых пределов

 

 

ArithmeticException

Ошибка в арифметическом действии

 

 

ArrayTypeMismatchException

Недопустимый тип элемента массива

 

 

DivideByZeroException

Деление на нуль

 

 

IndexOutOfRangeException

Индекс массива вне допустимых пределов

 

 

OverflowException

Арифметическое переполнение

 

 

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

Порядок выполнения лабораторной работы

Создать новый проект – консольное приложение.

Добавить программный код в функцию Main.

Компилировать программу.

Тестировать программу.

Создать документ с описанием работы программы.

27

2.ВВОД И ВЫВОД В ТЕКСТОВЫЙ ФАЙЛ

2.1.Создание текстового файла

ВVisual Basic используется система ввода-вывода и классы, определенные средой .NET Framework. Программы выполняют операции ввода-вывода посредством потоков. Поток связывается с физическим устройством. На низком уровне система оперирует байтами. Три встроенных потока считывают и записывают символы. Доступ к ним осуществляется через свойства Console.In, Console.Out, Console.Error. По умолчанию они работают с консолью и клавиатурой, но могут быть перенаправлены на любое совместимое устройство ввода-вывода. Все классы потоков определены в пространстве имен System.IO, доступ к которому возможен после добавления в начало программы строки Imports System.IO.

Создание текстового файла может быть выполнено с помощью следующих строк кода:

Dim F_Name = “a.txt” Dim fs As FileStream

fs = New FileStream(F_Name, FileMode.Create)

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

Dim fs As FileStream

fs = New FileStream(F_Name, FileMode.Append)

Для записи символьной информации в текстовый файл можно использовать методы Write и WriteLine классa StreamWriter. Для этого создается объект класса StreamWriter:

Dim fo As New StreamWriter(fs)

Метод WriteLine завершает строку парой управляющих символов, означающих конец строки. Метод Write не обеспечивает переход к следующей строке в файле. Например, следующие две команды выводят информацию в одну строку, причем вторая завершает строку.

fo.Write(“Иванов - ”) fo.WriteLine("чемпион")

28

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]