Одномерный массив

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Одномерный массив

Сообщение Losfos » 02.04.2014 08:02:38

Помогите составить программу в Lazarus
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Losfos
незнакомец
 
Сообщения: 2
Зарегистрирован: 02.04.2014 03:19:53

Re: Одномерный массив

Сообщение bormant » 02.04.2014 08:12:10

Код: Выделить всё
p:=1; c:=0;
for i:=1 to 12 do if q[i]>d then begin
  p:=p*q[i]; inc(c);
end;
p:=exp(ln(p)/c);
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Одномерный массив

Сообщение vada » 02.04.2014 10:00:52

Осталось задать массив q и значение для d.
Проверить не равно ли c нулю, и не меньше ли 0 значение p
Ну и описать типы переменных. С этого и начать следует.
1) На ноль делить не стоит. Результат не определен.
2) логарифм из отрицательного числа не определен.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Одномерный массив

Сообщение bormant » 02.04.2014 23:02:47

vada писал(а):На ноль делить не стоит

Вынужден обратить ваше внимание на условие в несколько вольном пересказе:
В массиве есть элементы, для которых выполняется условие q[i]>d.
vada писал(а):Осталось ...
естественно осталось, должен же ТС хоть немного подумать и хоть что-то самостоятельно сделать? Если правильно путаю, запрос готовых решений за вознаграждение на форуме находится в несколько ином разделе.
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Одномерный массив

Сообщение vada » 03.04.2014 00:13:54

Хороший стиль программирования предполагает ВСЕГДА перед делением проверять делитель на ноль. Поспорите? :)
Пусть сразу привыкает правильно код писать.
ЗЫ. Я специально ни строчки кода не написал :) Пусть ТС сам..
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Одномерный массив

Сообщение bormant » 03.04.2014 07:43:26

vada писал(а):Хороший стиль программирования предполагает ВСЕГДА перед делением проверять делитель на ноль. Поспорите? :)

Конечно, про всегда. 1) Переполнение легко получить при делении на малое действительное число, вы эту ситуацию как перед делением ВСЕГДА проверяете? 2) Неужели проверять ПЕРЕД проще чем поймать и обработать исключительную ситуацию ПОСЛЕ?
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Одномерный массив

Сообщение vada » 03.04.2014 09:56:51

Это в тыщу раз быстрее обработки исключения.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Одномерный массив

Сообщение bormant » 03.04.2014 18:34:11

Код: Выделить всё
var
  a, b: single;
begin
  a:=1e38; b:=1e-38;
  if b=0 then WriteLn('*** Ошибка: деление на 0') else WriteLn(a/b);
end.
Думаете поможет? Тогда, если не поможет, зачем проверять?
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Одномерный массив

Сообщение vada » 04.04.2014 12:22:14

В данной задаче насрать :)

А вот представьте какую-нибудь расчетную систему (ну мне это ближе, я этим занимаюсь).
Пользователь задает уйму данных, выполняет последовательно множество этапов работы дергая многие десятки разных модулей. Выполняет множество итераций. Матрицы обращает, дифуры крутит вертит... целый день в системе сидит и мышкой что-то дергает... И тут ему БАЦ! Деление на ноль, или потеря порядка, индекс за границей. Досвидос!... Они потом придут и меня на кол посадят. И будут правы! :)
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Одномерный массив

Сообщение bormant » 04.04.2014 15:23:06

vada писал(а):В данной задаче насрать

Консенсус, однако.
vada писал(а):Это в тыщу раз быстрее обработки исключения

vada писал(а):выполняет последовательно множество этапов работы дергая многие десятки разных модулей. Выполняет множество итераций. Матрицы обращает, дифуры крутит вертит... целый день в системе сидит и мышкой что-то дергает

Описана ситуация, когда деление на 0 не является обычным ходом алгоритма. А теперь посмотрите, что дороже, многие тысячи проверок или одно исключение, которое всего лишь в тысячу раз дороже проверки?
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Одномерный массив

Сообщение vada » 04.04.2014 16:48:07

Исключение не одно. На каждое деление исключение. И ноль в знаменателе вовсе не означает фатальную ошибку. Может быть что угодно. Может быть это правильно как раз. И повторяться это может миллионы раз в цикле. Если вы готовы накренить пользователя чтоб он час ждал пока ваши все миллионы исключений отработаю, так в перед! Это не моя проблема, а ваша.
В чем вы хотите меня убедить? Не понимаю.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Одномерный массив

Сообщение stanilar » 07.04.2014 13:52:23

В последний раз, когда писал рассчетную программу для родного института(года 4 тому назад), просто воспользовался настройками процессора, когда при делении на ноль, вместо ошибки результат становился равным NAN. И результат любой операции с NAN тоже равен NAN.

Крайне советую такой подход, чтоб не засорять код провеками и сообщениями. Как устанавливать эти настройки уже не вспомню, т.к. код был унаследован. Возможно, просто была отключена опция вызова исключения при таких ошибках.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 240

Рейтинг@Mail.ru