Что нового

Как "привязать" массив определённых чисел к условию "if" ?

agikon

Знающий
Сообщения
789
Репутация
17
например есть числа так званые "свои" и "чужие".
"свои" это те которые в массиве явно прописаны.
"чужие" это все те что не попали в "свои".

если например число "своё" то выполняется задача1.
если число "чужое" то выполняется задача2.

то есть есть набор чисел и их надо организовать в массив, и прикрутить этот массив к проверке, вот такой


Код:
$var = '1' '4' '5' '8' '10'  ;вот это "свои" числа:

if $var = true then
    _zadacha1()
else
    _zadacha2()
endif


то есть я не пойму как сделать так чтобы переменная $var считывала все с массива все "свои" числа и если в условии эта $var не соответсвуует ни одному "своему" числу (ну например $var = 2, "7" это не "чужое" число ибо его нет в списке массива) то вполнялась задача2, а если соответсвовала какому-то "своему" числу то выполнялась задача1.

помогите плжалуйста, как построить такую схему?
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Тебя тяжело понять.
Может это подойдет:
Код:
$var = 1 

Switch $var
	Case 1,4,5,8,10 ;свои" числа
		_zadacha1()
	Case Else
		_zadacha2()
EndSwitch
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
#include <Array.au3>
Dim $vArray[5] = [1, 4, 5, 8, 10]  ;вот это "свои" числа:

$var = 1	; вот тут получаем значение числа

_ArraySearch($vArray, $var)
if @error = 0 then
    _zadacha1()
else
    _zadacha2()
endif
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
нет, наверно не так.

ааа я понял как обьяснить чтобы было понятно. чего ж я сразу так не написал.

вобщем смотрите, можно написать вот так со всеми "своими" числами
Код:
if $var = 1 then
    _zadacha1()
else
    _zadacha2()
endif


if $var = 4 then
    _zadacha1()
else
    _zadacha2()
endif

if $var = 5 then
    _zadacha1()
else
    _zadacha2()
endif


if $var = 8 then
    _zadacha1()
else
    _zadacha2()
endif

if $var = 10 then
    _zadacha1()
else
    _zadacha2()
endif


вопрос в том, как это всё упростить? чтобы более компактно это всё выглядело?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
if $var = 1 Or $var = 4 Or $var = 5 Or $var = 8 Or $var = 10 then
	_zadacha1()
else
    _zadacha2()
endif
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
В цикл вставь просто
Код:
For $i = 0 To 4
	Switch $var
		Case 1,4,5,8,10 ;свои" числа
			_zadacha1()
		Case Else
			_zadacha2()
	EndSwitch
Next
 

Asshaker

Знающий
Сообщения
150
Репутация
17
А чем вариант rusreg79 не подходит? :smile:
Код:
$Arr[100]
$i=Random(0,99,1)
Switch  $Arr[$i]
    Case 1,4,5,8,10 ; тут  тупо куча своих чисел
        _zadacha1()
    Case Else
        _zadacha2()
EndSwitch
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Re: Как \"привязать\" массив определённых чисел к условию \"if\" ?

Это надо же так поставить задачу ,что перебрали все варианты.
Но так и не поняли что же все-таки требуется.
Это что ли ? Шарада , а не задача :stars:
Код:
#include <Array.au3>
Dim $vArray[5] = [1, 4, 5, 8, 10]  ;вот это "свои" числа:
	
For $i=0 To UBound($vArray)-1 ;  Исправлено     [$i]-1
	If $var=$vArray[$i] Then 
		_zadacha1()
	Else
		_zadacha2()
	EndIf
Next



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

До кучи : :laugh:
Код:
If StringRegExp( $sVar, '^(1|4|5|8|10)$' ) Then
	_zadacha1()
Else
	_zadacha2()
EndIf
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
дело в том, что хотелось бы чтобы все числа записать в один массив и чтобы потом в масиве перебиралось, а не писать проверка каждый раз на "своё" число.

вот смотрите, если например вместо чисел будут фамилии, и таких фамилий будет несколько сотен, и постоянно добавляются.
вот при таком условии очень важно чтобы фамилию дописал в массив, массив на +1 добавил, и всё.

а то представьте
Код:
if $var = 'Петров' then
;

if $var = 'Сидоров' then

;и тд несколько сотен

;ну как-то не рационально.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
а подскажите пожалуйста, массив можно в строчки записывать, ну вот так:
1
5
6
8
10

или только в строку
1,5,6,8,10

??
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
сделал как вы и советуете но не срабатывает, вернее пишет что число "чужое", хотя "5" это "своё" число.
вот посмотрите пожалуйста что в этом коде не так?

Код:
#include <Array.au3>
$var = 5    ; вот тут получаем значение числа

	Dim $vArray[5] = [ _
		1 , _
		4 , _
		5 , _
		8 , _
		10  _
		]


For $i=0 To UBound($vArray[$i]-1)

	If $var=$vArray[$i] Then
		MsgBox(64,'','своё' , '')
	else
		MsgBox(64,'','чужое' , '')
	endif

Next
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
agikon [?]
что в этом коде не так?
gregaz ошибся, нужно так:

Код:
$iVar = 5 ; вот тут получаем значение числа

Dim $vArray[5] = _
	[ _
		1, _
		4, _
		5, _
		8, _
		10 _
	]

For $i = 0 To UBound($vArray) - 1
	If $iVar = $vArray[$i] Then
		MsgBox(64, $vArray[$i], 'Своё')
	Else
		MsgBox(64, $vArray[$i], 'Чужое')
	EndIf
Next
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
CreatoR
да теперь заработало, но всё-равно не так как я хотел.

мне бы чтобы оно потихоньку без перебора подставило все значения с массива и только в конце перебора сообщило число "своё" или "чужое".

а то ж приходится каждый раз нажимать на окошко OK, ну представьте если сто чисел, так это ж очень утомительно...

вот можно так чтобы окошко выскакивало лишь по результату перебора массива, а не в процессе?
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
вот можно так чтобы окошко выскакивало лишь по результату перебора массива, а не в процессе?
Код:
$iVar = 5 ; вот тут получаем значение числа

Dim $vArray[5] = _
    [ _
        1, _
        4, _
        5, _
        8, _
        10 _
    ]

For $i = 0 To UBound($vArray) - 1
    If $iVar = $vArray[$i] Then
		$iVar2 = $iVar&' : Своё'
		ExitLoop
    Else
		$iVar2 = $iVar&' : Чужое'
    EndIf
Next
MsgBox(64, '', $iVar2)
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
о!
это то что надо!
rusreg79 спасибо
всем спасибо, решено!
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
но вот опять вопросик.
а как заменить цифры на имена, например

Код:
$iVar = 'Сидоров' ; вот тут получаем значение числа

Dim $vArray[3] = _
    [ _
        Сидоров, _
        Петров, _
        Иванов  _
    ]

For $i = 0 To UBound($vArray) - 1
    If $iVar = $vArray[$i] Then
        MsgBox(64, $vArray[$i], 'Своё')
    Else
        MsgBox(64, $vArray[$i], 'Чужое')
    EndIf
Next
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
спасибо за помощь, всё заработало!
 
Верх