Normal Topic Problem with program code: (Read 1026 times)
wase
Junior Member
**
Offline


Always looking for a good
code

Posts: 57
Location: Austria
Joined: Jun 22nd, 2004
Problem with program code:
Jun 23rd, 2004 at 12:15am
Print Post Print Post  
hello iv got a general question: does sesame support recursive programming code??

if yes i have got a problem at implementing the quicksort code for sorting an array:

i allways get a error in line 15:
error while parsing module " global code : QuickSort":
Array name expected.
If ArtArr[m,3 > ArtArr[n,3] Then {

Following the complete code:

Subroutine QuickSort(ArtArr as array, m as Int, n as Int)
     var i as int
     var j as int
     var temp1 as int
     var temp2 as int
     var temp3 as int
     var temp4 as int
     var k as int
     var x as int

If m = n Then return

If ArtArr[m,3] > ArtArr[n,3] Then {
     temp1 = ArtArr[m, 1]
     temp2 = ArtArr[m, 2]
     temp3 = ArtArr[m, 3]
     temp4 = ArtArr[m, 4]
     ArtArr[m,1] = ArtArr[n,1]
     ArtArr[m,2] = ArtArr[n,2]
     ArtArr[m,3] = ArtArr[n,3]
     ArtArr[m,4] = ArtArr[n,4]
     ArtArr[n,1] = temp1
     ArtArr[n,2] = temp2
     ArtArr[n,3] = temp3
     ArtArr[n,4] = temp4
}

If m + 1 = n Then return

k = (m+n)/2

If ArtArr[m,3] > ArtArr[k,3] Then {
     temp1 = ArtArr[m,1]
     temp2 = ArtArr[m,2]
     temp3 = ArtArr[m,3]
     temp4 = ArtArr[m,4]
     ArtArr[m,1] = ArtArr[k,1]
     ArtArr[m,2] = ArtArr[k,2]
     ArtArr[m,3] = ArtArr[k,3]
     ArtArr[m,4] = ArtArr[k,4]
     ArtArr[k,1] = temp1
     ArtArr[k,2] = temp2
     ArtArr[k,3] = temp3
     ArtArr[k,4] = temp4
}

If ArtArr[k,3] > ArtArr[n,3] Then {
     temp1 = ArtArr[k,1]
     temp2 = ArtArr[k,2]
     temp3 = ArtArr[k,3]
     temp4 = ArtArr[k,4]
     ArtArr[k,1] = ArtArr[n,1]
     ArtArr[k,2] = ArtArr[n,2]
     ArtArr[k,3] = ArtArr[n,3]
     ArtArr[k,4] = ArtArr[n,4]
     ArtArr[n,1] = temp1
     ArtArr[n,2] = temp2
     ArtArr[n,3] = temp3
     ArtArr[n,4] = temp4
}

If m + 2 = n return

x = ArtArr[k,3]
i = m + 1
j = n - 1

While i <= j {
     While i < n AND ArtArr[i,3] <= x {i = i + 1}
     While j > m AND ArtArr[j,3] >= x {j = j - 1}
     If i < j Then {
           temp1 = ArtArr[i,1]
           temp2 = ArtArr[i,2]
           temp3 = ArtArr[i,3]
           temp4 = ArtArr[i,4]
           ArtArr[i,1] = ArtArr[j,1]
           ArtArr[i,2] = ArtArr[j,2]
           ArtArr[i,3] = ArtArr[j,3]
           ArtArr[i,4] = ArtArr[j,4]
           ArtArr[j,1] = temp1
           ArtArr[j,2] = temp2
           ArtArr[j,3] = temp3
           ArtArr[j,4] = temp4
           i = i + 1
           j = j - 1      
     }
}
QuickSort(ArtArr as Array, m as Int, j as Int)
QuickSort(ArtArr as Array, i as Int, n as Int)

End Subroutine
  
Back to top
ICQ ICQ  
IP Logged
 
Bob_Hansen
Senior Member
Members
*****
Offline


WOW, They have the Internet
on computers now!

Posts: 1861
Location: Salem, NH
Joined: Nov 24th, 2002
Re: Problem with program code:
Reply #1 - Jun 23rd, 2004 at 12:58am
Print Post Print Post  
The program is attempting to access a generic array using "="  instead of a generic array call such as "setIntElement(v,a,e)"

See Programming Guide section on Advanced Functions, page 163, and the section on Generic Arrays, page 212.
  



Bob Hansen
Sesame Database Manager Professional
Sensible Solutions Inc.
Salem, NH
603-898-8223
Skype ID = sensiblesolutions
Back to top
IP Logged
 
wase
Junior Member
**
Offline


Always looking for a good
code

Posts: 57
Location: Austria
Joined: Jun 22nd, 2004
Re: Problem with program code:
Reply #2 - Jun 23rd, 2004 at 2:44am
Print Post Print Post  
thanks for help... i am very happy about it...now i hope it works.. the programmcode is now without errors

Grin  8)  Grin
  
Back to top
ICQ ICQ  
IP Logged
 
Bob_Hansen
Senior Member
Members
*****
Offline


WOW, They have the Internet
on computers now!

Posts: 1861
Location: Salem, NH
Joined: Nov 24th, 2002
Re: Problem with program code:
Reply #3 - Jun 23rd, 2004 at 4:11am
Print Post Print Post  
Would be good for all to see final resulting code for comparison.  Can you please post when verified?
  



Bob Hansen
Sesame Database Manager Professional
Sensible Solutions Inc.
Salem, NH
603-898-8223
Skype ID = sensiblesolutions
Back to top
IP Logged
 
wase
Junior Member
**
Offline


Always looking for a good
code

Posts: 57
Location: Austria
Joined: Jun 22nd, 2004
Re: Problem with program code:
Reply #4 - Jun 23rd, 2004 at 4:22am
Print Post Print Post  
i have one problem with the code:
it does change the variables but when i write the array to the output window it does not change!!!
i think it depends on the way i write it out...

when it works i will post it here

maybe u can take another look on it if u have time

i have added the tip from below so that the code does work (for people who need the code)

Quote:
Subroutine QuickSort(var ArtArr as array, m as Int, n as Int)
     var i as int
     var j as int
     var temp1 as int
     var temp2 as int
     var temp3 as int
     var temp4 as int
     var k as int
     var x as int

WriteLn("recusion")
If m = n Then return

If intElement(ArtArr, m,3) > intElement(ArtArr, n,3) Then {
     temp1 = intElement(ArtArr, m, 1)
     temp2 = intElement(ArtArr, m, 2)
     temp3 = intElement(ArtArr, m, 3)
     temp4 = intElement(ArtArr, m, 4)
     setIntElement(intElement(ArtArr, n,1), ArtArr, m,1)
     setIntElement(intElement(ArtArr, n,2), ArtArr, m,2)
     setIntElement(intElement(ArtArr, n,3), ArtArr, m,3)
     setIntElement(intElement(ArtArr, n,4), ArtArr, m,4)
     setIntElement(temp1, ArtArr, n,1)
     setIntElement(temp2, ArtArr, n,2)
     setIntElement(temp3, ArtArr, n,3)
     setIntElement(temp4, ArtArr, n,4)
}

If m + 1 = n Then return

k = (m + n) / 2

If intElement(ArtArr, m,3) > intElement(ArtArr, k,3) Then {
     temp1 = intElement(ArtArr, m, 1)
     temp2 = intElement(ArtArr, m, 2)
     temp3 = intElement(ArtArr, m, 3)
     temp4 = intElement(ArtArr, m, 4)
     setIntElement(intElement(ArtArr, k,1), ArtArr, m,1)
     setIntElement(intElement(ArtArr, k,2), ArtArr, m,2)
     setIntElement(intElement(ArtArr, k,3), ArtArr, m,3)
     setIntElement(intElement(ArtArr, k,4), ArtArr, m,4)
     setIntElement(temp1, ArtArr, k,1)
     setIntElement(temp2, ArtArr, k,2)
     setIntElement(temp3, ArtArr, k,3)
     setIntElement(temp4, ArtArr, k,4)
}

If intElement(ArtArr, k,3) > intElement(ArtArr, n,3) Then {
     temp1 = intElement(ArtArr, k, 1)
     temp2 = intElement(ArtArr, k, 2)
     temp3 = intElement(ArtArr, k, 3)
     temp4 = intElement(ArtArr, k, 4)
     setIntElement(intElement(ArtArr, n,1), ArtArr, k,1)
     setIntElement(intElement(ArtArr, n,2), ArtArr, k,2)
     setIntElement(intElement(ArtArr, n,3), ArtArr, k,3)
     setIntElement(intElement(ArtArr, n,4), ArtArr, k,4)
     setIntElement(temp1, ArtArr, n,1)
     setIntElement(temp2, ArtArr, n,2)
     setIntElement(temp3, ArtArr, n,3)
     setIntElement(temp4, ArtArr, n,4)
}

If m + 2 = n return

x = intElement(ArtArr, k,3)
i = m + 1
j = n - 1

While i <= j {
     While i < n AND intElement(ArtArr, i,3) <= x
           i = i + 1
     While j > m AND intElement(ArtArr, j,3) >= x
           j = j - 1
     If i < j Then {
     temp1 = intElement(ArtArr, i, 1)
     temp2 = intElement(ArtArr, i, 2)
           temp3 = intElement(ArtArr, i, 3)
           temp4 = intElement(ArtArr, i, 4)
           setIntElement(intElement(ArtArr, j,1), ArtArr, i,1)
           setIntElement(intElement(ArtArr, j,2), ArtArr, i,2)
           setIntElement(intElement(ArtArr, j,3), ArtArr, i,3)
           setIntElement(intElement(ArtArr, j,4), ArtArr, i,4)
           setIntElement(temp1, ArtArr, j,1)
           setIntElement(temp2, ArtArr, j,2)
           setIntElement(temp3, ArtArr, j,3)
           setIntElement(temp4, ArtArr, j,4)
           i = i + 1
           j = j - 1      
     }
}
QuickSort(ArtArr, m, j)
QuickSort(ArtArr, i, n)

End Subroutine


Var ArtArr as array[15,4] of int
Var ArtnArr as array[15,4] of int
Var z as Int
Var u as Int

For z = 1 to 15
ArtnArr[z,1] = @XLookup("D:\daten\Sesame\data\lager.db", z, "ArtNr0", "ArtNr0")
ArtnArr[z,2] = @XLookup("D:\daten\Sesame\data\lager.db", z, "ArtNr0", "Testt")
ArtnArr[z,3] = @XLookup("D:\daten\Sesame\data\lager.db", z, "ArtNr0", "EanStk")
ArtnArr[z,4] = @XLookup("D:\daten\Sesame\data\lager.db", z, "ArtNr0", "PreisStk")
WriteLn(ArtnArr[z,1]+"    "+ ArtnArr[z,2] +"       "+ ArtnArr[z,3] +"        "+ ArtnArr[z,4])
Next
ArtArr = ArtnArr
QuickSort(ArtArr, 1, 15)

For u = 1 to 15
WriteLn(ArtArr[u,1]+"    "+ ArtArr[u,2] +"       "+ ArtArr[u,3] +"        "+ ArtArr[u,4])
Next

« Last Edit: Jun 23rd, 2004 at 6:43am by wase »  
Back to top
ICQ ICQ  
IP Logged
 
Andreas
Lanticans
*****
Offline



Posts: 8
Location: Germany
Joined: Nov 22nd, 2002
Re: Problem with program code
Reply #5 - Jun 23rd, 2004 at 5:47am
Print Post Print Post  
SBasic does support recursion. To get the sorted array back from the sorting routine, change the prototype of the sorting procedure to:

Subroutine QuickSort(var ArtArr as array, m as Int, n as Int)

I have tested SBasic implementations of a recursive quicksort against a bubble sort and the speed advantages of quick sort are dramatic. If anyone is interested in the code, I could post it in the examples section.

Andreas.
  
Back to top
IP Logged
 
wase
Junior Member
**
Offline


Always looking for a good
code

Posts: 57
Location: Austria
Joined: Jun 22nd, 2004
Re: Problem with program code:
Reply #6 - Jun 23rd, 2004 at 6:41am
Print Post Print Post  
thanks for the super tip... now it works...

i have allready updated the upper code

to andreas:
if u have codes for Qicksort, BubbleSort, ShellSort or InputSort put it in the forum (if u want)
such codes are always helpfull

mfg
sebastian
  
Back to top
ICQ ICQ  
IP Logged