Форум: "Прочее";
Текущий архив: 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 лет...
← →
Baks (2011-02-28 18:56) [41]
> не может переменная поменять свой тип в рунтиме
Причём тут это?
← →
Palladin © (2011-02-28 19:01) [42]бездарность
← →
Anatoly Podgoretsky © (2011-02-28 19:20) [43]> Baks (28.02.2011 17:01:36) [36]
Это херня а не цикл
← →
Германн © (2011-02-28 19:24) [44]А ведь компилятор предупреждал!
← →
Baks (2011-02-28 19:36) [45]
> Anatoly Podgoretsky [43]
Это удалено модератором а не цикл
:)
← →
Юрий Зотов © (2011-03-01 00:30) [46]
> Baks (28.02.11 17:01) [36]
> То что -1 не впихнуть в byte это я ещё 10 лет назад выучил.
> Я просто спросил как это происходит в цикле (в LnCount - 1)
Почему не впихнуть? Запросто. Как раз 255 и получится. Хоть в цикле, хоть где угодно.
Только вот что: LnCount-1 выполняется НЕ в цикле, а ПЕРЕД ним.
← →
Baks (2011-03-01 18:52) [47]
Юрий Зотов [46]
Я просто думал, что это происходит как например с константой:
const
N = 0;
LnCount = N - 1;
Компилятор определит, что LnCount должна быть Shortint, но он не присвоит ей тип Byte и соответственно значение не перескочит на 255. Вот я про что. Я думал, что перед выполнением цикла происходит подобное т.е. в памяти
образуется переменная или константа (Shortint), которая будет содержать -1;
← →
clickmaker © (2011-03-01 18:56) [48]> перед выполнением цикла происходит подобное т.е. в памяти
> образуется переменная или константа
с чего бы, если у тебя уже объявлена переменная? перед циклом из нее просто вычитается 1 и получается 255
← →
Очень злой (2011-03-01 19:02) [49]
> Palladin © (28.02.11 15:07) [2]
>
> 255*2 раз
А почему не 256*2 раз?
← →
Leonid Troyanovsky © (2011-03-01 19:20) [50]
> Anatoly Podgoretsky © (28.02.11 16:11) [31]
> Объем винчестера байтом не измерить.
Редкий байт долетит до середины цилиндра.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2011-03-01 19:28) [51]
> Baks (28.02.11 17:01) [36]
> Вот это дааааа! Я просто пукнул, а тут целый атомный взрыв
> образовался :)
Мания величия.
Любой собс-ручный пук в лужу уподобляю атомному взрыву.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2011-03-01 19:31) [52]
> Очень злой (01.03.11 19:02) [49]
> А почему не 256*2 раз
255 пишем - два в уме.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2011-03-01 19:37) [53]
> Baks (28.02.11 15:04)
> procedure Test;
> var
> I, J, LnCount: Byte;
> begin
> LnCount := 0;
>
> for I := 0 to LnCount - 1 do
Убить из рогатки.
Вкупе с отпрысками.
--
Regards, LVT.
← →
Baks (2011-03-01 20:53) [54]
> Leonid Troyanovsky
> Убить из рогатки
Леонид, меня пугают Ваши высказывания и фамилия :) Какие-то не очень приятные ассоциации :)
← →
Противный (2011-03-01 21:28) [55]>> Baks (01.03.11 20:53) [54] Леонид, меня пугают Ваши высказывания и фамилия :) Какие-то не очень приятные ассоциации :)
Он вообще тот еще типчик. Тут ходят слухи, что пара местных завсегдатаев, после, скажем так, не совсем сдержанного общения с ним, вынуждены были потом обращаться за медицинской помощью. Так что ты правильно делаешь, что общаешься из-под анонимного ника. Но все равно, не расслабляйся, ибо он лично знаком с модераторами, а те знают твой IP, со всеми вытекающими отсюда последствиями...
← →
Leonid Troyanovsky © (2011-03-01 22:42) [56]
> Baks (01.03.11 20:53) [54]
> Леонид, меня пугают Ваши высказывания
Чем же рогатка плоха? Ну, можно еще под трамвай попасть.
Но, это - промысел божий, а хотелось принять участие.
А насчет фамилии не стоит беспокоиться - она честная,
из Зап. Белоруссии or Украины, там даже целый район
такой был.
--
Regards, LVT.
← →
Противный (2011-03-01 23:33) [57]>> Ну, можно еще под трамвай попасть.
Вот-вот... вот-вот!
>> А насчет фамилии не стоит беспокоиться
Знать, предки на троих сообразить не прочь были. Но, как говорит народная мудрость, сколько водки не бери, все равно второй раз ходить. Завидят соседи гонца издалека: "О, за новой отправился!". И так изо дня в день. Так, из сочетания слов "трое" и "новая", родилась эта легендарная фамилия.
Это возвращаясь к вопросу о цикле. Все в этом мире циклично. И фамилия Трояновский - тому подтверждение. Главное, чтобы переполнение не наступило.
← →
Baks (2011-03-02 00:55) [58]Удалено модератором
← →
clickmaker © (2011-03-02 00:57) [59]Удалено модератором
← →
Baks (2011-03-02 01:12) [60]Удалено модератором
← →
Anatoly Podgoretsky © (2011-03-02 09:47) [61]> Leonid Troyanovsky (01.03.2011 19:37:53) [53]
Что бы надежно.
← →
Очень злой (2011-03-03 14:22) [62]
> Леонид, меня пугают Ваши высказывания и фамилия :)
Чисто програмистская фамилия. Вон у Роуза тож фамилия програмистская.
:)
← →
Inovet © (2011-03-03 14:31) [63]> [62] Очень злой (03.03.11 14:22)
> Вон у Роуза тож фамилия програмистская
Он Д"Багель.
← →
Anatoly Podgoretsky © (2011-03-03 16:50) [64]> Inovet (03.03.2011 14:31:03) [63]
Он стесняется слова Баг или Ягель
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
Память: 0.6 MB
Время: 0.004 c