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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2010, 11:46   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Incompatible type inversion

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

int kvad(float a,float b,float c,
	 float *x1,float *x2)
{
 double d;
 d = b*b-4*a*c;
 if (d<0) return(0);
 *x1 = (-b-sqrt(d))/(2*a);
 *x2 = (-b+sqrt(d))/(2*a);
 if (x1 != x2) return (2);
 else return (1);
}

void main()
{
  float a,b,c;
  float x1,x2;
  clrscr;
  cout<<"a = ";
  cin>>a;
  cout<<"b = ";
  cin>>b;
  cout<<"c = ";
  cin>>c;
  switch (kvad(a,b,c,x1,x2))
  {
   case 0: cout<<"No one decide!";break;
   case 1: cout<<"x = "<<x1;break;
   case 2: cout<<"x1 = "<<x1<<"  x2 = "<<x2;break;
   default: cout<<"Error!";
   }
   getch();
}
Пишет ошибку в строке
Код:
switch (kvad(a,b,c,x1,x2))
"Incompatible type inversion". Что делать?
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.06.2010, 11:58   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Ф-ия kvad принимает последние два аргумента как указатели на float:
Цитата:
int kvad(float a,float b,float c,
float *x1,float *x2);
А в main они переданы как просто float:
Цитата:
float a,b,c;
float x1,x2;
Если это просто опечатка - то надо:
Код:
float *x1, *x2;
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 25.06.2010, 12:06   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А вот как нормально выводить дробные числа, а то он выводит число как-то не по-русски(0xfff2)?
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.06.2010, 12:11   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Код:
switch (kvad(a,b,c,x1,x2))
  {
   case 0: cout<<"No one decide!";break;
   case 1: cout<<"x = "<<dec<<x1;break;
   case 2: cout<<"x1 = "<<dec<<x1<<"  x2 = "<<x2;break;
   default: cout<<"Error!";
   }
А зачем вам float? double лучше, особенно для корней квадратного ур-ния. Память что-ли экономите?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 25.06.2010, 12:13   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Память что-ли экономите?
Тогда уж long double

Не катит. В смысле, программа работает но ответ также выдаёт. Вот код:
Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>

int kvad(float a,float b,float c,
	 double *x1,double *x2)
{
 double d;
 d = b*b-4*a*c;
 if (d<0) return(0);
 *x1 = (-b-sqrt(d))/(2*a);
 *x2 = (-b+sqrt(d))/(2*a);
 if (x1 != x2) return (2);
 else return (1);
}

void main()
{
  double a,b,c;
  double *x1,*x2;
  clrscr;
  cout<<"a = ";
  cin>>a;
  cout<<"b = ";
  cin>>b;
  cout<<"c = ";
  cin>>c;
  switch (kvad(a,b,c,x1,x2))
  {
   case 0: cout<<"No one decide!";break;
   case 1: cout<<"x = "<<dec<<x1;break;
   case 2: cout<<"x1 = "<<dec<<x1<<"  x2 = "<<dec<<x2;break;
   default: cout<<"Error!";
   }
   getch();
}

Последний раз редактировалось Stilet; 25.06.2010 в 12:26.
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.06.2010, 12:28   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
switch (kvad(a,b,c,&x1,&x2))
И что это за dec?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.06.2010, 12:30   #7
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Во-первых, раз уж изменили аргументы на double, то поменяйте и параметры на double:
Код:
int kvad(float a,float b,float c,
	 double *x1,double *x2)
Во-вторых, сравнивая указатели x1 и x2 в
Код:
if (x1 != x2) return (2);
Вы мало чего добьетесь - разыменуйте их.
И в-третьих адреса вам врядли пригодятся, когда вы будете сверять ответ по учебнику математики:
Код:
case 1: cout<<"x = "<<*x1;break;
   case 2: cout<<"x1 = "<<*x1<<"  x2 = "<<*x2;break;
В этом случае dec можно убрать, так как он стоит по умолчанию (В VS2008 по крайней мере, а то компилятор вашей среды немного смущает - тут несколько ошибок и десяток предупреждений)

Цитата:
И что это за dec?
Стандартный спецификатор формата, наровне с hex.
Но тут он ни к чему, так как адреса только в шестнадцатиричной СС - вообще он делает вывод в десятеричной СС.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

Последний раз редактировалось Stilet; 25.06.2010 в 12:43.
Syuf вне форума Ответить с цитированием
Старый 25.06.2010, 13:10   #8
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Да всё равно так по-идиотски...
Выложите , пожалуйста, такой код который выдаёт нормальные ответы в нормальном виде...(компилятор Borland C++ 3.1)

Ага, без вас исправил.
Только почему теперь после вывода корней я нажимаю ентер а прога вылетает?

Последний раз редактировалось Stilet; 25.06.2010 в 15:31.
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.06.2010, 13:23   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

твою подправить:
Код:
double x1,x2;
и
Код:
switch (kvad(a,b,c,&x1,&x2))
И будет работать.
Цитата:
я нажимаю ентер а прога вылетает?
Крылья расправляет? Закрылки убирает? (Шутка)
Куда вылетает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.06.2010, 13:25   #10
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Я использую не С, а С++. Те закорючки которые вы пишите - они как бы из С.
И всё-таки почему программа вылетает после нажатия ентера?В смысле вообще Borland C++ закрывается?

Последний раз редактировалось _-Re@l-_; 25.06.2010 в 14:32.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка «Incompatible Type», которой, вроде бы, не должно быть. seagull Общие вопросы Delphi 2 29.05.2010 13:19
Различие смысла в type "type" Alex Cones Общие вопросы Delphi 5 18.04.2010 23:57
Ошибка incompatible type conversion Danil21 Общие вопросы C/C++ 5 18.05.2009 04:23
Incompatible type conversion Fox99 Общие вопросы C/C++ 4 14.08.2008 11:45