Какой loop использовать?

Tom_Alba

Новичок
Привет! Я всего несколько дней назад познакомился с программированием вообще и в частности на php. Поэтому у меня элементарные вопросы. Надеюсь, мне помогут на них ответить и отнесутся спокойно к их уровню.

Мне необходимо создать 9 переменных со значениями типа int от 1 до 9 случайным образом. То бишь $varName=rand(1,9); Но мне также нужно, что бы не одна из переменных не была равна другой. Какой использовать loop или что-то другое, чтобы получить искомое. Заранее благодарен. Том.
 

akd

dive now, work later
Команда форума
а тебе точно нужно именно 9 переменных? может хватит одного поля и в нем 9ти значений?
 

Tom_Alba

Новичок
а тебе точно нужно именно 9 переменных? может хватит одного поля и в нем 9ти значений?
Что имеется ввиду? array?
Вообще итоговая задача такая: распределить в квадрате 3Х3 девять цифер от 1 до 9 так, что бы суммы по 3 горизонталям, 3 вертикалям и 2 диагоналям были равны. Я решил, что сначала нужно создать 9 переменных, задать случайным образом им значения, ввести проверку на неравенство случайно заданных значений, в случае если какие-то равны, то задать опять пока не будут достигнуто нужное сочетание (вот с чем именно связан мой вопрос). Ну дальше остальные шаги...

Я не понимаю, почему этот код не работает
do
{
$a=rand(1,9);
$b=rand(1,9);
$c=rand(1,9);
$d=rand(1,9);
$e=rand(1,9);
$f=rand(1,9);
$g=rand(1,9);
$h=rand(1,9);
$i=rand(1,9);
}
while ($a!=$b && $a!=$c && $a!=$d && $a!=$e && $a!=$f && $a!=$g && $a!=$h && $a!=$i);
 

akd

dive now, work later
Команда форума
да, имеется ввиду array.

ужоз. забудь про этот код, он к твоей задаче никакого отношения не имеет :)
 

Tom_Alba

Новичок
да, имеется ввиду array.

ужоз. забудь про этот код, он к твоей задаче никакого отношения не имеет :)
С удовольствием готов его забыть! Мне самому подсказывает шестое чувство, что это нечно несуразное, хотя все-таки хотелось бы понять, почему он не работает?
Кроме того, ты не мог бы показать иное решение?
 

akd

dive now, work later
Команда форума
это твоя задача ты и решай :)

понять почему он не работает - просто подумай что делает этот код .. построчно.
 

Духовность™

Продвинутый новичок
Что имеется ввиду? array?
Вообще итоговая задача такая: распределить в квадрате 3Х3 девять цифер от 1 до 9 так, что бы суммы по 3 горизонталям, 3 вертикалям и 2 диагоналям были равны.
меня всегда бесили подобного рода задачи... студент, да?
 

Mols

Новичок
Что имеется ввиду? array?
Вообще итоговая задача такая: распределить в квадрате 3Х3 девять цифер от 1 до 9 так, что бы суммы по 3 горизонталям, 3 вертикалям и 2 диагоналям были равны. Я решил, что сначала нужно создать 9 переменных, задать случайным образом им значения, ввести проверку на неравенство случайно заданных значений, в случае если какие-то равны, то задать опять пока не будут достигнуто нужное сочетание (вот с чем именно связан мой вопрос).
Просто блин кросавчег.
Уже известно, что будет использоваться 9 цифр, от 1 до 9.... так нафига придумывать какой-то механизм их генерации?
 

AmdY

Пью пиво
Команда форума
Tom_Alba
по ссылке есть примеры генерации уникальных значений, тогда в чём ЕЩЁ проблема?
 

Вурдалак

Продвинутый новичок
Человек просто хочет в лоб найти такие матрицы. В таком случае, тут нужен алгоритм генерации перестановок.

P.S. Для 4-х утра больно оживлённый форум.
 

Tom_Alba

Новичок

Tom_Alba

Новичок
Tom_Alba
по ссылке есть примеры генерации уникальных значений, тогда в чём ЕЩЁ проблема?
В том, что мне надо генерировать их много раз, пока я не получу массив согласно условию. Я написал loop do... while... который привел выше, но он не работает.
П.С. Я пишу свою первую программу в жизни.
 

foma19

Новичок
Потому что ты проверяешь только переменную a. А если c и d равны? Надо все проверять
 

Tom_Alba

Новичок
Потому что ты проверяешь только переменную a. А если c и d равны? Надо все проверять
Да, так и есть. Но прежде чем описать условие полностью я решил ограничиться проверкой только одной переменной и убедиться, что код работает. Так вот ни черта не работает.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Пардон, но если ему надо 9 переменных, от 1 до 9 и чтобы ничего не совпадало, то это по-любому range(1,9) =)
 

Tom_Alba

Новичок
Пардон, но если ему надо 9 переменных, от 1 до 9 и чтобы ничего не совпадало, то это по-любому range(1,9) =)
Спасибо. Я сделал все так:
$n=range(1,9);
shuffle ($n);
Теперь надо понять как проверять на равенство сумму определенных элементов array.
 
Сверху