Jump to content

Problem w programie, pomocy.


UltiTHC

Recommended Posts

Witam :)

 

Otóż mój problem wygląda następująco:

 

Napisałem program, który oblicza powiększenie obrazu przechodzącego przez 5 soczewek.

Wartości pierwszych 2 soczewek są obliczane dobrze, natomiast problem pojawia się przy parametrze "Y" soczewki 3 (w programie zmienna "p3". Później jak wiadomo część rzeczy sypie się tylko i wyłącznie przez złe obliczenie "p3".

 

Poniżej zdjęcie problemu, a jeszcze niżej kod.

d4fe4b2d422a8.jpg

 

Przyznaję się bez bicia - nie programuję zbyt wiele, ale ten problem wydaje mi się być trochę z dupy xdd

 

 

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
 ExtCtrls, ComCtrls, Buttons;
var wielkosc,y,z,zs1,zs2,zs3,zs4,zs5,f,f2,f3,f4,f5,d,g,opos,o,o2,o3,o4,o5,l,l2,l3,l4,l5: real;
t: real;
type
 { TForm1 }
 TForm1 = class(TForm)
answer: TButton;
Image1: TImage;
inf: TButton;
inst: TButton;
clear: TButton;
exxit: TButton;
Label1: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Label2: TLabel;
Label20: TLabel;
Label4: TLabel;
Label6: TLabel;
Labelf1: TLabel;
Labelf2: TLabel;
Labelf3: TLabel;
Labelf4: TLabel;
Labelf5: TLabel;
Labelp1: TLabel;
Labelp2: TLabel;
Labelp3: TLabel;
Labelp4: TLabel;
Labelp5: TLabel;
Labelx1: TLabel;
Labelx2: TLabel;
Labelx3: TLabel;
Labelx4: TLabel;
Labelx5: TLabel;
Labely1: TLabel;
Labely2: TLabel;
Labely3: TLabel;
Labely4: TLabel;
Labely5: TLabel;
line10: TLabel;
line11: TLabel;
line12: TLabel;
line13: TLabel;
line14: TLabel;
line15: TLabel;
line5: TLabel;
line6: TLabel;
line7: TLabel;
line8: TLabel;
line9: TLabel;
wynik: TLabel;
LabelPow5: TLabel;
LabelPow4: TLabel;
LabelPow3: TLabel;
LabelPow2: TLabel;
LabelPow1: TLabel;
line4: TLabel;
p: TLabel;
line: TLabel;
Label3: TLabel;
Label5: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
line1: TLabel;
line2: TLabel;
line3: TLabel;
opos: TEdit;
wielkosc: TEdit;
zs1: TEdit;
zs2: TEdit;
zs3: TEdit;
zs4: TEdit;
zs5: TEdit;
zzzz: TLabel;
procedure answerClick(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure infClick(Sender: TObject);
procedure instClick(Sender: TObject);
procedure clearClick(Sender: TObject);
procedure exxitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Label6Click(Sender: TObject);
procedure LabelPow1Click(Sender: TObject);
procedure line1Click(Sender: TObject);
procedure oposChange(Sender: TObject);
procedure oposKeyPress(Sender: TObject; var Key: char);
procedure wielkoscChange(Sender: TObject);
procedure wielkoscKeyPress(Sender: TObject; var Key: char);
procedure zs1KeyPress(Sender: TObject; var Key: char);
procedure zs2KeyPress(Sender: TObject; var Key: char);
procedure zs3KeyPress(Sender: TObject; var Key: char);
procedure zs4KeyPress(Sender: TObject; var Key: char);
procedure zs5KeyPress(Sender: TObject; var Key: char);
 private
{ private declarations }
 public
{ public declarations }
 end;
var
 Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.answerClick(Sender: TObject);
var
 z, z2, z3, z4, z5, f, f2, f3, f4, f5, w, q, q2, q3, q4, q5, p1, p2, p3, p4, p5, odl, odl2, odl3, odl4 ,odl5 : single;
 MaxFF: Integer;
begin
 z:=StrToFloat (zs1.Text);
 z2:=StrToFloat (zs2.Text);
 z3:=StrToFloat (zs3.Text);
 z4:=StrToFloat (zs4.Text);
 z5:=StrToFloat (zs5.Text);
 odl:=StrToFloat (opos.Text);
 w:=StrToFloat (wielkosc.Text);
 f:=100*(1/z);
 f2:=100*(1/z2);
 f3:=100*(1/z3);
 f4:=100*(1/z4);
 f5:=100*(1/z5);
 p1:= (f*odl) / (odl-f);
 odl2:=p1;
 p2:= (f2*odl2) / (odl2-f2);
 odl3:=p2;
 p3:= (f3*odl3) / (odl3-f3);
 odl4:=p3;
 p4:= (f4*odl4) / (odl4-f4);
 odl5:=p4;
 p5:= (f5*odl5) / (odl5-f5);
 q:=(Abs(p1) / odl)*w;
 q2:=(Abs(p2) / odl2)*w;
 q3:=(Abs(p3) / odl3)*w;
 q4:=(Abs(p4) / odl4)*w;
 q5:=(Abs(p5) / odl5)*w;

 if
 odl < f = true then
 ShowMessage('Odleglosc przedmiotu od soczewki mniejsza od ogniskowej SOCZEWKI 1. Obraz nie powstanie! ! !')
 else
 if w<=0 = true then
 ShowMessage('Wielkosc przedmiotu musi byc wieksza niz 0. Popraw dane i wcisnij "Oblicz" w lewym dolnym rogu programu.')
 else
 if z<=0 = true then
 ShowMessage('Zdolnosc skupiajaca "SOCZEWKI 1" musi byc wieksza niz 0. Popraw dane i wcisnij "Oblicz" w lewym dolnym rogu programu.')
 else
 if odl<=0 = true then
 ShowMessage('Odleglosc przedmiotu od soczewki musi byc wieksza niz 0. Popraw dane i wcisnij "Oblicz" w lewym dolnym rogu programu.')
 else
 if z2<=0 = true then
 ShowMessage('Zdolnosc skupiajaca "SOCZEWKI 2" musi byc wieksza niz 0. Popraw dane i wcisnij "Oblicz" w lewym dolnym rogu programu.')
 else
 if z3<=0 = true then
 ShowMessage('Zdolnosc skupiajaca musi byc wieksza niz 0. Popraw dane i wcisnij "Oblicz" w lewym dolnym rogu programu.')
 else
 if z4<=0 = true then
 ShowMessage('Zdolnosc skupiajaca musi byc wieksza niz 0. Popraw dane i wcisnij "Oblicz" w lewym dolnym rogu programu.')
 else
 if z5<=0 = true then
 ShowMessage('Zdolnosc skupiajaca musi byc wieksza niz 0. Popraw dane i wcisnij "Oblicz" w lewym dolnym rogu programu.')
 else

 Labelx1.Caption := FloatToStrF(odl,ffFixed,10,2);
 Labelx2.Caption := FloatToStrF(odl2,ffFixed,10,2);
 Labelx3.Caption := FloatToStrF(odl3,ffFixed,10,2);
 Labelx4.Caption := FloatToStrF(odl4,ffFixed,10,2);
 Labelx5.Caption := FloatToStrF(odl5,ffFixed,10,2);
 Labelf1.Caption := FloatToStrF(f,ffFixed,10,2);
 Labelf2.Caption := FloatToStrF(f2,ffFixed,10,2);
 Labelf3.Caption := FloatToStrF(f3,ffFixed,10,2);
 Labelf4.Caption := FloatToStrF(f4,ffFixed,10,2);
 Labelf5.Caption := FloatToStrF(f5,ffFixed,10,2);
 Labely1.Caption := FloatToStrF(p1,ffFixed,10,2);
 Labely2.Caption := FloatToStrF(p2,ffFixed,10,2);
 Labely3.Caption := FloatToStrF(p3,ffFixed,10,2);
 Labely4.Caption := FloatToStrF(p4,ffFixed,10,2);
 Labely5.Caption := FloatToStrF(p5,ffFixed,10,2);
 Labelp1.Caption := FloatToStrF(q,ffFixed,10,2);
 Labelp2.Caption := FloatToStrF(q2,ffFixed,10,2);
 Labelp3.Caption := FloatToStrF(q3,ffFixed,10,2);
 Labelp4.Caption := FloatToStrF(q4,ffFixed,10,2);
 Labelp5.Caption := FloatToStrF(q5,ffFixed,10,2);
 LabelPow1.Caption := FloatToStrF(q,ffFixed,10,2);
 LabelPow2.Caption := FloatToStrF(q2,ffFixed,10,2);
 LabelPow3.Caption := FloatToStrF(q3,ffFixed,10,2);
 LabelPow4.Caption := FloatToStrF(q4,ffFixed,10,2);
 LabelPow5.Caption := FloatToStrF(q5,ffFixed,10,2);
 wynik.Caption := FloatToStrF(q*(Abs(p2) / odl2)*(Abs(p3) / odl3)*(Abs(p4) / odl4)*(Abs(p5) / odl5),ffFixed,10,2);

end;
procedure TForm1.Image1Click(Sender: TObject);
begin
end;
procedure TForm1.infClick(Sender: TObject);
begin
 ShowMessage('Program obliczajacy wartosc powiekszenia obrazu przez 5 soczewek skupiajacych. Produced By Oskar Dolowy ®2016');
end;
procedure TForm1.instClick(Sender: TObject);
begin
 ShowMessage('INSTRUKCJE:  '#10'1. Do liczb dziesietnych uzywaj PRZECINKA.'#10'2. Po obliczeniu mozesz wyczyscic okienka do wprowadzania danych przyciskiem "Wyczysc" w lewym dolnym rogu aplikacji.'#10'3. Informacje na temat programu znajdziesz w prawym gornym rogu aplikacji.'#10'4. Po zakonczeniu obliczen mozesz wyjsc z programu za pomoca przycisku "Wyjdz" w prawym dolnym rogu aplikacji.');
end;

procedure TForm1.clearClick(Sender: TObject);
begin
 wielkosc.clear;
 zs1.clear;
 zs2.clear;
 zs3.clear;
 zs4.clear;
 zs5.clear;
 opos.clear;
 wielkosc.SetFocus;
end;
procedure TForm1.exxitClick(Sender: TObject);
begin
 Application.Terminate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Label6Click(Sender: TObject);
begin
end;
procedure TForm1.LabelPow1Click(Sender: TObject);
begin
end;
procedure TForm1.line1Click(Sender: TObject);
begin
end;
procedure TForm1.oposChange(Sender: TObject);
begin
end;
procedure TForm1.oposKeyPress(Sender: TObject; var Key: char);
begin
 	if not (key in ['0'..'9',#8{backspace},#9{tab},',']) then
begin
 Key := #0;
 ShowMessage('Sprawdz czy poprawnie wprowadziles odleglosc przedmiotu od soczewki lub zajrzyj do Instrukcji.');
end;
end;
procedure TForm1.wielkoscChange(Sender: TObject);
begin
end;
procedure TForm1.wielkoscKeyPress(Sender: TObject; var Key: char);
begin
 if not (key in ['0'..'9',#8{backspace},#9{tab},',']) then
begin
 Key := #0;
 ShowMessage('Sprawdz czy poprawnie wprowadziles Wielkosc Obiektu lub zajrzyj do Instrukcji.');
end;
end;
procedure TForm1.zs1KeyPress(Sender: TObject; var Key: char);
begin
if not (key in ['0'..'9',#8{backspace},#9{tab},',']) then
begin
 Key := #0;
 ShowMessage('Sprawdz czy poprawnie wprowadziles wartosc Zdolnosci Skupiajacej SOCZEWKI1 lub zajrzyj do Instrukcji.');
end;
end;
procedure TForm1.zs2KeyPress(Sender: TObject; var Key: char);
begin
 	if not (key in ['0'..'9',#8{backspace},#9{tab},',']) then
begin
 Key := #0;
 ShowMessage('Sprawdz czy poprawnie wprowadziles wartosc Zdolnosci Skupiajacej SOCZEWKI2 lub zajrzyj do Instrukcji.');
end;
end;
procedure TForm1.zs3KeyPress(Sender: TObject; var Key: char);
begin
 	if not (key in ['0'..'9',#8{backspace},#9{tab},',']) then
begin
 Key := #0;
 ShowMessage('Sprawdz czy poprawnie wprowadziles wartosc Zdolnosci Skupiajacej SOCZEWKI3 lub zajrzyj do Instrukcji.');
end;
end;
procedure TForm1.zs4KeyPress(Sender: TObject; var Key: char);
begin
 	if not (key in ['0'..'9',#8{backspace},#9{tab},',']) then
begin
 Key := #0;
 ShowMessage('Sprawdz czy poprawnie wprowadziles wartosc Zdolnosci Skupiajacej SOCZEWKI4 lub zajrzyj do Instrukcji.');
end;
end;
procedure TForm1.zs5KeyPress(Sender: TObject; var Key: char);
begin
 	if not (key in ['0'..'9',#8{backspace},#9{tab},',']) then
begin
 Key := #0;
 ShowMessage('Sprawdz czy poprawnie wprowadziles wartosc Zdolnosci Skupiajacej SOCZEWKI5 lub zajrzyj do Instrukcji.');
end;
end;
end.

 

 

Liczę na pomoc jeżeli ktoś ma jakikolwiek pomysł co tutaj może być nie tak.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...