Avatar billede peterref Nybegynder
19. april 2005 - 15:33

Sorteringsalgoritme i VBA oversat fra assembler hjælp?

Sådan ser assembler koden ud.... Det er det jeg vil have oversat til VBA

data.
        num[100] tal
        num antal 0
        num i 0
        num J 0
        num Min 0
        num iMin 0
code.
        //indlæsning af tabel.
        int r1 10 //indlæser fra tastatur til r1(indlæser hvor mange tal vi vil indlæse)
        store r1 antal //gemmer indholdet fra r1 i antal (tastatur inputtet)
       
        loada r1 tal //henter det første tal i "tal"
        sub r1 #1 r1 //trækker 1 til tals adresse som ligger i r1 og gemmer i r1
       
        load r3 antal //henter indholdet af antal ind i r3
a. Peter:       
        sub r3 #1 r3 //trækker 1 fra r3 og gemmer i r3 (altså en fra antal)
        add r1 #1 r1 //ligger en til tals adresse, hele foregår i r1
        int r2 10 //indlæser et af de før bestemte antal tal fra tastaturet.
        store r2 r1 //gemmer det indlæste tal på tals adresse i r1. Altså på variablen tals plads 1,2,3..
        jmpnz r3 Peter //Programmet hopper forfra indtil det har talt ned til 0 i antal, altså når der ikke skal indlæses flere tal.
       
        //sorter
1.    store r0 i //gemmer r0 i, "i". Altså nulstiller i.
b. niels:   
2a.  load r3 i //henter i ind i r3
        load r2 r3+tal // henter i+tal=T(i) ind i r2
        store r2 Min //gemmer r2 i T(i) og dermed sætter T(i)=i
       
        load r1 i // henter "i" ind i r1
2b.  store r1 iMin //gemmer indholdet i r1(i) i iMin og dermed sætter i=iMin
       
        add r1 #1 r1 //Ligger 1 til i
3.    store r1 J //gemmer i+1 i J og dermed sætter i+1=J
c. thor:         
4.    load r1 J //henter indholdet af J ind i r1
        load r2 r1+tal //henter J+tal=T(J) ind i r2
        load r3 Min //henter indholdet af Min ind i r3
        sub r3 r2 r1 //trækker r2 fra r3 (T(j)-Min) Og gemmer i r1
        jmplt r1 franz // hopper til franz hvis r1 er mindre end 0
       
5a.  store r2 Min // gemmer indholdet af r2(T(j))i Min T(j)=Min       
5b.  load r2 J // henter J ind i r2       
        store r2 iMin // gemmer r2(J) i iMin og dermed sætter J=iMin
d. franz:     
6.    load r2 J // henter J ind i r2
        add r2 #1 r2 //Ligger 1 til J i r2
        store r2 J //gemmer r2 i J. Altså har bare lagt 1 til J
       
7.    load r3 antal // henter antal ind i r3
        sub r2 r3 r1 // trækker r3 fra r2 altså antal fra J og gemmer i r1
        jmplt r1 thor // hvis r1 er mindre end 0 hopper den til thor
       
8a.  load r1 i // henter i ind i r1
        load r2 r1+tal // henter r1(i)+tal=T(i) ind i r2.
        load r3 iMin // Henter iMin ind i r3
        store r2 r3+tal // gemmer r2 på lageradressen r3(iMin)+tal=T(iMin) og dermed sætter T(iMin)=T(i)
       
8b.  load r1 Min //henter Min ind i r1
        load r2 i // henter i ind i r2
        store r1 r2+tal // gemmer r1(Min) på lageradressen r2(i)+tal=T(i) og dermed sætter T(i)=Min
       
9.    add r2 #1 r2 // ligger 1 til i.
        store r2 i // gemmer r2 i "i"
       
10.  load r3 antal // henter antal ind i r3
        load r2 i //henter i ind i r2
        add r2 #1 r2
        sub r2 r3 r1 // trækker r3(antal) fra r2(i) og gemmer i r1. Tester om i<N
        jmplt r1 niels // hvis r1 er mindre end 0 hopper den til niels         
       
        //udskriv
        loada r1 tal //henter adressen på det første tal i "tal" og gemmer i r1.
        load r2 r1 //henter indholdet på adressen fra r1 ind i r2
        int r2 11 // udskriver r2 til skærmen
        load r3 antal //henter antal ind i r3
        sub r3 #1 r3 //trækker 1 fra r3 og gemmer i r3(antal)
e. jaeger:       
        sub r3 #1 r3 //trækker en fra r3 og gemmer i r3(antal)
        add r1 #1 r1 //ligger 1 til r1 og gemmer i r1(tal)
        load r2 r1 //henter indholdet på adressen fra r1 ind i r2
        int r2 11 //udskriver r2 til skærmen
        jmpnz r3 jaeger //hopper til jaeger hvis r3 ikke er 0.
       
        int r0 0 //afslutter maskinen fuldstændigt.

Dette er nogenlunde hvad jeg har i VBA, hvad skal jeg mere have og er der sågar nogen der kan løse denne opgave?

Option Compare Database
Option Explicit
Public Sub assembsort(ByRef data() As Long, ByVal venstre As Long, ByVal højre As Long)

Dim i, j As Long
Dim elem As Long
Dim min As Long
Dim iMin As Long
Dim tal(100) As Long

i = 0

Do
min = t(i)
iMin = i

j = i + 1

If t(j) < min Then
    min = t(j)
    iMin = j
End If

j = j + 1

End Sub


Kort sagt hjælp mig med en sorteringsalgoritme i VBA som skal ligne en sorteringsalgoritme fra assembler..

HVis der er nogen der mangler tabeller etc for at løse opgaven har jeg det i et .doc
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
Kurser inden for grundlæggende programmering

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