Другие языки программирования и технологии

Почему пишет : "Нельзя преобразовать тип function(a:real,b:real) real к real "

Program Ul3;
var
p,C1,C2,C3,C4: real;

function s(a: real; b: real): integer;
var
str: real;

begin
str:=SQRT(exp(2*LN(a))+exp(2*LN(b)));
Writeln('Третья сторона=',SQRT(exp(2*LN(a))+exp(2*LN(b))) );
end;
Begin
s(2,2);
C1:= s;

s(2,5);
C2:= s ;

s(7,5);
C3:= s;

s(2,7);
C4:= s;

P:=C1+C2+C3+C4;
Writeln('Периметр фигуры=', P);
End.
1) функция S - почти верно, но !

function s(a: real; b: real): integer;
var
str: real;
begin
str:=SQRT(exp(2*LN(a))+exp(2*LN(b)));
Writeln('Третья сторона=',SQRT(exp(2*LN(a))+exp(2*LN(b))) );
end;

str - ненужна совсем! функция должна сама возвращать результат
т. е. в раннем паскале надо было написать внутри функции s:=sqrt(...
в новых версиях для этого есть result
объявлять параметры лучше группой, но это не принципиально. тогда имеем
function s(a,b: real): integer;
корень из целого чаще будет типа real, получаем
function s(a,b: real): real;
далее. для вычисления квадрата не стоит использовать жуткие алгоритмы логарифмов и экспонент. если уж хочется выпендриться то исползуейте SQR - стандартную паскалевскую функцию квадрата, а лучше просто умножить число само на себя.
имеем конечный вид функции

function s(a,b: real): real;
begin
result:=sqrt(a*a+b*b);
end

выводить промежуточный результат можно, но только для самопроверки. в итоговом варианте лучше вывод оставить основной программе
сделать что то типа
c1:=S(2, 2);
Writeln('Третья сторона=',C1:10:2); // тут незабываем форматирование! это хороший тон
а высчитав все длины просто складываем их.
writeln('периметр равен :',c1+c2+c3+c4:10:2);
Артем Кузнецов
Артем Кузнецов
22 439
Лучший ответ
c1 - число, s - функция
c1:=s
ты пытаешься занести функцию в число
...
Сергей Клюшнёв Помоги пожалуйста... Программа должна искать сторону ромба из известных 2х других ( по теореме пифагора) и потом зная все 4 стороны найти периметр.
program Ul3;

var
p, C1, C2, C3, C4: real;

function s(a: real; b: real): real;
begin
result := SQRT(sqr(a)+sqr(b));
end;

begin
C1 := s(2, 2);
C2 := s(2, 5);
C3 := s(7, 5);
C4 := s(2, 7);
P := C1 + C2 + C3 + C4;
Writeln('Периметр фигуры=', P:0:3);
end.
Сергей Клюшнёв Я тебя люблю, спасибо большое.
Вот это:
s(2,2);
C1:= s;
Замени на:
C1:= s(2,2);