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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 16:11   #1
MeTeOpA
Форумчанин
 
Аватар для MeTeOpA
 
Регистрация: 17.02.2010
Сообщений: 194
По умолчанию Вопрос о рекурсии

Дали задачу : построить квадродрево из изображения. Почитал, почитал, начитал про рекурсию. Вроде делал все как указано в примере а вот незадача, пишет ошибку про несовместимость типов. Голову сломал уже почему дельфин не хочет воспринимать код.

Вот сам код :
Код:
function scan(x1,y1,x2,y2:integer):integer;
var i,j:integer;
begin
for i:=x1 to x2-1 do
for j:=y1 to y2-1 do
if Form1.Image1.Picture.Bitmap.Canvas.Pixels[i,j]=clblack then
scan(x1,y1,x2/2,y2/2);
//No_scanned[k]

end
Ругается на строчку scan(x1,y1,x2/2,y2/2);.

Подскажите в чем дело...???
MeTeOpA вне форума Ответить с цитированием
Старый 08.02.2012, 16:13   #2
maxsept
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 14
По умолчанию

Код:
scan(x1,y1,x2/2,y2/2);
x2/2 - ето уже не целое число

можна напистаь так scan(x1,y1,Round(x2/2),Round(y2/2));
maxsept вне форума Ответить с цитированием
Старый 08.02.2012, 16:15   #3
MeTeOpA
Форумчанин
 
Аватар для MeTeOpA
 
Регистрация: 17.02.2010
Сообщений: 194
По умолчанию

Почему не целое?...

Код:
x1:=0;
x2:=256;
y1:=0;
y2:=256;
MeTeOpA вне форума Ответить с цитированием
Старый 08.02.2012, 16:17   #4
maxsept
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 14
По умолчанию

Цитата:
Сообщение от MeTeOpA Посмотреть сообщение
Почему не целое?...

Код:
x1:=0;
x2:=256;
y1:=0;
y2:=256;
происходит операция деления
scan(x1,y1,x2/2,y2/2);
maxsept вне форума Ответить с цитированием
Старый 08.02.2012, 16:22   #5
MeTeOpA
Форумчанин
 
Аватар для MeTeOpA
 
Регистрация: 17.02.2010
Сообщений: 194
По умолчанию

Эм... но ведь делится целое четное на целое четное, о какой дробной части идет речь?...
MeTeOpA вне форума Ответить с цитированием
Старый 08.02.2012, 16:24   #6
maxsept
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 14
По умолчанию

256/2=128.0
maxsept вне форума Ответить с цитированием
Старый 08.02.2012, 16:38   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Компилятор думает если есть деление, значит тип должен быть real или на самом деле ставь функцию Round
FaTaL вне форума Ответить с цитированием
Старый 08.02.2012, 16:55   #8
MeTeOpA
Форумчанин
 
Аватар для MeTeOpA
 
Регистрация: 17.02.2010
Сообщений: 194
По умолчанию

Спасибо! А вообще кто-то делал подобную задачу?...
MeTeOpA вне форума Ответить с цитированием
Старый 08.02.2012, 17:12   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от MeTeOpA Посмотреть сообщение
Эм... но ведь делится целое четное на целое четное, о какой дробной части идет речь?...
Речь идёт о строчке "x2/2". Компилятор - не телепат, чтобы угадать, что в x2 у тебя будет сидеть 256. С тем же успехом там может быть и 5.

Операция деления всегда даёт в результате вещественное число.

Поэтому либо надо его округлять/отсекать, либо вместо деления делать целочисленное деление (div).
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из рекурсии Somz Общие вопросы Delphi 5 17.05.2011 02:03
Задача по рекурсии Болванка Паскаль, Turbo Pascal, PascalABC.NET 1 21.12.2010 16:01
Рекурсии RAMA Паскаль, Turbo Pascal, PascalABC.NET 6 18.10.2009 13:56
Рекурсии Logan Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2008 08:52