Помощь - Поиск - Пользователи - Календарь
Полная версия: Массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Lik
Есть задачка интресная. Нужно создать двух(трех)мерный действительный массив (можно не динамический) без одинаковых элементов. Плюс там еще куча всякой ерунды, но то уже не проблемма...
А вообще, зря тему закрыли (эт та, что в важных торчит smile.gif ). Она, по моему, давольно таки актуальна для студентов...
Fire_Rage
Ну как , если надо, чтобы разные числа, то берёшь одно какое-то число=р, а дальше идёшь циклом по массиву и заполняешь его р n-ый*х, где х-коэффициент, нужный тебе.
Lik
В том то и загвоздка, что это не исключает повтор элементов... хотя это и мало вероятно. Вообще то задачка чуть сложнее... массив уже задан. Т.е. получается, что нужно найти два одинаковых элемента и один из них изменить так, что бы он при этом не совпадал с др. элементами.
Atos
Только что в голову пришло: ищем максимальный в массиве элемент, запоминаем. Потом идём по массиву, начиная со 2 элемента ищем одинаковые элементы среди уже просмотренных. Если находим, то присваиваем одному из них значение макс. эл-та +1. Ещё находим одинаковые - присваиваем max+2 и т. д. Таким образом, новое значение гарантированно не совпадёт с другими, потому что будет больше их.
Lik
Есть еще неплохая задачка на сортировку массивов. Никто про Конвеевскую игру жизнь не слышал ? Ну я думаю что кодеры с большим стажем должны были слышать о ней... А суть такая: есть двумерный массив, каждый элемент которого может принимать два значения 1 и 0, ну или др. какие захотите... так вот, значение ячейки изменяется в зависимости от окружающих ее элементов (примерно как в сапере), если соседних ячеек с элементом равным 1 меньше 2 (т.е. всего одна) либо больше 4, то значение выбранной ячейки обнуляется, если таких соседей 3, то ячейка приравнивается еденице.
Вот, вроде как ничего не напутал...
Lik
Хотелось бы реализовать, но проблемма с выводом результата...
Atos
Lik, слушай, я не только слышал, но и очень долго увлекался этой игрой!
Год назад пробовал написать, вроде получилось, но тоже возникли проблемы с выводом результата, а потом какой-то другой задачей заинтересовался...
Вообще - очень интересная тема. Где ты прочитал об этой игре? Я - у Мартина Гарднера в "Математических досугах", потом у него же в "Крестиках-ноликах" - там больще материала. Особо впечатлили "глайдерные ружья", которые раз в 30 ходов выстреливают из себя пятиклеточные фигурки, улетающие в бесконечность и "раэмножитель", да и вообще много дико интересного. Потом два раза видел {в энциклопедии и в компьютерном журнале} программки "Жизни", но не особо впечатлило. По-моему, можно оптимальнее сделать.

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

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

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

Я помниться сам делал "Жизнь", у меня нормально все работало....
Atos
Ну у меня проблема была, в общем-то, в моей лени и тогдашней неопытности.
Во-первых, хотелось сделать покрасивее, а с графикой я ещё не работал. Во-вторых, если действие игры происходит в ограниченном пространстве, то всё понятно , а вот сделать так, чтобы конфигурации могли развиваться практически бесконечно в разные стороны{пока пямяти хватит}, и к тому же их ещё было возможно нормально просматривать... Короче, я тогда так и забросил прогу, увлёкся реализацией консольного редактора таблиц... а жаль. Ну летом обязательно возьмусь, и чего-нибудь наколдую.
APAL, а как ты выводил развитие игры?
APAL
Цитата(Atos @ 6.04.04 11:22)
APAL, а как ты выводил развитие игры?

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

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

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

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

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

А что, "Жизнь" больше никто не программировал?
Fire_Rage
Я программировал, получилось легко:
Если надо, пришлю по майлу.
Atos
Пришли, пожалуйста, если не трудно. Интересно сравнить. Вообще игрушка интересная. В 70-х она разорила США на тысячи часов машинного времени. Игры - страшная сила smile.gif
Lik
Цитата(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
Можно сделать остановку процесса по нажатию какой либо клавиши и вручную, курсором затереть ненужные точки... ;)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.