Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   modular 0.0? (https://www.delphipraxis.net/182373-modular-0-0-a.html)

Kuehter 20. Okt 2014 10:36

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

mkinzler 20. Okt 2014 10:42

AW: modular 0.0?
 
Was soll die Funktion eigentlich machen?

Kuehter 20. Okt 2014 10:44

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.

mkinzler 20. Okt 2014 10:46

AW: modular 0.0?
 
Warum verhinderst du nicht einfach die Speicherung von Zahlen, welche nicht 3 stellig sind? Bzw. erweiterst diese.

Kuehter 20. Okt 2014 10:48

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

mkinzler 20. Okt 2014 10:56

AW: modular 0.0?
 
Wie willst Du den auffüllen: 63 -> 063 oder 630?

Kuehter 20. Okt 2014 11:01

AW: modular 0.0?
 
also sinnvollerweise 063

mkinzler 20. Okt 2014 11:02

AW: modular 0.0?
 
In deinem Code ist aber 6 die erste Ziffer der 3 stelligen Zahl.

Kuehter 20. Okt 2014 11:04

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

himitsu 20. Okt 2014 11:42

AW: modular 0.0?
 
Zitat:

Delphi-Quellcode:
while numbers[counter] <> 0 do

Du brichts ab, sobald dort 0 drin steht, also sind dann alle höheren Dezimalstellen natürlich undefiniert.
* 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:
{$R+}
an den Anfang aller deiner eigenen Units)

Kuehter 23. Okt 2014 15:27

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

DeddyH 23. Okt 2014 15:49

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.

Bjoerk 23. Okt 2014 16:01

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;

Namenloser 23. Okt 2014 16:52

AW: modular 0.0?
 
Alternative, einfache Lösung:
Delphi-Quellcode:
if Zahl > 99 then
  { Drei- oder mehrstellig }
else if Zahl > 9 then
  { Zweistellig }
else
  { Einstellig }
else
  { Null oder negativ }
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.

Klaus01 23. Okt 2014 20:45

AW: modular 0.0?
 
.. sollte das Thema nicht mit format zu erschlagen sein?

Delphi-Quellcode:
showMessage(format('0 padded decimal = <%.3d>', [33]));
Grüße
Klaus

Dejan Vu 24. Okt 2014 01:42

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.

Kuehter 24. Okt 2014 06:17

AW: modular 0.0?
 
Ja Dejan Vu deins hat geholfen jetzt wird aus 33 = 033 vielen dank

p80286 24. Okt 2014 10:10

AW: modular 0.0?
 
Zitat:

Zitat von Klaus01 (Beitrag 1277239)
.. sollte das Thema nicht mit format zu erschlagen sein?

Delphi-Quellcode:
showMessage(format('0 padded decimal = <%.3d>', [33]));
Grüße
Klaus

Nicht ganz, er möchte für jede Dezimalstelle einen Numerischen Wert haben, wobei mir der Vorschlag gefällt
Delphi-Quellcode:
dummystr:=Format('%.3',[wert]);
for i:=1 to 3 do
 zahlarray[i-1]:=byte(dummystr[i]);
Gruß
K-H

DeddyH 24. Okt 2014 10:16

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?

himitsu 24. Okt 2014 10:18

AW: modular 0.0?
 
Zitat:

Zitat von DeddyH (Beitrag 1277274)
Sofern ich überhaupt verstanden habe, was eigentlich erreicht werden soll: würde es nicht mit DIV und MOD ohne größere Verbiegungen auch gehen?

Ja, wie ich bereits erwähnte -> einfach immer alle Stellen durchrechnen und nicht gleich bei 0 abbrechen.

p80286 24. Okt 2014 11:03

AW: modular 0.0?
 
Zitat:

Zitat von DeddyH (Beitrag 1277274)
Sofern ich überhaupt verstanden habe, was eigentlich erreicht werden soll: würde es nicht mit DIV und MOD ohne größere Verbiegungen auch gehen?

Kommt darauf an was Du unter Verbiegung verstehst. In den Beispielen zur Modulo-Berechnung wurde/wird das jedenfalls immer so gemacht.
(ich finde bloß im Augenblick kein Beispiel)

Gruß
K-H

DeddyH 24. Okt 2014 11:08

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

p80286 24. Okt 2014 11:52

AW: modular 0.0?
 
Zitat:

Zitat von DeddyH (Beitrag 1277292)
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

:)Jede Jeck isch angers:)
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