Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 02.03.2016, 11:54   #1 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите отладить программу

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

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.
votsarskam вне форума   Ответить с цитированием

Старый 02.03.2016, 11:54
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Если поискать по схожим темам, то можно найти это

Помогите отладить программу
Помогите отладить программу на С++
Помогите отладить программу

Старый 02.03.2016, 12:10   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

А в чем проблемы? Что не получается?
Vladimir_S вне форума   Ответить с цитированием
Старый 02.03.2016, 12:20   #3 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

не знаю как воспользоваться функцией и куда ее лучше поместить
votsarskam вне форума   Ответить с цитированием
Старый 02.03.2016, 12:21   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Между прочим, есть формула, позволяющая найти площадь треугольника по координатам вершин:
striang.jpg
Так что не нужно мучить формулу Герона.
Vladimir_S вне форума   Ответить с цитированием
Старый 02.03.2016, 12:27   #5 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

вот так?
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.
votsarskam вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 02.03.2016, 12:46   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вот, получите:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 02.03.2016, 16:55   #7 (permalink)
votsarskam
Member
 
Регистрация: 09.12.2015
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо Вам большое !!
votsarskam вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.