Страница 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&?
помогите пожалуйста)
По умолчанию, В Паскале все числа с плавающей точкой выводятся в виде именно с плавающей точкой, т.е., к примеру:
т.к. компилятор оперирует именно такими числами. Ещё надо сказать ему спасибо, за то, что он не выводит их в двоичном виде.

Как сказали выше, надо использовать явное задание формата:
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)

- по опыту знаю - первое число, т.е. общий размер как резина - не влезает число -> растянем
Лучше знать точно, чем предполагать и надеятся.
