Помощь - Поиск - Пользователи - Календарь
Полная версия: Одномерный массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Atreides
Попалась задача на одномерный массив:
Заполнить массив из 200 элементов случайным образом и посчитать произведение элементов до первого отрицательного.
Как такой рандом на отрицательные числа забить и подсчитать произведение?
compiler
как то так...
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
Так вот как это делалось.
klem4
Цитата
ar[i]>=0


а стоит ли учитывать 0 ? Тут то 9 элементов, не страшно, а если их 9000 и первый же элемент = 0, дальнейший подсчет произведения не имеет никакого смысла. Так что у думаю под repeat .. until надо переделать и условие сделать строгое (для того, чтобы в случае если был домножен 0, выход из цикла)
Lapp
Цитата(compiler @ 23.12.2007 15:09) *

                ar[i]:=random(10)-random(10);
- зачем это?
Вполне можно обойтись так:
                ar[i]:=random(20)-10;
volvo
Цитата
- зачем это?
Вот ЭТО:
Цитата
ar[i]:=random(20)-10;
(при работе на TP и настройках по умолчанию) с большой степенью вероятности приведет к аварийному останову программы.

P.S. Кстати, первый вариант приведет к тому же результату.
Lapp
Цитата(volvo @ 24.12.2007 15:36) *

(при работе на TP и настройках по умолчанию) с большой степенью вероятности приведет к аварийному останову программы.

Согласен, лучше явно преобразовать тип:
ar[i]:=Integer(random(20))-10;
andriano
А если так?
ar[i] := random(2) + (-10);
smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.