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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 10:15   #1
liver1981
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 20
Плохо Поправьте, пожалуста!

Вот пример из учебника, который не работает:

Код:
#include <iostream>

#define SQR(X) ((X) * (X)) 
#define CUBE(X) (SQR(X)*(X)) 
#define ABS(X) (((X) < 0)? -(X) : X)

using namespace std;
void main() 
{ 
	у = SQR(t + 8) - CUBE(t - 8) ; 
	cout <<sqrt(ABS(y)) ; 
}
Кто знает где тут ошибка?
Заранее благодарен. Очень жду.

Последний раз редактировалось rpy3uH; 27.03.2009 в 16:28.
liver1981 вне форума Ответить с цитированием
Старый 27.03.2009, 10:22   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

что такое t и y?
pu4koff вне форума Ответить с цитированием
Старый 27.03.2009, 10:22   #3
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

тут тебе все же не php, переменные надо объявлять

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

#define SQR(X) ((X) * (X))
#define CUBE(X) (SQR(X)*(X))
#define ABS(X) (((X) < 0)? -(X) : X)

using namespace std;
void main()
{
	int t = 1;
	int y = SQR(t + 8) - CUBE(t - 8) ;
	cout << sqrt((double)(ABS(y))) << endl;
}
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 27.03.2009, 10:26   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

А зачем приведение к double?
И, если это С++, то лучше привыкать использовать static_cast
Извините, туплю. sqrt же на входе double ждёт. Хотя там неявное преобразование должно сработать

Последний раз редактировалось pu4koff; 27.03.2009 в 10:29.
pu4koff вне форума Ответить с цитированием
Старый 27.03.2009, 10:33   #5
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Хотя там неявное преобразование должно сработать
Тут неявное не сработало... В студии, по крайней мере)

У автора в коде одна из буковок - не игрэк, а русская "у"... Я долго пытался понять, почему мой компилятор говорит, что переменная не объявлена... К счастью, шрифт у буковок разный, я только поэтому заметил :-D
wyvern@localhost:~$ sudo emerge --unmerge world

Последний раз редактировалось wyvern; 27.03.2009 в 10:36.
wyvern вне форума Ответить с цитированием
Старый 27.03.2009, 10:39   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от wyvern Посмотреть сообщение
Тут неявное не сработало... В студии, по крайней мере)
Не. Там другая проблема. Функция sqrt перегружена для входных параметров double, float, long double и компилятор не знает к какому из этих трех типов ему входной int преобразовать. Так что действительно преобразование к double требуется
pu4koff вне форума Ответить с цитированием
Старый 27.03.2009, 10:42   #7
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

ну да, ну да... для инта они все расширяющие...
хотя мне обычно методом тыка проще выяснить, получится неявное или нет)
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 27.03.2009, 12:25   #8
liver1981
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от wyvern Посмотреть сообщение
тут тебе все же не php, переменные надо объявлять

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

#define SQR(X) ((X) * (X))
#define CUBE(X) (SQR(X)*(X))
#define ABS(X) (((X) < 0)? -(X) : X)

using namespace std;
void main()
{
	int t = 1;
	int y = SQR(t + 8) - CUBE(t - 8) ;
	cout << sqrt((double)(ABS(y))) << endl;
}
ну хз, в учебнике так было)
liver1981 вне форума Ответить с цитированием
Старый 27.03.2009, 12:29   #9
liver1981
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
А зачем приведение к double?
И, если это С++, то лучше привыкать использовать static_cast
Извините, туплю. sqrt же на входе double ждёт. Хотя там неявное преобразование должно сработать
Мощно сказал, но мало чё понятно, я ж новичок в с++)
liver1981 вне форума Ответить с цитированием
Старый 27.03.2009, 12:30   #10
liver1981
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 20
Радость

Цитата:
Сообщение от wyvern Посмотреть сообщение
Тут неявное не сработало... В студии, по крайней мере)

У автора в коде одна из буковок - не игрэк, а русская "у"... Я долго пытался понять, почему мой компилятор говорит, что переменная не объявлена... К счастью, шрифт у буковок разный, я только поэтому заметил :-D
тоже самое)
liver1981 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MASM: HelloWorld разобрался в коде, поправьте немного N!ckeL Помощь студентам 6 25.02.2009 22:03
2 задачі Пожалуста. DiNis Паскаль, Turbo Pascal, PascalABC.NET 4 19.01.2009 15:53
Помогите пожалуста Роман1910 Microsoft Office Excel 2 16.11.2008 14:04