Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Подключаемые библиотеки, описание структуры и функций

Читайте также:
  1. I. Исследования в области социальной мобильности и анализ социальной структуры
  2. II. Культурные аспекты изменения социальной структуры
  3. II. ОПИСАНИЕ УСТАНОВКИ И МЕТОДА ИЗМЕРЕНИЯ
  4. II. Теория метода и описание установки
  5. V Производные обратных тригонометрических функций
  6. Алгоритм работы библиотечных функций malloc/free языка С
  7. Анализ активов (структуры и стоимости имущества)

Лабораторная работа № 11. Структура-пара с конструкторами и перегрузкой операций

Методические указания

Выполнить задания Лабораторной работы 1, закрыв поля. Реализовать для каждой структуры вместо метода Init конструкторы без аргументов и инициализации. Вместо реализации функции Read перегрузить операцию ввода, вместо реализации функции Display перегрузить операцию вывода. Операции ввода/вывода оформить как дружественные.

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

 

Показать пример реализации

Пример проверки-тестирования – обязательно!

Вариант 0: пример программы.

0. Поле first – вещественное число, модуль комплексного числа; поле second – вещественное число, аргумент комплексного числа. Реализовать метод im()– вычисление мнимой части комплексного числа. Метод должен правильно работать при любых допустимых значениях first и second.

Программа.

Подключаемые библиотеки, описание структуры и функций

#include <iostream>

#include <cmath>

using namespace std;

 

class Complex

{ float first; // модуль комплексного числа = радиус-вектор

float second; // аргумент комплексного числа = угол

// -- закрытая функция проверки аргументов

bool init(float f, float s)

{ if (

(f < 0) ||

((f == 0)&&(s!= 0))

)

return false; // неправильные аргументы - не инициализировать поля

else // аргументы правильные - инициализировать поля

{ first = f;

second = s;

return true;

}

}

public:

// -- конструктор инициализации и конструктор по умолчанию

Complex(float f = 0, float s = 0)

{ if (!init(f,s))

throw "Конструктору не понравились ваши данные!";

}

friend istream& operator>>(istream &t, Complex &r);

friend ostream& operator<<(ostream &t, const Complex &r);

float im(){ return first * sin(second); }

};

ostream& operator<<(ostream &t, const Complex &r)

{ t << r.first << " * exp(" << r.second << " * i);";

return t;

}

 

istream& operator>>(istream &t, Complex &r)

{ float f=0,s=0;

do

{ cout << "Задавать только корректные данные!" << endl;

cout << "Задайте модуль:_ "; cin >> f;

cout << "Задайте аргумент:_ "; cin >> s;

}while(!r.init(f,s));

r.first = f; r.second = s;

return t;

}

Complex make_Complex(float f, float s)

{ Complex A(f,s);

return A;

}

/* Тестовые данные для проверки:

-- неправильные --

-1.0, 1.0

0.0, 1.0

0.0, -1.0

-- правильные -- результат im

0.0, 0.0 0.0

1.0, 0.0 0.0

1.0, 1.0 0.8414709848078965066525023216303

1.0, -1.0 -0.8414709848078965066525023216303

1.0, 1.57079632679 ПИ пополам 1.0

1.0, -1.57079632679 -ПИ пополам -1.0

2.0, 1.57079632679 ПИ пополам 2.0

1.0, 0.52359877560 одна шестая ПИ 0.5

1.0, -0.52359877560 -одна шестая ПИ -0.5

2.0, 0.52359877560 одна шестая ПИ 1.0

2.0, 2.61799387800 пять шестых ПИ 1.0

1.0, 3.14159265358 ПИ 0.0

*/

int main()

{ setlocale(LC_ALL, "Russian");

try { // -- ловля исключения обязательна!

Complex A; // создание одного объекта с полями по умолчанию

cout << A << "; "; cout << "Мнимая часть:_" << A.im() << endl;

//Complex B(-1,1); -- исключение возникает!

// И так все неправильные варианты тестов

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

Complex D(1,1);

cout << D << "; "; cout << "Мнимая часть:_" << D.im() << endl;

// И так все правильные варианты тестов

// Все правильные варианты тестов - для вызова метода read

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

Complex *p = new Complex(1, 3.14159265358f);

cout << *p << "; "; cout << "Мнимая часть:_" << p->im() << endl;

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

// -- вызов make -- ловля исключения --

Complex F = make_Complex(-1,1); // -- исключение --

Complex M[5];

// корректная инициализация элемента массива

M[0] = make_Complex(1,0);

cout << M[0] << "; ";

cout << " Мнимая часть:_" << M[0].im() << endl;

// и так - все правильные варианты тестов

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

Complex *m = new Complex[2];

// корректная инициализация элемента массива

m[0] = make_Complex(1,-0.52359877560f);

cout << m[0] << "; ";

cout << " Мнимая часть:_" << m[0].im() << endl;

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

m[1] = make_Complex(-1,0); // -- исключение возникает!

} catch(char *s) { cout << s << endl; }

 

system("pause");

return 0;

}

Вариант 0: пример тестовых данных.

/* Тестовые данные для проверки:

-- неправильные --

-1.0, 1.0

0.0, 1.

0.0, -1.0

-- правильные -- результат im

0.0, 0.0 0.0

1.0, 0.0 0.0

1.0, 1.0 0.8414709848078965

1.0, -1.0 -0.8414709848078965

1.0, 1.57079632679 ПИ пополам 1.0

1.0, -1.57079632679 -ПИ пополам -1.0

2.0, 1.57079632679 ПИ пополам 2.0

1.0, 0.52359877560 одна шестая ПИ 0.5

1.0, -0.52359877560 -одна шестая ПИ -0.5

2.0, 0.52359877560 одна шестая ПИ 1.0

2.0, 2.61799387800 пять шестых ПИ 1.0

1.0, 3.14159265358 ПИ 0.0

*/

Варианты заданий: из Лабораторной работы №9


Дата добавления: 2015-11-26; просмотров: 92 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.011 сек.)