Начал изучать паскаль и столкнулся с рядом непонятных вещей:
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&?
помогите пожалуйста)
В чем ошибка кода?
Модератор: Модераторы
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Антон писал(а):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);
Антон писал(а):p:=((a+b+c) div 2)+((a+b+c) mod 2);
Вот это реально круто! Никогда бы не догадался, что это полупериметр!
Антон писал(а):В чем ошибка кода?
Боюсь, в данном случае, в прокладке между монитором и сиденьем.
Антон писал(а):2)почему когда я использую деление или корень вместо нормального ответа получается что-то типа 5.0000000000E+0000&?
помогите пожалуйста)
По умолчанию, В Паскале все числа с плавающей точкой выводятся в виде именно с плавающей точкой, т.е., к примеру:
Код: Выделить всё
1.2345E-2т.к. компилятор оперирует именно такими числами. Ещё надо сказать ему спасибо, за то, что он не выводит их в двоичном виде.
Как сказали выше, надо использовать явное задание формата:
WriteLn(Число:ОбщийРазмер:ЦифрПослеЗапятой);
где
ОбщийРазмер - это, сколько знакомест на экране будет занимать выводимый результат,
ЦифрПослеЗапятой - сколько знакомест будут занимать цифры из дробной части.
Учтите, что Общий размер должен быть, как минимум, на 2 больше дробной части, т.к. одно знакоместо занимает точка, плюс сколько то там нужно выделить на целую часть.
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Vadim писал(а):Учтите, что Общий размер должен быть, как минимум, на 2 больше дробной части, т.к. одно знакоместо занимает точка, плюс сколько то там нужно выделить на целую часть.
Вообще-то проходит и write(x:0:2)
Little_Roo писал(а):Вообще-то проходит и write(x:0:2)- по опыту знаю - первое число, т.е. общий размер как резина - не влезает число -> растянем
Лучше знать точно, чем предполагать и надеятся.
