Форум «Всё о Паскале» _ Задачи _ Одномерный массив
Автор: Atreides 23.12.2007 18:53
Попалась задача на одномерный массив: Заполнить массив из 200 элементов случайным образом и посчитать произведение элементов до первого отрицательного. Как такой рандом на отрицательные числа забить и подсчитать произведение?
Автор: compiler 23.12.2007 19:09
как то так...
var ar:array[0..9] of integer; i, pr:integer; begin randomize; for i:=low(ar) to high(ar) do begin ar[i]:=random(10)-random(10); writeln(ar[i]); end;
i:=low(ar); pr:=1; while ( (ar[i]>=0 ) and (i<=high(ar))) do begin pr:=pr*ar[i]; inc(i); end; writeln; writeln(pr); end.
зыв случае, если первый элемент отрицательный, произведение= единица ззы еще можна раскидать по процедурам
Автор: Atreides 24.12.2007 13:47
Так вот как это делалось.
Автор: klem4 24.12.2007 14:54
Цитата
ar[i]>=0
а стоит ли учитывать 0 ? Тут то 9 элементов, не страшно, а если их 9000 и первый же элемент = 0, дальнейший подсчет произведения не имеет никакого смысла. Так что у думаю под repeat .. until надо переделать и условие сделать строгое (для того, чтобы в случае если был домножен 0, выход из цикла)
Автор: Lapp 24.12.2007 19:28
Цитата(compiler @ 23.12.2007 15:09)
ar[i]:=random(10)-random(10);
- зачем это? Вполне можно обойтись так:
ar[i]:=random(20)-10;
Автор: volvo 24.12.2007 19:36
Цитата
- зачем это?
Вот ЭТО:
Цитата
ar[i]:=random(20)-10;
(при работе на TP и настройках по умолчанию) с большой степенью вероятности приведет к аварийному останову программы.
P.S. Кстати, первый вариант приведет к тому же результату.
Автор: Lapp 24.12.2007 19:58
Цитата(volvo @ 24.12.2007 15:36)
(при работе на TP и настройках по умолчанию) с большой степенью вероятности приведет к аварийному останову программы.