Toon posts:

[flash] vergelijking

Pagina: 1
Acties:
  • 166 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik wil drie getallen met elkaar vergelijken
stel ik heb 6, 7, 8
Nu moet ik het hoogste cijfer eruit halen iemand enig idee hoe ik dit op kan lossen zonder dat ik 7 keer moet gaan if elsen? *D

Verwijderd

Mik het in een array, je hebt vast wel een functie voor het maximum in een array.

En hoe kom je aan die 7 keer if else? 2 keer is zat voor 3 getallen.

Zoek anders een reference guide voor alle nuttige functies.

[edit]
De standaard Math.max werkt gewoon, dus voor 3 getallen is

max = Math.max(Math.max(a, b), c) genoeg.

Verwijderd

Op maandag 19 november 2001 16:49 schreef Cheatah het volgende:
Mik het in een array, je hebt vast wel een functie voor het maximum in een array.

En hoe kom je aan die 7 keer if else? 2 keer is zat voor 3 getallen.

Zoek anders een reference guide voor alle nuttige functies.

[edit]
De standaard Math.max werkt gewoon, dus voor 3 getallen is

max = Math.max(Math.max(a, b), c) genoeg.
Bubblesort :)

Verwijderd

M jah met een array werkt inderdaad, kun je ook veel cijfers erin stoppen:
code:
1
2
getallen=new Array('8', '6', '7');
getallen.sort();

Dit geeft van 6,7,8 dus zal getallen[getallen.length] de hoogste waarde geven.

Je kunt natuurlijk ook gewoon getallen.reverse() doen en dan geeft getallen.splice() de hoogste waarde, want reverse draait de array om en splice geeft de eerste waarde van de array,

oftewel er zijn een heeeele hoop manieren :)...

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

B-Top is de enige die het goede antwoord geeft. Dit is een perfect voorbeeld waar je Bubblesort algoritme voor gebruikt ( of een Quicksort / Mergesort).

Bubblesort algoritme werkt als volgt:

Ga door een lijst met nummers ( elementen ) en vergelijk het huidige nummer ( of element ) met het volgende nummer. Heeft het huidige nummer een grotere waarde dan het volgende nummer, verwissel deze dan. Als de Bubblesort is afgelopen, zal het nummer met de grootse waarde op de correcte positie in de lijst staan. Dit proces ( van vergelijken en verwisselen ) word X - 1 keer herhaald. X is dan het aantal nummers in de lijst. Als je dit dan vertaalt naar code:
code:
1
2
3
4
5
6
7
8
9
10
function bubbleSort(inputArray, start, rest) {
   for (var i = rest - 1; i >= start;  i--) {
    for (var j = start; j <= i; j++) {
       if (inputArray[j+1] < inputArray[j]) {
        var tempValue = inputArray[j];
        inputArray[j] = inputArray[j+1];
        inputArray[j+1] = tempValue;
       }
    }
   }

Wat belangrijk is om te vermelden is dat dit algoritme langzaam en inefficient is. Bij een grote lijst met nummers zal een Mergesort veel efficienter zijn. Er is een snellere versie van Bubblesort die Two-Way Bubblesort heet.

HTH :)

"You're only as good, as what you did last week."


Verwijderd

Op maandag 19 november 2001 19:40 schreef Seraph het volgende:
M jah met een array werkt inderdaad, kun je ook veel cijfers erin stoppen:
code:
1
2
getallen=new Array('8', '6', '7');
getallen.sort();

Dit geeft van 6,7,8 dus zal getallen[getallen.length] de hoogste waarde geven.

Je kunt natuurlijk ook gewoon getallen.reverse() doen en dan geeft getallen.splice() de hoogste waarde, want reverse draait de array om en splice geeft de eerste waarde van de array,

oftewel er zijn een heeeele hoop manieren :)...
Seraph, ik wil niet heeeel vervelend zijn, maarum...

De cijfers die jij in je array stopt worden nog steeds als string behandeld...
bij de getallen die jij noemt geen probleem...als ze maar onder de tien blijven...

Probeer het maar eens zo :
getallen=new Array('8', '6', '71', '72','11', '9');

Dan komt daar toch het verkeerde getal uit...

dus toch een bubble sort...al ga ik mischien wel ff een quicksort schrijven.. :)

Verwijderd

Op maandag 19 november 2001 21:26 schreef B-Top het volgende:

[..]

Seraph, ik wil niet heeeel vervelend zijn, maarum...

De cijfers die jij in je array stopt worden nog steeds als string behandeld...
bij de getallen die jij noemt geen probleem...als ze maar onder de tien blijven...

Probeer het maar eens zo :
getallen=new Array('8', '6', '71', '72','11', '9');

Dan komt daar toch het verkeerde getal uit...

dus toch een bubble sort...al ga ik mischien wel ff een quicksort schrijven.. :)
Hmmz :Y),

niet goed genoeg gekeken, stom van me :)...

Verwijderd

als je alleen het hoogste getal moet hebben hoef je toch niet een heel array te sorteren.

Verwijderd

Op maandag 19 november 2001 21:07 schreef oh,when? het volgende:
B-Top is de enige die het goede antwoord geeft.
:? pardon?

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op maandag 19 november 2001 21:26 schreef B-Top het volgende:
...dus toch een bubble sort...al ga ik mischien wel ff een quicksort schrijven.. :)
of anders een Mergesort ;)

"You're only as good, as what you did last week."


Verwijderd

PHP:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?
function Array_quickSort(a, low, high) {
    if(low + 10 > high) {
        this.bubbleSort(a, low, high);
    }else{
        var middle = Math.floor((low + high) / 2);
        if(a[middle] < a[low]) this.swap(a, low, middle);
        if(a[high] < a[low]) this.swap(a, low, high);
        if(a[high] < a[middle]) this.swap(a, middle, high);    

        this.swap(a, middle, high - 1);
        var pivot = a[high - 1];
        var i = low;
        var j = high - 1;
        while(true) {
            while( a[++i] < pivot);
            while( pivot < a[--j]);
            if(i < j) {
                this.swap(a, i, j);
            }else{
                break;
            }
        }    

        this.swap(a, i, high - 1);
        
        this.quickSort(a, low, i - 1);
        this.quickSort(a, i + 1, high);
    }
}

function Array_sortIt() {
    this.quickSort(this, 0, this.length - 1);
}

function Array_swap(a, i, j) {
    var temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

function Array_bubbleSort(inputArray, start, rest) {
   for (var i = rest - 1; i >= start;  i--) {
      for (var j = start; j <= i; j++) {
         if (inputArray[j+1] < inputArray[j]) {
            var tempValue = inputArray[j];
            inputArray[j] = inputArray[j+1];
            inputArray[j+1] = tempValue;
         }
      }
   }
}
Array.prototype.bubbleSort = Array_bubbleSort;
Array.prototype.quickSort = Array_quickSort;
Array.prototype.swap = Array_swap;
Array.prototype.sortIt = Array_sortIt;
?>

var getallen = new Array(8, 6, 7, 4, 3, 2, 9, 1, 5, 12, 13, 18, 19, 204, 123, 233, 123, 11, 1, 12, 332);
getallen.sortIt();

oef, in java was het makkelijker :)

Verwijderd

<KLAP><KLAP><KLAP>....ik wilde er net aan gaan beginnen....

Verwijderd

ik was de stop conditie vergeten, ik me maar afvragen waarom flash crashde :)

Verwijderd

Op dinsdag 20 november 2001 00:23 schreef Snow-in-a-can het volgende:
ik was de stop conditie vergeten, ik me maar afvragen waarom flash crashde :)
Ik snap nog steeds niet wat jullie nou allemaal moeilijk doen. Er staat dat hij 3 getallen wil vergelijken.

Maar goed...

  • Pelle
  • Registratie: Januari 2001
  • Nu online

Pelle

🚴‍♂️

Op maandag 19 november 2001 21:07 schreef oh,when? het volgende:
Dit proces ( van vergelijken en verwisselen ) word X - 1 keer herhaald. X is dan het aantal nummers in de lijst.
Euhm, nee. Ja, als je alleen het grootste getal op de juiste positie wilt wel ja. Maar niet als je de hele array wilt sorteren. Want nadat je je grootste getal hebt gevonden, wil je je een-na-grootste hebben, je twee-na-grootste, enzovoorts. Het vergelijken in een bubblesort voer je dus ((x-1) + (x-2) + (x-3) + .. + 1) keer uit.
Wat belangrijk is om te vermelden is dat dit algoritme langzaam en inefficient is. Bij een grote lijst met nummers zal een Mergesort veel efficienter zijn.
Een mergesort? Dat lijkt me stug.. dat is alleen handig als je met hele grote verzamelingen getallen werkt, die je niet allemaal tegelijk in je geheugen kunt krijgen. Hier een mooi voorbeeld van hoe mergesort werkt: http://www1.mmu.edu.my/~mukund/dsal/MSort.html
Er is een snellere versie van Bubblesort die Two-Way Bubblesort heet.

HTH :)
True. Quicksort is ook erg snel, en dan heb je nog advanced quicksort, enzovoorts.

Nog een linkje waar je helemaal goed het verschil kunt zien: http://www.cs.ubc.ca/spider/harrison/Java/sorting-demo.html

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op dinsdag 20 november 2001 00:26 schreef Cheatah het volgende:

[..]

Ik snap nog steeds niet wat jullie nou allemaal moeilijk doen. Er staat dat hij 3 getallen wil vergelijken.

Maar goed...
wij geven les in algoritmes ;)

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
[b]
De standaard Math.max werkt gewoon, dus voor 3 getallen is

max = Math.max(Math.max(a, b), c) genoeg.
Dit was voor mij genoeg om eruit te komen!

Verwijderd

Op dinsdag 20 november 2001 09:37 schreef kevenius het volgende:

[..]

Dit was voor mij genoeg om eruit te komen!
>:) :o

Verwijderd

Om alleen het hoogste getal te krijgen kan je idd de bovenstaande methode gebruiken.
We've all got carried away, en begonnen in ons enthousiasme de complete nummer reeks te sorteren....

Maar ja om dus alleen de hoogste waarde uit een array te krijgen heb ik dan ook wel een functie'tje:
code:
1
2
3
4
5
6
7
8
9
10
11
array.prototype.getHigh = function(){
    max = this.length;
    high = this[0];
    for(n=1; n<=max; n++){
        high = Math.max(high, this[n]);
    }   
    return(high);
}

nummers = new Array(1,5,3,8,2,7,8,9,21,10,32,43,23,11);
a = nummers.getHigh();

Usage is dus:

output = arraywaaruitjedewaardewil.getHigh();
Pagina: 1