Среда, 25 Декабря 2024, 23:35

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Решение квадратных уравнений в Delphi
OleGoNДата: Пятница, 07 Октября 2011, 20:17 | Сообщение # 1
Game Maker User
Сейчас нет на сайте
Привет всем. Начал изучать Delphi и я решил для проверки своих знаний написать программу, которая будет решать квадратные уравнения. Но у меня что-то не получается, только что не знаю. Помогите пожалуйста. Вот код:

Code
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c : string;
a1,b1,c1,d,x1,x2 : integer;
begin
a:=Edit1.Text;
b:=Edit2.Text;
c:=Edit3.Text;

a1:= strToint (a);
b1:= strToint (b);
c1:= strToint (c);

d:= sqr(b)-4*a*c
x1:= (-b+sqrt(d))/2*a \\ тут строка 49
x2:= (-b-sqrt(d))/2*a \\ а тут 50

Label4.Caption:= intTostr (d);
Label5.Caption:= intTostr (x1);
Label6.Caption:= intTostr (x2);
end;


Ошибки таковы

Code
Build
   [Error] Kvadrat.pas(49): Incompatible types: 'Integer' and 'Extended'
   [Error] Kvadrat.pas(50): Incompatible types: 'Integer' and 'Extended'
   [Fatal Error] Kvadrat2.dpr(5): Could not compile used unit 'Kvadrat.pas'


LunarPixelДата: Пятница, 07 Октября 2011, 20:18 | Сообщение # 2
старожил
Сейчас нет на сайте
OleGoN, деление в типе integer использовать нельзя, это целочисленный тип данных. smile

OleGoNДата: Пятница, 07 Октября 2011, 20:32 | Сообщение # 3
Game Maker User
Сейчас нет на сайте
LunarPixel, Блииин спасибо happy

Добавлено (07.10.2011, 20:32)
---------------------------------------------
Блин выдаёт ошибку

В чём теперь проблема?




Сообщение отредактировал OleGoN - Пятница, 07 Октября 2011, 20:32
TimKruzДата: Пятница, 07 Октября 2011, 20:36 | Сообщение # 4
старожил
Сейчас нет на сайте
Quote (OleGoN)
Incompatible types: 'Integer' and 'Extended'

Несовместимые типы данных: целочисленный integer и вещественный extended.
Если ты хотел разделить без остатка (без цифр после запятой), то можно использовать div для деления без остатка или round() для округления (возвращаемое значение round - integer).
Quote (LunarPixel)
деление в типе integer использовать нельзя, это целочисленный тип данных.

В принципе-то делить можно, если результат операции будет типа integer. Например, round(4/2) или 4 div 2 будет равно 2 в любом числовом типе, без проблем. huh
А ошибка возникает из-за автоматического преобразования результата выражения, в котором применяется деление, в вещественный тип extended, и напрямую этот результат в целочисленную переменную присвоить нельзя.
P.S.
Quote (OleGoN)
Ошибки таковы

Учи английский, или хотя бы используй автоматический переводчик. shades Правильное понимание названия ошибки устраняет 99% банальных ошибок. smok


Quote (OleGoN)
В чём теперь проблема?

Хм... Поля ввода (edit'ы) все правильно заполнил? huh
Quote (OleGoN)
x1:= (-b+sqrt(d))/2*a
x2:= (-b-sqrt(d))/2*a

Замени на
Quote
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);




Сообщение отредактировал TimKruz - Пятница, 07 Октября 2011, 20:40
OleGoNДата: Пятница, 07 Октября 2011, 20:47 | Сообщение # 5
Game Maker User
Сейчас нет на сайте
TimKruz, Неа нет разницы. Когда d не дробное число то всё норм, как дробь так сразу та ошибка sad

RorschachДата: Пятница, 07 Октября 2011, 20:50 | Сообщение # 6
участник
Сейчас нет на сайте
Quote (OleGoN)
Когда d не дробное число то всё норм, как дробь так сразу та ошибка

У тебя же d integer wink Если нужны дроби, юзай вещественный тип.


Never compromise. Not even in the face of Armageddon.

Сообщение отредактировал Rorschach - Пятница, 07 Октября 2011, 20:57
OleGoNДата: Пятница, 07 Октября 2011, 20:57 | Сообщение # 7
Game Maker User
Сейчас нет на сайте
Rorschach, не это я уже понял и переделал happy

LunarPixelДата: Пятница, 07 Октября 2011, 20:59 | Сообщение # 8
старожил
Сейчас нет на сайте
TimKruz, КЭП?! Ему нужно решить квадратное уравнение, не думаю что уместно говорить про округление. Да и что из за твоего варианта должно измениться?! smile

Rorschach, d вообще то у него типа real.. смотрим внимательно smile

OleGoN, если что, корни не существуют при дискриминанте <0 smile


anton-garДата: Пятница, 07 Октября 2011, 20:59 | Сообщение # 9
WEBmaster
Сейчас нет на сайте
Quote (OleGoN)
Неа нет разницы. Когда d не дробное число то всё норм, как дробь так сразу та ошибка


Как вы вводите дробь?
Просто нужно вводить через точку, а не через запятую.




Сообщение отредактировал anton-gar - Пятница, 07 Октября 2011, 21:05
OleGoNДата: Пятница, 07 Октября 2011, 21:00 | Сообщение # 10
Game Maker User
Сейчас нет на сайте
LunarPixel, Точно! Блин я ЛОЛ. Спасибо большое LunarPixel smile Уважаю

TimKruzДата: Суббота, 08 Октября 2011, 15:32 | Сообщение # 11
старожил
Сейчас нет на сайте
Quote (anton-gar)
Как вы вводите дробь?
Просто нужно вводить через точку, а не через запятую.

Если вводить с дополнительной клавиатуры (циферки и знаки калькулятора), то там ставится точка (клавиша ".", она же "del"), а не запятая.
Да, кстати, если ввести не точку, а запятую, будет ошибка, связанная с переводом строки в число, а не эта, и курсор, естественно, встанет на другой строке кода.
Quote (LunarPixel)
OleGoN, если что, корни не существуют при дискриминанте <0

Да, я это хотел это написать вчера, но не успел (компьютер пришлось вырубать).
Короче, число/переменная, передаваемая sqrt (это корень), не должна быть меньше нуля, иначе выводит такую ошибку.
Кстати, если вводить разные данные, и дискриминант станет больше нуля, то ошибки такой и не возникнет. Мог бы и догадаться. huh




Сообщение отредактировал TimKruz - Суббота, 08 Октября 2011, 16:03
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг