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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2010, 19:45   #1
IronFire
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 10
По умолчанию Как создать «круг» в двумерном массиве? (Delphi 7)

Дан массив 33х33. Мне нужно построить внутри этого массива что-то вроде круга с центром в точке 17х17 и радиусом 16. Ну то есть мне надо, чтобы все элементы этого массива находящиеся внутри этого «круга» имели значение 1, вне «круга» — 0.
IronFire вне форума Ответить с цитированием
Старый 09.10.2010, 19:48   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

x*x+y*y=r*r
Levsha100 вне форума Ответить с цитированием
Старый 09.10.2010, 19:54   #3
IronFire
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Levsha100 Посмотреть сообщение
x*x+y*y=r*r
Это формула окружности с центром в начале координат.

Вобщем-то есть формула (Х - Хо)^2 + (Y - Yo)^2 = R^2, где точка (Xo;Yo) — центр окружности. Но как её использовать в данном случае, я что-то не понимаю. Мне же не окружность нужна, а круг.
IronFire вне форума Ответить с цитированием
Старый 09.10.2010, 20:07   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
for i:=1 to 33 do
for j:=1 to 33 do
if (i=1) or (j=1) or (i=33) or (j=33) then a[i,j]=0
else a[i,j]=1;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 09.10.2010, 20:14   #5
IronFire
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 10
По умолчанию

Mad_Cat
Это квадрат получится=)

К тому же, радиус не обязательно будет 16, он может быть и 15, и 14. А может и меньше.
IronFire вне форума Ответить с цитированием
Старый 09.10.2010, 20:15   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а.. кажется понял...
Код:
var A : array[1..33,1..33] of integer;
  i, j : integer;
  x : extended;
begin
  for i:=1 to 33 do
    for j:=1 to 33 do begin
      x := round(sqrt(sqr(i-17)+sqr(j-17)));
      if trunc(x)<16 then
        A[i,j] := 1
      else
        A[i,j] := 0;
    end;

Последний раз редактировалось Serge_Bliznykov; 09.10.2010 в 20:24.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2010, 20:50   #7
IronFire
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 10
По умолчанию

Да, вроде бы получилось. Спасибо!

Serge_Bliznykov
Пока вы не ушли:
round() — это что за оператор? Округление?
trunc() — такой же вопрос=)

Последний раз редактировалось Stilet; 09.10.2010 в 22:06.
IronFire вне форума Ответить с цитированием
Старый 09.10.2010, 22:05   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

round() - округление до ближайшего целого
trunc() - отбрасывание дробной части.
Бегом книги по Паскалю читать!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.10.2010, 22:19   #9
IronFire
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
round() - округление до ближайшего целого
trunc() - отбрасывание дробной части.
А какой смысл отбрасывать дробную часть от уже округлённого числа?=)

Цитата:
Сообщение от Stilet Посмотреть сообщение
Бегом книги по Паскалю читать!
Хорошо бы конечно, но я не программист и вряд ли мне чтение таких книг когда-нибудь ещё пригодится
IronFire вне форума Ответить с цитированием
Старый 10.10.2010, 00:10   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А какой смысл отбрасывать дробную часть от уже округлённого числа?=)
Вы правы. Можно и без TRUNC().
Trunc() здесь для надёжности... Почему-то я решил, что нам может понадобится использовать результат вычислений, как координаты массива... Тогда бы нужно было их привести обязательно к целому типу с помощью TRUNC()
в данном случае применение TRUNC() не нужно. (хотя и не ошибка, это не влияет на результат работы).

Цитата:
Хорошо бы конечно, но я не программист и вряд ли мне чтение таких книг когда-нибудь ещё пригодится
Вы противоречите себе же... Если Вы не программист и не собираетесь программировать, то зачем Вам знать, что делают операторы round() и trunc() ?!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повторы в двумерном массиве rusasha Паскаль, Turbo Pascal, PascalABC.NET 1 05.05.2010 08:26
Игра на двумерном массиве Serg-Grin Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 19.02.2010 20:51
Как можно обратиться к элементу строки в двумерном массиве ? fermerius Помощь студентам 1 06.02.2010 19:14
Как найти в двумерном массиве МАХ элемент каждой строки? Jasper92 Общие вопросы C/C++ 9 16.12.2009 12:58
Random в двумерном массиве. Lazio Помощь студентам 7 01.11.2009 22:53