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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2009, 14:51   #1
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
Вопрос Помогите разобраться с кодом

Я недавно начал программировать так что мой вопрос может показаться глупым но все же если не трудно помогите

Вот такой код:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
for i:=-10 to -5 do
r:=round(10/i);
ListBox1.Items.Add('10/'+IntToStr(i)+'='+IntToStr(r));
ListBox1.Items.Add('Расчет окончен');
end;
end.
Здесь я нарочно не поставил Begin после for i:=-10 to -5 do и результат получился такой:

10/-4=2
Расчет окончен

Не пойму почему. Кто нибудь напишите по пунктам, как компютер производит вычисление
Skype: Lotles-XXXX

Последний раз редактировалось Stilet; 20.08.2009 в 08:42.
Superlotles вне форума Ответить с цитированием
Старый 19.08.2009, 15:08   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Предложу свой вариант. Может быть все происходит так. Цикл идет от -10 до -5. Следовательно в цикле участвуют такие числа: -9,-8,-7,-6 (вспомните ось Х). Всего этих чисел четыре. Отсюда и получается, что 10/-4, где -4 - это кол-во чисел в цикле со знаком "-". Может так . Почему два? Моежет потому что -(10:4)=-2.5 => Round(2.5)=2
??????????????
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 19.08.2009, 15:49   #3
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

При выполнении оператора for вначале вычисляется выражение и осуществляется присваивание параметр цикла := начальное значение после этого циклически проверяется следующая последовательность: Проверка условия параметр цикла <= конечное значение если условие не выполнено оператор for завершает свою работу. И что у нас получается i>-5 и for завершает свою работу. i=-4 . чтобы этого не было ставим begin/ а так у вас получается что выполняется r:=10/-5; где r=-2; действие r:=10/-4; не происходит
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]

Последний раз редактировалось Volt; 19.08.2009 в 15:55.
Volt вне форума Ответить с цитированием
Старый 19.08.2009, 18:40   #4
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
По умолчанию

Спасибо !!!
Очень помогли
Volt отдельное спасибо, с тобой согласен
Skype: Lotles-XXXX
Superlotles вне форума Ответить с цитированием
Старый 19.08.2009, 20:39   #5
Mr.Qwerty
Что? Где? Когда?
Форумчанин
 
Аватар для Mr.Qwerty
 
Регистрация: 14.07.2009
Сообщений: 220
По умолчанию

Хз, мож не правильно, но мне больше всего кажется правильным такой код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,r:integer;
begin
for i:=-10 to -5 do //цикл счисления переменной от -10 до -5
  begin
	r:=10 div i;
	ListBox1.Items.Add('10/'+IntToStr(i)+'='+IntToStr(r));
	ListBox1.Items.Add('Расчет окончен');
   end;
end;
From Stilet: Когда мы научимся оформлять код спецтегом?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".

Последний раз редактировалось Stilet; 20.08.2009 в 08:43.
Mr.Qwerty вне форума Ответить с цитированием
Старый 19.08.2009, 21:30   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Хз, мож не правильно, но мне больше всего кажется правильным такой код:
Это понятно, просто человеку интересно как происходит процесс вычисления без begin..end;
puporev вне форума Ответить с цитированием
Старый 19.08.2009, 22:24   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Надо ещё добавить, что хотя обычно здесь всё выполняется так, как описал artemavd (если что, Round округляет .5 в чётную сторону, так вроде делают в банках или ещё где-то), оно не обязано выполняться так. После цикла значение счётчика не определено. Например, у меня Delphi в коде
for i := 11 to 99 do a[i] := 55;
отдельно перебирает i от 89 до 1 и адрес от a[11] до a[99], хотя это только если i потом не используется, опять же, ничто не запрещает компилятору так делать всегда.
Somebody вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с кодом! sid Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 13.04.2010 17:53
Помогите разобраться с кодом WINApi Zaraki Общие вопросы C/C++ 13 23.03.2008 21:39
помогите разобраться с кодом samosval Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 27.12.2007 00:20
Просьба разобраться с кодом на С++ deazer Помощь студентам 1 08.11.2007 07:55
Помогите разобраться с кодом С++ Noor Помощь студентам 20 10.10.2007 17:42