Страница 1 из 1

В чем ошибка кода?

СообщениеДобавлено: 04.01.2012 21:48:44
Антон
Начал изучать паскаль и столкнулся с рядом непонятных вещей:
1)Задача на площадь треугольника по формуле Герона, написал код:
var
a,b,c,p,s:integer;
begin
readln(a,b,c);
p:=((a+b+c) div 2)+((a+b+c) mod 2);
s:=sqrt(p*(p-a)*(p-b)*(p-c));
writeln(s);
readln;
end.

Скажите пожалуйста почему не работает?
2)почему когда я использую деление или корень вместо нормального ответа получается что-то типа 5.0000000000E+0000&?
помогите пожалуйста)

Re: В чем ошибка кода?

СообщениеДобавлено: 04.01.2012 22:28:37
Little_Roo
Антон писал(а):p:=((a+b+c) div 2)+((a+b+c) mod 2);

?????????
Входные данные должны быть real
полупериметр = (a+b+c)/2

Далее - вычисление корня из целого числа всегда даст результат типа real - так что var a,b,c,p,s : real;
А по последнему вопросу - учите матчасть и используйте форматный вывод - типа write(s:2:3);

Re: В чем ошибка кода?

СообщениеДобавлено: 05.01.2012 01:44:59
tema
Антон писал(а):p:=((a+b+c) div 2)+((a+b+c) mod 2);

Вот это реально круто! Никогда бы не догадался, что это полупериметр!
Антон писал(а):В чем ошибка кода?

Боюсь, в данном случае, в прокладке между монитором и сиденьем.

Re: В чем ошибка кода?

СообщениеДобавлено: 05.01.2012 07:41:47
Vadim
Антон писал(а):2)почему когда я использую деление или корень вместо нормального ответа получается что-то типа 5.0000000000E+0000&?
помогите пожалуйста)

По умолчанию, В Паскале все числа с плавающей точкой выводятся в виде именно с плавающей точкой, т.е., к примеру:
Код: Выделить всё
1.2345E-2

т.к. компилятор оперирует именно такими числами. Ещё надо сказать ему спасибо, за то, что он не выводит их в двоичном виде. :D
Как сказали выше, надо использовать явное задание формата:
WriteLn(Число:ОбщийРазмер:ЦифрПослеЗапятой);
где
ОбщийРазмер - это, сколько знакомест на экране будет занимать выводимый результат,
ЦифрПослеЗапятой - сколько знакомест будут занимать цифры из дробной части.
Учтите, что Общий размер должен быть, как минимум, на 2 больше дробной части, т.к. одно знакоместо занимает точка, плюс сколько то там нужно выделить на целую часть.

Re: В чем ошибка кода?

СообщениеДобавлено: 05.01.2012 17:07:11
Little_Roo
Vadim писал(а):Учтите, что Общий размер должен быть, как минимум, на 2 больше дробной части, т.к. одно знакоместо занимает точка, плюс сколько то там нужно выделить на целую часть.

Вообще-то проходит и write(x:0:2) :) - по опыту знаю - первое число, т.е. общий размер как резина - не влезает число -> растянем

Re: В чем ошибка кода?

СообщениеДобавлено: 05.01.2012 19:37:47
Vadim
Little_Roo писал(а):Вообще-то проходит и write(x:0:2) :) - по опыту знаю - первое число, т.е. общий размер как резина - не влезает число -> растянем

Лучше знать точно, чем предполагать и надеятся. ;)