Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лабораторная работа №9




Catch (int)

Try

Void print_vals(val_type start_x, val_type end_x, val_type step, func f)

Val_type math_func(double val)

Catch (int)

Try

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

Try

{

printf("Enter 1 - to generate int exception\nEnter 2 - to generate char exception\nEnter 3 - to generate float exception\n");

printf("Your choise: ");

scanf("%i", &choise);

/*

*/

switch (choise)

{

case 1: throw 1;

break;

case 2: throw "String";

break;

default: throw 2.0;

}

}

catch (int i)

{

printf("Integer exception = %i\n", i);

}

catch (char *str)

{

printf("String exception = %s\n", str);

}

catch (...)

{

printf("Undefined exception\n");

}

return 0;

}

 

Следует отметить, что для перехвата исключений типа деления целочисленного значения на ноль следует использовать секцию catch(…).

Существует возможность вместо стандартной функции terminate() подставить собственную. Для этих целей применяется функция, прототип которой описывается следующим образом: terminate_handler set_terminate(terminate_handler _Pnew), где _Pnew - это указатель на функцию, которая будет вызваться вместо стандартной функции terminate(). Через свое имя функция возвращает указатель на предыдущую функцию terminate(). Для использования функции set_terminate необходимо подключить файл exception.

Пример 3. Использование собственной функции вместо стандартной функции terminate() при обработке исключительных ситуаций.

#include <stdio.h>

#include <process.h>

#include <exception>

void my_terminate()

{

puts("This is my terminate function");

// Функция abort() прекращает работу текущего процесса. Для ее использования

// необходимо подключить process.h

abort();

}

main()

{

terminate_handler oldfunc = set_terminate(my_terminate);

{

throw 2.0;

}

{

// Не перехватывает исключение вещественного типа

puts("This section do not catch exception divide by zero");

}

puts("You do not see this message");

return 0;

}

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

#include <stdio.h>

typedef double val_type;

typedef val_type (*func)(val_type);

//---------------------------------------------------

{

val_type res = 1 / val;

// Если делим на 0, то возбуждаем целочисленное исключение

if (val == 0)

throw(1);

return res;

}

//---------------------------------------------------

{

for(; start_x <= end_x; start_x += step)

{

// Защищенная секция, в которой вызывается функция, которая может вызвать

// исключение

printf("%6.4f -> %6.4f\n", start_x, f(start_x));

}

{

// Перехватываются только целочисленные исключения

printf("%6.4f -> %s\n", start_x, "error");

}

}

//---------------------------------------------------

main()

{

float start_x, end_x, step;

printf("Enter the start value of x: ");

scanf("%f", &start_x);

printf("Enter the end value of x: ");

scanf("%f", &end_x);

printf("Enter the step of x: ");

scanf("%f", &step);

print_vals(start_x, end_x, step, math_func);

return 0;

}

Задание

 

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

 

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

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

 

Перечень математических функций (функция выбирается путем нахождения остатка от деления номера по журналу на 4 и прибавления к полученному числу 1):

1. tg(x).

2. .

3. .

4. .


Цель работы: ознакомиться с понятиями «сортировка» и «поиск». Изучить предложенные алгоритмы сортировок и поиска, научиться осуществлять и программную реализацию. Осуществить сравнение эффективности реализованных алгоритмов сортировки.




Поделиться с друзьями:


Дата добавления: 2017-01-14; Просмотров: 337; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.