24. marts 2004 - 14:55Der er
8 kommentarer og 1 løsning
Trekants beregning i delphi
Hej jeg er i gang med at lave et mini program, hvor man kan taste længder og vinkler ind på en trekant, hvorefter programmet skal kunne udskrive resultatet i de manglende felter. Det der er mit problem er at få programmet til at tage de kendte tal ind og bruge en af cosinus eller sinus relationerne til at regne vinklerne ud med. Hvis der er nogle der har en løsning til hvorledes man kan få programmet til at skrive løsningen ud på en smart måde ville jeg blive enorm glad, har siddet med det i noget tid efter hånden og jeg kan ikke rigtig finde fejlen.
Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.
Du er ikke så konkret, men sagt lidt firkantet: Dine indtastede værdier skal nok underkastes en "strToFloat" inden der beregnes. Og dine resultater omvendt en "FloatToStr" eller "FloatToStrF" før de udlæses. Se evt. nærmere her:
Hey dem der koder er lige hvad jeg sidder og skal bruge :) du har ikke flere omkring noget med cos, sin og deres inverse ?? ked af indtastningen men jeg lidt newbie både med hensyn til delphi og til denne side ;P
Jeg har dog et andet problem nu, for jeg vil gerne have at når jeg kender trekantens længder, så skal den skrive vinklerne ud, koden er her: if a2>0 then begin if b2>0 then begin if c2>0 then begin Resa1:=(radtodeg(arccos(((b2*b2)+(c2*c2)-(a2*a2))/(2*b2*c2)))); Sa.Text:=floattostr(resa1); Resb1:=(radtodeg(arccos(((a2*a2)+(c2*c2)-(b2*b2))/(2*a2*c2)))); Sb.Text:=floattostr(resb1); Resc1:=(radtodeg(arccos(((a2*a2)+(b2*b2)-(c2*c2))/(2*a2*b2)))); Sc.Text:=floattostr(resc1); end; end; her er Sa, Sb og Sc vinklerne jeg vil have skrevet ud, mens a2,b2 og c2 er længderne på siderne. Når jeg skriver kanternes længder ind, giver den mig kun et resultat, men jeg vil gerne have alle 3..... det er det store problem.
Jeg har prøvet nedenstående og har ingen fejl. Jeg bruger Power i stedet for n*n - måske har det noget at sige. I øvrigt kan jeg anbefale at bruge StrToFloatDef som returnerer en default værdi ved konverteringsfejl. God når man henter værdier fra en TEdit der kan være tom;
Din arbejdsplan må se nogenlunde sådan her ud: 1. Alle tre siders længde opgivet (den er klaret her) 2. Vinkel og to hosliggende sider 3. Vinkel, en hosliggende og modstående side 4. En side og 2 vinkler
Hvis du vil begrænse de tegn som brugeren må skrive, kan du lege lidt med følgende kodestump:
procedure TfrmeTriangle.OnlyFloats(aSender : TObject; var aChar: char); var p : integer; begin with (aSender as TEdit) do if aChar > #32 then begin // e.g. backspace is below
if not (aChar in ['0'..'9',DecimalSeparator]) then aChar := #0;
p := pos(DecimalSeparator,Text); if p > 0 then if aChar = DecimalSeparator then // Do not add more dots than the one present aChar := #0 else if length(Text) - p > 3 then // It's a digit. Allow no more than 4 digits aChar := #0; end; // if end;
Hvis du hægter den på en TEdit's OnKeyPressed event, så vil den kun acceptere tal, eet komma (eller hvad DecimalSeparator nu er sat til) og 4 decimaler.
Skal lige tilføje, at jeg har lavet en property til hver af de seks parametre som man kan angive ved trekanten:
type TfrmeTriangle = class(TFrame) // Kunne ligeså godt bruge en TForm private function GetBLgd: extended; public property BLgd : extended read GetBLgd; .. osv end;
implementation
function TfrmeTriangle.GetBLgd: extended; begin result := StrToFloatDef(eBLgd.Text,0); end;
Hej tijap Jeg har fulgt dit indlæg. Og vil gerne som indlæring, afprøve din trekanberegning. Vil du indsæt helde dit Unit eller sende den til mig.
Med venlig hilsen Monie Jacobsen E-mail: mjs at nypost dot dk
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.