Привет всем. Начал изучать 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;
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'
Несовместимые типы данных: целочисленный integer и вещественный extended. Если ты хотел разделить без остатка (без цифр после запятой), то можно использовать div для деления без остатка или round() для округления (возвращаемое значение round - integer).
Quote (LunarPixel)
деление в типе integer использовать нельзя, это целочисленный тип данных.
В принципе-то делить можно, если результат операции будет типа integer. Например, round(4/2) или 4 div 2 будет равно 2 в любом числовом типе, без проблем. А ошибка возникает из-за автоматического преобразования результата выражения, в котором применяется деление, в вещественный тип extended, и напрямую этот результат в целочисленную переменную присвоить нельзя. P.S.
Quote (OleGoN)
Ошибки таковы
Учи английский, или хотя бы используй автоматический переводчик. Правильное понимание названия ошибки устраняет 99% банальных ошибок.
Quote (OleGoN)
В чём теперь проблема?
Хм... Поля ввода (edit'ы) все правильно заполнил?
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
Как вы вводите дробь? Просто нужно вводить через точку, а не через запятую.
Если вводить с дополнительной клавиатуры (циферки и знаки калькулятора), то там ставится точка (клавиша ".", она же "del"), а не запятая. Да, кстати, если ввести не точку, а запятую, будет ошибка, связанная с переводом строки в число, а не эта, и курсор, естественно, встанет на другой строке кода.
Quote (LunarPixel)
OleGoN, если что, корни не существуют при дискриминанте <0
Да, я это хотел это написать вчера, но не успел (компьютер пришлось вырубать). Короче, число/переменная, передаваемая sqrt (это корень), не должна быть меньше нуля, иначе выводит такую ошибку. Кстати, если вводить разные данные, и дискриминант станет больше нуля, то ошибки такой и не возникнет. Мог бы и догадаться.
P.S. А вот мой вариант такой же программы. Кстати, там и запятую вместо точки писать можно.
Сообщение отредактировал TimKruz - Суббота, 08 Октября 2011, 16:03