Jump to content

[Snippet] Breve experiência com a unit 'Graph'


thoga31
 Share

Recommended Posts

Ando agora a estudar a unit Graph do Free Pascal, e deixo-vos a minha primeira experiência, bem sucedida.

(não está comentado nem muito "arranjadinho", é só mesmo uma experiência)

Ora digam lá se o Pascal é ou não fraquinho? 😛

Eu demoraria muito mais a obter o mesmo resultado em VB.NET, a outra LP do meu conhecimento...

Venham daí as vossas opiniões sobre esta maravilha! I just love it, man! 😁

program Trigonometria;
uses graph, sysutils, windows;
var Driver, Modus : smallint;
Angle : integer;

function Real2String(const value : real) : string;
begin
 Str(value, Real2String);
end;

function Int2String(const value : integer) : string;
begin
 Str(value, Int2String);
end;

begin
 try
	repeat
		  write('Angulo (inteiro) (-360..360)? ');
		  readln(Angle);
	until (Angle in [-360..360]);

	DetectGraph(Driver, Modus);
	InitGraph(Driver, Modus, '');

	Circle(200, 200, 100);
	Line(200, 50, 200, 350);
	Line(50, 200, 350, 200);

	SetLineStyle(SolidLn,0,ThickWidth);
	SetColor(red);
	Line(200, 200, round(100*cos((angle*pi)/180)+200), round(-100*sin((angle*pi)/180)+200));

	SetColor(white);
	OutTextXY(300, 300, 'sin(' + Int2String(angle) + ') = ' + Real2String(sin((angle*pi)/180)));
	OutTextXY(300, 310, 'cos(' + Int2String(angle) + ') = ' + Real2String(cos((angle*pi)/180)));

	readln; // pausa

	CloseGraph;
 except
	   ON e:exception do begin
		  MessageBox (0, @(e.message)[1] , 'ERRO!', 0 + MB_ICONHAND);
	   end;
 end;
 writeln; write('end'); readln; // pausa
end.

Knowledge is free!

Link to comment
Share on other sites

Muito bem...

Cheguei a fazer uma agenda em modo gráfico em Turbo Pascal (6 ou 7, não me lembro, possivelmente até no 5.5), em que a base onde apareciam escritas as informações das pessoas era uma folha de papel pautado, com os buracos para encapar e tudo, e com uma fonte tipo Script para parecer que tinha sido escrito à mão.

😄

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

ok, ok, talvez o que eu me lembrava do programa fosse um pouco acima do que realmente é... 😄

Mas lá encontrei o DateBook v3.0

datebo10.jpg

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

O que é prometido é devido! 🙂

P.S. (edit): detectei que a imagem está mal. Já corriji o código, mas não tirei um novo print screen, esta imagem ilustra bem o que faz o programa.

http://dl.dropbox.com/u/30172141/P@P/trigonometria_pascal_2.png

program Trigonometria;
uses graph, sysutils, windows;

type TPixel = record
            X, Y : integer;
     end;

var Driver, Modus : smallint;
    Angle : integer;
    i : integer;

const CircleCenter : TPixel = (X:200; Y:200);

function Real2String(const value : real) : string;
begin
     Str(value, Real2String);
end;

function Int2String(const value : integer) : string;
begin
     Str(value, Int2String);
end;

begin
     try
        repeat
              write('Angulo (inteiro) (-360..360)? ');
              readln(Angle);
        until (Angle in [-360..360]);

        DetectGraph(Driver, Modus);
        InitGraph(Driver, Modus, '');

        Circle(CircleCenter.X, CircleCenter.Y, 100);
        Line(CircleCenter.X, 50, CircleCenter.X, 350);
        Line(50, CircleCenter.Y, 350, CircleCenter.Y);

        SetLineStyle(SolidLn,0,ThickWidth);
        SetColor(red);
        Line(CircleCenter.X, CircleCenter.Y,
             round(100*cos((angle*pi)/180)+CircleCenter.X),
             round(CircleCenter.Y-100*sin((angle*pi)/180)));

        SetColor(white);
        OutTextXY(220, 330, 'sin(' + Int2String(angle) + ') = ' + Real2String(sin((angle*pi)/180)));
        OutTextXY(220, 340, 'cos(' + Int2String(angle) + ') = ' + Real2String(cos((angle*pi)/180)));

        SetLineStyle(SolidLn,0,NormWidth);
        Line(400, 200, 800, 200); // Horizontal
        Line(600, 50, 600, 350);  // Vertical
        OutTextXY(610, 50, 'sin(x)');

        for i:=30*round(-2*pi) to 30*round(2*pi) do begin
            PutPixel(600+i, round(200-100*sin((i*pi)/180)), red);
        end;

        SetLineStyle(DashedLn,0,NormWidth);
        SetColor(green);
        Line(CircleCenter.X, round(CircleCenter.Y-100*sin((angle*pi)/180)), CircleCenter.X+400, round(CircleCenter.Y-100*sin((angle*pi)/180)));

        readln; // pausa

        CloseGraph;
     except
           ON e:exception do begin
              MessageBox (0, @(e.message)[1] , 'ERRO!', 0 + MB_ICONHAND);
           end;
     end;
     writeln; write('end'); readln; // pausa
end.

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.