Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос про цикл   Найти похожие ветки 

 
Baks   (2011-02-28 15:04) [0]

procedure Test;
var
 I, J, LnCount: Byte;
begin
 LnCount := 0;

 for I := 0 to LnCount - 1 do
   for J := 0 to 1 do
     MyFunc;
end;

Будет ли выполнена MyFunc и сколько раз?


 
clickmaker ©   (2011-02-28 15:07) [1]

а сам-то как думаешь?


 
Palladin ©   (2011-02-28 15:07) [2]

255*2 раз


 
И. Павел ©   (2011-02-28 15:07) [3]

Проверьте, всего делов-то :)

Для обратного цикла downto используют.


 
Palladin ©   (2011-02-28 15:08) [4]

обратного?


 
TUser ©   (2011-02-28 15:08) [5]

не взлетит


 
Противный   (2011-02-28 15:08) [6]

Вот это не будет выполнено ни разу: for I := 0 to -1 do
На месте компилятора, я бы это еще на этапе компиляции по самые ...кхе... оптимизировал.


 
Противный   (2011-02-28 15:09) [7]

Ах да, там же byte.
Вопрос: зачем?


 
И. Павел ©   (2011-02-28 15:09) [8]

> Byte

Переполнение возникнет. И Byte станет не отрицательным, а большим положительным.


 
Palladin ©   (2011-02-28 15:10) [9]

гы гы гы


 
И. Павел ©   (2011-02-28 15:12) [10]

> [9] Palladin ©   (28.02.11 15:10)
> гы гы гы


А я настаиваю - ни разу не выполнится, т.к. "правильные пацаны" используют Range Check Error в настройках проекта :)


 
И. Павел ©   (2011-02-28 15:12) [11]

> Range Check Error

И overflow тоже


 
Palladin ©   (2011-02-28 15:14) [12]

а это уже чиста конкретна вопрос религии, ставить РЦЕ или нет, ибо оно провоцирует не существующие исключения...

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


 
Противный   (2011-02-28 15:14) [13]

>> И. Павел ©   (28.02.11 15:12) [10] А я настаиваю - ни разу не выполнится, т.к. "правильные пацаны" используют Range Check Error в настройках проекта :)

Правильные пацаны используют Overflow checking. :)


 
И. Павел ©   (2011-02-28 15:19) [14]

> лучше скажите почему в яве переменную по ссылке передать
> нельзя...

Кстати - вчера как раз с этим мучался (только начал на яве писать). Не удобно, если хочется создать объект внутри функции и вернуть в виде параметра. Думал - как-то можно, но просто недокопал.


 
Palladin ©   (2011-02-28 15:23) [15]

да это фигня... логично было использование классов примитивов, есть int, есть Integer, хочешь натив примитив, пользуй int, хочешь отдать возможность модификации пользуй Integer, что бы можно было хотя бы изменить значение...
например как

   private static void rrr(Integer n) {
       n++;
   }

   public static void main(String[] args) {
       Integer i = 5;
       rrr(i);
       System.out.println(i);
   }

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


 
Inovet ©   (2011-02-28 15:30) [16]

> [7] Противный   (28.02.11 15:09)
> Вопрос: зачем?

Тестовое задание?


 
Baks   (2011-02-28 15:31) [17]

Да, правильно будет выполняться много раз, но вот казалось бы почему?
Ведь я не присваивал ни I, ни LnCount значение меньше нуля. Оно получается при выполнении LnCount - 1, но ведь этот результат не присваивается переменным I и LnCount?


 
Palladin ©   (2011-02-28 15:33) [18]


> но вот казалось бы почему?

потому что толпа нынешних лемингов-кодеров понятия не имеют что такое byte


 
Противный   (2011-02-28 15:36) [19]

> но ведь этот результат не присваивается переменным I

Для выполнения арифметических операций необходимо привести все операнды к единому типу. Если операнды имеют разные типы, выбирается больший. LnCount имеет тип byte, 1 приводится к byte, и, соответсвенно, результат (LnCount -1) имеет тип byte, который и переполяется.


 
Baks   (2011-02-28 15:37) [20]


> понятия не имеют что такое byte


0-255


 
Противный   (2011-02-28 15:39) [21]

что такое byte

Ну, это элементарно.
Byte - это unsigned char.
В том смысле, что в нем объем винчестеров измеряется.


 
Baks   (2011-02-28 15:39) [22]


> Противный   (28.02.11 15:36) [19]


Спасибо!


 
Palladin ©   (2011-02-28 15:40) [23]


> Baks   (28.02.11 15:37) [20]

прааально, а теперь

var
 c: Byte;

c := 0;
...
c := c -1;

чему равно c ?


 
Inovet ©   (2011-02-28 15:40) [24]

> [17] Baks   (28.02.11 15:31)
> Оно получается при выполнении LnCount - 1

Пользовать знаковые целые, или for в обратную сторону downto, или

procedure Test;
var
I, J, LnCount: Byte;
begin
 LnCount := 0;

 I := LnCount;
 while I > 0 do begin
   for J := 0 to 1 do
     MyFunc;
   dec(I);
 end;

end;


 
Противный   (2011-02-28 15:40) [25]

0-255 = -255
ShortInt, то есть...


 
Противный   (2011-02-28 15:54) [26]

Palladin ©   (28.02.11 15:40) [23] прааально

Непрааально.

Прально:
type
 Byte = 0..255;

А 0-255 = -255.
То есть, чтобы не возникало вопросов [17] "но вот казалось бы почему?", в подобных случаях следует использовать не byte, а, как минимум, shortint.


 
Inovet ©   (2011-02-28 15:56) [27]

> [25] Противный   (28.02.11 15:40)
> 0-255 = -255
> ShortInt, то есть...

Нет = 1. Это же по модулю 256. В компах бесконечных целых нельзя сделать, приходится заворачивать в конечных полях.


 
Palladin ©   (2011-02-28 16:00) [28]


> Противный   (28.02.11 15:54) [26]

хм... признаки кодера в тебе пока не наблюдались...
ну как грится: ути пути... 0 - 255 = -255, какой ужас, фсе дефачки в шоке... компилятор превратил по своей воле перменную типа byte в переменую smallint, всем производить страшный визг


> Противный   (28.02.11 15:40) [25]

мдэ... ты еще и рэнжи типов не знаешь...


 
Противный   (2011-02-28 16:05) [29]

Palladin ©   (28.02.11 16:00) [28] ты еще и рэнжи типов не знаешь...

"Да я так, просто пописать вышел" (С)


 
Anatoly Podgoretsky ©   (2011-02-28 16:09) [30]

> Baks  (28.02.2011 15:31:17)  [17]

А я посмотрю как ты присвоишь.


 
Anatoly Podgoretsky ©   (2011-02-28 16:11) [31]

> Противный  (28.02.2011 15:39:21)  [21]

Объем винчестера байтом не измерить.


 
Palladin ©   (2011-02-28 16:13) [32]


> Противный   (28.02.11 16:05) [29]

о... ) амсори... правда что... 0-255 не скомпилится... затупил...


 
Dimka Maslov ©   (2011-02-28 16:15) [33]


> Ведь я не присваивал ни I, ни LnCount значение меньше нуля.


Внимательно читаем про машинное представление отрицательных чисел, а также про знаковые и беззнаковые типы.


 
Противный   (2011-02-28 16:21) [34]

Palladin ©   (28.02.11 16:13) [32]  затупил...

Это ничего, бывает. Я вон, тоже shortint с smallint вечно путаю. По той причине, что редко пользуюсь. Да еще вечно размышляю, кто кого меньше, тот ли "инт", который "короткий", или тот, который "маленький", и почему? Вот вопрос, достойный обсуждения...


 
han_malign   (2011-02-28 16:21) [35]

скажите спасибо, что с некоторых пор счетчик цикла for неявно расширяется до 32-бит знакового...
В D1 - этот цикл(byte <= 255) - был вечным...


 
Baks   (2011-02-28 17:01) [36]

Вот это дааааа! Я просто пукнул, а тут целый атомный взрыв образовался :)
Нет, ну вы определённо держите меня за идиота. То что -1 не впихнуть в byte это я ещё 10 лет назад выучил. Я просто спросил как это происходит в цикле (в LnCount - 1) просто со временем забывается.


 
Palladin ©   (2011-02-28 17:05) [37]

со временем не может забытся то что, гарри поттерь - это сказки, не может переменная поменять свой тип в рунтиме, объявленный в компилетиме...


 
Baks   (2011-02-28 17:44) [38]


> не может переменная поменять свой тип в рунтиме


Какая переменная?


 
Противный   (2011-02-28 18:02) [39]

[22], [36], [38]

Да, определенно.


 
Palladin ©   (2011-02-28 18:28) [40]


> Baks   (28.02.11 17:44) [38]

чему ты учился 10 лет...



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.017 c
2-1299761604
картман
2011-03-10 15:53
2011.06.19
почему точка останова не активна?


15-1298958622
Гость
2011-03-01 08:50
2011.06.19
Как саботировать работы?


15-1299089241
Baks
2011-03-02 21:07
2011.06.19
Редактор файлов справок (hlp, chm)


2-1299862251
Artemgood
2011-03-11 19:50
2011.06.19
Создать Автоматизированный информационный стенд колледжа


6-1238322888
alshtam
2009-03-29 14:34
2011.06.19
Indi, проблема с чтением из сокета данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский