Witam.
Wklejając kod do konsoli z tej strony:
Zapis słowny liczby
Po naciśnięciu "Run" wyświetla mi się puste okno.Dopiero zaczynam proszę o odpowiedź.
Problemem tego początkującego jest nadanie wątkowi bzdurnego tytułu. Tu każdy ma problem :]
REGULAMIN: Temat wątku powinien w sposób sensowny i w miarę wyczerpujący opisywać Twój problem. Tak, aby potem wyszukiwarki nie miały kłopotu ze znalezieniem szukanego tekstu. Wątki opatrzone jednowyrazowym tematem, lub zdaniem nie opisującym zupełnie problemu, będą usuwane.
PRZECZYTAJ: Jak tytułować wątki na forum?
Jeden temat "anonimowy" wylądował już w koszu...
- Wymyśl i podaj jaki ma być ten sensowny temat wątku
- Problemy początkującego do działu newbie z tagiem 'delphi'
Funkcja pod tym adresem jest niekompletna, bo nie tłumaczy liczb poniżej 1000. Poza tym najpewniej nie zatrzymujesz konsoli przez Readln więc Ci ona znika. A w przypadku tej funkcji należy podstawić jej wynik do zmiennej i dopiero ją wyświetlić, bo inaczej faktycznie nic nie mamy na ekranie. Podejrzewam, że to przez kombinacje z Trimem, ale nie chciało mi się debugować. Dodatkowo dododałem prostą funkcję OEMWrite aby konwertowało prawidłowo polskie znaki diakrytyczne (potrzebna do tego jest funkcja AnsiToOEM z modułu Windows, który został dodany do sekcji uses). I następnym razem lepiej tytułuj swój wątek oraz poczytaj kompendium na stronie 4p, to nie będziesz miał problemów z podstawami.
program Project1;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils;
function OEMWrite(AnsiText : string) : string;
var
S, D : PChar;
begin
Result := '';
if AnsiText <> '' then
begin
S := PChar(AnsiText);
GetMem(D, Length(S));
AnsiToOEM(S, D);
Result := D;
end;
end;
function LiczbaSlownie(Liczba : Int64) : string;
function Slow(t : string) : string;
const
{Nazwy grupy jedności}
J : array['0'..'9'] of string[20] =
('', ' jeden', ' dwa', ' trzy', ' cztery', ' pięć', ' sześć', ' siedem', ' osiem', ' dziewięć');
{Nazwy liczb z zakresu 10..19. Wyjątki w języku polskim}
N : array[10..19] of string[20] =
(' dziesięć', ' jedenaście', ' dwanaście', ' trzynaście', ' czternaście', ' piętnaście', ' szesnaście', ' siedemnaście', ' osiemnaście', ' dziewiętnaście');
{Nazwy grupy dziesiątek}
D : array['0'..'9'] of string[20] =
('', '', ' dwadzieścia', ' trzydzieści', ' czterdzieści', ' pięćdziesiąt', ' sześćdziesiąt', ' siedemdziesiąt', ' osiemdziesiąt', ' dziewięćdziesiąt');
{Nazwy grupy setek}
S : array['0'..'9'] of string[20] =
('', ' sto', ' dwieście', ' trzysta', ' czterysta', ' pięćset', ' sześćset', ' siedemset', ' osiemset', ' dziewięćset');
begin
Result := '';
case t[2] of
'1' : Result := S[t[1]] + N[StrToInt(t[2] + t[3])];
'0', '2'..'9' : Result := S[t[1]] + D[t[2]] + J[t[3]];
end;
end;
const
{Nazwy grup}
G : array[0..7, 1..3] of string[20] =
(('', '', ''),
(' tysiąc', ' tysiące', ' tysięcy'),
(' milion', ' miliony', ' milionów'),
(' miliard', ' miliardy', ' miliardów'),
(' bilion', ' biliony', ' bilionów'),
(' biliard', ' biliardy', ' biliardów'),
(' trylion', ' tryliony', ' trylionów'),
(' tryliard', ' tryliardy', ' tryliardów'));
var
sl, t1, t : string;
i, k, dl : Byte;
begin
t := IntToStr(Liczba);
dl := Length(t);
for i := 0 to (dl - 1) div 3 do
begin
t1 := Copy(t, Length(t) - 2, 3);
Delete(t, Length(t) - 2, 3);
{Wyrównanie do 3 cyfr}
for k := 1 to 3 - Length(t1) do
t1 := '0' + t1;
{Jeżeli wszystkie 3 to 0 to nie ma po co dodawać nazwy grupy}
if t1 = '000' then
Continue;
{Przypadek liczby pojedynczej}
if (t1 = '001') then
sl := Slow(t1) + G[i, 1] + sl
else
{Liczby kończące się na 2, 3 lub 4 oprócz 12, 13 i 14. Ach ten język polski}
if (t1[3] in ['2'..'4']) and (t1[2] <> '1') then
sl := Slow(t1) + G[i, 2] + sl
else
sl := Slow(t1) + G[i, 3] + sl;
end;
Result := Trim(sl);
end;
var
S : string;
begin
S := OEMWrite(LiczbaSlownie(58));
Writeln(S);
Readln;
end.