Форум: "Прочее";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
ВнизВопрос Найти похожие ветки
← →
Rouse_ © (2007-08-14 22:02) [0]Разбираясь в архивах нашел тут примерчиков несколько, вопросы данные задавались несколько лет назад, интересно как их решит возмужавшее наседлление форума :)
Дано:
procedure TForm1.Button1Click(Sender: TObject);
var
A, B, C: ShortInt;
I: Integer;
begin
A := 10;
B := 100;
C := 1;
for I := 0 to A * B do Inc(C);
ShowMessage(IntToStr(C));
end;
Вопрос, какое значение покажет ShowMessage?
Подсказка, не стоит запускать дельфи - включите сначала мозги...
← →
TUser © (2007-08-14 22:09) [1]Рискну ошибиться, два?
← →
:(( (2007-08-14 22:11) [2]Да при чем тут мозги?
Надо тупо счиатать, сколько будет в С после 1001 прибавления единицы, учитывая, что Shotint От -128 до 127.
Не мозги нужны, а чистая арифметика.
← →
TUser © (2007-08-14 22:12) [3]Слово не воробей, но числа в уме делить я не умею, факт :)
← →
X9 © (2007-08-14 22:13) [4]18?
← →
Kostafey © (2007-08-14 22:14) [5]> [2] :(( (14.08.07 22:11)
Обогнал.
Я сначала было подумал 1002, если честно.
Но посмотрев максимальное значение ShortInt (оказывается он всего 1байт)
понял, что у уме это точно не посчитать :)
← →
X9 © (2007-08-14 22:15) [6]-106?
← →
Rouse_ © (2007-08-14 22:17) [7]А калькулятор в инженерном режиме у всех уже отменили? :)
← →
Kostafey © (2007-08-14 22:21) [8]> понял, что у уме это точно не посчитать :)
А если...
1024 (10) = 10000000000 (2)
тогда
1002 (10) = 1111101001 (2)
и если взять только первые 7 получаем
1101001 (2) = -101001 (2) = -40 (10)
если не запутался в знаках
← →
anton773 © (2007-08-14 22:21) [9]-22
← →
Kostafey © (2007-08-14 22:23) [10]> А калькулятор в инженерном режиме у всех уже отменили? :
> )
Вроде вручную договорились...
впрочем вру это я похоже сам придумал,
речь шла только о Delphi
← →
Kostafey © (2007-08-14 22:23) [11]> -22
Сам считал?
← →
TUser © (2007-08-14 22:45) [12]> речь шла только о Delphi
То есть Лазарусом пользоваться было можно?
← →
Rouse_ © (2007-08-14 22:46) [13]
> Да при чем тут мозги?
> Надо тупо счиатать, сколько будет в С после 1001 прибавления
> единицы
Правильно... следует сделать С интом :)procedure TForm1.Button1Click(Sender: TObject);
var
A, B, I: ShortInt;
C: Integer;
begin
A := 10;
B := 100;
C := 1;
for I := 0 to A * B do
Inc(C);
ShowMessage(IntToStr(C));
end;
← →
@!!ex © (2007-08-14 22:57) [14]> Правильно... следует сделать С интом :)
НЕ понял....
Такой код тоже правильно работать не будет.
Предполагаюч то он даже не откомпилиться, поскольку A*B принимает значение, которое никогда не примет I.
Правда я не помню точно A*B обрежеться или преобразуется в Integer
← →
Rouse_ © (2007-08-15 09:09) [15]
> поскольку A*B принимает значение, которое никогда не примет I.
Неверно - произойдет обрезание по диапазону...
← →
Игорь Шевченко © (2007-08-15 09:46) [16]
> procedure TForm1.Button1Click(Sender: TObject);
> var
> A, B, C: ShortInt;
> I: Integer;
> begin
> A := 10;
> B := 100;
> C := 1;
> for I := 0 to A * B do Inc(C);
> ShowMessage(IntToStr(C));
> end;
Убивать надо за такой код
← →
Rouse_ © (2007-08-15 10:11) [17]И не говори - сразу расстреливать :) Только смысл данного кода в другом :)
← →
isasa © (2007-08-15 10:52) [18]А в чем? :)
Показать, что 10*100 не влазит в ShortInt. :)
← →
Rouse_ © (2007-08-15 11:26) [19]Не показать, а определить степень внимательности программиста при тесте :)
← →
Anatoly Podgoretsky © (2007-08-15 21:19) [20]> Rouse_ (14.08.2007 22:02:00) [0]
Тут не задачку надо решать, а код исправлять или хотя бы включить проверку диапазонов.
← →
Anatoly Podgoretsky © (2007-08-15 21:20) [21]> Rouse_ (15.08.2007 10:11:17) [17]
Еще не хватало патроны на него тратить, дубинкой надо.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.052 c