Проблем с решаване на задача на Pascal

4 отговора 215 прегледа
#1

Проблем с решаване на задача на Pascal

Някой да има идея как се решава това чудо, не знам какво ме питат
"Dadena e na4upena linia v ravnina (poligon), sastoq6ta se ot N-1 svarzani otse4ki v N to4ki Ai, i=1,2...N, zadadeni s tehnite koordinati (Xi, Yi), i=1,2...N. Koordinatite da se prochetat of fail, a broiat im kojto vseki pat e razli4en da se vavejda ot klaviaturata.
Da se opredeli triagalnika s naj-malko lice obrazuvan ot varhovete na poligona po slednia na4in: Ai, Ai+1, Ai+2 za i=1,2....N-2.
Polu4eniat rezultat da se izvede na ekran."

Отговор
в отговор на Tъпak #2

Не точно отговор....

Значи щом нямаш идея какво те питат - явно трябва да наваксаш с математиката - като първо. Като второ - опитай се да решиш задачата с лист и молив - и да помислиш за някакъв алгоритъм. За да намериш алгоритъма се опитай след като я решиш да се повториш решението няколко пъти като се самонаблюдаваш какви са стъпките при решението на задачата - ето това ти е алгоритъма. А как точно ще го изразиш с код - това вече е друг въпрос - стигни до кода и като имаш поглед пак питай тук.

И последно - мисля (или поне до колкото помня едно време ;-)))), че задачите - без значени от предмета се дава за домашно - т.е. нещо с което да уплътниш свободното си време след училище. Опитай да направиш нещо сам - поне а не да очакваш някой да ти напише домашното.

---
Колкото повече, толкова повече.
Отговор
в отговор на Tъпak #3

Re: Проблем с решаване на задача на Pascal

Като чуя "полигон" и не мога да се въздържа , нали си падам малко game програмист

Не претендрирам за безупречност и оптимизация на кода , по-скоро давам идея за това как може да се реализира подобен алгоритъм.
Tова го драснах на Delphi 7.0 , не знам как ще го посрещне ПАСКАЛ 7.0 , може да се наложи да пипнеш тук там за да тръгне.

program DirBG_TASK;
{$APPTYPE CONSOLE}
uses
SysUtils,StrUtils,Math;
type
Point2D = record
X : Single ;
Y : Single ;
end;
Triangle = record
A : Point2D ;
B : Point2D ;
C : Point2D ;
Area : Single ;
end;
var
I : array of Point2D ;
Tri : array of Triangle ;
InputFile : TextFile ;
N ,J , SepPos : Integer ;
FileLine : String ;
SmallestArea , OldArea : Single ;

function CalculateArea(A,B,C :Point2D): Single;
var
AB,AC,BC : Single ;{stranite na triangle-to}
PoluPer : Single ; {poluperimetura}
begin

{Namirame razstoqnieto mejdu to4kite (stranite na triangle-to)
susto kato v 3D-to ;)}
AB := sqrt(Power(A.X-B.X,2)+Power(A.Y-B.Y,2)) ;
AC := sqrt(Power(A.X-C.X,2)+Power(A.Y-C.Y,2));
BC := sqrt(Power(B.X-C.X,2)+Power(B.Y-C.Y,2));

{Polvzame dobrata stara Heronova formula za liceto}
PoluPer := (AB+AC+BC)/2;
Result := sqrt(PoluPer*((PoluPer-AB)*(PoluPer-AC)*(PoluPer-BC)));

end;

{Main procedure}
begin
Writeln('Vuvedete broj to4ki ot ravninata :') ;
Readln(N);
SetLength(I,N);
SetLength(Tri,N);
AssignFile(InputFile,'C:\coords.txt');
Reset(InputFile);
// Vuvejdame dannite ot faila
for J := 0 to N do
begin
Readln(InputFile,FileLine);
SepPos := Pos(';',FileLine);
I[J].X := StrToFloat(LeftStr(FileLine,SepPos-1));
I[J].Y := StrToFloat(RightStr(FileLine,Length(FileLine)-SepPos));
end;

CloseFile(InputFile);
// Za Vseki triugulnik iz4isliavame liceto
//4rez namirane duljinite na stranite (podobie na Pitagorovata teorema)
// i posle polzvame Heronovata formula za lice
for J := 0 to N do begin
with Tri[J] do
begin
A.X := I[j].X ;
A.Y := I[j].Y ;
B.X := I[j+1].X ;
B.Y := I[j+1].Y ;
C.X := I[j+2].X ;
C.Y := I[j+2].Y ;
Area := CalculateArea(Tri[j].A,Tri[j].B,Tri[j].C);
end;

end;
//Otkrivame naj-malkoto lice
SmallestArea := Tri[0].Area ;
OldArea := Tri[0].Area ;

for J := 0 to N do begin
if Tri[j].Area < OldArea then SmallestArea := Tri[j].Area ;
OldArea := Tri[j].Area ;
Writeln(Tri[j].Area,' ',J );
end;
//Izvejdame resultata
Writeln('Naj malkoto lice e :',SmallestArea);
//
ReadLn(N);
case N of
0 : Exit ;
1 : WriteLn('Damn easy ;)');
end;
ReadLn(N);
end.


Sury

Отговор
в отговор на Sury #4

Re: Проблем с решаване на задача на Pascal

samo da otbeleja: Imash izlizane ot obhwata pri J=N sled tretata tochka prawish izlishni izchisleniq - zashtoto se promenq samo ednata strana drugite prosot se izmestwat "nadolo"...

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на SDR #5

Re: Проблем с решаване на задача на Pascal

Благодаря , наистина програмката има бъгове и не е оптимизирана , но както подчертах тя по-скоро илюстрира отколкото решава задачата.
Един завършен алгоритъм би обединил всичко в един цикъл и би изхвърлил редица променливи.
Освен това мисля че има поне още два начина за решаване на задачата.

Отговор