Astronomie · PalmOS software · Roosteren · Informatica · Windows software · Natuurkunde · Wiskunde · Meteorologie · Fietsen · Diversen

Informatica

Algemeen
lesmateriaal 4H/4V
lesmateriaal 5V/5H
lesmateriaal 5H/6V
lesmateriaal: Verdie
PO: Programmeren
PO: Projecten
PO: Werkstukken
PO: CT
PO: Afgerond
tips: Algemeen
tips: Delphi
tips: Delphi (2)
tips: Logo
tips: NSBasic
tips: OpenOffice
links: Software
links: websites
cc: Voorlopig
cc: Voorlichting
cc: Lokaalgeboden
cc: Excursies
cc: Puzzels
Haiti
tips: Small Basic
PO: Programmeren2008
PO: Programmeren2009
PO: Programmeren2010
PO: Programmeren2011
Gamemaker

Small Basic tips

 

 

 

 

Emiel's klok (QHZ156)

2 januari 2016

 

Je weet hoe je een analoge klok moet programmeren. Emiel's klok laat geen wijzers zien. Hij verbindt de uiteinden van de wijzers, zodat er een driehoek gevormd wordt.

Kun jij de tijd aflezen?

 

download het programma

 

 

 

de afstand van een punt tot een lijn (SPC794)

1 januari 2016

 

Soms wil je in een programma weten hoe ver een punt van een lijn ligt.

In het onderstaande programma is de uitleg van deze pagina verwerkt.

 

download het programma

 

 

 

'bron: https://nl.wikipedia.org/wiki/Afstand

x0=30

y0=150

x1=180

y1=20

GraphicsWindow.DrawLine(x0,y0,x1,y1)

GraphicsWindow.MouseMove = OnMouseMove

Sub OnMouseMove

GraphicsWindow.Clear()

GraphicsWindow.PenColor="black"

GraphicsWindow.DrawLine(x0,y0,x1,y1)

xp=graphicswindow.MouseX

yp=graphicswindow.MouseY

dx=x1-x0

dy=y1-y0

lp=(dx*(xp-x0)+dy*(yp-y0))/(dx*dx+dy*dy)

L=xp-x0-lp*dx

R=yp-y0-lp*dy

d=math.SquareRoot(L*L+R*R)

If (lp>=0) And (lp<=1) then

GraphicsWindow.PenColor="red"

GraphicsWindow.DrawLine(xp,yp,x0+lp*dx,y0+lp*dy)

EndIf

GraphicsWindow.Title = d

EndSub

 

 

 

zweefweb (LGW681)

27 februari 2015

 

Een paar punten zweven door het venster. Doordat de punten met lijnstukken verbonden zijn, lijkt er een soort web te vliegen.

 

download het programma

 

 

punten op cirkel (CPT007)

27 februari 2015

Zet een punt op een cirkel. Teken een lijn naar een volgend punt op de cirkel en doe dat bijvoorbeeld vier keer. Soms krijg je dan een zandloper, soms een ruit en heel soms een rechthoek of een vierkant. Dit programma tekent elke seconde een nieuw figuur volgens dit recept.

 

download het programma

 

 

 

pad (RXS477)

27 februari 2015

Als je de verbindingslijnen in het programma zweefweb weglaat, lijkt het alsof tien mensen met een potlood een blaadje vol krabbelen.

 

download het programma

 

 

 

 

kleurpad

27 februari 2015

Als je in in het programma pad ook nog een langzaam de kleur van het potlood verandert, maakt de computer onmiskenbaar kunst. De hoekverandering is in dit pogramma wat groter gekozen, zodat de lijnen wat meer kronkelen.

 

download het programma

 

 

 

kleurverloop ()

16 juli 2011

 

 

download het programma

 

 

Varianties op een thema

16 juli 2011

Een rooster regelmatig vullen met 10x10 stippen is eenvoudig.

De onderstaande programma laten de kleur of de straal van de stippen periodiek veranderen.

 

download aan-uit

download kleur

download straal

 

 

 

Sinusvulling (XMK047)

16 juli 2011

Stippen in een regelmatig rooster tekenen kan met vijf regels code.

Als je de stippen wilt laten golven kan dat door gebruik te maken van de sinus-functie.

Dit programma kan de plaats van de stippen in x- én y-richting laten golven. Met de pijltjestoetsen kun je de amplitude (maximale uitwijking) veranderen.

 

download het programma

 

Gebruik de pijltjestoetsen om de amplitude in de formules te veranderen.

 

 

 

in the name of the rose (BKG847)

16 juli 2011

 

download het programma

 

Als je een regelmatige ster kunt tekenen, kun je ook een regelmatige veelhoek tekenen. Dit programma gebruikt het idee van de regelmatige ster om een bloem te tekenen. De eindpunten van de ster zijn de middelpunten cirkels.

Als je straal1=0 maakt verdwijnt het witte middendeel.

 

 

 

 

 

 

 

volg de muis (FNW675)

2 juli 2011

Dit eenvoudige programma tekent twee ogen die de muis volgen.

 

download het programma

 

 

 

3D-tennis (SHM062)

2 juli 2011

Dit programma laat een bal over een tennisveld stuiteren. Met de pijltjestoetsen kun je het tennisveld draaien. De bal vliegt soms dwars door het net. Dat kan natuurlijk beter!

Je kunt hier een spel van maken door met de pijtjestoetsen een speler naar de plek te laten lopen waar de bal terecht komt. Daarna moet je de richting en snelheid van de teruggeslagen bal kunnen beinvloeden. De computer slaat in dit voorbeeld altijd terug, maar voor een spel is het natuurlijk leuker als je de computer ook eens kunt laten 'rennen' om de bal te halen, eh missen.

 

download het programma

 

 

 

Woordenwolk (XTN217)

2 juli 2011

Dit programma laat de woorden van een zin springen. Er is gemakkelijk een spel van te maken: laat het programma een willekeurige zin uit een lijst nemen. De gebruiker moet de zin intypen die bij deze wolk hoort.

 

download het programma

 

 

 

wolkenluchten (WNR579)

2 juli 2011

In tekenfilms zie je vaak dat wolk opgebouwd zijn uit cirkels. Dat probeert dit programma ook te doen.

 

download het programma

 

 

 

Vul mij (RRW005)

2 juli 2011

Hoe vul je een willekeurige ruimte met een kleur. Dit programma laat zien hoe dat gaat.

 

download het programma

 

 

Lichtbreking (VZQ274)

5 mei 2011

 

Een programma dat de breking van licht laat zien.

 

download het programma

 

 

 

Aantrekkingskracht

5 mei 2011

 

Een simulatie van ballen onder invloed van een kracht als zwaartekracht (kracht is evenredig met c/(r*r).

 

download het programma

 

 

Kluwen

28 mei 2011

In de afbeelding hieronder zie je een rood punt linksboven bij het zwarte punt vertrekken. Het komt rond het andere zwarte punt in een willekeurige baan, maar niet zo willekeurig dat het weer weg kan.

Zo rol je een bolletje wol. De truc is dat een aantrekkende kracht gecombineerd wordt met een willekeurige beweging.

 

download het programma

 

 

Willekeurige golf

28 mei 2011

Op dezelfde manier als bij de 'willekeurige cirkel' hieronder, kun je ook van een mooie golf-grafiek een wat willekeurigere grafiek maken.

 

Gebruik code MDT692 om het programma te bekijken.

 

 

Willekeurige cirkel

28 mei 2011

De aarde is een bol met bergen en dal. Zo wille we ook een cirkel tekenen; een soort aarde in zijaanzicht.

De straal van de cirkel moet wat varieren.

 

experiment 1

 

We teken een cirkel in 360 stapjes. Bij elk stapje tellen we een willekeurige getal bij de straal. Dat geeft een erg springerige cirkel.

 

max=7

GraphicsWindow.KeyDown=draw

 

Sub draw

  GraphicsWindow.Clear()

  v=0

  x1=250

  y1=350

  For t=0 To 355

    v=math.GetRandomNumber(2*max-1)-max

    x2=250+(100+v)*math.Sin(Math.GetRadians(t))

    y2=250+(100+v)*math.cos(Math.GetRadians(t))

    GraphicsWindow.drawline(x1,y1,x2,y2)

    x1=x2

    y1=y2

    x3=250+(100)*math.Sin(Math.GetRadians(t))

    y3=250+(100)*math.cos(Math.GetRadians(t))

    GraphicsWindow.SetPixel(x3,y3,"blue")

  endfor

  GraphicsWindow.drawline(x1,y1,250,350)

endsub

 

Natuurlijk kun je de afwijkingen wat kleiner maken (maak bijvoorbeeld max=3 van max=7). Maar dat geeft weer een erg platte aarde.

 

experiment 2

We tellen bij een vorige verschil een nieuw klein verschil op.

 

   v=v+math.GetRandomNumber(2*max-1)-max

 

Dat geeft inderdaad de mogelijkheid om ruim van de cirkel af te wijken. Het nadeel is dat je na een hele omwenteling niet bij de startpunt hoeft uit te komen!

 

 

 

experiment 3

 

We doen hetzelfde als bij experiment 2, maar dan in twee richtingen.

We maken linksom en rechtsom een rij met verschillen, steeds zo dat er iets bij het vorige verschil geteld wordt.

Die twee verschilrijen tellen we gewogen bij de straal: aan het begin van de omwenteling telt de ene rij het zwaarste, aan het eind juist de andere rij.

 

Het volledige programma kun je onder de volgende code vinden: SRW660

 

 

 

 

'eerst lopen we rechtsom om de cirkel en maken we willekeurige verschillen

v=0

For hoek=0 To 355

  v=v+math.GetRandomNumber(2*max-1)-max

  vr[hoek]=vr[hoek]+v

  endfor

 

'daarna lopen we nog eens linksom

v=0

For hoek=355 To 0 Step -1

  v=v+math.GetRandomNumber(2*max-1)-max

  vl[hoek]=vl[hoek]+v

endfor

 

For hoek=0 To 355

  vw[hoek]=vl[hoek]*hoek/355+vr[hoek]*(355-hoek)/355

endfor

 

 

We gebruiken de rij vw om de straal aan te passen.

 

  x2=250+(100+vw[t])*math.Sin(Math.GetRadians(t))

  y2=250+(100+vw[t])*math.cos(Math.GetRadians(t))

 

 

driehoeken tekenen (HRM982)

28 mei 2011

Hier vind je een programma om driehoeken te tekenen.

Klik met de muis en de drie laatste punten worden als driehoek verbonden.

 

 

GraphicsWindow.Width=400

GraphicsWindow.Height=400

GraphicsWindow.DrawBoundText(10,10,500,"Klik drie keer met de muis om een driehoek te tekenen")

aantaldriehoeken=0

volgendepunt=1

GraphicsWindow.MouseDown=OnMouseDown

GraphicsWindow.MouseMove=OnMouseMove

GraphicsWindow.MouseUp=OnMouseUp

 

Sub OnMouseDown

If volgendepunt=1 then

aantaldriehoeken=aantaldriehoeken+1

EndIf

x=GraphicsWindow.MouseX

y=GraphicsWindow.MouseY

GraphicsWindow.DrawEllipse(x-2,y-2,5,5)

driehoek[aantaldriehoeken][volgendepunt]["x"]=x

driehoek[aantaldriehoeken][volgendepunt]["y"]=y

volgendepunt=volgendepunt+1

If volgendepunt=4 Then

' teken de drie lijnstukken

x1=driehoek[aantaldriehoeken][1]["x"]

y1=driehoek[aantaldriehoeken][1]["y"]

x2=driehoek[aantaldriehoeken][2]["x"]

y2=driehoek[aantaldriehoeken][2]["y"]

x3=driehoek[aantaldriehoeken][3]["x"]

y3=driehoek[aantaldriehoeken][3]["y"]

GraphicsWindow.DrawLine(x1,y1,x2,y2)

GraphicsWindow.DrawLine(x2,y2,x3,y3)

GraphicsWindow.DrawLine(x1,y1,x3,y3)

volgendepunt=1

endif

endsub

 

 

 

 

Wijzers slepen (HTV015)

28 mei 2011

Er zijn klokken waarmee je nooit te laat komt. Je  wordt dan wel moe van het slepen met  de wijzers. Met dit programma kan dat. Er worden drie wijzers getekend (die hebben hier niets met de actuele tijd te maken). Sleep ze daarna met de muis naar een andere positie.

Je zou dit programma kunnen uitbreiden tot een spel dat een tijdstip geeft, waarna de gebruiker dat tijdstip met de wijzers moet instellen.

 

 

GraphicsWindow.Width=400

GraphicsWindow.Height=400

GraphicsWindow.DrawBoundText(10,10,1000,"sleep de wijzers met de muis")

GraphicsWindow.MouseDown=OnMouseDown

GraphicsWindow.MouseMove=OnMouseMove

GraphicsWindow.MouseUp=OnMouseUp

'kies 3x een willekeurige hoek en teken daar een wijzer heen

'wijzer 1

For teller=1 to 3

hoek=math.GetRandomNumber(360)

x1=150+100*math.Sin(Math.GetRadians(hoek))

y1=150+100*math.cos(Math.GetRadians(hoek))

'zet de coordinaten van wijzer 1 in het array

wijzer[teller]["x"]=x1

wijzer[teller]["y"]=y1

endfor

tekenwijzers()

Sub tekenwijzers

GraphicsWindow.Clear()

GraphicsWindow.DrawBoundText(10,10,1000,"sleep de wijzers met de muis")

For teller=1 to 3

If teller=geselecteerdewijzer Then

GraphicsWindow.pencolor="red"

Else

GraphicsWindow.pencolor="black"

endif

GraphicsWindow.DrawLine(150,150,wijzer[teller]["x"],wijzer[teller]["y"])

endfor

'zet nog een cirkeltje rond het draaipunt

GraphicsWindow.DrawEllipse(150-2,150-2,5,5)

endsub

Sub OnMouseUp

down=0

endsub

Sub OnMouseMove

If down=1 then

'bewaar de huidige positie van de muis

x=GraphicsWindow.MouseX

y=GraphicsWindow.MouseY

factor=Math.SquareRoot((x-150)*(x-150)+(y-150)*(y-150))

wijzer[geselecteerdewijzer]["x"]=150+(x-150)*100/factor

wijzer[geselecteerdewijzer]["y"]=150+(y-150)*100/factor

tekenwijzers()

Else

' als de muis knop niet ingedrukt is gebeurt er niets

' je zou hier bij elke beweging een lijtje naar het uiteinde van

' de dichtstbijzijnde wijzer kunnen tekenen

endif

endsub

Sub OnMouseDown

down=1

'dit zijn x en y-coordinaten van de muis

x=GraphicsWindow.MouseX

y=GraphicsWindow.MouseY

'welke uiteinde van een wijzer is het dichtstbij?

geselecteerdewijzer=0

rmin=99999999999999 'heel groot

For teller=1 To 3

dx=x-wijzer[teller]["x"]

dy=y-wijzer[teller]["y"]

r=math.SquareRoot(dx*dx+dy*dy)

If r<rmin Then

rmin=r

geselecteerdewijzer=teller

endif

endfor

'de muis staat waarschijnlijk niet op 100 pixels van het draaipunt

' maar ze staat wel in de juiste richting

'we berekenen de x,y van het eindpunt van de wijzer door te schalen

factor=Math.SquareRoot((x-150)*(x-150)+(y-150)*(y-150))

wijzer[geselecteerdewijzer]["x"]=150+(x-150)*100/factor

wijzer[geselecteerdewijzer]["y"]=150+(y-150)*100/factor

tekenwijzers()

endsub

 

 

 

 

 

 

Slepen en draaien (RTV559)

28 mei 2011

Draai en sleep een shape (dat rijmt). Als je de programmacode hierboven aanklikt zal de rechtermuisknop niet werken in de browser. Als je de code importeert en als Windows-programma compileert natuurlijk wel.

 

 

GraphicsWindow.Width=400

GraphicsWindow.Height=400

MaakBlokken()

GraphicsWindow.DrawBoundText(10,10,1000,"Sleep een blok met de rechter muisknop")

GraphicsWindow.DrawBoundText(10,25,1000,"Draai een blok met de linker muisknop")

GraphicsWindow.MouseDown=OnMouseDown

GraphicsWindow.MouseMove=OnMouseMove

GraphicsWindow.MouseUp=OnMouseUp

Sub Maakblokken

'we bewaren van drie blokken de positie en de draairichting

For teller=1 To 3

blok[teller]["x"]=Math.GetRandomNumber(200)+50

blok[teller]["y"]=Math.GetRandomNumber(200)+50

blok[teller]["hoek"]=Math.GetRandomNumber(360)

' we kiezen nog een willekeurige breedte en hoogte

w=Math.GetRandomNumber(50)+10

h=Math.GetRandomNumber(50)+10

' maak een shape (onthoud hem in "s" van shape

blok[teller]["s"]=Shapes.AddRectangle(w,h)

' plaats het blok op de juiste plek

Shapes.Move(blok[teller]["s"],blok[teller]["x"],blok[teller]["y"])

'en in de juiste richting

shapes.Rotate(blok[teller]["s"],blok[teller]["hoek"])

endfor

EndSub

Sub OnMouseUp

' down=0

endsub

Sub OnMouseMove

'bewaar de huidige positie van de muis

x=GraphicsWindow.MouseX

y=GraphicsWindow.MouseY

If mouse.IsRightButtonDown then

' slepen

dx=x-startx

dy=y-starty

blok[geselecteerdblok]["x"]=blok[geselecteerdblok]["x"]+dx

blok[geselecteerdblok]["y"]=blok[geselecteerdblok]["y"]+dy

Shapes.Move(blok[geselecteerdblok]["s"],blok[geselecteerdblok]["x"],blok[geselecteerdblok]["y"])

startx=x

starty=y

ElseIf Mouse.IsLeftButtonDown then

' roteren

' bepaal de hoek die bij startx,starty hoort (tov de huidige positie)

' bepaal de hoek die bij x,y hoort (tov de huidige positie)

h1=math.ArcTan((startx-blok[geselecteerdblok]["x"])/(starty-blok[geselecteerdblok]["y"]))

h1=360-math.GetDegrees(h1)

h2=math.ArcTan((x-blok[geselecteerdblok]["x"])/(y-blok[geselecteerdblok]["y"]))

h2=360-math.GetDegrees(h2)

GraphicsWindow.BrushColor="white"

'GraphicsWindow.fillRectangle(10,10,200,50)

'GraphicsWindow.BrushColor="blue"

'GraphicsWindow.DrawBoundText(10,10,100,h1)

'GraphicsWindow.DrawBoundText(10,20,100,h2)

startx=x

starty=y

' blok[geselecteerdblok]["hoek"]=blok[geselecteerdblok]["hoek"]+h2-h1

blok[geselecteerdblok]["hoek"]=h1

' shapes.Rotate(blok[teller]["s"],blok[teller]["hoek"])

shapes.Rotate(blok[geselecteerdblok]["s"],h1)

endif

endsub

Sub OnMouseDown

down=1

'dit zijn x en y-coordinaten van de muis

startx=GraphicsWindow.MouseX

starty=GraphicsWindow.MouseY

'welke blok is het dichtstbij?

geselecteerdblok=0

rmin=99999999999999 'heel groot

For teller=1 To 3

dx=startx-blok[teller]["x"]

dy=starty-blok[teller]["y"]

r=math.SquareRoot(dx*dx+dy*dy)

If r<rmin Then

rmin=r

geselecteerdblok=teller

endif

endfor

endsub

 

 

Cirkels tekenen (BRG626)

28 mei 2011

Een perfecte cirkel tekenen is niet gemakkelijk. Dit programma helpt je daarbij.

Teken maar iets wat ongeveer op een cirkel lijkt en het programma maakt er een perfecte ellips van.

 

 

GraphicsWindow.Width=500

GraphicsWindow.Height=400

GraphicsWindow.DrawBoundText(10,10,1000,"Teken met de muis ongeveer een cirkel.")

GraphicsWindow.DrawBoundText(10,20,1000,"Dit programma maakt er een perfecte ellips van!")

GraphicsWindow.MouseDown=OnMouseDown

GraphicsWindow.MouseMove=OnMouseMove

GraphicsWindow.MouseUp=OnMouseUp

Sub OnMouseUp

down=0

'wis alle getekende punten

For teller=1 to count

GraphicsWindow.SetPixel(punt[teller]["x"],punt[teller]["y"],"white")

endfor

'teken een passende cirkel aan de hand van xmin, xmax, ymin, ymax

GraphicsWindow.DrawEllipse(xmin,ymin,xmax-xmin,ymax-ymin)

endsub

Sub OnMouseMove

If down=1 then

'bewaar de huidige positie van de muis

count=count+1

punt[count]["x"]=GraphicsWindow.MouseX

punt[count]["y"]=GraphicsWindow.MouseY

'teken de muis positie

GraphicsWindow.SetPixel(GraphicsWindow.MouseX, GraphicsWindow.MouseY,"blue")

If GraphicsWindow.mousex<xmin then

xmin=GraphicsWindow.mousex

endif

If GraphicsWindow.mousex>xmax then

xmax=GraphicsWindow.mousex

endif

If GraphicsWindow.mousey<ymin then

ymin=GraphicsWindow.mousey

endif

If GraphicsWindow.mousey>ymax then

ymax=GraphicsWindow.mousey

endif

endif

endsub

Sub OnMouseDown

down=1

count=0

'dit zijn de kleinste en grootste x en y-coordinaten tot nu toe

xmin=GraphicsWindow.MouseX

xmax=xmin

ymin=GraphicsWindow.MouseY

ymax=ymin

endsub

 

 

Autorijden (2) (HRX829)

28 mei 2011

Wat zou er gebeuren als je het programma willekeurig aan het stuur van een auto laat draaien?

Hoewel dit een willekeurige wandeling is (random walk), is het resultaat toch anders dan wanneer je willekeurige stappen maakt.

 

 

 

'we maken het venster wat groter

GraphicsWindow.Width=800

GraphicsWindow.height=600

blokje=Shapes.AddRectangle(30,10)

y1=300

x1=600

Shapes.Move(blokje,x1,y1)

GraphicsWindow.KeyDown=OnkeyDown

'we kiezen een zeer kleine snelheid

snelheid=0.05

hoek=90

While "true"

Shapes.Rotate(blokje,hoek)

'hier wordt een willkeurige hoek gekozen

hoek=hoek+math.GetRandomNumber(13)-7

x2=x1+snelheid*math.Cos(Math.GetRadians(hoek))

y2=y1+snelheid*math.Sin(Math.GetRadians(hoek))

Shapes.move(blokje,x2,y2)

'hier tekenen we het spoor

GraphicsWindow.DrawLine(x1,y1,x2,y2)

'het eindpunt wordt het nieuwe beginpunt

x1=x2

y1=y2

Program.Delay(1)

endwhile

Sub OnKeyDown

key=graphicswindow.LastKey

If key="Left" then

hoek=hoek-5

elseif key="Right" then

hoek=hoek+5

elseif key="Up" then

snelheid=snelheid+5

elseif key="Down" then

snelheid=snelheid-5

endif

EndSub

 

 

 

 

Autorijden

28 mei 2011

 

Het volgende programma laat een auto (een blokje) over het scherm rijden.

Gebruik de pijltjestoetsen om de sturen en om te versnellen/vertragen.

 

 

GraphicsWindow.Width=600

GraphicsWindow.height=600

blokje=Shapes.AddRectangle(30,10)

y=100

x=100

Shapes.Move(blokje,x,y)

GraphicsWindow.KeyDown=OnkeyDown

snelheid=0

hoek=-90

While "true"

  Shapes.Rotate(blokje,hoek)

  x=x+snelheid*math.Cos(Math.GetRadians(hoek))

  y=y+snelheid*math.Sin(Math.GetRadians(hoek))

  Shapes.move(blokje,x,y)

  Program.Delay(1000)

endwhile

 

Sub OnKeyDown

  key=graphicswindow.LastKey

  If key="Left" then

  hoek=hoek-5

  elseif key="Right" then

  hoek=hoek+5

  elseif key="Up" then

  snelheid=snelheid+5

  elseif key="Down" then

  snelheid=snelheid-5

  endif

EndSub

 

 

 

 

 

Bloem

14 april 2011

 

 

 

De code om de bovenstaande bloem te tekenen is verrassend eenvoudig.

Het deel voor de FOR-lus is voorbereiding. Het tekenen zelf gebeurt in de vier regels van de FOR-lus!

Wat gebeurt er als je in plaats van 91 graden een andere hoek neemt?

 

GraphicsWindow.Height = 900

GraphicsWindow.Width = 1400

GraphicsWindow.Left = 0

GraphicsWindow.Top = 0

GraphicsWindow.PenWidth = 1

Turtle.Speed = 5000

Turtle.PenUp()

Turtle.MoveTo(200,900)

Turtle.MoveTo(200,800)

Turtle.PenDown()

Turtle.Hide()

For i = 1 To 2000

Turtle.Move(750-i)

Turtle.Turn(91)

endfor

 

 

Nulpunten

29 maart 2011

Nog een mooi programma van Jesse. Hiermee kun je de nulpunten van een kwadratisch functie berekenen

 

GraphicsWindow.Height = 500

GraphicsWindow.Width = 500

GraphicsWindow.DrawText(10,10, "voer hier A in")

GraphicsWindow.DrawText(10,40, "voer hier B in")

GraphicsWindow.DrawText(10,70, "voer hier C in")

numa = Controls.AddTextBox(120,10)

numb = Controls.AddTextBox(120,40)

numc = Controls.AddTextBox(120,70)

but1 = Controls.AddButton("bereken nul punten!", 350,40)

Controls.ButtonClicked = onbuttonclick

 

Sub onbuttonclick

  a = Controls.GetTextBoxText(numa)

  b = Controls.GetTextBoxText(numb)

  c = Controls.GetTextBoxText(numc)

  d = b*b - 4*a*c

  discimi = Controls.AddTextBox(10,150)

  Controls.SetTextBoxText(discimi, "D = "+d)

  If d < 0 Then

    GraphicsWindow.ShowMessage("deze vergelijking heeft geen oplossingen","")

  Else

    x1 = (-b + math.SquareRoot(d))/(2*a)

    x2 = (-b - math.SquareRoot(d))/(2*a)

    solution1 = Controls.AddTextBox(10,150)

    Controls.SetSize(solution1, 500, 25)

    Controls.SetTextBoxText(solution1, "x = "+x1+" en x = " +x2)

    EndIf

EndSub

 

 

Autodidact

31 januari 2011

Jesse (4H) heeft even in een paar dagen wat aan Small basic gewerkt.

Vandaag komt hij zo maar op de proppen met drie mooie programma's. Je kunt ze hieronder downloaden.

 

- Tekenprogramma

- Klikspel (bestanden uitpakken in één map)

- Rekenmachine

 

 

 

 

 

getallen of geen getallen, that's the question

8 juni 2010

Als je zeker weet dat je een getal als invoer wilt krijgen kies je Textwindow.ReadNumber().

Maar soms wil je beide mogelijkheden openlaten. Je wilt dan dat het programma bekijkt of de de invoer een string was of een getal.

Het volgende programma laat zien hoe je programma kan ontdekken of de invoer een getal was.


While "True"

S = TextWindow.Read()

If S = "" Then

Program.End()

'hieronder staat een truc on snel te achterhalen of de invoer een getal was

'als S een string is (bv. "AB" dan wordt S+0 "AB0"

'Als S een getal is wordt er 0 bijgeteld!

ElseIf (S+0) = S Then

TextWindow.WriteLine("Je hebt een getal ingevoerd.")

Else

TextWindow.WriteLine("Je hebt GEEN getal ingevoerd.")

EndIf

Endwhile


 

Zoeken op Google  (programID: VTJ777)

27 mei 2010

Stel dat je twee willekeurige woorden uit van Dale intikt bij Google. Welke combinaties hebben dan veel treffers en welke weinig?

Je kunt dat natuurlijk handmatig gaan proberen. Maar het is leuker om een programma veel verschillende combinaties te laten zoeken.

 

Het volgende programma doet dat voor twee Nederlandse woorden die je nog zelf moet invoeren:

 

TextWindow.WriteLine("Geef een zoekterm met twee woorden. Bv. palmboom+pinda")

zoekterm=textwindow.Read()

s=Network.GetWebPageContents("http://www.google.nl/search?hl=nl&q="+zoekterm)

 

'zoek nu het woord 'ongeveer'

p1=Text.GetIndexOf(s,"Ongeveer")

 

'zoek nu het woord 'resultaten

p2=Text.GetIndexOf(s,"resultaten")

 

' knip nu tekst 9 letters na de o van Ongeveer en twee tekens voor de r van

' Resultaten

t=text.GetSubText(s,p1+9,p2-p1-10)

TextWindow.WriteLine(">"+t)

Maar het kan ook door een bestand met een woordenlijst te gebruiken. Maak een tekstbestand met de naam woordenlijst.txt. Zet daarom een aantal woorden.

Pas in het programma dat je met het programID kan laden het aantal regels aan.

 

Welke combinatie heeft veel of juist weinig hits? Mail je combinaties naar dohdoc@gmail.com.

 

N.B. In de actuele versie van het programma wisselt het programma willekeurig tussen Google en Bing. Bovendien wacht het een willekeurige tijd na een zoekopdracht.

Tenslotte worden de resultaten van de zoekopdrachten bewaard in het bestand zoekopdrachten.txt. Je kunt dit bestand ook opsturen naat dohdoc@gmail.com.

 


 

 

Veel veelhoeken (programID: SFG796)

17 april 2010

De afbeeldingen van de wiskunde-pagina met Small Basic.

 

 

 

Schuifpuzzel (programID: SDZ133)

13 april 2010

Een eenvoudige schuifpuzzel (de appel bestaat uit 9 afbeeldingen die hieronder staan afgebeeld).

Als je een ander plaatje wilt gebruiken moet je het eerst in het juiste aantal stukken snijden. Je kunt dat online op deze website doen.

 

 

  

 

  

 

  

 

De appel uit één stuk staat hier:

 

 

 

Openstreetmapviewer (programID: BSC699)

13 april 2010

Een eenvoudige viewer voor Openstreetmap.

 

 

4 april 2010 (programID: MCW956)

3n+1

Een leuk programma dat de langste reeksen voor het 3n+1 probleem zoekt.

 

 

Knoppen en invoervelden in een GraphicWindow (import code: QRT907)

3 april 2010

Small Basic versie 0.8 had geen standaardmethode om knoppen en invoervelden op een venster te zetten. Toch is het met wat creativiteit mogelijk (zelfs in je website...)

Sinds versie 0.9 is er het Control-object waarmee je gemakkelijk knoppen en invoervelden kunt maken.

 

 

IBM-advertentie (ProgramID: TWM741)

1 april 2010

 

In de C't staan mooie advertenties van IBM. Het onderstaande programma maakt soortgelijke afbeeldingen at random:

 

size=30

dx=20

dy=20

GraphicsWindow.width=2*dx+10*size+2*size

GraphicsWindow.Height=2*dy+10*size+2*size

kleur[1]="LightGreen"

kleur[2]="Blue"

kleur[3]="Black"

kleur[4]="White"

while "true"

GraphicsWindow.clear()

vulVeld()

tekenVeld()

Program.Delay(2000)

endwhile

Sub vulVeld

' maak alle cellen leeg

For y=1 To 10

For x=1 To 10

veld[x][y]=0

EndFor

EndFor

'vul een 2x2 cel met 2 horizontale of 2 verticale vormen

For y=1 To 9 step 2

For x=1 To 9 Step 2

'kies 1 of 2: 1--> horizontaal 2--> verticaal

r=math.GetRandomNumber(2)

If r=1 Then

veld[x][y]="H"

Else

veld[x][y]="V"

endif

endfor

EndFor

EndSub

sub tekenVeld

For x=1 To 9 Step 2

For y=1 To 9 Step 2

tekenCel()

endfor

EndFor

endsub

Sub tekenCel

'kies een kleur voor vorm 1 (vk staat voor VormKleur)

vk1=kleur[math.GetRandomNumber(3)]

vk2=vk1 'kies dezelfde kleur voor de tweede vorm

While vk2=vk1

vk2=kleur[math.GetRandomNumber(3)]

EndWhile

'kies nu een kleur voor het cirkeltje (ck staat voor cirkelkleur)

ck1=vk1

While ck1=vk1

ck1=kleur[math.GetRandomNumber(4)]

EndWhile

ck2=vk2 'kies dezelfde kleur voor de tweede cirkel

While ck2=vk2

ck2=kleur[math.GetRandomNumber(4)]

EndWhile

'moet de cirkel linksboven of linksonder (cp staat voor cirkelpositie)

cp=Math.GetRandomNumber(2)-1

'teken de vorm

If veld[x][y]="H" Then

GraphicsWindow.BrushColor=vk1

GraphicsWindow.pencolor=vk1

GraphicsWindow.FillEllipse(x*size+dx,y*size+dy,size,size)

GraphicsWindow.FillRectangle(x*size+size/2+dx,y*size+dy,size,size)

GraphicsWindow.FillEllipse(x*size+size+dx,y*size+dy,size,size)

GraphicsWindow.BrushColor=vk2

GraphicsWindow.PenColor=vk2

GraphicsWindow.FillEllipse(x*size+dx,y*size+size+dy,size,size)

GraphicsWindow.FillRectangle(x*size+size/2+dx,y*size+size+dy,size,size)

GraphicsWindow.FillEllipse(x*size+size+dx,y*size+size+dy,size,size)

'teken de cirkels

GraphicsWindow.BrushColor=ck1

GraphicsWindow.PenColor=ck1

GraphicsWindow.FillEllipse(x*size+cp*size+dx,y*size+dy,size,size)

If cp=0 Then

cp=1

else

cp=0

EndIf

GraphicsWindow.BrushColor=ck2

GraphicsWindow.PenColor=ck2

GraphicsWindow.FillEllipse(x*size+cp*size+dx,y*size+size+dy,size,size)

Else

GraphicsWindow.BrushColor=vk1

GraphicsWindow.pencolor=vk1

GraphicsWindow.FillEllipse(x*size+dx,y*size+dy,size,size)

GraphicsWindow.FillRectangle(x*size+dx,y*size+size/2+dy,size,size)

GraphicsWindow.FillEllipse(x*size+dx,y*size+size+dy,size,size)

GraphicsWindow.BrushColor=vk2

GraphicsWindow.PenColor=vk2

GraphicsWindow.FillEllipse(x*size+size+dx,y*size+dy,size,size)

GraphicsWindow.FillRectangle(x*size+size+dx,y*size+size/2+dy,size,size)

GraphicsWindow.FillEllipse(x*size+size+dx,y*size+size+dy,size,size)

'teken de cirkels

GraphicsWindow.BrushColor=ck1

GraphicsWindow.PenColor=ck1

GraphicsWindow.FillEllipse(x*size+dx,y*size+cp*size+dy,size,size)

If cp=0 Then

cp=1

else

cp=0

EndIf

GraphicsWindow.BrushColor=ck2

GraphicsWindow.PenColor=ck2

GraphicsWindow.FillEllipse(x*size+size+dx,y*size+cp*size+dy,size,size)

endif

EndSub

 

Een roterende kubus (ProgramID: TWQ550)

1 april 2010

 

Een roterende kubus, zou Small Basic daar snel genoeg voor zijn. Het kan!

Voor de demo worden slechts ribben getekend, maar dat kun je zelf gemakkelijk aanvullen (Een zijvlak kun je tekenen met twee driehoeken, begrijp je waarom?).

Draai de kubus met de toetsen a,s,w,z.

 

Gekleurde vlakken tekenen moet ook kunnen, maar dat kom later misschien nog wel eens.

 

hint:

- splits de vierkantige zijvlaken op in driehoeken.

- maak een lijst van die vierkanten

- bereken de posities na rotatie

- Bereken het uit-product van twee opspannende vectoren (of sorteer de driehoeken op z-waarde (afstand tot de kijker)) en teken ze daarna van achter naar voor op het scherm

 

 

'initialiseer de achthoekpunten

GraphicsWindow.Title="Gebruik de toetsen ASWZ om de kubis te draaien"

GraphicsWindow.KeyDown=OnKeyDown

point[1]["x"]=1

point[1]["y"]=1

point[1]["z"]=1

point[2]["x"]=-1

point[2]["y"]=1

point[2]["z"]=1

point[3]["x"]=1

point[3]["y"]=-1

point[3]["z"]=1

point[4]["x"]=1

point[4]["y"]=1

point[4]["z"]=-1

point[5]["x"]=-1

point[5]["y"]=-1

point[5]["z"]=1

point[6]["x"]=-1

point[6]["y"]=1

point[6]["z"]=-1

point[7]["x"]=1

point[7]["y"]=-1

point[7]["z"]=-1

point[8]["x"]=-1

point[8]["y"]=-1

point[8]["z"]=-1

angleH=30*math.Pi/180

angleV=30*math.Pi/180

calcPoints()

DrawPoints()

DrawLines()

' While "true"

' EndWhile

Sub OnKeyDown

k=graphicsWindow.LastKey

' TextWindow.Writeline(k+angle)

If k="A" then

angleH=angleH-Math.GetRadians(10)

' Sound.PlayBellRing()

' Draw()

endif

If k="S" then

angleH=angleH+Math.GetRadians(10)

' sound.PlayChime()

' Draw()

EndIf

If k="W" then

angleV=angleV+Math.GetRadians(10)

' sound.PlayChime()

' Draw()

EndIf

If k="Z" then

angleV=angleV-Math.GetRadians(10)

' sound.PlayChime()

' Draw()

EndIf

calcPoints()

DrawPoints()

DrawLines()

EndSub

Sub calcPoints

For teller=1 To 8

' draai in horizontale richting

'x' = x*cos q - y*sin q

point[teller]["x1"]=point[teller]["x"]*math.cos(angleH)-point[teller]["y"]*math.sin(angleH)

'y' = x*sin q + y*cos q

point[teller]["y1"]=point[teller]["x"]*math.sin(angleH)+point[teller]["y"]*math.cos(angleH)

'z' = z

point[teller]["z1"]=point[teller]["z"]

' draai in verticale richting

'y' = x*cos q - y*sin q

point[teller]["y2"]=point[teller]["y1"]*math.cos(angleV)-point[teller]["z1"]*math.sin(angleV)

'z' = x*sin q + y*cos q

point[teller]["z2"]=point[teller]["y1"]*math.sin(angleV)+point[teller]["z1"]*math.cos(angleV)

'x' = x

point[teller]["x2"]=point[teller]["x1"]

endfor

endsub

Sub DrawPoints

GraphicsWindow.Clear()

For teller=1 To 8

GraphicsWindow.DrawEllipse(point[teller]["x2"]*30-3+100,point[teller]["y2"]*30-3+100,5,5)

'GraphicsWindow.SetPixel(point[teller]["x1"]*100+100,point[teller]["y1"]*100+100,"black")

'TextWindow.WriteLine(point[teller]["x1"]*100+100)

'textwindow.WriteLine(point[teller]["y1"]*100+100)

endfor

EndSub

Sub DrawLines

GraphicsWindow.DrawLine(point[1]["x2"]*30+100,point[1]["y2"]*30+100,point[2]["x2"]*30+100,point[2]["y2"]*30+100)

GraphicsWindow.DrawLine(point[1]["x2"]*30+100,point[1]["y2"]*30+100,point[3]["x2"]*30+100,point[3]["y2"]*30+100)

GraphicsWindow.DrawLine(point[1]["x2"]*30+100,point[1]["y2"]*30+100,point[4]["x2"]*30+100,point[4]["y2"]*30+100)

' GraphicsWindow.DrawLine(point[1]["x2"],point[1]["y2"],point[]["x2"],point[]["y2"])

EndSub

 

 

Turtle 1 (Jimmy, import code: ZTN954)

25 maart 2010

 

Blijkbaar komt de Turtle niet overal:

Turtle.Speed=100

For teller=1 To 100

  Turtle.TurnRight()

  Turtle.Move(Teller)

  EndFor

Als je de code een beetje aanpast krijg je een mooie spiraal:

 

Turtle.Speed=100

For teller=1 To 100

  Turtle.TurnRight()

  Turtle.Move(Teller*2)

  EndFor

 

 

 

 

 

 

 

 

 

 

 

 

Bewegende lijn (import code: QDQ785)

25 maart 2010

Dit programma laat een mooie bewegende lijn zien.

Door een bijzonder effect (anti-aliassing) worden de lijnen niet helemaal gewist. Dat is jammer...

 

SB op je website (import code: QDQ785)

25 maart 2010

 

Je kunt een SB-programma zelfs op je website tonen.

Allereerst heb je Silverlight nodig op de PC waarop je de website wilt bekijken.

Publiceer je programma en noteer het ID.

Met de onderstaande code kun je het programma laten zien. Zet achter ProgrammId jouw ID. Je zult er achterkomen dat er wat beperking zijn, maar vooralsnog is het mooi dat het kan.

 

<object id='sbapp' data='data:application/x-silverlight-2,' type='application/x-silverlight-2' width='640' height='480'>
    <param name='source' value='http://smallbasic.com/program/ClientBin/SBWeb.xap'/>
    <param name='onError' value='onSilverlightError' />
    <param name='background' value='white' />
    <param name='minRuntimeVersion' value='3.0.40624.0' />
    <param name='autoUpgrade' value='true' />
    <param name='initParams' value='programId=QDQ785' />
</object>