![]() |
modular 0.0?
Hallo
Ich habe ein Problem ich habe normalerweise immer 3-tellig Zahlen in dem Programm das ich schrieb. Nur sobald ich eine 2-stellige Zahl einlese, da diese per Random erzeugt werden, dichtet er sich von selbst eine zahl dazu. ich konnte den Fehler schon begrenzen auf folgende Zeilen
Delphi-Quellcode:
function numberdissect(numbers: array of integer): Tallnumbers; // Aufsplitten der Nummern array Allnumbers besteht aus 27 stellen 0-26 var safer: integer; counter, resultmerker: integer; onenumber: array[0..2] of integer; // Für eine 3 Stellige zahl die er abspeichern soll begin resultmerker := 0; for counter := low(numbers) to high(numbers) do begin safer := 2; while numbers[counter] <> 0 do begin ShowMessage ('Wert ist falsch'); onenumber[safer] := numbers[counter] mod 10; numbers[counter] := numbers[counter] div 10; dec(safer); end; for safer := 0 to 2 do begin Result[resultmerker] := onenumber[safer]; // speichern der gesplittenen zahl in einzelne werte von 0-9 inc(resultmerker); end; end; end; Als Beispiel: Ich habe die Zahlen 623 + 33 = 656 dann schreibt er in die freie Stelle wo eigentliche ne null stehen sollte eine 6 rein uns dort steht dann bei der Ausgabe folgendes 623+633 = 656 das kommt aber nicht mit dem Ergebnis ein also das er die hier Rot makierte Zahl nimmt weiß ich schon |
AW: modular 0.0?
Was soll die Funktion eigentlich machen?
|
AW: modular 0.0?
ich habe 9 zahlen die 3 stellig sind alle diese 9 zahlen haben insgesamt 27 einzelzahlen sprich 123 = 1|2|3.
das splittet die so auf und das macht die auch nur wenn ich ne zahl habe die 2 stellen hat soll er null reinschreiben was er aber nicht tut. |
AW: modular 0.0?
Warum verhinderst du nicht einfach die Speicherung von Zahlen, welche nicht 3 stellig sind? Bzw. erweiterst diese.
|
AW: modular 0.0?
er soll auch 2 stellige oder 1 stellige speichern nur ich weiß nicht wie ich ihm sagen kann das er auffüllen soll bzw weiß es schon aber weiß nicht wo ich das einsätze
|
AW: modular 0.0?
Wie willst Du den auffüllen: 63 -> 063 oder 630?
|
AW: modular 0.0?
also sinnvollerweise 063
|
AW: modular 0.0?
In deinem Code ist aber 6 die erste Ziffer der 3 stelligen Zahl.
|
AW: modular 0.0?
meinst du die rote 6 weil das wäre der falsche also die 633+33 soll nachher stehen wenn das so richtig ist 633+033
also er braucht nur die 33 auffüllen |
AW: modular 0.0?
Zitat:
* entweder du initialisiert voher gefälligst diese Werte (alles mit 0 füllen) * oder du mußt die nichtbelegten Werte nachher noch mit 0 füllen * oder du lässt immer alle gewünschten Dezimalstellen durchrechnen Und nun rate auch mal was passiert, wenn da eine 4-stellige oder noch größere oder vielleicht sogar negative Zahl drin steht? Du solltest dringend bei deinen Programmen immer die Bereichs- und vielleicht sogar die Überlaufprüfung aktivieren. (z.B.
Delphi-Quellcode:
an den Anfang aller deiner eigenen Units)
{$R+}
|
AW: modular 0.0?
um zurück zukommen auf dieses Thema noch mal, kann mir bitte einer einen schnipsel programmcode für die Lösung zeigen, weil das mit dem null auffüllen bekomm ich einfach nicht hin und nein die zahlen werden nicht negativ und auch nicht 4 stellig das ist des weiterem im Programm abgefangen, dass geht nur darum das wenn ich ne 33 darin stehen habe, da 033 stehen habe oder nur 33
|
AW: modular 0.0?
Erklär doch nochmal genau, was Deine Funktion eigentlich tun soll. Mir erscheint der Code viel zu kompliziert, aber solange wir nicht wissen, was er eigentlich bezwecken soll, kann man nur schlecht alternative Vorschläge machen.
|
AW: modular 0.0?
TE will wohl Zahlen splitten und wieder zusammensetzen. Scheint eine div mod Übungsaufgabe zu sein?
Ich habe die function auch nicht kapiert. Am besten du schreibst dir eine function die nur eine Zahl splittet. Und was auf alle Fälle schon mal fehlt:
Delphi-Quellcode:
for I := Low(Result) to High(Result) do Result[I] := 0; |
AW: modular 0.0?
Alternative, einfache Lösung:
Delphi-Quellcode:
Ich versteh aber den Sinn auch nicht. Ein Integer hat immer 32 Bit, die „unbenutzen“ Stellen sind automatisch mit 0 aufgefüllt. Natürlich im Binärsystem, aber damit rechnet ein Computer ja normalerweise auch.
if Zahl > 99 then
{ Drei- oder mehrstellig } else if Zahl > 9 then { Zweistellig } else { Einstellig } else { Null oder negativ } |
AW: modular 0.0?
.. sollte das Thema nicht mit
![]()
Delphi-Quellcode:
Grüße
showMessage(format('0 padded decimal = <%.3d>', [33]));
Klaus |
AW: modular 0.0?
Ich würde einfach mal das 'Result' vorher auf 0 setzen. Dann sollte da auch nichts dazugedichtet werden. Das gleiche würde ich noch mit 'onenumber' vor jeder While-Schleife machen, denn sonst steht dort ja das Ergebnis des vorherigen Durchlaufs drin.
Bisher macht die Funktion folgendes (numbers= (123,456) = > [1,2,3,4,5,6]) so wie ich das um diese Tageszeit verstanden habe. |
AW: modular 0.0?
Ja Dejan Vu deins hat geholfen jetzt wird aus 33 = 033 vielen dank
|
AW: modular 0.0?
Zitat:
Delphi-Quellcode:
Gruß
dummystr:=Format('%.3',[wert]);
for i:=1 to 3 do zahlarray[i-1]:=byte(dummystr[i]); K-H |
AW: modular 0.0?
Sofern ich überhaupt verstanden habe, was eigentlich erreicht werden soll: würde es nicht mit DIV und MOD ohne größere Verbiegungen auch gehen?
|
AW: modular 0.0?
Zitat:
|
AW: modular 0.0?
Zitat:
(ich finde bloß im Augenblick kein Beispiel) Gruß K-H |
AW: modular 0.0?
Unter Verbiegung verstehe ich z.B., Stringfunktionen wie Format auf eine Zahl anzuwenden ;). An die 100er-Stelle komme ich doch auch mit
Delphi-Quellcode:
Zahl div 100 mod 10
|
AW: modular 0.0?
Zitat:
Manchmal muß man halt darauf gestoßen werden. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz