Pascal: egy string karaktereit szeretném számjegyekre bontani, kis segítséget kérhetek? (bővebben lent)
Az "strtoint" és hasonlók nélkül szeretném megoldani, kizárólag osztogatással...
Kétjegyű számoknál szépen működik (az hogy fordítva írja ki, nem lényeg, mert azt meg tudom oldani), de háromjegyűeknél nem akar működni...
Számjegyenként van szükségem az adott számra és nem szeretném ha két számjegyűt kiírna.
Hiába teszek be bármilyen feltételt, nem jó.
Netán úgy kellene megoldani, hogy intervallummal megadom, hogy miként ossza le, ha 0..9, 10.. 99, stb intervallumba esik a szám?
Hogy a legegyszerűbb, hogy működjön?
Program szamjegy_bontas;
var
s : string;
i, szam, maradek : byte;
begin
ReadLn(s);
for i := 1 to Length (s) do
begin
szam := Ord(s[i]);
Repeat
maradek := szam mod 10;
if maradek > 10 then begin
maradek := maradek div 10;
writeln(maradek);
szam:=maradek;
end
else
writeln(maradek);
maradek:= szam div 10;
writeln(maradek);
until(maradek>0);
end;
end.
Korábban írt valaki egy ügyes megoldást, csak nem találom. A lényeg, hogy balról olvasod be a karaktereket és tárolod az értékét az eredmény változóban. Ha van második karakter, akkor az előző eredményt szorzod tízzel és hozzáadod az újat. Ezt addig csinálhatod, amíg vannak karakterek.
4567 ->
4
4*10 + 5 = 45
45*10 + 6 = 456
456*10 + 7 = 4567
Igen, így szeretném. Viszont a s[i] nem egy karakterre hivatkozik, hanem egy ascii kódra.
szam := Ord(s[i]);
Kapok egy ASCII kódot, a beírt karakter ASCII kódját, amit nem tudok (balról jobbra" olvasni, mert egyetlen egységként van kezelve, mint bármilyen két vagy háromjegyű szám és ezt csak "mod" és "div" műveletekkel tudom felbontani számjegyekre.
Tehát ha mondjuk a programnak adok egy "a" betűt, akkkor a s[i] amire hivatkozom egy "97" ASCII kóddal lesz egyenlő.
Vesszek meg nem értelek mit akarsz. Ez:
program Project1;
var szamtomb : array of byte;
i, n, k : integer;
begin
n := 123456789;
i := -1;
while n > 0 do
begin
Inc(i);
SetLength( szamtomb, i + 1);
szamtomb[i] := n mod 10;
n := n div 10;
end;
for k := 0 to i do WriteLn(szamtomb[k]);
ReadLn;
SetLength( szamtomb, 0);
end.
szétdobja neked egy tömbbe a számokat, de mit akarsz a karakterekkel ?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!