AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Positive Zahlen in negative umwandeln

Ein Thema von Larsi · begonnen am 29. Okt 2008 · letzter Beitrag vom 13. Jun 2009
Thema geschlossen
Seite 11 von 22   « Erste     91011 121321     Letzte »    
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#101

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 16:15
Zitat von DeddyH:
"Threads, die die Welt nicht braucht" oder "Kollektiver Wahnsinn" fände ich angebrachter
Kollektiver Wahnsinn finde ich gut...

Vielleicht können wir ja die Lazarus-Sparte umbenennen...
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
 
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#102

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 16:17
@luckie: das gehört eindeutig in die CodeLib

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
 
hathor
(Gast)

n/a Beiträge
 
#103

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 21:26
Zitat von Sir Rufo:
@luckie: das gehört eindeutig in die CodeLib

cu

Oliver
Genau - und zwar Folgendes:

Um noch eine sinnvolle (und universelle) Antwort zu bringen:
Delphi-Quellcode:
var zahl : currency;

Zahl:= 3.14; // oder sonst was
Zahl := -abs(Zahl);
Memo1.lines.Add(Format('Zahl: %.2f ', [Zahl]));
 
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#104

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 21:32
Ich hoffe, das meinst du nicht ernst.

und @Manu: Nein, den Source bekommst du nicht. *g*

Edit: Falscher Smiley.
 
Benutzerbild von Missionar
Missionar

Registriert seit: 20. Apr 2008
26 Beiträge
 
#105

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 22:44
Gibt es da nicht etwas Performanteres, wie z. B.
Delphi-Quellcode:
procedure NEG(VAR Int: Integer);
assembler
  neg ACX;
end;
Gebet den Hungernden eine Gabel, damit er ordentlich Essen kann
 
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#106

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 22:46
Nein, das skaliert ja mindestens linear also O(n)

Matzes Texterkennungssoftware macht das ja sogar für beliebig viele Zahlen inm konstanter Zeit! O(1)

P.S. Es geht bereits seit 6,5 Seiten nicht mehr um performante Lösungen
 
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#107

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 22:51
Vielleicht auch ActiveX (Excel oä). Performant wäre auch irgendwas mit inline.
 
Benutzerbild von Missionar
Missionar

Registriert seit: 20. Apr 2008
26 Beiträge
 
#108

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 22:57
Dann müsste Mann es eben noch ausbauen. Vielleicht neben Integer noch, Real, Float, Double, Extended, BCD, Boolean, String, Negation von Klassen und von Pointern
Gebet den Hungernden eine Gabel, damit er ordentlich Essen kann
 
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#109

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 23:00
Zitat von Missionar:
Negation von Klassen und von Pointern
Das ist was fürn Neutral General
 
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#110

Re: Positive Zahlen in negative umwandeln

  Alt 30. Okt 2008, 23:11
Da das hier ein rein mathematisches Problem ist, muss man das auch so lösen.
Der Ansatz ist recht simpel. Man negiert eine reelle Zahl indem man sie ins Komplexe überführt und dort mit e^(i*pi) multipliziert. Das klingt jetzt etwas kompliziert, aber wenn man die eulersche Darstellung nimmt, reciht es die Phase mit pi zu summieren.
Delphi-Quellcode:
procedure TForm1.NegButtonClick(Sender: TObject);
var Kart:IKart;
    Euler:IEuler;
begin
  //Vorbereitung
  Kart:=TComplex.create as IKart;
  Kart.Imag:=0;
  Kart.Real:=StrToFloat(Eingabe.Text);
  Euler:=Kart as IEuler;

  //Negation
  Euler.Phase:=Euler.Phase+pi;

  //Ergebnis
  Ausgabe.Caption:=FloatToStr(Kart.Real);

end;
Die beiden Interfaces sehen so aus:
Delphi-Quellcode:
type
  IEuler=Interface
    ['{5EBED258-ACED-4D74-AB9D-C7048887343A}']
    procedure setPhase(value:Double);
    procedure setBetrag(value:Double);
    function getPhase:Double;
    function getBetrag:Double;
    property Phase:Double read getPhase write setPhase;
    property Betrag:Double read getBetrag write setBetrag;
  end;

  IKart=Interface
    ['{93216A14-7CB0-4377-B844-793511F3C24F}']
    procedure setReal(value:double);
    procedure setImag(value:Double);
    function getReal:Double;
    function getImag:Double;
    property Real:Double read getReal write setReal;
    property Imag:Double read getImag write setImag;
  end;
Und die Klasse dazu:
Delphi-Quellcode:
interface

type
  TComplex=class(TInterfacedObject,IKart,IEuler)
    Constructor Create;
   private
    FReal,FImag:Double;
    FBetrag,FPhase:Double;
    procedure setReal(value:double);
    procedure setImag(value:Double);
    procedure setPhase(value:Double);
    procedure setBetrag(value:Double);

    function getReal:Double;
    function getImag:Double;
    function getPhase:Double;
    function getBetrag:Double;

    procedure Euler2Kart;
    procedure Kart2Euler;
   end;



implementation

{ TComplex }

constructor TComplex.Create;
begin
  FReal:=0;
  FImag:=0;
  FBetrag:=0;
  FPhase:=0;
end;

procedure TComplex.Euler2Kart;
begin
  FReal:=cos(FPhase)*FBetrag;
  FImag:=sin(FPhase)*FBetrag;
end;

function TComplex.getBetrag: Double;
begin
  result:=FBetrag;
end;

function TComplex.getImag: Double;
begin
  result:=FImag;
end;

function TComplex.getPhase: Double;
begin
  result:=FPhase;
end;

function TComplex.getReal: Double;
begin
  result:=FReal;
end;

procedure TComplex.Kart2Euler;
begin
  FBetrag:=sqrt(sqr(FReal)+sqr(FImag));
  asm
    MOV EAX, Self
    FLD QWORD PTR [EAX].FImag
    FLD QWORD PTR [EAX].FReal
    FPATAN
    FWAIT
    FST QWORD PTR [EAX].FPhase
  end;
  if FPhase<0 then FPhase:=FPhase+2*pi;
end;

procedure TComplex.setBetrag(value: Double);
begin
  FBetrag:=value;
  Euler2Kart;
end;

procedure TComplex.setImag(value: Double);
begin
  FImag:=value;
  Kart2Euler;
end;

procedure TComplex.setPhase(value: Double);
begin
  while value<0 do Value:=Value+2*pi;
  while value>=2*pi do Value:=Value-2*pi;
  FPhase:=Value;
  Euler2Kart;
end;

procedure TComplex.setReal(value: double);
begin
  FReal:=value;
  Kart2Euler;
end;
Achja: Für den Arctan musste ich mal kurz auf Assembler zurückgreifen (wegen FPATAN)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
 
Thema geschlossen
Seite 11 von 22   « Erste     91011 121321     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz