Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2011, 17:28   #1
zetr0
Пользователь
 
Регистрация: 29.09.2010
Сообщений: 19
По умолчанию Загадка квадрата.



напишите пожалуйста код только для обмена местами этих четвертей. заранее спасибо! просто у меня даже мыслей нету по этому поводу.
zetr0 вне форума Ответить с цитированием
Старый 16.03.2011, 18:55   #2
JinglsOrg
Пользователь
 
Аватар для JinglsOrg
 
Регистрация: 27.01.2011
Сообщений: 48
По умолчанию

Первая диагональ понятно - индексы равны. Вторая же диагональ, мне предстовляется элеметы чья сумма обоих индексов равна длине квадрата+1.
Например массив размерностью mxm:
первая диагональ это: i=j;
вторая диагональ это: i+j+1=m;
соответственно если i>j это элементы справа вверху, если i+j+1>m это элементы справа внизу.
Чередование этих условий по парно даст координаты всех нужных элементов.
Не совсем понятными остаются две непонятности: элементы являющиеся границами четвертей входят в эти четверти или нет? и поменять местами зеркально, где зеркало горизонтальная линия проходящая через центр или поменять местами через цетр массива?
Ну и менять элементы так:
пускаем цикл в четверть колличества элементов, и прибавляем индексам элементов вверху двойное количество расстояний которые им не хватает до центра, например:
имеем массив размерностью 9x9;
для того чтобы переставить элемент в другую четверть берём его индекс пусть у нас будет 2;3 и если мы кидаем его через центр массива, где центром оказывается элемент округлённый в большую сторону, то (5;5)-(2;3)=(3;2) (2;3)+2*(3;2)=(2;3)+(6;4)=(8;7), если же размерность массива является чётное число, например 10x10 то:
для смещения с верхней четверти в нижнюю я использовал 5x5 и вконце перевода вычел один индекс из порядкового номера элемента массива, для перевода из нижней четверти в верхнюю можно либо сохранить индекс перевода из верхнего в нижний, а можно использовать центр (ведь центром является не 5x5, а 4,5x4,5) 4x4 и в конце соответственно прибавить еденичку к индексам.

Всё просто. И не забудьте всё действительно когда нумеруете яйчейки еденицей или другими НЕ чётными числами, в ином случае я ничего не знаю и меня здесь не было.
Всё написанное мной является лично моим мнением за исключением когда указан источник данных.

Последний раз редактировалось JinglsOrg; 16.03.2011 в 19:36.
JinglsOrg вне форума Ответить с цитированием
Старый 16.03.2011, 19:28   #3
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

http://pascal.proweb.kz/index.php?page=137
тут всё
onewho вне форума Ответить с цитированием
Старый 16.03.2011, 19:36   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Опять повторю: любят на этом форуме устраивать соревнование "Кто запутаннее?"...
...
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

from numpy import array

a = array( [[ 3, 5, 6, 7],
            [-1, 2, 8, 2],
            [4, 5, 7, 4],
            [ 4, 1, 8, 8]], dtype = int )
n = len( a )

print "BEFORE:"
print a

rowUp = 0
rowDown = n-1
colLeft = 0
colRight = n-1

while rowUp < rowDown:
   for col in range(colLeft, colRight+1):
      aFoo = a[rowUp,col]
      a[rowUp,col] = a[rowDown,col]
      a[rowDown,col] = aFoo
   rowUp += 1
   rowDown -= 1
   colLeft += 1
   colRight -= 1

print; print "AFTER:"
print a

#
Vago вне форума Ответить с цитированием
Старый 16.03.2011, 23:57   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Извините за флуд, но VAGO, это Perl что ли?
Вадим Мошев вне форума Ответить с цитированием
Старый 17.03.2011, 00:02   #6
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

питон, написано же
onewho вне форума Ответить с цитированием
Старый 17.03.2011, 00:22   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Да, Питон. Вместо операторных скобок - отступы;
Код:
for i in range(0,n):
эквивалентно C-шному
Код:
for (i = 0; i < n; i++) {
индексация с нуля, как в C. Надеюсь, человек разберётся
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загадка vostok Microsoft Office Excel 4 11.11.2010 22:58
загадка NordKeeper Помощь студентам 0 01.06.2010 18:36
Загадка Liones БД в Delphi 1 31.08.2009 12:33