лабы вариант 4 / 1
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
Национальный исследовательский университет «МЭИ»
|
Институт ИнЭИ
Кафедра БИТ |
ПРАКТИЧЕСКАЯ РАБОТА №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 - Результаты работы программы при обработке ошибок.