Vanilla 1.1.5a jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.
program ziemia;
uses Crt, Graph;
var dx, sterownik, tryb, x1, x2, y1, y2 :Integer;
a, a2, b, b2, d, k, kappa, p, r, x0, y0, xs, ys :Real;
{procedura egavga}
procedure EGAVGAInit;
var blad, sterownik, tryb : Integer;
begin
Detectgraph (sterownik, tryb);
if (sterownik<>EGA) and (sterownik<>VGA)
then begin
Writeln ('komputer ma inna karte niz EGA lub VGA');
Halt
end;
InitGraph (sterownik, tryb, 'C:\TP\BGI');
blad:=GraphResult;
if blad<>0
then begin
Writeln ('Blad podczas inicjowania trybu');
Write ('kod bledu :',blad);
Halt
end;
if sterownik=VGA
then k:=48/35
else k:=1
end {EGAVGAInit};
begin
DetectGraph (sterownik, tryb);
if sterownik=EGA
then kappa:=31/40
else kappa:=1;
EGAVGAInit;
RestoreCrtMode;
ClrScr;
Writeln ('Okresl elipse:');
repeat
Write ('- polos wielka (40<=a<=',GetMaxX-39,') a = '); Readln (a)
until (a>=40) and (a<=GetMaxX-36);
repeat
Write ('- polos mala (60<=b<=', GetMaxX-59,') b ='); Readln (b)
until (b>=60) and (b<=GetMaxY-59);
Writeln('- wspolrzedne srodka elipsy (w ukladzie wspolrzednych');
Writeln('o srodku w srodku ekranu i osi y skierowanej w gore');
repeat
Write ('x0 = '); Readln (x0)
until Abs(x0)<a;
repeat
Write ('y0 = '); Readln (x0)
until Abs(x0)<b;
repeat
Write ('dlugosc odcinka d (d<=');
if a<b
then Write (a:5:1)
else Write (b:5:1);
Write (') ='); Readln (d)
until (d>0) and (d<=b) and (d<=a);
x0:=x0+(GetMaxX div 2); y0:=y0+(GetMaxY div 2)/kappa;
SetGraphMode (tryb);
SetColor (Red);
Ellipse (Round(x0),Round(kappa*y0),0,360,Round(a-2),Round(kappa*(b-2)));
xs:=x0; ys:=y0-b;
dx:=-2; a2:=a*a; b2:=b*b;
repeat
p:=Sqrt(Sqr(a2*(ys-y0))+Sqr(b2*(xs-x0)));
r:=d*a2*(ys-y0)/p;
x1:=Round(xs-r); x2:=Round(xs+r);
r:=d*b2*(xs-x0)/p;
y1:=Round(kappa*(ys+r)); ys:=Round(kappa*(ys-r));
SetColor (Yellow);
Line (x1, y1, x2, y2);
if((dx<0) and (xs+dx<x0-a)) or ((dx>0) and (xs+dx>x0+a))
then dx:=-dx;
Delay (50);
SetColor (Black);
Line (x1, y1, x2, y2);
xs:=xs+dx; ys:=y0+Abs(dx)*b*Sqrt(1-Sqr((xs-x0)/a))/dx;
until KeyPressed;
CloseGraph
end.
w tym programie na początku są zapytania jaka ma być elipsa i takie tam inne pierdoły ja bym chciał się tego pozbyć żeby było już na stałe wpisane te dane a i jeszcze jedno jak zrobić żeby program jeszcze zliczał ilość obiegów wokół słońca
z góry dziękuje za pomoc.
repeat
Write ('- polos wielka (40<=a<=',GetMaxX-39,') a = '); Readln (a)
until (a>=40) and (a<=GetMaxX-36);
a:=300;
program ziemia;
uses Crt, Graph;
var dx, sterownik, tryb, x1, x2, y1, y2 :Integer;
a, a2, b, b2, d, k, kappa, p, r, x0, y0, xs, ys :Real;
{procedura egavga}
procedure EGAVGAInit;
var blad, sterownik, tryb : Integer;
begin
Detectgraph (sterownik, tryb);
if (sterownik<>EGA) and (sterownik<>VGA)
then begin
Writeln ('komputer ma inna karte niz EGA lub VGA');
Halt
end;
InitGraph (sterownik, tryb, 'C:\TP\BGI');
blad:=GraphResult;
if blad<>0
then begin
Writeln ('Blad podczas inicjowania trybu');
Write ('kod bledu :',blad);
Halt
end;
if sterownik=VGA
then k:=48/35
else k:=1
end {EGAVGAInit};
begin
DetectGraph (sterownik, tryb);
if sterownik=EGA
then kappa:=31/40
else kappa:=1;
EGAVGAInit;
RestoreCrtMode;
ClrScr;
{okreslanie eleipsy}
a:=200; {szerokosc elipsy}
b:=50; {wysokosc elipsy}
x0:=1;
y0:=2;
d:=1;
x0:=x0+(GetMaxX div 2); y0:=y0+(GetMaxY div 2)/kappa;
SetGraphMode (tryb);
SetColor (blue);
Ellipse (Round(x0),Round(kappa*y0),0,360,Round(a-2),Round(kappa*(b-2)));
xs:=x0; ys:=y0-b;
dx:=-2; a2:=a*a; b2:=b*b;
repeat
p:=Sqrt(Sqr(a2*(ys-y0))+Sqr(b2*(xs-x0)));
r:=d*a2*(ys-y0)/p;
x1:=Round(xs-r); x2:=Round(xs+r);
r:=d*b2*(xs-x0)/p;
y1:=Round(kappa*(ys+r)); ys:=Round(kappa*(ys-r));
SetColor (Yellow);
Line (x1, y1, x2, y2);
if((dx<0) and (xs+dx<x0-a)) or ((dx>0) and (xs+dx>x0+a))
then dx:=-dx;
Delay (50);
SetColor (black);
Line (x1, y1, x2, y2);
xs:=xs+dx; ys:=y0+Abs(dx)*b*Sqrt(1-Sqr((xs-x0)/a))/dx;
until KeyPressed;
CloseGraph
end.
Uses Crt,Graph;
function Deg2Rad(Kat : Real) : Real;
begin;
Deg2Rad:=Kat*Pi/180
end;{Zamiena Stopnii na Radiany}
procedure Slonce;
begin
SetColor(Yellow);
SetFillStyle(SolidFill,Yellow);
Circle(320,240,20);
FloodFill(320,240,Yellow)
end;{Rysuje slonce}
procedure Ziemia(x,y : Integer;Kolor : Word);
begin
SetColor(Kolor);
SetFillStyle(SolidFill,Kolor);
Circle(x,y,10);
FloodFill(x,y,Kolor)
end;{Rysuje Ziemie}
Const PromienX = 200;
PromienY = 100;
x0 = 320;
y0 = 240;
Licznik : Integer = 0;
Var Sterownik,Tryb,Kat : Integer;
x,y : Real;
s : string;
Begin
InitGraph(Sterownik,Tryb,'c:\tp\bgi'); {Inicjuje grafike}
SetTextJustify(CenterText,CenterText); {Wyrownanie tekstu w poz. i pion.}
Slonce; {Rysuje slonce}
repeat {powtarzaj}
if Kat<360 then Inc(Kat) {jesli kat<360 zwiekszaj kat}
else begin {w przeciwnym razie}
Kat:=0; {wyzeruj kat}
Inc(Licznik); {zwieksz licznik okrazen o jeden}
end;
x:=x0+Sin(Deg2Rad(Kat))*PromienX; {Obliczenie nowych wsp. x Ziemi}
y:=y0+Cos(Deg2Rad(Kat))*PromienY; {Obliczenie nowych wsp. y Ziemi}
Ziemia(Round(x),Round(y),LightBlue); {Rysuje Ziemie}
SetColor(White); {Ustawia kolor na Bialy}
Str(Licznik,s); {Zamiana Liczby na ciag znakow}
OutTextXy(Round(x),Round(y),s); {Pisze liczbe}
Delay(100); {Czeka 1/10 sekundy}
Ziemia(Round(x),Round(y),Black) {Wymazuje Ziemie}
until KeyPressed; {dopóki}
CloseGraph {Zamknij tryb graficzny}
End.
Uses Crt,Graph;
function Deg2Rad(Kat : Real) : Real;
begin;
Deg2Rad:=Kat*Pi/180
end;{Zamiena Stopnii na Radiany}
procedure Slonce;
begin
SetColor(Yellow);
SetFillStyle(SolidFill,Yellow);
Circle(320,240,20);
FloodFill(320,240,Yellow)
end;{Rysuje slonce}
procedure Ziemia(x,y : Integer;Kolor : Word);
begin
SetColor(Kolor);
SetFillStyle(SolidFill,Kolor);
Circle(x,y,10);
FloodFill(x,y,Kolor)
end;{Rysuje Ziemie}
Const PromienX = 200;
PromienY = 100;
x0 = 320;
y0 = 240;
Licznik : Integer = 0;
Var Sterownik,Tryb,Kat : Integer;
x,y : Real;
s : string;
i jak mam Ci się odwdzięczyć za to, że napisałeś mi program ?
function Deg2Rad(Kat : Real) : Real; {Funkcja podobnie jak zmienna moze przybrac jakas wartosc}
begin; {Jak wiadomo katy mozna przedstawiac poprzez Stopnie lub Radiany}
Deg2Rad:=Kat*Pi/180 {Przypisanie wartosci katowej dla funkcji }
end; {Funkcja zamienia Stopnie na Radiany, bo pascal obsuguje radiany}
procedure Slonce;
begin
SetColor(Yellow); {Ustawia kolor rysowania na zolty}
SetFillStyle(SolidFill,Yellow); {Ustawia kolor wypelnienia na zolty}
Circle(320,240,20); {Rysuje okrag}
FloodFill(320,240,Yellow) {Wylewa farbe w srodku okregu}
end;{Rysuje slonce}
procedure Ziemia(x,y : Integer;Kolor : Word);
begin
SetColor(Kolor); {Kolor rysowania jak w parametrze }
SetFillStyle(SolidFill,Kolor); {Ustawia kolor wypelnienia na wybrany kolor}
Circle(x,y,10); {Rysuje okrag}
FloodFill(x,y,Kolor) {Wylewa farbe w srodku okregu}
end;{Rysuje Ziemie}
Const PromienX = 200; {Stala - Pierwszy promien elipsy}
PromienY = 100; {Stala - Drugi promien elipsy}
x0 = 320; {Stala - wspolrzedna srodka elipsy X}
y0 = 240; {Stala - wspolrzedna srodka elipsy Y}
Licznik : Integer = 0; {Stala z wartoscia poczatkowa - Licznik obrotow}
Var Sterownik,Tryb,Kat : Integer; {zmienne }
x,y : Real;
s : string;
Begin
<a href="http://pascal.netax.pl" title="turbo pascal">turbo pascal</a>
Uses Crt,Graph;
function Deg2Rad(Kat : Real) : Real; {Funkcja podobnie jak zmienna moze przybrac jakas wartosc}
begin; {Jak wiadomo katy mozna przedstawiac poprzez Stopnie lub Radiany}
Deg2Rad:=Kat*Pi/180 {Przypisanie wartosci katowej dla funkcji }
end; {Funkcja zamienia Stopnie na Radiany, bo pascal obsuguje radiany}
procedure Slonce;
begin
SetColor(Yellow); {Ustawia kolor rysowania na zolty}
SetFillStyle(SolidFill,Yellow); {Ustawia kolor wypelnienia na zolty}
Circle(320,240,20); {Rysuje okrag}
FloodFill(320,240,Yellow) {Wylewa farbe w srodku okregu}
end;{Rysuje slonce}
procedure Ziemia(x,y : Integer;Kolor : Word);
begin
SetColor(Kolor); {Kolor rysowania jak w parametrze }
SetFillStyle(SolidFill,Kolor); {Ustawia kolor wypelnienia na wybrany kolor}
Circle(x,y,10); {Rysuje okrag}
FloodFill(x,y,Kolor) {Wylewa farbe w srodku okregu}
end;{Rysuje Ziemie}
procedure mars(a,b : Integer;Kolor : Word);
begin
SetColor(Kolor); {Kolor rysowania jak w parametrze }
SetFillStyle(SolidFill,Kolor); {Ustawia kolor wypelnienia na wybrany kolor}
Circle(a,b,6); {Rysuje okrag}
FloodFill(a,b,Kolor) {Wylewa farbe w srodku okregu}
end;
Const PromienA = 70; {Stala - Pierwszy promien elipsy}
PromienB = 95; {Stala - Drugi promien elipsy}
a0 = 320; {Stala - wspolzedna srodka elipsy X}
b0 = 240; {Stala - wspolzedna srodka elipsy Y}
Licznik : Integer = 0; {Stala z wartoscia poczatkowa - Licznik obrotow}
Const PromienX = 50;
PromienY = 80;
x0 = 320;
y0 = 240;
Var Sterownik,Tryb,Kat : Integer; {zmienne }
x,y,a,b : Real;
s : string;
Begin
InitGraph(Sterownik,Tryb,'c:\tp\bgi'); {Inicjuje grafike}
SetTextJustify(CenterText,CenterText); {Wyrownanie tekstu w poz. i pion.}
Slonce; {Rysuje slonce}
repeat {powtarzaj}
if Kat<360 then Inc(Kat) {jesli kat>360 zwiekszaj kat}
else begin {w przeciwnym razie}
Kat:=0; {wyzeruj kat}
Inc(Licznik); {zwieksz licznik okrazen o jeden}
end;
x:=x0+Sin(Deg2Rad(Kat))*PromienX; {Obliczenie nowych wsp. x Ziemi}
y:=y0+Cos(Deg2Rad(Kat))*PromienY; {Obliczenie nowych wsp. y Ziemi}
Ziemia(Round(x),Round(y),LightBlue); {Rysuje Ziemie}
SetColor(White); {Ustawia kolor na Bialy}
Str(Licznik,s); {Zamiana Liczby na ciag znakow}
OutTextXy(Round(x),Round(y),s); {Pisze liczbe}
Delay(10); {Czeka 1/10 sekundy szykosc}
Ziemia(Round(x),Round(y),Black); {Wymazuje Ziemie}
a:=a0+Sin(Deg2Rad(Kat))*PromienA;
b:=b0+Cos(Deg2Rad(Kat))*PromienB;
mars(Round(a),Round(b),White);
Ziemia(Round(a),Round(b),Black) {Wymazuje Ziemie}
until KeyPressed; {dopóki}
CloseGraph {Zamknij tryb graficzny}
End.
no chyba ze łatwiej jest zrobić żeby księżyc krążył wokół ziemi ale wolał bym zrobić cały układ bo będzie bardziej profesjonalny ziemia(Delay(10));
a z tym przesunięciem planety to coś jest związane to na pewno
a:=a0+Sin(Deg2Rad(Kat))*PromienA;
b:=b0+Cos(Deg2Rad(Kat))*PromienB;
chciałem zrobić +20 ale to też tak nie działa
już głupi jestem siedzę od wczoraj nad tym i już tracę nadzieje ze to się uda
Od 1 do 11 z 11