Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Массивы

Автор: Lik 26.03.2004 3:12

Есть задачка интресная. Нужно создать двух(трех)мерный действительный массив (можно не динамический) без одинаковых элементов. Плюс там еще куча всякой ерунды, но то уже не проблемма...
А вообще, зря тему закрыли (эт та, что в важных торчит smile.gif ). Она, по моему, давольно таки актуальна для студентов...

Автор: Fire_Rage 26.03.2004 11:41

Ну как , если надо, чтобы разные числа, то берёшь одно какое-то число=р, а дальше идёшь циклом по массиву и заполняешь его р n-ый*х, где х-коэффициент, нужный тебе.

Автор: Lik 27.03.2004 3:37

В том то и загвоздка, что это не исключает повтор элементов... хотя это и мало вероятно. Вообще то задачка чуть сложнее... массив уже задан. Т.е. получается, что нужно найти два одинаковых элемента и один из них изменить так, что бы он при этом не совпадал с др. элементами.

Автор: Atos 29.03.2004 11:31

Только что в голову пришло: ищем максимальный в массиве элемент, запоминаем. Потом идём по массиву, начиная со 2 элемента ищем одинаковые элементы среди уже просмотренных. Если находим, то присваиваем одному из них значение макс. эл-та +1. Ещё находим одинаковые - присваиваем max+2 и т. д. Таким образом, новое значение гарантированно не совпадёт с другими, потому что будет больше их.

Автор: Lik 1.04.2004 0:43

Есть еще неплохая задачка на сортировку массивов. Никто про Конвеевскую игру жизнь не слышал ? Ну я думаю что кодеры с большим стажем должны были слышать о ней... А суть такая: есть двумерный массив, каждый элемент которого может принимать два значения 1 и 0, ну или др. какие захотите... так вот, значение ячейки изменяется в зависимости от окружающих ее элементов (примерно как в сапере), если соседних ячеек с элементом равным 1 меньше 2 (т.е. всего одна) либо больше 4, то значение выбранной ячейки обнуляется, если таких соседей 3, то ячейка приравнивается еденице.
Вот, вроде как ничего не напутал...

Автор: Lik 1.04.2004 1:01

Хотелось бы реализовать, но проблемма с выводом результата...

Автор: Atos 3.04.2004 12:47

Lik, слушай, я не только слышал, но и очень долго увлекался этой игрой!
Год назад пробовал написать, вроде получилось, но тоже возникли проблемы с выводом результата, а потом какой-то другой задачей заинтересовался...
Вообще - очень интересная тема. Где ты прочитал об этой игре? Я - у Мартина Гарднера в "Математических досугах", потом у него же в "Крестиках-ноликах" - там больще материала. Особо впечатлили "глайдерные ружья", которые раз в 30 ходов выстреливают из себя пятиклеточные фигурки, улетающие в бесконечность и "раэмножитель", да и вообще много дико интересного. Потом два раза видел {в энциклопедии и в компьютерном журнале} программки "Жизни", но не особо впечатлило. По-моему, можно оптимальнее сделать.

Американские программисты нашли "Сад Эдема"- конфигурацию, которая по правилам игры не может получиться ни из одной другой. Так вот , я как-то думал над немного другой задачей. Допустим, дала нам конфигурацию(не очень большую) и задали найти все конфигурации, умещающиеся в прямоугольнике MxN, из которых на следующем ходу получается данная.
То есть найти всех возможных "мам" ребёнка. Сложновато, но интересно. Самое главное - можно ли написать нерекурсивную процедуру? Можно, конечно, простым перебором, но тогда перебрирать 2^S, S - площадь прямоугольника.

Цитата
либо больше 4
Вернее - больше трёх.

Автор: APAL 4.04.2004 13:29

Цитата(Lik @ 31.03.04 18:01)
Хотелось бы реализовать, но проблемма с выводом результата...

А можно поподробнее?
В чем проблема м выводом рез-ов?

Я помниться сам делал "Жизнь", у меня нормально все работало....

Автор: Atos 6.04.2004 18:22

Ну у меня проблема была, в общем-то, в моей лени и тогдашней неопытности.
Во-первых, хотелось сделать покрасивее, а с графикой я ещё не работал. Во-вторых, если действие игры происходит в ограниченном пространстве, то всё понятно , а вот сделать так, чтобы конфигурации могли развиваться практически бесконечно в разные стороны{пока пямяти хватит}, и к тому же их ещё было возможно нормально просматривать... Короче, я тогда так и забросил прогу, увлёкся реализацией консольного редактора таблиц... а жаль. Ну летом обязательно возьмусь, и чего-нибудь наколдую.
APAL, а как ты выводил развитие игры?

Автор: APAL 7.04.2004 1:26

Цитата(Atos @ 6.04.04 11:22)
APAL, а как ты выводил развитие игры?

Когда я задумался о выводе, то вспомнил одну настольную игру - ТОР.

Правил не помню, да это и не важно, главное какое там используется поле...
А оно представляет собой развертку... как думаешь чего?... правильно ТОРА!

Это что-то вроде бублика, который разрезали в одном месте - получился цилиндре, а цилиндр разрезали вдоль - получился лист (квадрат/прямоугольник - на выбор), который и является полем для игры.
Но самое главное - во время игры надо помнить, что все происходит "на бублике". Т.е. у этого поля нет граница, а это то что нам надо:
Просто совмести края экрана левый с правым, и верхний с нижним - получится бублик!

При выходе фигуры за правое поле, она будет появляться слева - надо только все правильноа просчитать.

P.S.: Пока писал все выше приведенное, возникла мысль, что слово бублик можно заменить на шар.... если пренебречь искажениями... почти глобус... smile.gif

Автор: Atos 8.04.2004 8:51

Ага, врубился... Правда, могут быть конфигурации настолько большие, что заполнят всё пространство, либо разлетающиеся на части, движущиеся в противоположные стороны(тогда они столкнутся), но для большинства случаев вполне пойдёт. И главное, интересная и нетрудная реализация. Спасибо за мысль.

А что, "Жизнь" больше никто не программировал?

Автор: Fire_Rage 8.04.2004 10:45

Я программировал, получилось легко:
Если надо, пришлю по майлу.

Автор: Atos 10.04.2004 10:00

Пришли, пожалуйста, если не трудно. Интересно сравнить. Вообще игрушка интересная. В 70-х она разорила США на тысячи часов машинного времени. Игры - страшная сила smile.gif

Автор: Lik 10.04.2004 18:38

Цитата(Atos @ 3.04.04 8:47)
Где ты прочитал об этой игре? Я - у Мартина Гарднера в "Математических досугах"...

А я у друга в тетрадке smile.gif Во бщем этот то друг и помог решить проблему вывода,(To APAL) у меня тогда модуль graph не работал, он на асме написал.
И проблему с тором тоже нас заинтересовала smile.gif Решили просто, но опять же с помощью ассемблера. Там вывод шел через 'х' и 'у', вот и присвоили каждой переменной свой размер, там примерно так получилось:
Код

t:array[1..320,1..200] of byte;
x:1..320;
y:1..200;

в х и у в итоге заработала цикличность smile.gif
Но с тором ерунда получилась, там все время стабильные системы появлялись в итоге... Получается, что теперь нужно ограничить время жизни точек ;) У кого какие предложения?

Автор: APAL 12.04.2004 14:01

Можно сделать остановку процесса по нажатию какой либо клавиши и вручную, курсором затереть ненужные точки... ;)