Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите отладить программу (http://www.tehnari.ru/f41/t107147/)

votsarskam 02.03.2016 11:54

Помогите отладить программу
 
Даны координаты вершин нескольких треугольников. Определить номер треугольника, имеющего наибольшую высоту.

program noname;
uses Crt;
const nmax=20;
function MaxH(var p,s,a,b,c,da,db,dc,mn,ax,ay,bx,by,cx,cy:Real):Real ;
begin
p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
{найдем длины сторон}
da:=sqrt(sqr(ax-bx)+sqr(ay-by));
db:=sqrt(sqr(bx-cx)+sqr(by-cy));
dc:=sqrt(sqr(cx-ax)+sqr(cy-ay));
{найдем меньшую сторону, высота к ней наибольшая}
if da<db then mn:=da else mn:=db;
if dc<mn then mn:=dc;
MaxH:=s/mn;{значение высоты}
end;
var ax,ay,bx,by,cx,cy,dx,dy,ex,ey,fx,fy:real;a,b,c,d,e ,f:Real;
t:array[1..nmax] of integer;
n,i,imx:byte;
mx:real;
H:integer;
begin
ClrScr;
repeat
write('Kol-vo treug-ov do ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Vvedite koordinati vershin treug-ov:');
for i:=1 to n do
begin
writeln('treug-k ',i);
writeln('vershina 1:');
readln(ax,ay);
writeln('vershina 2:');
readln(bx,by);
writeln('vershina 3:');
readln(cx,cy);
H:=MaxH(?????????);
end;
mx:=h1;
imx:=1;
for i:=1 to n do
if h[i]>mx then
begin
mx:=h[i];
imx:=i;
end;
writeln;
write('naibolshaya visota=',mx,' v treug-ke nomer',imx);
end;
Readln;
end.

Vladimir_S 02.03.2016 12:10

А в чем проблемы? Что не получается?

votsarskam 02.03.2016 12:20

не знаю как воспользоваться функцией и куда ее лучше поместить

Vladimir_S 02.03.2016 12:21

Вложений: 1
Между прочим, есть формула, позволяющая найти площадь треугольника по координатам вершин:
Вложение 268994
Так что не нужно мучить формулу Герона.

votsarskam 02.03.2016 12:27

вот так?
program noname;
uses Crt;
const nmax=20;
function MaxH(var s,a,b,c,da,db,dc,mn,ax,ay,bx,by,cx,cy:Real):Real;
begin
s:=abs((ax-cx)*(by-cy)-(bx-cx)*(ay-cy));
{найдем длины сторон}
da:=sqrt(sqr(ax-bx)+sqr(ay-by));
db:=sqrt(sqr(bx-cx)+sqr(by-cy));
dc:=sqrt(sqr(cx-ax)+sqr(cy-ay));
{найдем меньшую сторону, высота к ней наибольшая}
if da<db then mn:=da else mn:=db;
if dc<mn then mn:=dc;
MaxH:=s/mn;{значение высоты}
end;
var ax,ay,bx,by,cx,cy,dx,dy,ex,ey,fx,fy:real;a,b,c,d,e ,f:Real;
t:array[1..nmax] of integer;
n,i,imx:byte;
mx:real;
H:integer;
begin
ClrScr;
repeat
write('Kol-vo treug-ov do ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Vvedite koordinati vershin treug-ov:');
for i:=1 to n do
begin
writeln('treug-k ',i);
writeln('vershina 1:');
readln(ax,ay);
writeln('vershina 2:');
readln(bx,by);
writeln('vershina 3:');
readln(cx,cy);
H:=MaxH;
end;
mx:=h1;
imx:=1;
for i:=1 to n do
if h[i]>mx then
begin
mx:=h[i];
imx:=i;
end;
writeln;
write('naibolshaya visota=',mx,' v treug-ke nomer',imx);
end;
Readln;
end.

Vladimir_S 02.03.2016 12:46

Вот, получите:
Код:

Uses CRT;

Const
 Nmax=20;

function MaxH(ax,ay,bx,by,cx,cy:Real):Real;
var
 S,da,db,dc,mn:Real;
begin
 S:=0.5*Abs((ax-cx)*(by-cy)-(bx-cx)*(ay-cy));
 da:=sqrt(sqr(ax-bx)+sqr(ay-by));
 db:=sqrt(sqr(bx-cx)+sqr(by-cy));
 dc:=sqrt(sqr(cx-ax)+sqr(cy-ay));
 if da<db then mn:=da else mn:=db;
 if dc<mn then mn:=dc;
 MaxH:=2*S/mn;
end;

Var
 ax,ay,bx,by,cx,cy,Hmax,H:real;
 n,i,imx:byte;

Begin
 ClrScr;
 Repeat
  write('Kol-vo treug-ov do ',nmax,' n= ');
  readln(n);
 until n in [1..Nmax];
 Hmax:=0;
 writeln('Vvedite koordinati vershin treug-ov:');
 for i:=1 to n do
  begin
  writeln('treug-k ',i,':');
  write('vershina 1: ');
  readln(ax,ay);
  write('vershina 2: ');
  readln(bx,by);
  write('vershina 3: ');
  readln(cx,cy);
  H:=MaxH(ax,ay,bx,by,cx,cy);
  if H>Hmax then
    begin
    Hmax:=H;
    imx:=i;
    end;
  end;
 writeln;
 writeln('naibolshaya visota= ',Hmax:0:3,' v treug-ke nomer ',imx);
 Readln;
End.


votsarskam 02.03.2016 16:55

Спасибо Вам большое !!


Часовой пояс GMT +4, время: 07:50.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.