Niezalogowany (Zaloguj się)
WItaj Gościu! Możesz się teraz zalogować lub poprosić o członkowstwo na Forum Turbo Pascal Web Pag
    • CommentAuthorWojtaso20
    • CommentTime7 Jun 2008 zmieniony
     
    Witam mam do napisania program . "Program powinien rysować na ekranie dwa okręgi o różnych promieniach i umożliwiać poruszanie jednym z nich. Ponadto na ekranie powinny wyświetlać się odległość między środkami okręgów oraz opisy typu "okręgi rozłączne", "okręgi styczne zewnętrznie", okręgi przecinające się", itp." Proszę o pomoc bo nie wiem jak się za to zabrać mam już trochę kodu ale nie wiem co dalej
    • CommentAuthorWojtaso20
    • CommentTime7 Jun 2008 zmieniony
     
    program okrag;
    uses crt, graph;
    var i,m, sterownik, tryb, xw, x1, x2, yw, y1, y2, dx, dy : integer;
    {$I EGAVGAInit;}
    RestoreCrtMode;
    Clrcr;
    Writeln ('Podaj parametry okna:');
    Writeln ('-wspolrzedne lewego gornego naroznika:');
    repeat
    Write ('X='); Readln (x1)
    until (x1>=0) and (x1<GetMaxX);
    repeat
    Write ('y='); Readln (y1)
    until (y1>=0) and (y1<GetMaxY);
    repeat
    Write ('-wspolrzedne prawego dolnego naroznika:');
    repeat
    Write ('x='); Readln (x2)
    until (x2>x1) and (x2<=GetMax);
    repeat
    Write ('y='); Readln (y2)
    until (y2>y1) and (y2<=GetMaxY);
    SetGraphMode (tryb);
    SetViewPort(X1, y1, x2, y2, ClipOff);
    SetColor (Red);
    Rectangle (0,0, x2-x1,y2-y1);
    SetFillStyle (SolidFill, Blue);
    FloodFill (1,1, Red);
    Randomize
    x:=Random(x2-x1); y:=Random(y2-y1);
    dx:=1+Random(8); dy:=1+Random(8);
    SetColor (Yellow);
    Circle (x, y, 2);
    repeat
    Delay (50);
    SetColor (Blue);
    Circle (x,Y,2);
    if (x+dx+2>=x2-x1) or (x+dx<=2)
    then if dx>0
    then dx:=1-Random(8)
    else dx:=1+Random(8);
    x:=x+dx; y;=y+dy:
    SetColor (Yellow);
    Circle (x,y,2)
    until KeyPressed;
    CloseGraph
    end.
    • CommentAuthorWojtaso20
    • CommentTime7 Jun 2008
     
    proszę o pomoc
    • CommentAuthorsteficzek
    • CommentTime7 Jun 2008 zmieniony
     

    Trochę teorii
    http://angela_janik.w.interia.pl/Wzajemne%20polozenie%20dwoch%20okregow.htm

    a w praktyce... Uses Crt,Graph; Type TCo = (PrzecinajaSie,StyczneWew,StyczneZew,RozlaczneZew,RozlaczneWew); TOkrag = object x,y,R : LongInt; end; Const Pierwszy : TOkrag = (x:320;y:240;R:100); Drugi : TOkrag = (x:420;y:340;R:41); Var Sterownik,Tryb : Integer; Odleglosc : LongInt; function Sprawdz(Co : TCo) : string; begin Sprawdz:='Falsz'; Odleglosc:=Abs(Round(Sqrt(Sqr(Drugi.x-Pierwszy.x)+Sqr(Drugi.y-Pierwszy.y)))); case Co of StyczneWew : if Odleglosc=Abs(Pierwszy.R-Drugi.R) then Sprawdz:='Prawda'; StyczneZew : if Odleglosc=Abs(Pierwszy.R+Drugi.R) then Sprawdz:='Prawda'; RozlaczneZew : if Odleglosc>Abs(Pierwszy.R+Drugi.R) then Sprawdz:='Prawda'; RozlaczneWew : if Odleglosc<Abs(Pierwszy.R-Drugi.R) then Sprawdz:='Prawda'; PrzecinajaSie : if (Abs(Pierwszy.R-Drugi.R)<Odleglosc) and (Odleglosc<Abs(Pierwszy.R+Drugi.R)) then Sprawdz:='Prawda' end end; Begin InitGraph(Sterownik,Tryb,'C:\BP\BGI'); Line(Pierwszy.x,Pierwszy.y,Drugi.x,Drugi.y); Circle(Pierwszy.x,Pierwszy.y,Pierwszy.R); Circle(Drugi.x,Drugi.y,Drugi.R); OutTextXy(0, 0,'Przecinajace sie :'+Sprawdz(PrzecinajaSie)); OutTextXy(0,10,'Styczne zewnetrznie :'+Sprawdz(StyczneZew)); OutTextXy(0,20,'Styczne wewnetrznie :'+Sprawdz(StyczneWew)); OutTextXy(0,30,'Rozlaczne zewnetrznie :'+Sprawdz(RozlaczneZew)); OutTextXy(0,40,'Rozlaczne wewnetrznie :'+Sprawdz(RozlaczneWew)); repeat until KeyPressed; CloseGraph End.
    • CommentAuthorWojtaso20
    • CommentTime7 Jun 2008
     
    Dzięki naprawdę bardzo mi pomogłeś teraz już sobie sam poradzę. A ta praca mi jest bardzo potrzebna dziękuje i pozdrawiam.