String Gadget sorting

Just starting out? Need help? Post your questions and find answers here.
Rikuk
User
User
Posts: 24
Joined: Mon May 30, 2005 11:36 am

String Gadget sorting

Post by Rikuk »

Could someone help me with some code for the following problem.
I've 10 String gadgets where the user enters numbers between 1 & 99, when the numbers have been entered I need an output stating

String 1 has 8 greater 1 equal 1 lower
String 2 has 5 greater 3 equal 2 lower
ect

Thanks in advance
Trond
Always Here
Always Here
Posts: 7446
Joined: Mon Sep 22, 2003 6:45 pm
Location: Norway

Post by Trond »

Code: Select all

OpenWindow(0, 0, 0, 400, 265, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "")
CreateGadgetList(WindowID())
  Dim StringGadgets.l(9)
  Dim Labels.l(9)
  For I = 0 To 9
    StringGadgets(I) = StringGadget(#PB_Any, 10,  10 + I * 25, 100, 20, "")
    Labels(I)        = TextGadget(#PB_Any,   120, 13 + I * 25, 200, 20, "")
  Next

Procedure Calculate()
  Greater.l
  Equal.l
  Lower.l
  SlowVal.l
  FastVal.l
  For I = 0 To 9
    SlowVal = Val(GetGadgetText(StringGadgets(I)))
    Greater = 0
    Equal   = 0
    Lower   = 0
    For J = 0 To 9
      If J <> I
        FastVal = Val(GetGadgetText(StringGadgets(J)))
        If FastVal < SlowVal
          Lower + 1
        ElseIf FastVal > SlowVal
          Greater + 1
        Else
          Equal + 1
        EndIf
      EndIf
    Next
    SetGadgetText(Labels(I), Str(Greater) + " greater, " + Str(Equal) + " equal and " + Str(Lower) + " lower.")
  Next
EndProcedure

Procedure.l EventOurGadgets(id)
  For I = 0 To 9
    If id = StringGadgets(I)
      ProcedureReturn 1
    EndIf
  Next
  ProcedureReturn 0
EndProcedure

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      If EventOurGadgets(EventGadgetID())
        Calculate()
      EndIf
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver

Rikuk
User
User
Posts: 24
Joined: Mon May 30, 2005 11:36 am

Post by Rikuk »

Thank you just what I needed.

Rik :D
Rikuk
User
User
Posts: 24
Joined: Mon May 30, 2005 11:36 am

Post by Rikuk »

Hi Trond,
Sorry to be a pain your'e code works great, I've tryed and failed to add the next bit could you help please :oops:

I need to add next the number of times a number has another with 10 of it
lower.

ie
string 1=50 (between 50 and 40=1)
string 2=45 (between 45 and 35=1)
string 3=35 (between 35 and 25=0)
string 4=55 (between 55 and 45=2)

Rik
Trond
Always Here
Always Here
Posts: 7446
Joined: Mon Sep 22, 2003 6:45 pm
Location: Norway

Post by Trond »

Code: Select all

OpenWindow(0, 0, 0, 400, 265, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "") 
CreateGadgetList(WindowID()) 
  Dim StringGadgets.l(9) 
  Dim Labels.l(9) 
  For I = 0 To 9 
    StringGadgets(I) = StringGadget(#PB_Any, 10,  10 + I * 25, 100, 20, "") 
    Labels(I)        = TextGadget(#PB_Any,   120, 13 + I * 25, 290, 20, "") 
  Next 

Procedure Calculate() 
  Greater.l 
  Equal.l 
  Lower.l 
  SlowVal.l 
  FastVal.l
  WithinTen.l
  For I = 0 To 9 
    SlowVal   = Val(GetGadgetText(StringGadgets(I))) 
    Greater   = 0 
    Equal     = 0 
    Lower     = 0 
    WithinTen = 0
    For J = 0 To 9 
      If J <> I 
        FastVal = Val(GetGadgetText(StringGadgets(J))) 
        ;Lower, equal or higher
        If FastVal < SlowVal 
          Lower + 1 
        ElseIf FastVal > SlowVal 
          Greater + 1 
        Else 
          Equal + 1 
        EndIf 
        ;Inside 10 lower
        ;Or: If FastVal <= SlowVal And FastVal > SlowVal-10 depending on what you meant
        If FastVal < SlowVal And FastVal >= SlowVal-10
          WithinTen + 1
        EndIf
      EndIf 
    Next 
    SetGadgetText(Labels(I), Str(Greater) + " greater, " + Str(Equal) + " equal and " + Str(Lower) + " lower.") 
    SetGadgetText(Labels(I), GetGadgetText(Labels(I)) + " Between " + Str(SlowVal) + " and " + Str(SlowVal-10) + ": " + Str(WithinTen) + ".")
  Next 
EndProcedure 

Procedure.l EventOurGadgets(id) 
  For I = 0 To 9 
    If id = StringGadgets(I) 
      ProcedureReturn 1 
    EndIf 
  Next 
  ProcedureReturn 0 
EndProcedure 

Repeat 
  Select WaitWindowEvent() 
    Case #PB_Event_Gadget 
      If EventOurGadgets(EventGadgetID()) 
        Calculate() 
      EndIf 
    Case #PB_Event_CloseWindow 
      Break 
  EndSelect 
ForEver
Rikuk
User
User
Posts: 24
Joined: Mon May 30, 2005 11:36 am

Post by Rikuk »

Thank you again :D

Rik
Post Reply