AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Aufrechnen von Integer-Werten in ein neues Ergebnis
Thema durchsuchen
Ansicht
Themen-Optionen

Aufrechnen von Integer-Werten in ein neues Ergebnis

Ein Thema von EdAdvokat · begonnen am 1. Feb 2018 · letzter Beitrag vom 2. Feb 2018
Antwort Antwort
Seite 1 von 2  1 2      
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 19:07
ich möchte die Ergebnisse einer einfachen Additionen (FErgebnis:int32) in einem neuen Ergenis(FAufrechnung:int32) speichern
und ausgeben. Also Ergebnis von 11 + 9 soll zunächst mit 20 in FErgebnis angezeigt werden und dann will ich nochmals 6+6 addieren und das
Ergebnis von 12 soll zu den 20 dazuadditert werden und im Ergebnisoutput mit 32 erscheinen. Dies soll sooft addiert werden, wie
ich eine neue Summe bilde.
Irgenwie komme ich da nicht weiter. Sicher mache ich da nur einen einfachen Fehler.
anbei meine Versuche:
Logic:
Delphi-Quellcode:
type
  TAddition = class
  private
    FZahl1 : integer;
    FZahl2 : integer;
    FErgebnis: Integer;
    FAufrechnung: int32;
  public
    procedure Addition;
    procedure aufrechnen(fErgebnis:int32);
    property Zahl1: Integer read FZahl1 write FZahl1;
    property Zahl2: Integer read FZahl2 write FZahl2;
    property Ergebnis: Integer read FErgebnis;
    property Ergebnisaufrechnen : int32 read FAufrechnung ;
  end;

implementation

{ TAddition }

procedure TAddition.Addition;
begin
  FErgebnis:=FZahl1+FZahl2;
end;

procedure TAddition.aufrechnen(Fergebnis:int32);
begin
  FAufrechnung:= Faufrechnung + FErgebnis ;
end;

end.
nun die Form:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var Add : TAddition;
begin
  Add:=TAddition.Create;
  try
    Add.Zahl1 := StrToIntDef(edtZahl1.text,0);
    Add.Zahl2 := StrToIntDef(EdtZahl2.Text, 0);
    Add.Addition;
    LblErgebnis.Caption := IntToStr(Add.Ergebnis);
    Add.aufrechnen(add.Ergebnis);
    lblAufrechnung.caption:=inttostr(add.Ergebnisaufrechnen);
  finally
    FreeAndNil(Add);
  end;

end;
Norbert
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 19:42
Das Klassendesign und das aufwändige Zwischenspeichern in FErgebnis ist so per Aufgabenstellung vorgegeben?

Ansonsten sollte der Code ja schon funktionieren und für weitere Werte müsstest du den kompletten Block ja lediglich kopieren bzw. in einer Schleife aufrufen, oder wo genau liegt dein Problem?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 19:45
nichts ist vorgegeben. Das habe ich mir selbst so geschrieben. Es ist nur für mich allein eine Übung. Wohl doch zu kompliziert? Doch meine verschiedenen Versuche führten einfach nicht zum Ziel.
In beiden Ergebnissen erscheinet nur die gleiche Grundsumme. Ein Aufaddieren findet nicht statt.
Norbert

Geändert von EdAdvokat ( 1. Feb 2018 um 19:48 Uhr)
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 19:49
Zitat:
nichts ist vorgegeben. Das habe ich mir selbst so geschrieben. Es ist nur für mich allein eine Übung.
Dann ändere direkt mal int32 zu Integer Denn int32 ist nichts anderes als ein normaler Integer.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#5

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 19:57
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var Add : TAddition;
begin
  // Du erstellst eine Instanz von TAddition,
  Add:=TAddition.Create;
  try
    // übernimmst die erste Zahl aus der Eingabe,
    Add.Zahl1 := StrToIntDef(edtZahl1.text,0);
    // übernimmst die zweite Zahl aus der Eingabe,
    Add.Zahl2 := StrToIntDef(EdtZahl2.Text, 0);
    // addierst die beiden Zahlen,
    Add.Addition;
    // gibst das Ergebnis aus,
    LblErgebnis.Caption := IntToStr(Add.Ergebnis);
    // rechnest zu einer nicht initialisierten Summe dazu
    Add.aufrechnen(add.Ergebnis);
    // gibst diese aus
    lblAufrechnung.caption:=inttostr(add.Ergebnisaufrechnen);
  finally
    // und wirfts alles wieder weg.
    FreeAndNil(Add);
  end;
end;
Beim nächsten btn1Click geht es von vorne los.

Die dann erstellte Instanz von TAddition kennt natürlich das Ergebnis der vorherigen Aufrechnung in FAufrechnung nicht, da die vorherige Instanz ja verworfen wurde.

Du müsstest dann zumindest das Ergebnis der Aufrechnung wieder aus der Anzeige in die beim Klick erstellte Instanz übernehmen.

Oder Dir überlegen, ob es wirklich sinnvoll ist, TAddition vor jeder Addition neu zu erstellen und nach der Addition zu verwerfen, wenn Du das Ergebnis nachher noch weiterverarbeiten willst.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 20:01
Es ist nur für mich allein eine Übung
Wenn du willst, kann ich dir gerne beschreiben oder zeigen, wie ich so etwas umsetzen würde. Dazu müsste ich allerdings wissen, was genau deine Zielstellung ist?

Ein paar Punkte schonmal, die eigentlich allgemeingültig sind:
  • So etwas Simples wie Addition in einer Funktion bzw. sogar einer Methode zu kapseln, macht keinen Sinn. Das ist umständlicher, als einfach C := A + B direkt zu verwenden
  • Temporäre Zwischenergebnisse (RValues; in diesem Falle das Ergebnis der Addition A + B ) in einem Feld einer Klasse abzulegen ist eher unsinnig. Da du das Ergebnis vor dem Aufsummieren ja aber noch anzeigen willst (und somit um eine Zwischenspeicherung nicht umherkommst), würde ich hier schlicht und einfach eine lokale Variable verwenden.
    Gleiches gillt auch für das Vorherige Ablegen von Zahl1/2 in einem Feld der Klasse. Selbst wenn du Addition wirklich als extra Funktion modellieren willst, solltest du dafür den Prototyp (class) function Add(Value1, Value2: Integer): Integer; (static;) verwenden. Hier benötigst du weder Felder für die Parameter, noch für das Ergebnis (die Teile in Klammern sind Optimierungen; falls du damit nichts anfangen kannst, der Einfachheit halber erstmal ignorieren).
  • Eigentlich ist - ausschließlich basierend auf Dem, was ich hier sehe - die komplette Klasse nicht erforderlich und verkompliziert nur deinen Code. Sinnvoll wäre sie nur, wenn die Instanz über die Button Clicks hinaus beibehalten würdest (wie Delphi.Narium bereits vorschlägt) und dazu ggfls. noch die Logging Funktionalität kapselt (denn ansonsten kannst du statt der Klasse auch lediglich deine Aufsummierung als globale Variable deklarieren).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl ( 1. Feb 2018 um 20:05 Uhr)
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 20:09
Das Problem liegt im Parameter Name:
Delphi-Quellcode:
procedure TAddition.aufrechnen(Fergebnis:int32);
begin
  FAufrechnung:= Faufrechnung + FErgebnis ;
end;
Ändere diesen bitte z.B zu:
Delphi-Quellcode:
procedure TAddition.aufrechnen(Value:int32);
begin
  FAufrechnung:= Faufrechnung + Value ;

end;
Grund: Was soll denn addiert werden? Der Parameter oder die Variable der Instance?

War rot trotzdem abgeschickt
Fritz Westermann
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 20:10
Zitat:
nichts ist vorgegeben. Das habe ich mir selbst so geschrieben. Es ist nur für mich allein eine Übung.
Dann ändere direkt mal int32 zu Integer Denn int32 ist nichts anderes als ein normaler Integer.
An LTE5: Was ändert das? Und wie hilft es dem TE?
Fritz Westermann
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 20:34
Danke Delphi.Narium für Deine Hinweise. Im Stillen hatte ich selbst diese Vermutung, dass mit FreeAndNil tatsächlich die erste
Summe wieder ins Nirwana geht und ein "Aufaddieren" somit nicht klappt.
Mit dem btn1Click ist also alles futsch. Mit dieser Konstruktion ist es also nicht möglich, das Ergebnis der Summenbildung in die neue
Instanz zu überführen.
Zitat:
Du müsstest dann zumindest das Ergebnis der Aufrechnung wieder aus der Anzeige in die beim Klick erstellte Instanz übernehmen.
Wie sollte dies geschehen?
Es ist doch wohl so, dass ich das ganze völlig neu umschreiben sollte oder?
Fritzew, vielen Dank für den Hinweis, doch auch so geht es nicht, denn es ist wohl tatsächlich so wie es Delphi.Narium geschrieben hat, dass das Ergebnis er ersten Addition mit dem btnClick in den Datenhimmel geschickt wurde und für ein neuerliches Aufrechnen somit nicht mehr zur Verfügung steht. Habe ich das so richtig verstanden?
Die Hinweise von Zacherl muss ich mir nochmals gründlich durchdenken, denn mit (class) Function habe ich mich lediglich theoretisch beschäftigt mit der mühseeligen Übersetzung von Marco Cantù, Object Pascal Handbook.
Die ganze Aktion dient wirklich nur meinem eigenen Verständnis für die Problematik. (ich wollte die Anzahl von Stücken die gedachter Maßen verkauft wurden addieren und dann die Gesamtzahl der Stücke und die Gesamtsumme des Erlöses ausgeben)
Erst einmal glaube ich, nicht auf dem richtigen Weg zu sein mit meinem Versuch.
Norbert
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#10

AW: Aufrechnen von Integer-Werten in ein neues Ergebnis

  Alt 1. Feb 2018, 20:47
Wenn Du Zahl1 und Zahl2 aus 'nem Edit übernehmen kannst, kannst Du doch wohl auch Aufrechnung aus der Caption des Labels übernehmen.

Add.Zahl1 := StrToIntDef(edtZahl1.text,0);

angepasst für die Aufrechnung

Add.Ergebnisaufrechnen := StrToIntDef(lblAufrechnung.caption,0);

Und nein, die Lösung ist weder optimal noch irgendwie objektorientiert.

In dem Fall ist eine eigene Klasse für die Addition und die Aufrechnung überflüssig.

Überleg Dir bitte nochmal, was Du genau erreichen willst und ob es nicht eventuell sinnvoller ist, die Instanz von TAddition im Create des Formulares zu erstellen und beim Schließen des Formulares wieder freizugeben.
Dann bleiben die Zwischenergebnisse erhalten und die Klasse ließe sich auch um weitere Berechnungsmodalitäten erweitern. Die Anzeigemöglichkeiten im Formular müssen dann nicht als Zwischenspeicher für die Datenhaltung dienen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:10 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