Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Memoeinträge addieren
GBrainI - Mi 10.03.10 11:18
Titel: Memoeinträge addieren
Hallo,
ich habe folgendes Problem :
Ich habe mehrere Zahlen in einem Memofeld untereinander und möchte das diese addiert werden. Jedoch kann sich die anzahl der einträge ändern also es kann sein, dass nur 2zahlen drin stehen oder auch 10. wie mache ich das ?
Kann mir jemand helfen? ich habs so probiert :
Delphi-Quelltext
1:
| Label2.caption := Inttostr(strtoint(memo1.lines[0]) + strtoint(memo1.lines[-1])); |
aber dann bekomme ich bloß ne fehlermeldung, "is not a ... " ist euch sicherlich bekannt.
was kann ich tun ?
Danke im Voraus
Moderiert von
Narses: Delphi-Tags hinzugefügt
JoelH - Mi 10.03.10 11:28
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var i, e : Integer; begin e := 0; for i := 0 to memo1.Lines.Count - 1 do begin try e := e + StrToInt(memo1.Lines.Strings[i]); except showmessage('In Zeile '+IntToStr(i+1)+' steht keine Integerzahl!'); end; end; label1.Caption := IntToStr(e); end; |
ub60 - Mi 10.03.10 11:30
Die beiden grundlegenden Ideen hast Du ja schon mal (Anzahl der Zeilen und StrToInt).
Jetzt musst Du nur noch eine Schleife drum basteln. Hier mal der Pseudo-Quelltext
Quelltext
1: 2: 3: 4: 5: 6:
| Summe gleich 0 Anzahl ermitteln von 0 bis Anzahl-1 Wert ermitteln Wert addieren Ausgabe |
ub60
edit: zu langsam :(
und ich wollte eigentlich zum Denken anregen, keine Lösung präsentieren :)
GBrainI - Do 11.03.10 17:01
Super Sache vielen dank, jedoch komm ich direkt mit dem nächsten problem =) wie kann ich den Kommazahlen wie zum beispiel 12,5 + 3,5 welche sich auch in dem selben Memofeld befinden ausrechnen
hab Probiert die StrtoINT einträge durch StrtoFloat zu ändern un statt Integer,Double eingegeben jedoch bringt das nix.
Danke im Voraus
DonManfred - Do 11.03.10 17:10
mach aus 12,5 12.5 dann klappt das auch mit strtofloat
GBrainI - Do 11.03.10 17:18
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button2Click(Sender: TObject); var i, e : Double; begin e := 0; for i := 0 to memo1.Lines.Count - 1 do begin try e := e + StrToFloat(memo1.Lines.Strings[i]); except showmessage('In Zeile '+FloatToStr(i+1)+' steht keine Integerzahl!'); end; end; label1.Caption := FloatToStr(e); end; |
[Error] Unit1.pas(32): For loop control variable must have ordinal type
[Error] Unit1.pas(35): Incompatible types: 'Integer' and 'Double'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
was nun ? :-(
Moderiert von
Narses: Delphi-Tags hinzugefügt
SvenAbeln - Do 11.03.10 17:20
GBrainI hat folgendes geschrieben : |
| was nun ? :-( |
i muß ein Integer sein.
GBrainI - Do 11.03.10 17:23
hmm das minimiert definitiv die fehlernazahl jedoch kommt nun das hier
[Error] Unit1.pas(35): Incompatible types: 'Integer' and 'Extended' wat nu?
in dieser zeile ...
Delphi-Quelltext
1:
| e := e + StrToFloat(memo1.Lines.Strings[i]); |
Moderiert von
Narses: Delphi-Tags hinzugefügt
SvenAbeln - Do 11.03.10 17:27
Welchen Type hat den e bei dir?
AScomp - Do 11.03.10 20:01
Ggf. solltest du vorher den DecimalSeparator setzen.
Dann gibt's das Problem mit , und . auch nicht - vorausgesetzt, du sorgst für eine korrekte Dateneingabe im Programm. ;)
jaenicke - Fr 12.03.10 08:35
GBrainI hat folgendes geschrieben : |
hmm das minimiert definitiv die fehlernazahl jedoch kommt nun das hier
[Error] Unit1.pas(35): Incompatible types: 'Integer' and 'Extended' wat nu? |
Ich rate mal... ;-)
Nur i soll ein Integer sein, das e muss schon ein double bleiben. Das sieht so aus als hättest du einfach bei beiden wieder den Typ Integer benutzt statt die beiden Deklarationen einzeln zu schreiben und den nur bei i zu ändern...
GBrainI - Fr 12.03.10 11:48
Das Leben kann so schön sein =D
Danke sehr =)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!