Что нового

Какой вид кода AutoIt и кодинга в целом предпочтительнее?

Tyonas

Новичок
Сообщения
4
Репутация
1
Вид №1:
Код:
; v.0.1

Global $Num = 2 ; "натуральное число"
Global $End = 2000 ; предел
Global $Sum = 0 ; сумма
Global $Tmp = $Num ; временная

If Mod($Num, 2) Then ; Mod(делимое, делитель) возвращает остаток от деления. 0=FALSE, другое число=TRUE
   MsgBox(16, "Error.", "Число не делится на 2 без остатка.")
   Exit
EndIf

If Not $Num > 0 And $Num <= 2000 Then
   MsgBox(16, "Error.", "ПНХ!!! Хочу натуральное число до 2000!")
   Exit
EndIf

While $Tmp <= $End
   $Sum += $Tmp
   $Tmp += 2
WEnd

MsgBox(64, "Ok.", "Сумма всех четных чисел начиная с " & $Num & " заканчивая " & $End & " = " & $Sum)


Вид №2:
Код:
; v.0.2

Global $Num = 100 ; "натуральное число"
Global $End = 2000 ; предел
Global $Sum = 0 ; сумма
Global $Tmp = $Num ; временная

If Mod($Num, 2) Then ; Mod(делимое, делитель) возвращает остаток от деления. 0=FALSE, другое число=TRUE
   MsgBox(16, "Error.", "Число не делится на 2 без остатка.")
Else
   If Not $Num > 0 And $Num <= 2000 Then
	  MsgBox(16, "Error.", "ПНХ!!! Хочу натуральное число до 2000!")
   Else
	  While $Tmp <= $End
		 $Sum += $Tmp
		 $Tmp += 2
	  WEnd

	  MsgBox(64, "Ok.", "Сумма всех четных чисел начиная с " & $Num & " заканчивая " & $End & " = " & $Sum)
   EndIf
EndIf


Как думаете?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Tyonas,
Я бы так сделал.
Код:
Global $iNum = 2, $iEnd = 2000, $iSum

Switch Mod($iNum, 2)
	Case 1
		MsgBox(16, 'Error.', 'Число не делится на 2 без остатка.')
	Case 0
		Switch $iNum
			Case 0 To $iEnd
				For $i = $iNum To $iEnd Step 2
					$iSum += $i
				Next
				MsgBox(64, 'Ok.', 'Сумма всех четных чисел начиная с ' & $iNum & ' заканчивая ' & $iEnd & ' = ' & $iSum)
			Case Else
				MsgBox(16, 'Error.', 'ПНХ!!! Хочу натуральное число до 2000!')
		EndSwitch
EndSwitch
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
А я бы так. :laugh:

Код:
Global $End = 2000 ; предел

Do
	$Num = InputBox("","Введите четное натуральное число до 2000",2)
	If @error Then Exit
Until Mod($Num, 2)=0 And $Num > 0 And $Num <= 2000

$Sum = ($Num + $End)*($End - $Num +2)/4

MsgBox(64, "Ok.", "Сумма всех четных чисел начиная с " & $Num & " заканчивая " & $End & " = " & $Sum)
 
Автор
T

Tyonas

Новичок
Сообщения
4
Репутация
1
C2H5OH
Где такому научились? :smile:
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
C2H5OH
Именно за такие фокусы мне и нравится AutoIt :smile:. Еще более веселый вариант:

Код:
Global $iNum = 0, $iEnd = 2000

While ( Mod( $iNum, 2 ) Or Not ( $iNum > 0 And $iNum < $iEnd ) ) And Assign( 'iNum', InputBox("","Введите четное натуральное число до 2000",2) )
	WEnd

MsgBox( 64, '', "Сумма всех четных чисел начиная с " & $iNum & " заканчивая " & $iEnd & " = " & ( $iNum + $iEnd ) * ( $iEnd - $iNum + 2 ) / 4 )
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
C2H5OH
Где такому научились?

Как где? В школе!
Не помню в каком там классе проходят арифметическую прогрессию.

Ты, Tyonas, уроки не прогуливай, там много чего полезного рассказывают...


Добавлено:
Сообщение автоматически объединено:

firex,
в твоём варианте невозможно отказаться.
Товой скрипт завершиться только подсчётом суммы.
;D
 
Верх