Vypisování desetiného čísla? – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vypisování desetiného čísla? – Delphi – Fórum – Programujte.comVypisování desetiného čísla? – Delphi – Fórum – Programujte.com

 

Aqua0
Newbie
30. 12. 2010   #1
-
0
-

Zdravím znovu a prosím o radu. Píši program, který pracuje s rozměry obrázku. Narazila jsem ale na problém v poslední proceduře se SpinEditem5, potřebuji aby v závislosti na jeho změnu se vypsalo číslo do Label18, což se zřejmě vypisuje, ale jelikož je desetinné (0,xxxxxx), zobrazuje se mi vždy jen nula. Zkoušela jsem proceduru upravit, ale nesedí mi datové typy. Neměli byste někdo nápad? Snad je trochu jasné co má program dělat, pokud by byla nějaká nejasnost, pokusím se blíže přiblížit.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Menus, Math;

type
TForm1 = class(TForm)
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
SpinEdit3: TSpinEdit;
SpinEdit4: TSpinEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
SpinEdit5: TSpinEdit;
Label18: TLabel;
MainMenu1: TMainMenu;
Soubor1: TMenuItem;
Otevtobrzek1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure SpinEdit3Change(Sender: TObject);
procedure SpinEdit4Change(Sender: TObject);
procedure Otevtobrzek1Click(Sender: TObject);
procedure SpinEdit5Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Form2: TForm1;
OpenDialog1: TOpenDialog;
x: integer;
y: integer;
x2: integer;
y2: integer;
mpx: integer;
dpi: integer;
v: integer;
u: integer;
z: extended;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //načítám dvě čísla ze SpinEditů1 a 2 a výpočet vypisuji do labelů 6 a 8
var mpx,x,y:extended;
begin
mpx:=spinedit3.value*1000000;
x:=round(sqrt(spinedit1.value/spinedit2.value*mpx));
y:=round(mpx/x);
label6.caption:=FloatToStr(x);
label8.caption:=FloatToStr(y);
end;

procedure TForm1.SpinEdit3Change(Sender: TObject); //přiřazuji hodnotu megapixelů
begin
mpx:=SpinEdit3.Value;
end;

procedure TForm1.SpinEdit4Change(Sender: TObject); //tiskové rozlišení - hodnoty z labelů 1 a 2 a hodnoty DPI (SpinEdit4)
begin
dpi:=SpinEdit4.Value;
v:=(strtoint(label6.caption) div dpi)*Trunc(2.54);
Label12.Caption:=IntToStr(v);
u:=(strtoint(label8.caption) div dpi)*Trunc(2.54);
Label14.Caption:=IntToStr(u);
end;

procedure TForm1.Otevtobrzek1Click(Sender: TObject); //jen zavření programu přes menu
begin
Close;
end;

procedure TForm1.SpinEdit5Change(Sender: TObject); //barevná hloubka - reaguje na hodnoty z první procedury a SpinEdit5
begin
z:=((x*y*SpinEdit5.Value) div 8) div 1048576;
Label18.Caption:=FloatToStr(z);
end;

end.

Nahlásit jako SPAM
IP: 90.179.164.–
Šest programátorských zákonů: 1. V každém programu je alespoň jedna chyba. 2. Každý program lze zkrátit alespoň o jeden řádek. 3. Nejjednodušší chyby se nejhůře hledají. 4. Každou opravou se do programu zanese nová chyba. 5. Když už se zdá, že program je v pořádku, určitě jsme něco přehlédli. 6. Programátor dělá, co umí. Počítač si dělá, co chce.
Honzc0
Stálý člen
1. 1. 2011   #2
-
0
-

Nejspíš to bude tím, že máš použitou operaci celočíselné dělení (div). A jestli je číslo z menší než 1 pak ti celočíselné dělení dává číslo 0. Zkus vyměnit div za normální dělení (/).

Nahlásit jako SPAM
IP: 84.16.108.–
Aqua0
Newbie
1. 1. 2011   #3
-
0
-

Zkusila jsem předělat proceduru následovně...

procedure TForm1.SpinEdit5Change(Sender: TObject);
var z: extended;
begin
z:=((x*y*SpinEdit5.Value) / 8) / 1048576;
Label18.Caption:=FloatToStr(z);
end;

... ale problém bohužel stále stejný. Možná to není ani tím vzorcem, zkusila jsem totiž dělení úplně vyhodit a použít z:=(x*y*SpinEdit5.Value) a i to mi výsledek nevypíše, přestože ani x ani y nebyly nulové a SpinEdit5 měl hodnotu 2.

Nahlásit jako SPAM
IP: 90.179.164.–
Šest programátorských zákonů: 1. V každém programu je alespoň jedna chyba. 2. Každý program lze zkrátit alespoň o jeden řádek. 3. Nejjednodušší chyby se nejhůře hledají. 4. Každou opravou se do programu zanese nová chyba. 5. Když už se zdá, že program je v pořádku, určitě jsme něco přehlédli. 6. Programátor dělá, co umí. Počítač si dělá, co chce.
Sniper
~ Anonymní uživatel
215 příspěvků
1. 1. 2011   #4
-
0
-

Ten kód je celkově nějakej divokej. Podle mě je problém v proměnných x a y. Prostě jsou nulové a pak je jasné že výsledek je nula. Jde o to že ve funkci kde jim přiřazuješ hodnoty je máš deklarované znovu, a delphi si ty hodnoty ukládá do těchto lokálních proměnných místo do globálních X,Y. Nemluvě o tom že provádíš dělení proměnnou která může být rovna nule a nemáš to nijak ošetřené.

Nahlásit jako SPAM
IP: 90.179.201.–
Aqua0
Newbie
6. 1. 2011   #5
-
0
-

Sniper: Já vím, že ten kód není tip top, vypadá přesně jako když začátečník dělá podle zadání. :smile5: Děkuji za radu, máš pravdu. Problém byl v tom deklarování proměnných. :smile1:

Nahlásit jako SPAM
IP: 90.179.164.–
Šest programátorských zákonů: 1. V každém programu je alespoň jedna chyba. 2. Každý program lze zkrátit alespoň o jeden řádek. 3. Nejjednodušší chyby se nejhůře hledají. 4. Každou opravou se do programu zanese nová chyba. 5. Když už se zdá, že program je v pořádku, určitě jsme něco přehlédli. 6. Programátor dělá, co umí. Počítač si dělá, co chce.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý