Springen naar inhoud

Functies met arrays, javascript


  • Log in om te kunnen reageren

#1

Vnze

    Vnze


  • >25 berichten
  • 38 berichten
  • Gebruiker

Geplaatst op 08 december 2009 - 22:31

De titel zegt misschien totaal niets maar dat is omdat ik meerdere dingen heb waar ik vast mee zit.

Ik heb een vak methodisch programmeren en daar leren we de basis van javascript, nu heeft de professor van dat vak een taak opgegeven, we moeten een soort spel maken waar je 9 div's hebt die aanklikbaar zijn en een woord bevatten. Dit woord moet willekeurig uit een array van 9 woorden komen die ik als 'programmeur' vooraf heb bepaald, daarna moeten deze woorden in een 10e div worden weergegeven op de volgorde dat de speler de divs aanklikt (dit lukt mij wel), de inhoud van de divs moet ook verdwijnen in de originele 9 divs (lukt ook) en de volgorde van de speler moet worden vergeleken met de array die ik heb gemaakt (lukt weer niet).

Ik heb het probleem voor de duidelijkheid opgesplitst in een 2 delen:

1. De inhoud van een div laten afhangen van een willekeurig element van een array

Ik heb reeds een code geschreven die 9 cijfers op een willekeurige volgorde zet maar ik weet niet hoe ik dit kan koppelen met de array met woorden in en dan nog eens deze woorden laten weergeven in afzonderlijke div's (iets met innerhtml gok ik).

2. De (aangeklikte) volgorde van de divs in een nieuwe array zetten en deze array vergelijken met de array waarin de inhoud van de 9 divs staan. Het aantal woorden dat op de juiste plaats staat moet opgeteld worden. Dit getal moet in een alert weergegeven worden (dat deel is ook geen probleem vanaf ik weet hoe je gelijkenissen in arrays opteld)



Als iemand hier iets van weet wil ik hem of haar wel de code die ik al geschreven heb sturen maar ik denk dat ik best niet alles hier ga posten (+200 regels code). Het grootste probleem is puntje 2, puntje 1 is te overzien omdat de inhoud niet verplicht willekeurig moet zijn maar het zou wel het verschil maken tussen een 18/20 en 20/20. Ik heb mijn hele cursus al 10 keer doorlezen, google geraadpleegd en zelfs aan de leerkracht gevraagd maar ik raak dus niet verder.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2609 berichten
  • Moderator

Geplaatst op 08 december 2009 - 22:44

1. De inhoud van een div laten afhangen van een willekeurig element van een array

Ik heb reeds een code geschreven die 9 cijfers op een willekeurige volgorde zet maar ik weet niet hoe ik dit kan koppelen met de array met woorden in en dan nog eens deze woorden laten weergeven in afzonderlijke div's (iets met innerhtml gok ik).

2. De (aangeklikte) volgorde van de divs in een nieuwe array zetten en deze array vergelijken met de array waarin de inhoud van de 9 divs staan. Het aantal woorden dat op de juiste plaats staat moet opgeteld worden. Dit getal moet in een alert weergegeven worden (dat deel is ook geen probleem vanaf ik weet hoe je gelijkenissen in arrays opteld)


Ik kan zelf geen javascript maar je coding lijkt me goed genoeg om mijn uitleg te interpreteren en dan toe te passen.

Ik noem de array met de originele woordenlijst woordenlijst(1 to 9) as string (een array met index 1 tot 9 van strings dus)

1)

Je kan een array maken waarin je de volgorde definieert. orde(1 to 9) as integer en je zorgt dat die wordt ingevuld zodat de cijfers van 1 tot 9 er in willekeurige volgorde in komen te staan. Bijvoorbeeld (3,4,7,8,5,1,6,9,8)

Dan kan je zeggen: div1.inhoud = woordenlijst( orde(1) ), omdat orde(1) gelijk is aan 3 zal dus in div1 het 3de woord in je woordenlijst worden ingevuld.
Algemeen kan je dus zeggen div(i) = woordenlijst( orde(i) )

2)
Maak een nieuwe array uservolgorde(9) as string
en een teller as integer om bij te houden hoeveel woorden er al weggeklikt zijn

bij een klik kan je dan iets doen als
teller = teller + 1
uservolgorde(teller) = woordenlijst( geklikte_div_index )
"maak div onklikbaar"

Om dan te controleren welke woorden op de juiste plaats gaan ga je gewoon van 1 tot 9 en kijk je of woordenlijst(i) = uservolgorde(i)


Ik hoop dat je hier wat aan hebt.

#3

Vnze

    Vnze


  • >25 berichten
  • 38 berichten
  • Gebruiker

Geplaatst op 08 december 2009 - 23:25

Danku voor het antwoord, er zitten zeker bruikbare dingen bij bij puntje 1. dan zou ik volgens uw methode voor iedere div een apparte functie moeten maken met telkens orde+1 ten opzichte van de vorige? Dat zou wel kunnen werken. Het enige wat me dan nog niet lukt daar is de 2 arrays linken maar dat zal wel een gewone typfout zijn. Ik heb immers nu een array die me de 9 cijfers op willekeurige volgorde geeft.

function verdeel(aantal) {
  var opgave = new Array();
  for (i=0; i<aantal; i++) {
	opgave[i]=-1;
  }
  for (i=1; i<=aantal; i++) {
	var poging = willekeurig(aantal);
	if (opgave[poging]==-1) {
	  opgave[poging] = i;
	}
	else {
	  i--;
	}
  }
  return opgave;
}

function willekeurig(bovengrens) {
  return Math.floor(Math.random()*bovengrens);
}


(1)var getallen = verdeel(8);
alert(getallen + getallen[0]);

var opgave = verdeel(8);
opgave[0]='De';
opgave[1]="taak";
opgave[2]="van";
opgave[3]="MPROG";
opgave[4]="is";
opgave[5]="uiteindelijk";
opgave[6]="toch";
opgave[7]="nog";
opgave[8]="afgeraakt";

(1) dit geeft een alert met de willekeurige volgorde automatisch maar ik krijg het niet gelinkt met de var opgave (met hierin de zin die in de divs moet komen). Ik weet waar de fout zit ( bij opgave[i]='y') maar ik weet niet hoe ik het wel moet doen. Als ik dat heb denk ik dat ik de divs zou moeten invullen met
document.getElementById(divi).innerHTML = opgave[i];
met beide i's telkens + 1 dus deze zin eigelijk 9 keer typen.


Van puntje 2 had ik de teller al. Het vergelijken had ik nog niet daar ben ik wel iets mee maar het probleem is nog steeds hoe ik die de inhoud van een div aan die uservolgorde(9) array kan toevoegen. Waarschijnlijk een onclick functie maar ik vind nergens de exacte functie die ik nodig heb om eender wat aan eender welke array toe te voegen.

#4

In physics I trust

    In physics I trust


  • >5k berichten
  • 7388 berichten
  • Moderator

Geplaatst op 09 december 2009 - 00:31

De tekst binnen een div kan in een string staan, deze string kan je toch aan een array toekennen?

Kijk eens bij ivo brugge javascript (google), daar staat er wel wat bruikbaar over strings en arrays.
"C++ : Where friends have access to your private members." — Gavin Russell Baker.

#5

Xenion

    Xenion


  • >1k berichten
  • 2609 berichten
  • Moderator

Geplaatst op 09 december 2009 - 07:44

Je zou voor jezelf eens moeten controleren wàt er na ja code precies in de array opgave staat. Volgens mij haalt je verdeelprocedure niks uit.

opgave[0]='De';
opgave[1]="taak";
opgave[2]="van";
opgave[3]="MPROG";
opgave[4]="is";
opgave[5]="uiteindelijk";
opgave[6]="toch";
opgave[7]="nog";
opgave[8]="afgeraakt";

Deze code vult de array in volgorde in. Je moet zoals ik zei een soort functie hebben die de getallen van 1 tot 9 permuteert. f(1) = 3, f(3) = 7, f(7) = 1, f(2) = 4 etc.


Voor het toevoegen aan die nieuwe array:

Je zal iets hebben van

sub div_click() 'wordt aangeroepen wanneer de user op een div klikt
{
int divID = 'hier moet je dan op een of andere manier de index van die div krijgen: nr van 1 tot 9
teller = teller + 1 'dit heb je al wel door denk ik
uservolgorde[teller] = woordenlijst( geklikte_div_index )
div(divID).enabled = false 'zorg dat je niet meer op deze div kan klikken
}

Je vult dus steeds in de VOLGENDE positie van de array uservolgorde iets in en wàt je invult wordt bepaald door op welke div je klikt.

#6

Vnze

    Vnze


  • >25 berichten
  • 38 berichten
  • Gebruiker

Geplaatst op 09 december 2009 - 18:17

Hm heel wat bruikbare items, ik zal er nog eens achter zien. Echt bedankt voor de hulp alvast!

ps. mijn verdeelfunctie werkt wel, ik krijg getallen van 1 tot 9 (of 0 tot acht) maar ik had geredeneerd dat op de manier die ik had gedaan de volgorde (bijv 3,4,1,7,...) de woorden met het overeenkomstige getal op de plaats van dit getal zouden komen te staan... Niet dus

#7

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 09 december 2009 - 19:17

Ik denk dat als je dit implementeert om de array te shuffelen je wel aan die 2 punten zult geraken!

Wat loopt er verder nog mis?
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.

#8

Vnze

    Vnze


  • >25 berichten
  • 38 berichten
  • Gebruiker

Geplaatst op 09 december 2009 - 20:11

Dit forum blijft me verbazen:) ik heb al jullie hulp gecombineerd en punt 1 is ondertussen al opgelost. (ik heb wel met onzichtbare divs moeten werken en een knop moeten toevoegen om de divs in te vullen want automatisch werkt het nog niet maar dat is geen drama)

Nu ga ik verder met punt 2. De zin die verschijnt in de div 'oplossing' moet vergeleken worden met de div 'opgave' en als een element in de zogenaamde 'userArray' gelijk is aan een element in de 'opgaveArray' krijgt de user een punt, het totale punten moet in een alert worden weergegeven.

En een laatste probleempje is dat ik mijn tellers (heb er al nodig gehad in een eerder deel van de opgave) niet aan het werken krijg tenzij ik een (onzichtbare) div maak met daarin bij het laden van de pagina een 0 en de inhoud wordt veranderd met een functie

document.getElementById('teller').innerHTML = parseFloat(document.getElementById('teller').innerHTML)+1;  }
var counter=document.getElementById('teller').innerHTML
if (counter==9){
  return true

dit is een deel van zo'n functie waar een teller inkomt (met de div 'teller' een div met de inhoud '0' bij het laden van de pagina). Het werkt perfect en je merkt het verschil niet met een teller met een if(...) structuur. Morge ga ik eens vragen aan de leerkracht of dit ook zo mag dan verander ik het niet. Maar het is een best wel geinproviseerde functie want mijn if(...) tellers werkten niet...

#9

Vnze

    Vnze


  • >25 berichten
  • 38 berichten
  • Gebruiker

Geplaatst op 09 december 2009 - 22:15

Ik heb nog een laaste probleempje.

Men heeft onclick functies bijvoorbeeld
<div id="7" onclick='changeContent(id)' ></div>

als men op deze div klikt wordt de functie change content geactiveerd. Geen probleem.

Er is ook een onload functie, dus redeneer ik dat ik deze gewoon ergens bij een div moet zetten als de onclick functie maar dan wordt de functie niet geactiveerd als de pagina geladen wordt! Ik moet nog een methode vinden om een functie te activeren bij het laden van de pagina maar dit is de enige die ik ken en die doet het niet...

Veranderd door Vnze, 09 december 2009 - 22:23


#10

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 11 december 2009 - 09:24

Je moet deze in je body aanroepen. Zie hier voor een voorbeeld.
Het vel van de beer kunnen verkopen vraagt moeite tenzij deze dood voor je neervalt. Die kans is echter klein dus moeten we zelf moeite doen.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures