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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2013, 13:07   #1
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию С++ Комплексные числа и ловля ошибок

Добрый день! Уважаемые программисты, помогите, пожалуйста, решить задачу по программированию на С++ (среда Visual C++ 2012).

Текст задания:

Реализуйте функцию ввода комплексных чисел с консоли. Обоснуйте и реализуйте для этой функции не менее трёх различных стратегий обработки возможных ошибок времени исполнения.

Мои наработки:

Код:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;

class Complex
{
private:
	double re;
    double im;
public:
	Complex()
		{
			re = 0;
			im = 0;
	} 
    Complex(const Complex& temp)
		{
			re = temp.re;
			im = temp.im;
	}
    Complex(double _re, double _im)
		{
			re = _re;
			im = _im;
	}
	Complex vvod (Complex _re, Complex _im)
	{
		cout<<"Vvedite re: "<<endl;
		cin>>_re.re;
		cout<<"Vvedite im: "<<endl;
		cin>>_im.im;
		cout<<"Complex: "<<re<<"+"<<im<<"i"<<endl;
	}

    ~Complex();
};

int main()
{
	double a;
	double b;
	vvod (a, b);
	return 0;
}
С ловлей ошибок я постараюсь сама разобраться, помогите, пожалуйста, на этом этапе. Что я делаю не так?
Bitter_Schokolade вне форума Ответить с цитированием
Старый 22.09.2013, 14:19   #2
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

НЕ КОМПИЛИРУЕТСЯ. ПРОБЛЕМЫ В БИБЛИОТЕКАХ. ПОДСКАЖИТЕ, ЧТО ДЕЛАТЬ?

Код:
#include <iostream>
#include <windows.h>

using namespace std;

class Complex
{
public:
	double re;
    double im;
public:
	Complex()
		{
			re = 0;
			im = 0;
	} 
    Complex(const Complex& temp)
		{
			re = temp.re;
			im = temp.im;
	}
    Complex(double _re, double _im)
		{
			re = _re;
			im = _im;
	}
	
	/*Complex vyvod (Complex _re, Complex _im)
	{
		Complex c;
		cout<<c.re << "+" << c.im << "*i";
		//"Complex: "<<re<<"+"<<im<<"i"<<endl;
		return c;
	}
	*/
    
	~Complex();
};

void operator<< (ostream& out, Complex c)
{
    out << c.re << "+" << c.im << "*i";
}

int main()
{
	Complex a;
	Complex b;
	Complex c;
	cout<<"Vvedite re: "<<endl;
	cin>>a.re;
	cout<<"Vvedite im: "<<endl;
	cin>>b.im;
	//vyvod
	system ("pause");
	return 0;
}
Bitter_Schokolade вне форума Ответить с цитированием
Старый 22.09.2013, 19:49   #3
fructus-temporum
Новичок
Джуниор
 
Регистрация: 22.09.2013
Сообщений: 5
Восклицание Помогите пожалуйста

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

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <locale.h>

int main()
{
setlocale(LC_ALL, "Russian");
float x, a, b, c, i, y;

printf("Введите значение x = ");
scanf("%f", &x);

printf("Введите значение a = ");
scanf("%f", &a);

printf("Введите значение b = ");
scanf("%f", &b);

printf("Введите значение c = ");
scanf("%f", &c);

printf("Введите значение i = ");
scanf("%f", &i);

if ((b == 3) && (x > 1.2) && (c == 1.3)) {
if (a == 2) {
y = (b*x + a*x*x) / (exp(x) + a*x);
} else if (a < 2) {
y = pow(a*x, 1.5) + pow(b*x, 1.5) + c;
} else if (a > 2) {
y = a*pow(x, 3) + c*x;
}
} else {
if (((x >= 0) && (x < 1)) && (a == 0.4)) {
y = cos(x) / sqrt(1 + a*a + sin(x)*sin(x));
} else if ((i < 10)
&& (a == 2.1)
&& (b == 0.3)
&& (x > 7)
&& (x < 12)) {
y = a*pow(i, 4) + b*i;
}
}
printf("При x = %1.1f, a = %1.1f, b = %1.1f, c = %1.1f, i = %1.1f y = %1.1f\n",
x, a, b, c, i, y);
getch();
return 0;
}



выдает ошибки

1>------ Перестроение всех файлов начато: проект: 6, Конфигурация: Debug Win32 ------
1>Удаление промежуточных и выходных файлов проекта "6", конфигурации "Debug|Win32"
1>Компиляция...
1>stdafx.cpp
1>Компиляция...
1>AssemblyInfo.cpp
1>6.cpp
1>.\6.cpp(15) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\6.cpp(18) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\6.cpp(21) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\6.cpp(24) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\6.cpp(27) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(306): см. объявление 'scanf'
1>.\6.cpp(33) : error C2666: pow: для 6 перегрузок есть подобные преобразования
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(575): может быть 'long double pow(long double,int)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(573): или 'long double pow(long double,long double)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(527): или 'float pow(float,int)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(525): или 'float pow(float,float)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(489): или 'double pow(double,int)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(123): или 'double pow(double,double)'
1> при попытке сопоставить список аргументов '(float, double)'
1>.\6.cpp(33) : error C2666: pow: для 6 перегрузок есть подобные преобразования
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(575): может быть 'long double pow(long double,int)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(573): или 'long double pow(long double,long double)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(527): или 'float pow(float,int)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(525): или 'float pow(float,float)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(489): или 'double pow(double,int)'
1> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\math.h(123): или 'double pow(double,double)'
1> при попытке сопоставить список аргументов '(float, double)'
1>Создание кода...
1>Журнал построения был сохранен в "file://c:\Users\Светлана\Documents\Visual Studio 2008\Projects\6\6\Debug\BuildLog.ht m"
1>6 - ошибок 2, предупреждений 5
========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ==========


помогите пожалуйста
fructus-temporum вне форума Ответить с цитированием
Старый 22.09.2013, 20:43   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

fructus-temporum создайте пустой проект... Вы наверно создали проект C++ с доп. надстройками и компонентами.
Создайте файл с расширением *.c и вперед...
P.S. Создавайте свою тему!!!
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 22.09.2013, 20:52   #5
fructus-temporum
Новичок
Джуниор
 
Регистрация: 22.09.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
fructus-temporum создайте пустой проект... Вы наверно создали проект C++ с доп. надстройками и компонентами.
Создайте файл с расширением *.c и вперед...
P.S. Создавайте свою тему!!!
я создаю новый проект,но про доп настройки ничего не знаю
fructus-temporum вне форума Ответить с цитированием
Старый 22.09.2013, 22:49   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от fructus-temporum Посмотреть сообщение
я создаю новый проект,но про доп настройки ничего не знаю
Я запустил Вашу программу у себя в Visual C++ 2010. Нужно заменить float на double в этой строке:

Код:
float x, a, b, c, i, y;
8Observer8 вне форума Ответить с цитированием
Старый 22.09.2013, 22:55   #7
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

И ещё замечание. Я когда Вашу программу запустил в среде разработки NetBeans, то у меня кракозябы вывелись на экран и эта строка не помогла:
Код:
setlocale(LC_ALL, "Russian");
В Visual C++ - да работает, а в NetBeans - нет. На самом деле, тут не в среде дело, а в том, что у меня английская версия винды.

Лучше пишите, как в следующем примере. Вместо:
Код:
setlocale(LC_ALL, "Russian");
Пишите:
Код:
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
Пример:
Код:
#include <windows.h>
#include <iostream>
using namespace std;

int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    string str;
    cin >> str;
    cout << str;

    return 0;
}
P.S. Не забудьте только подключить: #include <windows.h>

Последний раз редактировалось 8Observer8; 22.09.2013 в 23:11.
8Observer8 вне форума Ответить с цитированием
Старый 22.09.2013, 23:10   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Bitter_Schokolade Посмотреть сообщение
НЕ КОМПИЛИРУЕТСЯ. ПРОБЛЕМЫ В БИБЛИОТЕКАХ. ПОДСКАЖИТЕ, ЧТО ДЕЛАТЬ?

Код:
#include <iostream>
#include <windows.h>

using namespace std;

class Complex
{
public:
	double re;
    double im;
public:
	Complex()
		{
			re = 0;
			im = 0;
	} 
    Complex(const Complex& temp)
		{
			re = temp.re;
			im = temp.im;
	}
    Complex(double _re, double _im)
		{
			re = _re;
			im = _im;
	}
	
	/*Complex vyvod (Complex _re, Complex _im)
	{
		Complex c;
		cout<<c.re << "+" << c.im << "*i";
		//"Complex: "<<re<<"+"<<im<<"i"<<endl;
		return c;
	}
	*/
    
	~Complex();
};

void operator<< (ostream& out, Complex c)
{
    out << c.re << "+" << c.im << "*i";
}

int main()
{
	Complex a;
	Complex b;
	Complex c;
	cout<<"Vvedite re: "<<endl;
	cin>>a.re;
	cout<<"Vvedite im: "<<endl;
	cin>>b.im;
	//vyvod
	system ("pause");
	return 0;
}
У Вас реализации для деструктора нет. Он у вас объявлен, но реализация для него не написана. Удалите объявление деструктора. Он вам не нужен.

Главная стратегия обработки ошибок - это исключения. Гуглите: исключения с++

Последний раз редактировалось 8Observer8; 22.09.2013 в 23:12.
8Observer8 вне форума Ответить с цитированием
Старый 29.09.2013, 10:44   #9
Bitter_Schokolade
Несчастный студент
Пользователь
 
Аватар для Bitter_Schokolade
 
Регистрация: 31.03.2013
Сообщений: 52
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение

Главная стратегия обработки ошибок - это исключения. Гуглите: исключения с++

Нужно три стратегии. С исключениями проблем не возникает, а какие еще стратегии? Как их реализовывать? Может, в классе три конструктора должно быть?
Bitter_Schokolade вне форума Ответить с цитированием
Старый 29.09.2013, 11:05   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Bitter_Schokolade Посмотреть сообщение
Нужно три стратегии. С исключениями проблем не возникает, а какие еще стратегии? Как их реализовывать? Может, в классе три конструктора должно быть?
Возвращать код ошибки через ссылку.

Код:
#include <iostream>
using namespace std;

double divide(int &error, double a, double b) {
    if (b == 0) {
        error = 1;
        return 0;
    }

    return a / b;
}

int main() {

    double a = 6;
    double b = 0;
    int error = 0;

    double c = divide(error, a, b);

    if (error == 0) {
        cout << "c = " << c << endl;
    } else {
        switch (error) {
            case 1:
                cerr << "Error: division by zero" << endl;
                break;
        }
    }

    return 0;
}
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комплексные числа Программер Михаил Общие вопросы C/C++ 7 28.11.2012 00:03
Комплексные числа в С++ AntonE Помощь студентам 2 05.05.2011 23:51
Комплексные числа Оля_1991 Помощь студентам 1 19.09.2010 21:10
Комплексные числа shtuceron Помощь студентам 2 21.01.2010 23:47
Комплексные числа 777UFO777 Общие вопросы Delphi 0 21.12.2008 23:48