Сортировка в GWBASIC

Я работаю с GWBASIC, но не могу найти простой способ сортировки (числа). У меня есть только 4 числа для работы (диапазон 150-200). После некоторых вычислений я получаю эти 4 числа, и мне нужно отсортировать их в порядке возрастания, чтобы перейдите к следующему шагу. Прямо сейчас я делаю это вручную, глядя на вывод на экране, и ищу наименьшее число и набираю его в порядке возрастания. Много потерянного времени, не говоря уже о нагрузке на глаза! Я искал все формулы, но не смог найти подходящую для меня. Вот как это выглядит: SM1 = 121.50 SM2 = 123,65 SM3 = 117.80 SM4 = 119.50 Новые значения заказа должны быть: XS1 = 117.80 XS2 = 119.50 XS3 = 121.50 XS4 = 123.65

Мне не нужно это печатать или видеть на экране, оно должно перейти к следующему этапу программы. Я был бы очень благодарен за очень простой процесс, чтобы я мог внести свой вклад в мою программу BASIC. Спасибо!

2 ответа

Первое решение действительно только для 4 номеров.

A=SM1 : B=SM2 : C=SM3 : D=SM4
If B<A Then Swap A,B
If C<A Then Swap A,C : Swap B,C Else If C<B Then Swap B,C
If D<A Then Swap A,D : Swap B,D : Swap C,D Else If D<B Then Swap B,D : Swap C,D Else If D<C Then Swap C,D
XS1=A : XS2=B : XS3=C : XS4=D

Второе решение с использованием массива. Это можно легко адаптировать для сортировки большего числа номеров.

Dim A(3) : A(0)=SM1 : A(1)=SM2 : A(2)=SM3 : A(3)=SM4
For J%=1 To 3 : REM *** 3 is one less than the number of values
  A=A(J%)
  For I%=0 To J%-1
    If A<A(I%) Then While I%<J% : Swap A,A(I%) : I%=I%+1 : Wend : A(I%)=A
  Next
Next
XS1=A(0) : XS2=A(1) : XS3=A(2) : XS4=A(3)

Я думаю, что вы можете использовать простую пузырьковую сортировку в массиве.

10 Dim a(3)  
20 a(0)=121.50
30 a(1)=123.65  
40 a(2)=117.80  
50 a(3)=119.50  
60 For L1 = 0 to 2  
70    For L2 =L1+1 to 3  
80       If a(L1)>a(L2) then swap a(L1), a(L2)  
90    Next L2  
100 Next L1  
110 For n = 0 to 3  
120   print a(n)  
130 Next n  
140 End  

Просто используйте логику, если согласны

Другие вопросы по тегам