Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2010, 14:50   #1
Программер Михаил
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 16
По умолчанию

Помогите пожалуйста))

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

Вот код программы, но программа выдает ошибку. почему и как это исправить?

Код:
#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <conio.h>
using namespace std;
double a,b,c;
double veshestv()
{
       cin >> a;
       cin >> b;
       double c=a*b;
    cout<<c << endl;   
};
class Complex
	{
	private:
		double real;	// Действительная часть
		double image;	// Мнимая часть
	public:
		Complex() {};	// Конструктор по умолчанию
		Complex(double r) { real = r; image = 0; } // Конструктор
		Complex(double r, double i) { real = r, image = i; }	// Конструктор
		~Complex() {}	// Деструктор
		float abs()   // Модуль комплексного числа
			{
			return sqrt(real * real - image * image);
			}
 
		Complex operator*(Complex &);	// Перегрузка оператора умножения
 
		// Перегрузка функции-оператора << для вывода класса Complex
		friend ostream &operator<<(ostream &, Complex &);
 
		// Перегрузка функции-оператора >> для ввода класса Complex
		friend istream &operator>>(istream &, Complex &);
	};
Complex Complex::operator*(Complex &fp1)
	{
	double i, j;
	i = real * fp1.real - image * fp1.image;
	j = real * fp1.image + fp1.real * image;
	fp1.real = i;
	fp1.image = j;
	return fp1;
	}
	istream &operator>>(istream &fi, Complex &fp)
	{
	cout << "Введите действительную часть: ";
	fi >> fp.real;
	cout << "Введите мнимую часть: ";
	fi >> fp.image;
	return fi;
}
int main()
{
    veshestv();
    Complex c1, c2;
	cin >> c1;
	cin >> c2;
	cout << "\nc1 = " << c1;
	cout << "c2 = " << c2<<"\n" <<((c1)*(c2));
    getch();
    return 0;
}
Вместо смайла &o

Последний раз редактировалось Stilet; 09.12.2010 в 09:33.
Программер Михаил вне форума Ответить с цитированием
Старый 08.12.2010, 16:33   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

1. Код заворачиваем в тег CODE (значок #)
2. Если ошибка на этапе компиляции - сообщение об ошибке в студию.
3. Это еще что такое?
Код:
double veshestv()
{
cin >> a;
cin >> b;
double c=a*b;
cout<<c << endl; 
};
Наверно, тип все-таки void?
4.
Код:
Complex Complex::operator*(const Complex &fp1)
{
double i, j;
i = real * fp1.real - image * fp1.image;
j = real * fp1.image + fp1.real * image;
return Complex(i, j);
}
Это вам не operator*=
5. Где перегрузка operator<<?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 08.12.2010, 17:03   #3
Программер Михаил
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 16
По умолчанию

И так, значит при компиляции выделяет строку
cout << "c2 = " << c2<<"\n" <<((c1)*(c2));
и пишет такую ошибку
62строка no match for 'operator<<' in '(+operator<<(((std:stream&)(+std :perator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(&std::cout)), ((const char*)"c2 = ")))), ((Complex&)(&c2))))->std::basic_ostream<_CharT, _Traits>:perator<< [with _CharT = char, _Traits = std::char_traits<char>](std::endl [with _CharT = char, _Traits = std::char_traits<char>]) << Complex:perator*(Complex&)(((Comp lex&)(&c2)))'
Программер Михаил вне форума Ответить с цитированием
Старый 08.12.2010, 17:26   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Ну да, вы же не перегрузили оператор. Перегрузите, и не будет ошибки.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 08.12.2010, 17:39   #5
Программер Михаил
Пользователь
 
Регистрация: 07.12.2010
Сообщений: 16
По умолчанию

Я сейчас покажусь глупым, но как перегрузить эту функцию?

то есть оператор

Последний раз редактировалось Stilet; 09.12.2010 в 09:36.
Программер Михаил вне форума Ответить с цитированием
Старый 09.12.2010, 05:52   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Действительно, вопрос несколько неожиданный. А перегрузить подобно вот этому:
Код:
istream &operator>>(istream &fi, Complex &fp)
{
cout << "Введите действительную часть: ";
fi >> fp.real;
cout << "Введите мнимую часть: ";
fi >> fp.image;
return fi;
}
Допустим, так:
Код:
ostream &operator<<(ostream& stream, Complex& c)
 {
 stream << c.real << ((c.imag >= 0) ? ("+ i * ") : ("- i * ")) << c.imag();
 return stream;
 }
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 27.11.2012, 21:50   #7
kolobochino
Новичок
Джуниор
 
Регистрация: 27.11.2012
Сообщений: 2
По умолчанию Гипотеза Римана

Народ помогите! Задача состоит в следующем: Найти нули функции F(s)=сумма(от n=1 до K)1/(n^s), где s комплексное число s=x+i*y; x=1/2; y-переменная. Для тех кто не знает это гипотеза Римана. Не могу понять как в С++ работать с комплексными числами, много форумов прочитал на эту тему, понял что нужно класс создавать там и что то еще. Нужно задать s как комплексное число и изменять мнимую часть. подскажите как чего сделать пожалуйста)))Заранее спасибо)
kolobochino вне форума Ответить с цитированием
Старый 28.11.2012, 00:03   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Доктор, зачем Вам это? F(s)=f(y)=Sum_{1<=n<=K}((1/sqrt(n))*(cos(ln(n)*y)-i*sin(ln(n)*y)). Re(f(y)), Im(f(y)) легко вычисляются для заданного y, и даже являются непрерывными функциями с ограниченной производной. Правда, искать нули от этого не сильно легче.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комплексные числа Оля_1991 Помощь студентам 1 19.09.2010 21:10
Комплексные числа shtuceron Помощь студентам 2 21.01.2010 23:47
Комплексные числа 777UFO777 Общие вопросы Delphi 0 21.12.2008 23:48
записи и комплексные числа ZhekON Паскаль, Turbo Pascal, PascalABC.NET 4 23.05.2008 15:57
Большие комплексные числа xoz Общие вопросы Delphi 0 24.02.2008 03:12