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

Вниз

Кака лучше?   Найти похожие ветки 

 
Anatoly Podgoretsky ©   (2012-04-17 11:20) [40]

> Sha  (17.04.2012 11:17:39)  [39]

Автор является последней инстанцией, как писать, что использовать, усложнять
или нет
Это я не обсуждаю, только приведеный код.


 
Sha ©   (2012-04-17 11:36) [41]

Да с кодом и так все ясно. Все придется переписать,
если вдруг приспичит сделать врхнюю границу массива переменной.


 
CRLF   (2012-04-17 11:40) [42]


> приводит нас либо к усложнению кода
Некоторое усложнение, конечно, есть, но...

type
TNumber= 1..100;
TRooms= array[TNumber] of integer;

function Volume(const Rooms: TRooms; First: TNumber; Count: integer): integer;

по большому счёту некорректен. Если уж типизируем, то нужно

type
TNumber= 1..Max;
TQuantity = 0..Max;
TRooms= array [TNumber] of integer;

function Volume(const Rooms: TRooms; First: TNumber; Count: TQuantity): integer;
var
Current: TNumber;
begin
 if First + Count > Max then
   raise ...;
 Result := 0;
 for Current := First to Pred(First + Count) do
   Result := Result + Rooms[Current];
end;


 
Anatoly Podgoretsky ©   (2012-04-17 11:40) [43]


> Sha ©   (17.04.12 11:36) [41]
> если вдруг приспичит сделать врхнюю границу массива переменной.

Не понял, поясни, а то я до сих пор считал, что нельзя определить массив, с граница с переменными.


 
Sha ©   (2012-04-17 11:49) [44]

> Anatoly Podgoretsky ©   (17.04.12 11:40) [43]

Конечно нельзя, поэтому и придется переписать


 
Sha ©   (2012-04-17 11:55) [45]

> CRLF   (17.04.12 11:40) [42]

Попался )
Засада там же: Count=0


 
CRLF   (2012-04-17 12:06) [46]

Попался в чём? Цикл не выполнится ни разу. То, что Pred(First + Count) будет иметь недопустимое для TNumber значение, — имеет ли смысл об этом говорить, если присвоения не будет никогда?


 
Sha ©   (2012-04-17 12:09) [47]

Вот-вот.
А компилятор, собака, об этом знает, но ERangeError поднимает.
Но мы бум молчать.


 
CRLF   (2012-04-17 12:11) [48]


> А компилятор, собака, об этом знает, но ERangeError поднимает.
Опять же, прогнал твой пример из [28] с моими доработками, никакого RangeError нету.


 
Sha ©   (2012-04-17 13:27) [49]

> CRLF   (17.04.12 12:11) [48]

Проверил на D7

Optimization Off
RangeChecking On
OverFlowChecking On

ERangeError есть


 
CRLF   (2012-04-17 13:50) [50]

Да, действительно, с range checking проблема есть.


 
Sha ©   (2012-04-17 13:57) [51]

Во.
И придется поизвращаться, чтобы этого избежать.
Спрашивается, нафига было типизировать?


 
CRLF   (2012-04-17 14:03) [52]

А в чём извращение? В добавлении одного if (лишнего, но, в принципе, повышающего читаемость)?


 
Sha ©   (2012-04-17 14:07) [53]

Спорим, одного не хватит?

P.S. меня бесят все эти if и raise...


 
Sha ©   (2012-04-17 14:10) [54]

Это не тот код, чтобы думать. Тут надо струячить. Думать надо редко.
При сплошном типизировании приходится думать непрерывно. Думалка может сломаться.


 
CRLF   (2012-04-17 14:24) [55]


> P.S. меня бесят все эти if и raise...
Неужели лучше, если через эн лет в проверенном годами коде изредка станет возникать ав по причине выхода за пределы массива?


 
Sha ©   (2012-04-17 14:26) [56]

разве эти вещи как-то связаны?


 
CRLF   (2012-04-17 14:35) [57]

А разве нет? Когда-нибудь First + Count станет больше High(Array), массив к тому времени будет динамическим и без лишней типизации, в 99% выход за пределы массива будет прощаться, но раз в полгода будет ав... :-)


> Это не тот код, чтобы думать. Тут надо струячить. Думать
> надо редко.
Ну да, это ведь "форумные этюды", а не реальная задача, в реальной вряд ли кто-то кроме преподавателя информатики станет без нужды поддиапазоны выделять.


 
Sha ©   (2012-04-17 14:40) [58]

> CRLF   (17.04.12 14:35) [57]
> Когда-нибудь First + Count станет больше High(Array)

есть if и if, почувствуй разницу

> в реальной вряд ли кто-то кроме преподавателя информатики
> станет без нужды поддиапазоны выделять

опять же (с) ЮЗ:
любую полезную вещь можно превратить в бесполезную (или даже вредную),
доведя ее до абсурда.



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

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

Наверх





Память: 0.55 MB
Время: 0.068 c
2-1334405334
lord827
2012-04-14 16:08
2013.03.22
межпоточная защита данных


15-1348518602
Юрий
2012-09-25 00:30
2013.03.22
С днем рождения ! 25 сентября 2012 вторник


15-1339121462
Unk
2012-06-08 06:11
2013.03.22
Подскажите проигрыватель видео.


15-1333440113
MonoLife
2012-04-03 12:01
2013.03.22
Aser Aspire one & Asus WL-500g Premium v.2


2-1346938341
stas
2012-09-06 17:32
2013.03.22
Создание экземпляра "неизвестного" класса,





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский