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

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования

Национальный исследовательский университет «МЭИ»

Институт ИнЭИ

Кафедра БИТ

ПРАКТИЧЕСКАЯ РАБОТА №3

по дисциплине

«Объектно-ориентированный анализ и программирование»

Тема

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

Студентка

Газизова Юлия

_______________________

Группа

ИЭс-161-19

_______________________

Лектор

_______________________

Руководитель

Овсянникова М.Р.

_______________________

Работа защищена

_______________________

оценка

_______________________

дата

Москва

2020

1. Условие задачи

Разработать программу для решения следующей задачи.

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

Задача:

1) описать одномерный массив целых чисел, содержащий не более 100 элементов целого типа;

2) дать возможность пользователю ввести с клавиатуры реальное количество элементов;

3) выполнить проверку того факта, что значение указано пользователем верно;

4) если количество элементов вектора пользователь ввел с ошибкой:

- введено не число,

- введено число, превышающее количество элементов вектора,

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

5) заполнить элементы вектора целыми числами из интервала от -50 до 50 (можно использовать генератор случайных чисел);

6) записать элементы вектора в файл; предварительно убедиться, что файла с таким именем на диске нет; если файл с таким именем на диске существует, то существующий файл переименовать (новое имя выбрать самостоятельно);

7) закрыть файл;

8) убедиться, что файл на диске существует;

9) выполнить чтение элементов вектора, вычислить сумму элементов вектора, вывести на экран элементы вектора и вычисленную сумму.

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

2. Состав данных

В таблице 1 показаны данные используемые в программе.

Таблица 1

Название

Тип данных

Значение

num

integer

Переменная для записи размера массива

sum

integer

Переменная для хранения суммы элементов массива

change

integer

Переменная для выбора значения в “меню выбора”

oldfilename

char

Переменная, которой присваивается имя раннее созданного файла

newfilename

char

Переменная, которой присваивается имя новое имя файла (файл старый переименовать в новый)

*arr

integer

Одномерный динамический массив, в который мы записываем рандомные значения от -50 до 50.

3. Набор тестовых данных. Ожидаемые результаты

1) Обработка ошибок

размер массива - 1000

выдает сообщение об ошибке - incorrect size input

если размер массива (буквенный)- «ывапавыва»

выдает сообщение об ошибке - invalid input, character was entered!

2) Если программа не выявила ошибок на стадии ввода размера массива

размер массива – 3

0-ой элемент массива - -9

1-ый элемент массива -35

2-ой элемент массива -22

Сумма элементов массива – 48

  • Переименование файла

Ввод «1»

Ранее созданный файл .txt переименовывается в newfilename.txt

  • Не переименовываем файл (изменений нет)

Ввод «2» Ранее созданный файл .txt НЕ переименовывается в newfilename.txt

  • В случае, если мы выбираем «переименовать файл», НО файла с таким же именем не существует, то программа выдаст сообщение о том, что такой файл не был найден.

  • Если мы вводим что-то некорректное, то программа будет выдавать сообщение об ошибке «некорректный ввод» и завершаться.

4. Метод решения задачи, основные формулы

-

5. Текст программы

#include <iostream>

#include <fstream>

#include <string>

#include <cstdlib>

#include <cstdio>

using namespace std;

// Класс вывода сообщения об ошибке

class Error : public exception{

string err;

public:

Error(string error_text):

err(error_text) {};

string geterror()

{

return err;

}

};

int main()

{

int num = 0; // переменная для хранения размера массива

int sum = 0; // переменная для суммы элементов массива

int change = 0; // переменная для выбора в меню

char oldfilename[] = "test.txt"; // старое имя файла

char newfilename[] = "newfilename.txt"; // новое имя файла

ofstream file ("test.txt"); // создание файла

try // блок исключений (код, который может привести к ошибке)

{

cout << "Enter integer value: ";

cin >> num; // получение от пользователя размера массива

if (num > 100) // если размер массива больше 100

{

throw Error("incorrect size input");

}

if (!cin) // если в размер массива вместо цифр вводим буковки

{

throw Error("invalid input, character was entered!");

}

file << "Elements: "<< "\t";

int *arr = new int[num]; // Выделение памяти для массива

for (int i = 0; i < num; i++)

{

// Заполнение массива и вывод значений его элементов

arr[i] = rand() % 101 - 50; // Массив заполняем рандомными значениями в диапазоне от [-50,50]

cout << "Value of " << i << " element is " << arr[i] << endl; // Вывод рандомных значений

file << endl << arr[i] << "\t"; // запись этих значений в файл

sum = sum + arr[i]; // сумма всех элементов массива

}

cout << "Sum: " << sum << endl; // вывод суммы всех элементов массива

file << endl << "Sum:" << sum << "\t"; // запись в файл суммы всех элементов массива

delete[] arr; // очистка памяти

file.close(); // заканчиваем работу с файлом

cout << "\nDo you want to rename the file?\n1 - yes \n2 - no" << endl;

cin >> change;

try

{

if (change == 1) // если 1 то мы переименовываем файл

{

if (rename(oldfilename, newfilename) == 0) // переименование файла

{

cout << "Such file already exists";

}

else

{

throw Error("File not found");

}

remove(oldfilename);

}

else if (change == 2) // если 2 то ничего не делаем

{

cout << "Okey,bye";

return 0;

}

else // в других случаях просто выходим из программы

{

throw Error("Invalid input");

return 0;

}

}

catch (Error e) // отлов "исключений"

{

cout << e.geterror() << endl; // ошибка

}

return 0;

}

catch (Error e) // отлов "исключений"

{

cout << e.geterror() << endl; // ошибка

}

return 0;

}

6. Результаты выполнения программы на наборе тестовых данных

Результаты работы программы при тестовых данных показаны на рисунке 1.

Рисунок 1 - Результаты работы тестовых файлов программы

Результат выбора параметра «1» приводит к переименованию файла показаны на рисунке 2.

Рисунок 2 - Результаты работы выбора параметра «1»

Результат выбора параметра «2» приводит к переименованию файла показаны на рисунке 3.

Рисунок 3 - Результаты работы выбора параметра «2»

Результаты работы программы при выборе иного параметра показаны на рисунке 4.

Рисунок 4 - Результаты работы программы при выборе иных параметров.

Результат работы программы при обработке ошибок показаны на рисунке 5.

Рисунок 5 - Результаты работы программы при обработке ошибок.

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