Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Перегрузка операций 
:(
    Опции темы
jironda
  Дата 24.4.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 30.11.2006

Репутация: нет
Всего: нет



Создать класс,который содержит методы для перегрузки и выполнения операций  с комплексными числами(сложение ,умнжение, вычитане и деление)Использовать алгебраическую форму комплексного числа.Метод инициализации должен превращать 2 действительных числа в алгебр.форму комплексного числа,а метод печати выводить на экран.Прога должна все иллюстрировать
ПОЖАЛУЙСТО ПОМОГИТЕ.МНЕ ЭТО ЗАВТРА СДАТЬ НАДО!!! 
PM MAIL   Вверх
Alary
Дата 25.4.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 27.10.2006

Репутация: нет
Всего: нет



Код

#include <iostream.h> // это нужно для cout
#include <iomanip.h>  // это нужно для endl
#include <math.h>     // это нужно для fabs 
//-----------------------     
class Complex {
public:
    double real;   // вещественная часть
    double imaginary;   // мнимая часть 
               
    void Init(double _real, double _imaginary); // Метод инициализации
    void Print(); // Метод печати на экран
    
    Complex operator+(const Complex x) const; // Сложение 
    Complex operator-(const Complex x) const; // Вычитание  
    Complex operator*(const Complex x) const; // Умножение 
    Complex operator/(const Complex x) const; // Деление
     
};  

void Complex::Init(double _real, double _imaginary)

    real = _real; 
    imaginary = _imaginary;


void Complex::Print() 

    cout << real ;  
    if (imaginary > 0) {  
        cout << " + i " <<  fabs(imaginary) << " ";;
    } 
    if (imaginary < 0) {
        cout << " - i " <<  fabs(imaginary) << " ";;    
    }
    


Complex Complex::operator+(const Complex x) const 
{
   Complex result;
   result.real = real + x.real;
   result.imaginary = imaginary + x.imaginary;
   return result;
}  

Complex Complex::operator-(const Complex x) const 
{
    Complex result;
    result.real = real - x.real;
    result.imaginary = imaginary - x.imaginary;
    return result;

  
Complex Complex::operator*(const Complex x) const 
{
    Complex result;   //  (a+ib)(c+id) = (ac-bd)+i(ad+bc)
    result.real = real * x.real - imaginary * x.imaginary;
    result.imaginary = real * x.imaginary + imaginary * x.real;
    return result;        

 
Complex Complex::operator/(const Complex x) const 
{
    Complex result;  
    if ( x.real == 0 && x.imaginary == 0) { 
        cout << "*** Ошибка! Попытка деления на ноль! ***";  
        return result;
    }
    
    double znam;
    if ( fabs(x.real) >= fabs(x.imaginary) ) {
         znam = x.real + x.imaginary * x.imaginary / x.real;    
         result.real = (real + imaginary * x.imaginary / x.real) / znam;
         result.imaginary = (imaginary - real * x.imaginary / x.real ) / znam; 
    }   
    else{
        znam = x.imaginary + x.real * x.real / x.imaginary;     
        result.real = (imaginary + real * x.real / x.imaginary) / znam;
     result.imaginary = (imaginary * x.real / x.imaginary - real ) / znam;   
    }
    return result;
}
//----------------------------- 
void Testing (Complex z1, Complex z2) 
{    
    cout << "z1 = "; 
    z1.Print(); 
    cout << endl; 
    
    cout << "z2 = "; 
    z2.Print(); 
    cout << endl;  
    
    Complex z3;  
    z3 = z1 + z2; 
    cout << "z1 + z2 = ";
    z3.Print(); 
    cout << endl; 
    
    cout << "z1 - z2 = ";
    z3 = z1 - z2;
    z3.Print(); 
    cout << endl;  
    
    cout << "z1 * z2 = ";
    z3 = z1 * z2;
    z3.Print(); 
    cout << endl; 
    
    cout << "z1 / z2 = ";
    z3 = z1 / z2;
    z3.Print(); 
    cout << endl;   
    
      
}
//-----------------------------
int main()
{  
    Complex z1;  // первый объект класса Complex
    z1.Init(-5.55, 45.8);        
    
    Complex z2;  // второй объект класса Complex
    z2.real = 1.5;               
    z2.imaginary = -3.99; 

    Testing (z1, z2);     
    cout << endl; 
    
    z1.Init(0, 0);
    Testing (z1, z2); 
    cout << endl;
    
    z1.Init(-0.6, -14.8);
    z2.Init(1, 0);
    Testing (z1, z2); 
    cout << endl; 
    
    z2.Init(0, 3);
    Testing (z1, z2); 
    cout << endl; 
    
    z2.Init(0, 0);
    Testing (z1, z2); 
    cout << endl; 
    
        
    return 0;
}     


только потести хорошенько

Модератор: выбирайте подсветку кода http://forum.vingrad.ru/index.php?showtopic=126445

Это сообщение отредактировал(а) Alexeis - 26.4.2007, 13:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.