AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Mathe mit Strings (die deutsche StringMatheLib ._. )
Thema durchsuchen
Ansicht
Themen-Optionen

Mathe mit Strings (die deutsche StringMatheLib ._. )

Ein Thema von himitsu · begonnen am 13. Jun 2009 · letzter Beitrag vom 8. Apr 2013
Antwort Antwort
Seite 10 von 10   « Erste     8910   
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Re: Mathe mit Strings (die deutsche StringMatheLib ._. )

  Alt 18. Jul 2009, 11:29
Moin Stefan,
da ist glaub ich ein Fehler drinne:
Zitat von GPRSNerd:
Delphi-Quellcode:
function TMathe.ZahlNBereinigen(const ZahlN, BasisN: string): string;
//Zahl-String zur Basis N von allen Zeichen bereinigen, die nicht zwischen
// '0' und Chr(N) liegen
var
  i: Integer;
  ZahlN_: string;
begin
  ZahlN_:=Uppercase(ZahlN);
  for i := Length(ZahlN_) downto 1 do //Rückwärts da sonst mehrfach hintereinander
                                      //auftretende nicht erlaubte Zeichen nicht korrigiert würden
  begin
    if ((_GetZahl(ZahlN_[i]) < 0) or (_GetZahl(ZahlN_[i]) >= StrToInt(BasisN))) then
      Delete(ZahlN_, i, 1);
  end;

  Result:=ZahlN_;
end;
Zum einen musst du ein Vorzeichen ignorieren und zum anderen, würde ich _GetZahl puffern und StrToInt auch (da aber außerhalb der schleife).

Also etwas wie sowas:
Delphi-Quellcode:
function TMathe.ZahlNBereinigen(const ZahlN, BasisN: string): string;
//Zahl-String zur Basis N von allen Zeichen bereinigen, die nicht zwischen
// '0' und Chr(N) liegen
var
  ZahlN_: string;
  i, Ziffer, BasisInt, StartZeichen : Integer;
begin
  ZahlN_:=Uppercase(ZahlN);
  if Ord(a[1]) in [Ord('+'), Ord('-')] then
    StartZeichen := 2
  else
    StartZeichen := 1;
  BasisInt := StrToInt(BasisN);

  // Rückwärtige Schleife, da der String hinter der aktuellen Position
  // verkürzt wird
  for i := Length(ZahlN_) downto StartZeichen do
  begin
    Ziffer := _GetZahl(ZahlN_[i]);
    if (Ziffer < 0) or (Ziffer >= BasisInt) then
      Delete(ZahlN_, i, 1);
  end;

  Result:=ZahlN_;
end;
Zitat von himitsu:
Also im Prinzip sollte es so funktionieren - bei ImmerNormalisieren sowieso

Ich hab es eigentlich abschaltbar gemacht, falls man mit mehreren gekoppelten Berechnungen sich dieses sparren möchte, aber da sollte man dann vorher die "Eingabewerte" selber einmal manuell Normalisieren.
Naja, ich erwarte aber das Dezimalstellen('+12') mir immer 2 zurückgibt
Abgesehen davon müsste es eigentlich statt "a[Length(a)]" nur "a[1]" heißen.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#2

AW: Mathe mit Strings (die deutsche StringMatheLib ._. )

  Alt 27. Dez 2010, 16:51
Hallo himitsu,

über die Festtage habe ich mir Deinen MatheParser angeguckt und finde ihn sehr gelungen.
Bei kleinen Test ist mir aufgefallen, dass das Potenzieren mit "^" nicht so richtig funktioniert.
Zum einem muß wohl in Constructor TMatheParserF.Create; der Operator von #^ zu ^ verändert werden.
Zum anderen läuft er sich in Function TMathe.Potenz aber irgendwie fest. Die Loop-Schleife findet scheinbar irgenwie keinen Ausstieg. Vielleicht muß diese '1' normalisiert werden?

In dem Demo5 tritt der Fehler nicht auf. Gibt es schon eine Korrektur?

Gruss
Jens
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Mathe mit Strings (die deutsche StringMatheLib ._. )

  Alt 8. Apr 2013, 11:30
ICh weiß der Beitrag ist schon alt aber ich ärgere mich seit gestern mit einem Problem und diese unit hier hat das gleiche Problem.
Kann mir bitte jemand erklären warum matheparser anscheinend ein Problem hiermit haben: (25-20-4) Ergebnis ist dann 6
Aber warum?? Gebe ich das so in den Windowsrechner ein kommt 1 raus.
Andererseits kann Delphi aber dies richtig rechnen: (9*2/2-2)ebenso wie dies (5+3+1) dies kann er wieder nicht berechnen: (5-3-1) da bekommt er 3 raus.
Kann mir das bitte jemand erklären? Danke!

Geändert von BBoy ( 8. Apr 2013 um 12:08 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Mathe mit Strings (die deutsche StringMatheLib ._. )

  Alt 8. Apr 2013, 13:10
Andererseits kann Delphi aber dies richtig rechnen: (9*2/2-2)ebenso wie dies (5+3+1) dies kann er wieder nicht berechnen: (5-3-1) da bekommt er 3 raus.
Kann mir das bitte jemand erklären? Danke!
Wer ist 'Delphi' und wieso prüfst Du das nicht selbst? Also breakpoint setzen, Einzelschritt ausführen usw.
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Mathe mit Strings (die deutsche StringMatheLib ._. )

  Alt 8. Apr 2013, 14:18
Beim einen Schritt stimmt es ab dem nächsten dann einfach nicht mehr. Das lässt sich nicht debuggen. Hat auch nicht unbedingt was mit dieser Lib zu tun, scheint eher ein grundsätzliches Problem zu sein. Vlt. antwortet noch jemand der das erklären kann.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 10 von 10   « Erste     8910   


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 08:51 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