Przejdź do zawartości

Moduł:Rozmieniarka

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [zobacz] [edytuj] [historia] [odśwież]

Użycie

[edytuj]

Opis parametrów

[edytuj]

Przykład

[edytuj]
-- Przykładowe użycie:
local amount = 123.45;
local limits = {
    [10] = 2, -- limit dla nominału 10
    [0.2] = 5, -- limit dla nominału 0.2
};
local result = calculateNominals(amount, limits);

local str="Kwota: "..amount.."\n";
str=str.."Nominały: \n";
for _, entry in ipairs(result) do
    str=str..entry.nominal.." x "..entry.count.."\n";
end;
return str;

Błędy

[edytuj]

Błędy należy zgłaszać na stronie Wikibooks:Kwestie techniczne.

Brak opisu.

Parametry szablonu

ParametrOpisTypStatus
Nie podano parametrów

Zobacz też

[edytuj]


-- Funkcja 'calculateNominals' służy do jednoznacznego ustalania takiej konfiguracji nominałów, aby były one jak najgrubsze (tym samym wydajemy kwotę możliwie najmniejszą ilością monet i/lub banknotów).
local p = {}

function p.calculateNominals(frame)
    local amount = frame.args[1] and tonumber(mw.text.trim(frame.args[1])) or 0
    local limits = {
        [500]   = frame.args[2] and tonumber(mw.text.trim(frame.args[2])) or 0,  -- limit dla nominału 500 zł
        [200]   = frame.args[3] and tonumber(mw.text.trim(frame.args[3])) or 0,  -- limit dla nominału 200 zł 
        [100]   = frame.args[4] and tonumber(mw.text.trim(frame.args[4])) or 0,  -- limit dla nominału 100 zł
        [50]    = frame.args[5] and tonumber(mw.text.trim(frame.args[5])) or 0,  -- limit dla nominału  50 zł
        [20]    = frame.args[6] and tonumber(mw.text.trim(frame.args[6])) or 0,  -- limit dla nominału  20 zł
        [10]    = frame.args[7] and tonumber(mw.text.trim(frame.args[7])) or 0,  -- limit dla nominału  10 zł
        [5]     = frame.args[8] and tonumber(mw.text.trim(frame.args[8])) or 0,  -- limit dla nominału   5 zł
        [2]     = frame.args[9] and tonumber(mw.text.trim(frame.args[9])) or 0,  -- limit dla nominału   2 zł
        [1]    = frame.args[10] and tonumber(mw.text.trim(frame.args[10])) or 0, -- limit dla nominału   1 zł
        [0.5]  = frame.args[11] and tonumber(mw.text.trim(frame.args[11])) or 0, -- limit dla nominału  50 gr
        [0.2]  = frame.args[12] and tonumber(mw.text.trim(frame.args[12])) or 0, -- limit dla nominału  20 gr
        [0.1]  = frame.args[13] and tonumber(mw.text.trim(frame.args[13])) or 0, -- limit dla nominału  10 gr
        [0.05] = frame.args[14] and tonumber(mw.text.trim(frame.args[14])) or 0, -- limit dla nominału   5 gr
        [0.02] = frame.args[15] and tonumber(mw.text.trim(frame.args[15])) or 0, -- limit dla nominału   2 gr
        [0.01] = frame.args[16] and tonumber(mw.text.trim(frame.args[16])) or 0 -- limit dla nominału   1 gr
    }

    local nominals = {500, 200, 100, 50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01}
    local result = {}

    for _, nominal in ipairs(nominals) do
        local count = math.floor(amount / nominal)

        if limits[nominal] ~= nil and type(limits[nominal]) == 'number' then
            count = math.min(count, limits[nominal])
        end

        if count > 0 then
            table.insert(result, {nominal = nominal, count = count})
            amount = amount - (nominal * count)
        end
    end
	
    local str="Kwota: "..amount..", ";
	str=str.."Nominały: ";
	local str2=nil;
	for _, entry in ipairs(result) do
    	str2=(str2 and (str2..", ") or "")..entry.nominal.." x "..entry.count;
	end;
	return str..(str2 or "brak")..".";
end

return p