Skocz do zawartości

UltiTHC

Użytkownicy
  • Zawartość

    1
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralny

O UltiTHC

  • Ranga
    Nowy na forum
  1. UltiTHC

    Problem w programie, pomocy.

    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. 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.
×