Реализации алгоритмов/Алгоритм Евклида: различия между версиями

Содержимое удалено Содержимое добавлено
→‎BASIC: Оптимизации
Строка 36:
50 IF A >= B THEN LET A = A - B: GOTO 50
60 IF A = 0 THEN LET A = B: GOTO 90
70 IFLET B >= B - A: LETIF B >= B - A: THEN GOTO 70
80 IF B <> 0 THEN GOTO 4050
90 PRINT A
100 END
Строка 65:
A% = A% MOD B%
'Для вычитания убрать предыдущую строку и раскомментировать следующие:
'DO WHILEUNTIL A% >=< B%
' A% = A% - B%
'LOOP
Строка 74:
B% = B% MOD A%
'Для вычитания убрать предыдущую строку и раскомментировать следующие:
'DO 'Перед входом в этот цикл 0 < A% < B%, поэтому проверка B% < A% вынесена в постусловие
'DO WHILE B% >= A%
' B% = B% - A%
'LOOP UNTIL B% < A%
LOOP
FNGCD% = A%
Строка 83:
 
===[[w:PowerBASIC|PowerBASIC]], [[w:QBASIC|QBASIC]], [[w:QuickBasic|QuickBasic]] версий ≥ 4.0, [[w:Visual Basic|Visual Basic]]===
В следующих примерах используется тип <code>IntegerLong</code> (стандартноедлинное целое); вместо него можно применять также тип <code>LongInteger</code> (длинноестандартное целое).
 
Цикл, деление с остатком либо вычитание (при указанных заменах в коде):
<source lang="vb">
Function GCD(a As IntegerLong, b As IntegerLong) As IntegerLong
a = Abs(a)
b = Abs(b)
Строка 93:
a = a Mod b
'Для вычитания убрать предыдущую строку и раскомментировать следующие:
'Do WhileUntil a >=< b
' a = a - b
'Loop
Строка 102:
b = b Mod a
'Для вычитания убрать предыдущую строку и раскомментировать следующие:
'Do 'Перед входом в этот цикл 0 < a < b, поэтому проверка b < a вынесена в постусловие
'Do While b >= a
' b = b - a
'Loop Until b < a
Loop
GCD = a
Строка 112:
Рекурсия, деление с остатком:
<source lang="vb">
Function GCD(a As IntegerLong, b As IntegerLong) As IntegerLong
If b = 0 Then
GCD = Abs(a)
Строка 122:
 
===[[w:VB.NET|VB.NET]]===
В следующих примерах используется тип <code>IntegerLong</code> (стандартноедлинное целое); вместо него можно применять любые другие целочисленные типы платформы [[w:NET_Framework|.NET]].
 
Цикл, деление с остатком либо вычитание (при указанных заменах в коде):
<source lang="vb">
Shared Function GCD(ByVal a As IntegerLong, ByVal b As IntegerLong) As IntegerLong
a = Math.Abs(a)
b = Math.Abs(b)
Строка 132:
a = a Mod b
'Для вычитания убрать предыдущую строку и раскомментировать следующие:
'Do WhileUntil a >=< b
' a -= b
'Loop
Строка 138:
b = b Mod a
'Для вычитания убрать предыдущую строку и раскомментировать следующие:
'Do 'Перед входом в этот цикл 0 < a < b, поэтому проверка b < a вынесена в постусловие
'Do While b >= a
' b -= a
'Loop Until b < a
Loop
Return a
Строка 148:
Рекурсия, деление с остатком либо вычитание (при указанных заменах в коде):
<source lang="vb">
Shared Function GCD (ByVal a As IntegerLong, ByVal b As IntegerLong) As IntegerLong
If b = 0 Then Return Math.Abs(a)
Return GCD(b, a Mod b)