Modul:Mathematikunterricht/ Vorlage:Bruch in Blockdarstellung

Aus Wikibooks

Informationen zu dieser Dokumentation
Modul Mathematikunterricht

Modulbeschreibung

Modul zur Darstellung von Brüchen als farbigen Teil eines Rechteck-Rasters (Schokolade) für die Vorlage Mathematikunterricht/ Vorlage:Bruch in Blockdarstellung. Die Vorlage benutzt die Funktion blockdarstellungWrapper.

Beispiel Vorlagenbenutzung für den Bruch 18/8:

{{:Mathematikunterricht/ Vorlage:Bruch in Blockdarstellung |18 |8 |zeilen= 2
|style1= background: orange |styleRest= background: greenyellow
|steinhöhe= 2em |steinbreite= 3em}}

Ergebnis:



Parameter:

  • 1, 2 für Zähler, Nenner
  • zeilen: 1 oder 2.. Zeilen hoch
  • richtung Ausmalrichtung vlnr (links nach rechts, Standardwert) oder vonu
  • style1, styleRest für die Farbe.., styleDiv
  • blockhöhe, blockbreite

Funktionen

blockdarstellung

Hauptfunktion

blockdarstellungWrapper

Wrapperfunktion, kann aus der Vorlage ohne Parameter aufgerufen werden


Information


--- Modul zur Darstellung von Brüchen als farbigen Teil eines Rechteck-Rasters
-- (Schokolade) für die Vorlage [[Mathematikunterricht/ Vorlage:Bruch in Blockdarstellung]].
-- Die Vorlage benutzt die Funktion <code>blockdarstellungWrapper</code>.<br><br>
-- Beispiel Vorlagenbenutzung für den Bruch 18/8:<br>
--  {<nowiki/>{:Mathematikunterricht/ Vorlage:Bruch in Blockdarstellung |18 |8 |zeilen= 2
--  |style1= background: orange |styleRest= background: greenyellow 
--  |steinhöhe= 2em |steinbreite= 3em}}
-- Ergebnis:<br>
-- {{:Mathematikunterricht/ Vorlage:Bruch in Blockdarstellung |18 |8 |zeilen= 2 
-- |style1= background: orange |styleRest= background: greenyellow |steinhöhe= 2em |steinbreite= 3em}}<br>
-- <br>
-- Parameter: 
-- * <code>1</code>, <code>2</code> für Zähler, Nenner
-- * <code>zeilen</code>: 1 oder 2.. Zeilen hoch
-- * <code>richtung</code> Ausmalrichtung <code>vlnr</code> (links nach rechts, Standardwert) oder <code>vonu</code> 
-- * <code>style1</code>, <code>styleRest</code> für die Farbe.., <code>styleDiv</code> 
-- * <code>blockhöhe</code>, <code>blockbreite</code>
local p = {}

function paint(x, rows, cols, direction)
	direction= direction or "vlnr"
	cells= {}; n= 1
	if direction=="vlnr" then
		for i= 1, cols do
			for j= 1, rows do
				if n<=x then 
					cells[#cells+1]= (j-1)*cols+i
					n= n+1
				end
			end
		end
	else --top to bottom
		for i= 1, rows do
			for j= 1, cols do
				if n<=x then 
					cells[#cells+1]= (i-1)*cols+j
					n= n+1
				end
			end
		end
	end
	--mw.addWarning("table.concat(cells) "..mw.dumpObject(cells).." "..table.concat(cells, ","))
	return table.concat(cells, ",")
end

--- Hauptfunktion
function p.blockdarstellung(frame)
	nom= assert(tonumber(frame.args[1]), "nonumber arg1-2 "..mw.dumpObject(frame.args))
	denom= assert(tonumber(frame.args[2]), "nonumber arg1-2 "..mw.dumpObject(frame.args))
	zeilen= assert(tonumber(frame.args["zeilen"] or 1), "nonumber zeilen "..mw.dumpObject(frame.args))
	assert(denom%zeilen==0, "nenner/zeilen nicht ganzzahlig "..mw.dumpObject(frame.args))
	spalten= denom/zeilen
	direction= frame.args["richtung"] or "vlnr"
	mosaikArgs= {
		["style1"]= frame.args["style1"], 
		["styleRest"]= frame.args["styleRest"], 
		["steinhöhe"]= frame.args["blockhöhe"], 
		["steinbreite"]= frame.args["blockbreite"]}
	styleDiv= frame.args["styleDiv"] or ""
	
	out= ""
	for i= 1, math.ceil(nom/denom) do
		mosaikArgs[1]= spalten
		mosaikArgs[2]= zeilen
		mosaikArgs["liste1"]= paint(nom-denom*(i-1), zeilen, spalten, direction)
		--mw.addWarning("mosaikArgs"..mw.dumpObject(mosaikArgs))
		
		out= out 
			..'<div style="display:inline-block; margin:1mm 3mm 1mm 1mm;'
				..styleDiv..'">'
			..frame:expandTemplate {title = 'Mosaik', args = mosaikArgs}
			..'</div>'
	end
	return out
end

--- Wrapperfunktion, kann aus der Vorlage ohne Parameter aufgerufen werden
function p.blockdarstellungWrapper(frame)
	return p.blockdarstellung(frame:getParent())
end

return p