Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Одномерный массив

Автор: 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 и настройках по умолчанию) с большой степенью вероятности приведет к аварийному останову программы.

Согласен, лучше явно преобразовать тип:
ar[i]:=Integer(random(20))-10;

Автор: andriano 25.12.2007 1:49

А если так?
ar[i] := random(2) + (-10);
smile.gif