Avatar billede lunddata Nybegynder
29. januar 2008 - 23:09 Der er 16 kommentarer og
1 løsning

Generering af tal til A4-papir

Jeg er ny i denne kategori.
Jeg springer ud i det og vil nu prøve mig frem i (D)HTML.
Jeg har brug for et script, således at jeg via web indtaster:
1. Antal opgaver
2. Mindste variabel
3. Største variabel
4. Antal decimaler i mindste variabel
5. Antal decimaler i største variabel 
(4 og 5 kan vel laves i "combobokse"?).

Der skal så genereres opgaver ud fra ovenstående betingelser passende i et lay-out til A4-papir som skal kunne printes ud. Hvis der er valgt få opgaver må skrifttypen gerne være stor og omvendt mindre ved mange opgaver.
Det skal være tilfældige (randomize) tal i intervallet givet via web-indtastning i punkterne ovenfor.

Eksempler:
3 + 5 ;  6 + 7,5  osv., men blot hvor tallene er stillet op under hinanden.
Facitliste skal også kunne printes ud.

Det var vist en ordentlig mundfuld, men jeg sætter MEGET gerne 200 point i spil for hjælp.
Avatar billede roenving Novice
30. januar 2008 - 23:03 #1
Det der med at få det til at passe med et A4-layout er selvfølgelig en opgave, men i hvilken sammenhæng ønsker du at lave det ?-)
Avatar billede lunddata Nybegynder
30. januar 2008 - 23:19 #2
Det er undervisningsmateriale.
Hvis materialet er til nogle af de første årgange i skolen skal en A4-side ikke indeholde så mange opgaver som til de ældste elever. Ligeledes vil skriftstørrelsen og lignende være andeledes.
Det er selvfølgelig ikke et must at dette lader sig lave, men kunne jeg bare få nogle fif omkring det at brugeren indtaster nogle værdier som så genereres til opgaver til udprint på A4-papir, ja så ville jeg blive frygtelig glad. Til nærmere forklaring omkring ønsket vil linket fortælle princippet som vist i et af mine regneark (arket skal åbnes med makroer for at virke.)
http://www.sysform.dk/Opgavertilprint/Addition.xls
Avatar billede roenving Novice
30. januar 2008 - 23:35 #3
Har du ikke en backbone, der er serverbaseret, for det vil være meget indlysende, at bruge en sådan baggrund ?-)

-- det kan uden egentlige problemer sagtens genereres af noget javascript, men det ligner klart en server-opgave !o]
Avatar billede olebole Juniormester
31. januar 2008 - 00:35 #4
<ole>

Hvis de to tal skal stå over hinanden, ville det så ikke være logisk at fylde op med nuller bag kommaet, så begge tal ender med lige mange decimaler?

/mvh
</bole>
Avatar billede olebole Juniormester
31. januar 2008 - 00:56 #5
Du kan prøve dette forsøg på en løsning. I din CSS bør du sætte display til 'none' på div'et 'generator' ved print, så det kun er opgaverne, der printes. Dokumentets URL vil fremgå nederst på siden, men den kan du vist fjerne i printeropsætningen.

Anyway ... jeg må i seng. Hvis du ikke selv kan finde ud af CSS'en, er der sikkert en anden, der kan hjælpe  :)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Regneopgave Generator</title>
<style type="text/css">
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}
#generator {
    padding: 40px;
}
#container {
    width: 20cm;
    height: 37cm;
    padding: 40px;
    margin: 0 auto;
    overflow: hidden;
}
.quest {
    width: 150px;
    margin: 30px;
    float: left;
}
.quest div {
    padding-right: 12px;
    font: bold 24px monospace;
    text-align: right;
    letter-spacing: 0.1em;
}
.quest div.under {
    border-bottom: 1px solid #000;
    background: url(plus.gif) no-repeat;
}
.quest div.dblUnder {
    border-bottom: 4px double #000;
}
.clear {
    height: 1px;
    clear: both;
    overflow: hidden;
}
</style>
<script type="text/JavaScript">
var d=document;
function gE(id){return d.getElementById(id)};
function cE(t){return d.createElement(t)};
function cT(s){return d.createTextNode(s)};
function gR(i){return Math.floor(Math.random()*i)};

function generate() {
    var nNumQ = gE("numOfQuest").value*1,
    nMinI = gE("minInt").value*1,
    nMaxI = gE("maxInt").value*1,
    nDec = gE("dec").value*1
   
    oPar = gE("container");
    if (!oPar) {
        var oPar = cE("div");
        oPar.setAttribute("id", "container");
    }
    else {
        oPar.parentNode.removeChild(oPar);
        while (oPar.firstChild) oPar.removeChild(oPar.firstChild);
    }
    for (var i=0,j=nNumQ; i<j; i++) {
        nTmpA = nMinI + Math.random()*(nMaxI-nMinI);
        nTmpB = nMinI + Math.random()*(nMaxI-nMinI);
        if (nTmpA>nTmpB) {
            nTmpA = String(nTmpA.toFixed(nDec)).split(".");
            nTmpB = String(nTmpB.toFixed(nDec)).split(".");
        } else {
            nTmpA = String(nTmpA.toFixed(nDec)).split(".");
            nTmpB = String(nTmpB.toFixed(nDec)).split(".");
        }
        if (nDec>0) {
            if (nTmpA.length<1) nTmpA[1] = "0";
            if (nTmpB.length<1) nTmpB[1] = "0";
            while (nTmpA[1].length<nDec) nTmpA[1] += "0";
            while (nTmpB[1].length<nDec) nTmpB[1] += "0";
        }

        o = cE("p");
        oPar.appendChild(o);
        o.className = "quest";
        oo = cE("div");
        o.appendChild(oo);
        oo.appendChild(cT(nTmpA));
        oo = cE("div");
        o.appendChild(oo);
        oo.appendChild(cT(nTmpB));
        oo.className = "under";
        oo = cE("div");
        o.appendChild(oo);
        oo.appendChild(cT("\u00a0"));
        oo.className = "dblUnder";
    }
    o = cE("div");
    oPar.appendChild(o);
    o.className = "clear";
    d.body.appendChild(oPar);
}
</script>
</head>
<body>

<div id="generator">

<p>Antal opgaver:<br>
    <input id="numOfQuest" type="text" value="27"></p>

<p>Mindste variabel:<br>
    <input id="minInt" type="text" value="2"></p>

<p>Største variabel:<br>
    <input id="maxInt" type="text" value="20"></p>

<p>Antal decimaler:<br>
    <select id="dec">
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2" selected>2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select></p>

<p><button onclick="generate()">Generer</button></p>

</div>

</body>
</html>
Avatar billede olebole Juniormester
31. januar 2008 - 00:59 #6
PS: Lav en lille gif med et plus og kald den 'plus.gif' - og sæt printeren til at udskrive baggrundsbilleder
Avatar billede lunddata Nybegynder
31. januar 2008 - 08:08 #7
Ved ikke lige hvordan backbone virker
Det ser rigtig godt ud. Jeg vender lige tilbage, når jeg får en ledig stund fra arbejdet.
Avatar billede lunddata Nybegynder
31. januar 2008 - 13:57 #8
olebole: Kanon godt!!! Det er lige hvad jeg kan bygge på.
Jeg har meget at lære.
Men hvordan jeg lige får listen med facit og udskriftdelen med er stadigvæk et spørgsmål for mig. Udskriftdelen formoder jeg, at jeg kan blive klogere ved at søge her under Eksperten
Avatar billede lunddata Nybegynder
31. januar 2008 - 15:26 #9
ØV! Søgefunktionerne er nede her i Eksperten.
Avatar billede olebole Juniormester
01. februar 2008 - 00:25 #10
Ny version med div. rettelser:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Regneopgave Generator</title>
<style type="text/css">
html, body {
    height: 100%;
    margin: 0;
    padding: 0;
}
#generator {
    padding: 40px;
}
.container { /* Begge containere */
    width: 20cm;
    height: 35cm;
    padding: 40px;
    margin: 0 auto;
    overflow: hidden;
}
#containerRes { /* Facit containeren */
   
}
.quest { /* Blok, der indeholder et regnestykke */
    width: 150px;
    margin: 30px;
    float: left;
}
.quest div { /* De tre linjer i stykket */
    padding-right: 12px;
    font: bold 24px monospace;
    text-align: right;
    letter-spacing: 0.1em;
}
.quest div.under { /* Den anden linjen i stykket */
    border-bottom: 1px solid #000;
    background: url(plus.gif) no-repeat;
}
.quest div.dblUnder { /* Resultat linjen i stykket */
    border-bottom: 4px double #000;
}
.clear {
    height: 1px;
    clear: both;
    overflow: hidden;
}
</style>
<script type="text/JavaScript">
var d=document;
function gE(id){return d.getElementById(id)};
function cE(t){return d.createElement(t)};
function cT(s){return d.createTextNode(s)};
function gR(i){return Math.floor(Math.random()*i)};

function generate() {
    var nNumQ = gE("numOfQuest").value*1,
    nMinI = gE("minInt").value*1,
    nMaxI = gE("maxInt").value*1,
    nDec = gE("dec").value*1;
    var nTmpA, nTmpB, sRes;
    var oPar = gE("container"),
    oParRes = gE("containerRes");
    if (!oPar) {
        oPar = cE("div");
        oParRes = cE("div");
        oPar.setAttribute("id", "container");
        oParRes.setAttribute("id", "containerRes");
        oPar.className = "container";
        oParRes.className = "container";
    }
    else {
        oPar.parentNode.removeChild(oPar);
        while (oPar.firstChild) oPar.removeChild(oPar.firstChild);
        oParRes.parentNode.removeChild(oParRes);
        while (oParRes.firstChild) oParRes.removeChild(oParRes.firstChild);
    }
    for (var i=0,j=nNumQ; i<j; i++) {
        nTmpA = nMinI + Math.random()*(nMaxI-nMinI);
        nTmpB = nMinI + Math.random()*(nMaxI-nMinI);
        sRes = String((nTmpA + nTmpB).toFixed(nDec)).replace(".", ",");
        if (nTmpA>nTmpB) {
            nTmpA = String(nTmpA.toFixed(nDec)).split(".");
            nTmpB = String(nTmpB.toFixed(nDec)).split(".");
        } else {
            nTmpA = String(nTmpA.toFixed(nDec)).split(".");
            nTmpB = String(nTmpB.toFixed(nDec)).split(".");
        }
        if (nDec>0) {
            if (nTmpA.length<1) nTmpA[1] = "0";
            if (nTmpB.length<1) nTmpB[1] = "0";
            while (nTmpA[1].length<nDec) nTmpA[1] += "0";
            while (nTmpB[1].length<nDec) nTmpB[1] += "0";
        }

        var o = cE("p");
        oPar.appendChild(o);
        o.className = "quest";
        var oo = cE("div");
        o.appendChild(oo);
        oo.appendChild(cT(nTmpA));
        oo = cE("div");
        o.appendChild(oo);
        oo.appendChild(cT(nTmpB));
        oo.className = "under";
        oo = cE("div");
        o.appendChild(oo);
        oo.appendChild(cT("\u00a0"));
        oo.className = "dblUnder";
        oo = o.cloneNode(true);
        oParRes.appendChild(oo);
        oo.getElementsByTagName("div")[2].firstChild.nodeValue = sRes;
    }
    o = cE("div");
    oPar.appendChild(o);
    o.className = "clear";
    o.appendChild( cT("\u00a0") );
    oParRes.appendChild( o.cloneNode(true) );
    var oBody = d.getElementsByTagName("body")[0];
    oBody.appendChild(oPar);
    oBody.appendChild(oParRes);
}
</script>
</head>
<body>

<div id="generator">

<p>Antal opgaver:<br>
    <input id="numOfQuest" type="text" value="27"></p>

<p>Mindste variabel:<br>
    <input id="minInt" type="text" value="2"></p>

<p>Største variabel:<br>
    <input id="maxInt" type="text" value="20"></p>

<p>Antal decimaler:<br>
    <select id="dec">
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2" selected>2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select></p>

<p><button onclick="generate()">Generer</button></p>

</div>

</body>
</html>

I stedet for E's (elendige) søgefunktion kan det ofte anbefales at bruge:
    http://www.google.dk/advanced_search?hl=da
Avatar billede olebole Juniormester
01. februar 2008 - 00:35 #11
ups ... der er fejl i beregningen! Ret til:


    for (var i=0,j=nNumQ; i<j; i++) {
        nTmpA = nMinI + Math.random()*(nMaxI-nMinI);
        nTmpB = nMinI + Math.random()*(nMaxI-nMinI);
        sRes = ((nTmpA.toFixed(nDec)*1 + nTmpB.toFixed(nDec)*1).toFixed(nDec)).replace(".", ",");
Avatar billede lunddata Nybegynder
02. februar 2008 - 10:27 #12
Til olebole: FANTASTISK FLOT arbejde. Jeg kan se at det bare virker. Jeg er stadig på udkig efter print-delen, således at jeg kan få udskrift til at passe med formatet A4-papir.
Får jeg et svar, så du kan få dine velfortjente point.
Jeg er ny i(D)HTML,så jeg suger alt til mig. Jeg starter med at læse bøger fra LIBRIS om emnet så jeg får bygget op fra bunden, og så prøver jeg mig frem ved at lære ud fra de mange scripts på nettet.
Avatar billede lunddata Nybegynder
04. februar 2008 - 11:03 #13
Jeg har forsøgt at lave print til A¤-papir, hvor kun selve opgaverne og facitlisten må være med, men jeg er gået i stå
Avatar billede olebole Juniormester
04. februar 2008 - 23:14 #14
Du kan evt. kikke her:
    http://www.w3.org/TR/REC-CSS2/page.html#page-break-props

- og her kan du se, hvordan du adskiller skærmvisning fra udprint i dit stylesheet:
    http://www.w3.org/TR/CSS21/media.html#at-media-rule

Jeg sidder desværre ikke lige ved en printer og kan derfor ikke give dig et færdigt eksempel  :)
Avatar billede lunddata Nybegynder
07. februar 2008 - 21:30 #15
olebole: lægger du et svar?
Avatar billede olebole Juniormester
08. februar 2008 - 00:18 #16
Lykkedes det for dig at få dem begge skrevet ud?
Avatar billede olebole Juniormester
20. februar 2008 - 16:29 #17
Tak for points  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester