Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[vb] formule werkt niet.

Pagina: 1
Acties:

  • Mathieuh
  • Registratie: September 2008
  • Laatst online: 26-09-2023
Hallo allemaal,

Met informatica leren wij nu visual basic for applications. Wij moesten een wiskundige puzzel oplossen:
Afbeeldingslocatie: http://img258.imageshack.us/img258/7416/hersenbrekergw0.gif

Er zijn 16 lege witte vlakken waar de getallen 1 t/m 16 in moeten komen, zodanig dat regel 1 van links naar rechts 19 is. Probleem: je mag de getallen 1 t/m 16 maar 1 keer gebruiken. Nu moesten wij de computer de eerste regel laten oplossen en alle mogelijke combinaties laten uitrekenen. Geen probleem tot dusver. Daarna moesten we ervoor zorgen dat de computer de getallen maar 1 keer gebruikte. tot dusver nog steeds geen probleem.

De volgende opdracht was om ook de tweede regel uit te laten rekenen samen met de eerste, zodanig dat je de getallen 1t/m 16 maar 1 keer gebruikte. De computer deed er een halve minuut over ongeveer en kwam met 20176 oplossingen. Nu ging ik kijken of het werkte en pakte de volgende getallen reeks die de computer mij gaf:

voor regel 1: 2 8 16 15 => 2/8*16+15 = 19 dit klopt dus. Maar hiernaast stond voor regel 2:
7 6 12 3 => 7-6+12/3 = 5 en dat is dus niet zo, het is 4,33333. Hieronder staat mijn programma dat ik in excel liet uitvoeren:
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub opdracht1()
rij = 1
 For a = 1 To 16
    For b = 1 To 16
        For c = 1 To 16
            For d = 1 To 16
              If (a / b * c + d = 19) Then
                For e = 1 To 16
                 For f = 1 To 16
                  For g = 1 To 16
                   For h = 1 To 16
                   If (e - f + g / h = 5) Then
                    
                    If (a = b Or a = c Or a = d Or b = c Or b = d Or c = d Or a = e Or a = f Or a = g Or a = h Or b = e Or b = f Or b = g Or b = h Or c = e Or c = f Or c = g Or c = h Or d = e Or d = f Or d = g Or d = h Or e = f Or e = g Or e = h Or f = g Or f = h Or g = h) Then
                    
                    Else
                    
                        Cells(rij, 1) = a
                        Cells(rij, 2) = b
                        Cells(rij, 3) = c
                        Cells(rij, 4) = d
                        Cells(rij, 5) = a / b * c + d
                        Cells(rij, 6) = e
                        Cells(rij, 7) = f
                        Cells(rij, 8) = g
                        Cells(rij, 9) = h
                        Cells(rij, 10) = e - f + g / h
                        rij = rij + 1
                    End If
                    End If
                    Next h
                   Next g
                  Next f
                 Next e
                End If
            Next d
        Next c
    Next b
Next a
End Sub


Wie kan mij helpen om de foute antwoorden eruit te halen of mij vertellen wat ik fout doe.

Alvast bedankt,

Mathieu

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 20:19

Maasluip

Frontpage Admin

Kabbelend watertje

Mathieuh schreef op woensdag 01 oktober 2008 @ 09:46:
Hallo allemaal,
voor regel 1: 2 8 16 15 => 2/8*16+15 = 19 dit klopt dus. Maar hiernaast stond voor regel 2:
7 6 12 3 => 7-6+12/3 = 5 en dat is dus niet zo, het is 4,33333.
Als je netjes Mijnheer van Dalen uitvoert klopt dat wel.
7 - 6 + 12 / 3 wordt uitgevoerd ald 7 - 6 + (12 / 3) omdat delen voor optellen of aftrekken komt.
Ik heb begrepen dat deze simpele rekenregel tegenwoordig niet meer geleerd wordt, ik zou hem toch maar volgen, want zoals je ziet doen computers dat wel.

Signatures zijn voor boomers.


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 21:39

MueR

Admin Devschuur® & Discord

is niet lief

offtopic:
Dat wordt nog wel geleerd Maasluip, alleen wordt het er op de middelbare school vervolgens weer uit geslagen door mensen te verplichten met rekenmachines te werken

Anyone who gets in between me and my morning coffee should be insecure.


  • lier
  • Registratie: Januari 2004
  • Laatst online: 22:29

lier

MikroTik nerd

MueR schreef op woensdag 01 oktober 2008 @ 10:09:
offtopic:
Dat wordt nog wel geleerd Maasluip, alleen wordt het er op de middelbare school vervolgens weer uit geslagen door mensen te verplichten met rekenmachines te werken
En daar gelden dan opeens andere regels voor ?
Je moet haakjes toe voegen om volgordelijkheid af te dwingen.

Eerst het probleem, dan de oplossing


  • kw4h
  • Registratie: Februari 2008
  • Laatst online: 08-11 11:11
MueR schreef op woensdag 01 oktober 2008 @ 10:09:
offtopic:
Dat wordt nog wel geleerd Maasluip, alleen wordt het er op de middelbare school vervolgens weer uit geslagen door mensen te verplichten met rekenmachines te werken
Op rekenmachines moet je ook haakjes invoeren hoor, die doen hetzelfde als processors - namelijk die regels volgen :)

  • Mathieuh
  • Registratie: September 2008
  • Laatst online: 26-09-2023
Oké, echt super bedankt mensen. Er was dus helemaal niets fout met mijn script, ik keek het gewoon op de verkeerde manier na met m'n rekenmachine?

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 23:49

Reptile209

- gers -

Er is een verschil tussen "niets fout met mijn script" en "is een goed script" :+. Ja, je script geeft volgens mij het juiste antwoord. En ja, het kan een stuk efficienter ;).

Voorbeeldje, gebaseerd op je eigen code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
For a = 1 to 16
  For b = 1 to 16
    if b<>a then
      For c = 1 to 16
        if c<>a and c<>b then  'Alle binnenliggende loops overslaan als de waarde van c al in gebruik is
...
        end if
      next c
    end if
  next b
next a
...

Hiermee breng ik - op mijn PC - de rekentijd al terug van 32 naar 24 seconden :). Bovendien kan je dan die draak van een if-statement op regel 14 weglaten, en toont het meer inzicht in wat je wil bereiken. Met wat je nu doet, doorloop je alle waarden, ook degenen die je makkelijk overboord kunt gooien.
Er zijn ongetwijfeld nog efficientere methoden te gebruiken, maar die mag je zelf uitvogelen :).

Zo scherp als een voetbal!


  • Mathieuh
  • Registratie: September 2008
  • Laatst online: 26-09-2023
Reptile209 schreef op woensdag 01 oktober 2008 @ 21:19:
Er is een verschil tussen "niets fout met mijn script" en "is een goed script" :+. Ja, je script geeft volgens mij het juiste antwoord. En ja, het kan een stuk efficienter ;).

Voorbeeldje, gebaseerd op je eigen code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
For a = 1 to 16
  For b = 1 to 16
    if b<>a then
      For c = 1 to 16
        if c<>a and c<>b then  'Alle binnenliggende loops overslaan als de waarde van c al in gebruik is
...
        end if
      next c
    end if
  next b
next a
...

Hiermee breng ik - op mijn PC - de rekentijd al terug van 32 naar 24 seconden :). Bovendien kan je dan die draak van een if-statement op regel 14 weglaten, en toont het meer inzicht in wat je wil bereiken. Met wat je nu doet, doorloop je alle waarden, ook degenen die je makkelijk overboord kunt gooien.
Er zijn ongetwijfeld nog efficientere methoden te gebruiken, maar die mag je zelf uitvogelen :).
Dankjewel voor je advies. Ik ga het zeker uitproberen.

Ik ben dit schooljaar ( is ongeveer 4 á 5 weken geleden :P) begonnen met visual basic dus ik werk nog niet echt heel efficiënt ;).

Nogmaals ontzettend bedankt voor jullie hulp
Pagina: 1