IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Магический квадрат, Visual basic 6.0
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Наталья

Репутация: -  0  +


Привет вам дорогие форумчане. Не могли бы вы помочь мне с одной програмкой. Програмка та ещё,на уровне фантастики. Вот само описание: дается квадрат с где k номер каждой ячейки... за определенное конечное колическтво шагов необходимо просчитать где перемещаемая точка быть не может, она не может двигаться по диагонали, и при этом при каждом шаге должно быть так чтобы точке было куда двигаться, за некоторое колическтво ходов по несколько шагов, точка должна остаться только в одном месте, которое и должна выдавать программа, гдt на выходе должна быть матрца квадрата, а ячейка в которой остается точка должна принимать значение истина. Компилятор Visual Basic Studio 6.0
P.S. Заранее огромное вам спасибо))))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Совершенно бессвязное условие, как по мне.

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

Сообщение отредактировано: Michael_Rybak -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


я вот тоже ничего не понял ...

ps

Цитата
как пробовал.


Цитата
Пол: Женский
Реальное имя: Наталья


smile.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата(klem4 @ 3.12.2007 16:49) *

ps


Упс smile.gif Пасиб, исправил smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Наталья

Репутация: -  0  +


слушайте, ребят, если я девочка это не значит что я тупая или ничего в VB не понимаю просто я написала так как объяснял мне препод. ок. попробую еще раз, вам дается квадрат разбитый на сектора. дается начальная точка откуда объект начнет двигаться по секторам. задается определенное колическтво шагов за один ход например 3... программа должна определить в каких клетках объект точно не может находится... затем делается еще один такой ход так же с колическтвом шагов... затем прграмма определяет где не может быть объет. таким образом за конечное количество ходов можно определить где объект будет находится когда ходов уже не останется.... нельзя ходить по диагонали и нужно чтобы оставалась возможность последующего хода
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Ну вот теперь более понятно. Очень интересная задачка. VB к сожалению не владею, но могу попробовать реализовать алгоритм на Pascal например, и если получится выложу. Ну а ты уже на VB переведешь ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата
слушайте, ребят, если я девочка это не значит что я тупая или ничего в VB не понимаю


Протестую. То, что я мальчик, тоже не значит, что я тупой. И в VB я что-то понимаю. Причем тут твой пол? Просто сравни свои первый и второй посты. Первый - на мой взгляд бессвязный, второй - нет. Только и всего. Не обижайся. (А про женский пол Клем писал, потому что я случайно окончания мужские поставил, когда к тебе обращался).

По задаче. Эта формулировка все еще не до конца понятная, но речь, видимо, идет о следующем "фокусе":

Коперфильд предлагает выбрать на доске число. Затем он называет число шагов и просит мысленно сделать один ход. Затем он зачеркивает часть клеток - не все, в которых не может сейчас быть точка, а только некоторые. Затем опять просит сделать ход, и опять вычеркивает, и так далее. После каждого шага множество клеток, в которые вам остается мысленно передвигать свою точку, все время уменьшается, и в конце остается одна, в которую он победоносно тычет своим псевдомагическим пальцем.

Единственная проблема - решить, какую часть клеток, в которых точки не может быть, мы будем вычеркивать. Несложно убедиться, что необходимо и достаточно всегда оставлять множество невычеркнутых клеток связным.

Действительно, если мы разделим это множество на два (и в каждом из них потенциально могла быть точка в момент разделения), мы никогда не узнаем, в какой "островок" попала точка.

Если же клетки оставлять связными, рано или поздно мы оставим две, а потом и одну клетку.

Проще всего сделать "в лоб": для каждой клетки, в которой объект сейчас быть не может, проверяем, останется ли поле связным, если ее вычеркнуть. Если да - вычеркиваем. Еще можно добавить случайность какую-то, а то при маленьком количестве ходов в шаге сразу всё поле вычеркнется.

Теперь рассказывай, что из этого ты понимаешь как делать, а что - нет.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Пасиба.... аж приятно стало за такой ответ, серьезно
Спасибо за то что понял про какой фокус я говорю, потому что я явно объясняю не лучше всех в мире чего хочу))
А из всего этого я принцип понимаю, но как именно программу написат понять не могу....
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Наталья

Репутация: -  0  +


это я была, тока войти забыла)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Тогда давай начинать с простого.

Насколько я понимаю, от тебя требуется не только алгоритм, но и графический интерфейс.

Кнопки можно сделать реально кнопками, а можно нарисовать самому. Если размер поля известен заранее, проще первое. Если нет - второе.

Для начала давай сделаем поле 4х6.

Напиши программу, которая выводит поле с пронумерованными кнопками, сообщает юзеру номер начальной кнопки (случайное число от 1 до 24), потом сообщает количество ходов в одном шаге (пусть будет 3), ждет пять секунд, и потом удаляет (делает невидимыми) *все* кнопки. Вот такой первый шаг. Сможешь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Наталья

Репутация: -  0  +


а там не должен быть строгоквадрат, там 3 на 3 или 6 на 6...... а так я не понимаю алгоритма по котрому вычеркиваются ячейки в которых не может быть объект
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Алгоритм примерно такой. Мысленно переносим всё это на шахматную доску. Зафиксируем количество шагов в ходе, пусть будет 6, например.

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

Если же количество шагов в ходе нечетно - все то же самое, но цвет клеток, в которых может быть точка, меняется на противоположный после каждого хода.

В целом, так.

Цвет клетки (x, y) можно определять так:

Код
if (x + y) mod 2 = 0 then
  ' черная
  ...
else
  ' белая
  ...
end if

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Наталья

Репутация: -  0  +


ок
в результате программа должна выдать матруцу k11 k12 k13....k1n
k21 k22 k23....k2n
k31 k32 k33....k3n
в которой ячейке с объектом будем присваиваться значение true
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


скорее, программа должна последовательно выводить эту матрицу после каждого хода.

т.е. структура программы у тебя будет такая:

1. объявили матрицу
2. заполнили всё значениями true
3. задали и вывели юзеру координаты точки
4. вывели количество шагов в ходе.
5. начинаем цикл:
6. выводим матрицу
7. просим юзера мысленно сделать ход
8. проходим по матрице. если для клетки выполняются три условия - "1. клетка еще не вычеркнута (значение в матрице равно true), 2. точка не может сейчас быть в этой клетке и 3. у клетки не больше трех невычеркнутых соседей", вычеркиваем клетку (заменяем значение в матрице на false)
9. цикл продолжаем до тех пор, пока после вычеркивания очередной клетки не окажется, что осталась всего одна невычеркнутая клетка.
10. выводим конечную матрицу.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 20:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name