Trojuhelnik – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Trojuhelnik – Pascal – Fórum – Programujte.comTrojuhelnik – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Malirka
~ Anonymní uživatel
34 příspěvků
17. 4. 2009   #1
-
0
-

Ahojky.Tady mám zadání úkolu:
Trojúhelník v rovině je zadán pomocí souřadnic vrcholů. Sestavte program, dle těchto pokynů:

-program určí souřadnice středů stran výchozího trojúhelníka - tyto body budeme považovat za vrcholy nového výchozího trojúhelníka
-celý proces (určení středů stran) se bude opakovat tak dlouho, dokud se souřadnice vrcholů trojúhelníka budou lišit o více než předem zadanou hodnotu – vrcholy trojúhelníka se budou k sobě přibližovat, až v rámci zadané přesnosti splynou v jeden bod.
VSTUP: Souřadnice tří bodů (vrcholy),
Diference – hraniční hodnota pro ukončení výpočtů
VÝSTUP: Souřadnice výsledného bodu
V programu lze použít rekurzi.

Mám část, ale nevím jak dále.

Uses crt;

type TBod = record
x: Integer;
y: Integer;
end;

type TTroj = record
A: TBod;
B: TBod;
C: TBod;
end;

procedure nacti(var t:TTroj);
begin
WriteLn('Zadejte souradnice bodu A (x mezera y): ');
ReadLn(t.A.x, t.A.y);
Writeln;
WriteLn('Zadejte souradnice bodu B (x mezera y): ');
ReadLn(t.B.x, t.B.y);
Writeln;
WriteLn('Zadejte souradnice bodu C (x mezera y): ');
ReadLn(t.C.x, t.C.y);
end;


procedure vypis(t:TTroj);
begin
WriteLn('');
Write('Bod A - [', t.A.x,',', t.A.y,']');
Write(' ');
Write('Bod B - [', t.B.x,',', t.B.y,']');
Write(' ');
Write('Bod C - [', t.C.x,',', t.C.y,']');
WriteLn('');
end;

function isValid(t:TTroj): Boolean;

if ((t.A.x = t.B.x) and (t.A.x = t.C.x)) then
begin
result := false;
end
if ((t.A.y = t.B.y) and (t.A.y = t.C.y)) then
begin
result := false;
end
result := true;

var trojuhelnik: TTroj;
diff: Integer;

begin
nacti(trojuhelnik);
WriteLn('Zadejte diferenci: ');
ReadLn(diff);
Writeln;
WriteLn('Zadany trojuhelnik: ');
WriteLn('------------------------');
vypis(trojuhelnik);
ReadLn(diff);

end.

Nahlásit jako SPAM
IP: 213.168.179.–
Reklama
Reklama
Krychlik
~ Anonymní uživatel
195 příspěvků
17. 4. 2009   #2
-
0
-

Urcite jsou souradnice a diference integery? Spis bych dal real, jinak se bude muset furt zaokrouhlovat.

A co konkretne nechapes?
-Vytvoreni noveho trojuhelniku?
bude potreba jeste jeden trojuhelnik a pro kazdy bod udelas toto(samozrejne jine pismena):
noveA.x:=(A.x+B.x)/2;
noveA.y:=(A.y+B.y)/2;
-vzdalenost?
pro kazdou dvojici bodu spocitas vzdalenost pythagorovkou
vzdalenost1:=sqrt( (noveA.x-noveB.x)*(noveA.x-noveB.x)+(noveA.y-noveB.y)*(noveA.y-noveB.y))
-kdy pokracovat?
vsecky 3 vzdalenosti porovnas s differenci bude tam AND jestli staci jenom 1 aby byla mensi nebo OR pokud musi byt vsechny (nechapu zadani), pokud je to dobre tak prepises trojuhelnik tim novym a jedes cely velky cyklus znovu, jinak proste vypises vysledek (tady nechapu jak z 3 bodu jde vypsat 1? stred nebo co? )
if ((vzdalenost1>diference) AND (vzdalenost2>diference) AND (vzdalenost3>diference)) then

A jeste takova drobnost: ve funkci isvalid neuvazujes moznost splynuti 2 bodu ( napr pro [1,1] [1,1] [5,6] to bude pocitat) a body lezici v primce ruzne od os x a y ([1,1] [2,2] [3,3])

Nahlásit jako SPAM
IP: 212.111.4.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
18. 4. 2009   #3
-
0
-

To Krychlik : Ahojky.Já to mám už upravený.......Myslíte někdo že by to mohlo podle zadání takhle vypadat?

Uses crt;

type TBod = record
x: Real;
y: Real;
end;

type TTroj = record
A: TBod;
B: TBod;
C: TBod;
end;


procedure nacti(var t:TTroj);
begin
Writeln('Zadejte souradnice bodu A (x mezera y): ');
Readln(t.A.x, t.A.y);
Writeln;
Writeln('Zadejte souradnice bodu B (x mezera y): ');
Readln(t.B.x, t.B.y);
Writeln;
Writeln('Zadejte souradnice bodu C (x mezera y): ');
Readln(t.C.x, t.C.y);
end;

procedure vypis(t:TTroj);
begin
Writeln('');
Write('Bod A - [', t.A.x,',', t.A.y,']');
Write(' ');
Write('Bod B - [', t.B.x,',', t.B.y,']');
Write(' ');
Write('Bod C - [', t.C.x,',', t.C.y,']');
Writeln('');
end;

function isValid(t:TTroj):boolean;
begin
isValid:= true;

if ((t.A.x = t.B.x) and (t.A.x = t.C.x)) then
begin
isValid:= false;
end;
if ((t.A.y = t.B.y) and (t.A.y = t.C.y)) then
begin
isValid:= false;
end;
end;

procedure prepocitej(var t:TTroj);
var A,B,C:TBod;
begin
A.x:= (t.A.x + t.B.x) / 2;
A.y:= (t.A.y + t.B.y) / 2;

B.x:= (t.B.x + t.C.x) / 2;
B.y:= (t.B.y + t.C.y) / 2;

C.x:= (t.A.x + t.C.x) / 2;
C.y:= (t.A.y + t.C.y) / 2;

t.A:= A;
t.B:= B;
t.C:= C;
end;

var trojuhelnik: TTroj;
diff: Real;
result: Boolean;
i: Integer;

begin
nacti(trojuhelnik);
Writeln('Zadejte diferenci: ');
Readln(diff);
Writeln('Zadany trojuhelnik: ');
Writeln('--------------------');
vypis(trojuhelnik);

result:= isValid(trojuhelnik);

if (result = false) then
begin
Writeln('Toto neni trojuhelnik !!!');
end
else
begin
for i:= 0 to 5 do begin
prepocitej(trojuhelnik);
WriteLn('Prepocitany trojuhelnik');
WriteLn('-----------------------');
vypis(trojuhelnik);
end;
end;
Readln(diff);
end.

Nahlásit jako SPAM
IP: 213.168.179.–
Krychlik
~ Anonymní uživatel
195 příspěvků
18. 4. 2009   #4
-
0
-

Proc je tam ten for cyklus? v zadani je dokud tj repeat until nebo while.

Nahlásit jako SPAM
IP: 212.111.4.–
Malirka
~ Anonymní uživatel
34 příspěvků
18. 4. 2009   #5
-
0
-

To Krychlik : Aha.A jak bys to napsal ty?Nevím jak jinak to napsat.

Nahlásit jako SPAM
IP: 213.168.179.–
Krychlik
~ Anonymní uživatel
195 příspěvků
18. 4. 2009   #6
-
0
-

To Malirka :
uz sem to jednou psal- musis spocitat jeste ty delky, podle kterych se urcuje, jestli skoncit a pouzit cyklus repeat until nebo while (podle nalady)
repeat
prepocitej(trojuhelnik);
spoctidelky(trojuhelnik);
until ((vzdalenost1>diference) AND (vzdalenost2>diference) AND (vzdalenost3>diference))
//tady pripadne misto AND dat OR podle nazoru na zadani

Nahlásit jako SPAM
IP: 212.111.4.–
joudicek0
Návštěvník
19. 4. 2009   #7
-
0
-

To Krychlik : Ten cyklus for tam je proto ze jsem nerozumel zadani s tou dierenci, tak jsem to po dohode s malirkou udelala aby se provedlo 5xprepocitani.... tak jen na vysvetlenou :smile1:

Nahlásit jako SPAM
IP: 80.188.37.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

Pascaluv trojuhelnik — založil karel

Sierpinski trojúhelník — založil Siggi

Java - trojuhelnik — založil keet

Rovnoramenny trojuhelnik — založil Jakub

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý