Помощь - Поиск - Пользователи - Календарь
Полная версия: Одномерный массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
goosberry
Даны два массива Т(20)и С(20). Найти среднее геометрическое положительных элементов массива Т и заменить ими все отрицательные элементы массива С.


program zadacha;
uses crt;
type
mas1=array [1..20] of integer;
mas2=array [1..20] of integer;
var
T:mas1;
C:mas2;
i,k,p:integer;
sr:real;
begin
randomize;
writeln('Massiv T:');
for i:=1 to 20 do
begin
T[i]:=random(100)-50;
write(T[i], ' ');
end;
writeln;
writeln('Massiv C:');
for i:=1 to 20 do
begin
C[i]:=random(100)-50;
write(C[i], ' ');
end;
writeln;
k:=0;
p:=1;
sr:=0;
for i:=1 to 20 do
begin
if T[i]>0 then
begin
k:=k+1;
p:=p*T[i];
end;
end;
writeln;
if k>0 then sr:=exp(ln(p)*(1/k));
writeln('sr= ',sr:3:3);
writeln;
writeln('New massiv C:');
for i:=1 to 20 do
begin
if (C[i]<0) and (T[i]>0) then C[i]:=T[i];
write(C[i], ' ');
end;
writeln;
readkey;
end.



Иногда выдаёт ошибку, подскажите, пожалуйста, что не так
Заранее спасибо
Lapp
Ты представляешь себе порядок величины произведения, которая может получиться? Допустим, 10 положительных чисел, каждое равно 10. Тогда их произведение есть 1010. А p у тебя целое, то есть всего до 32 тысяч примерно.. Сделай p типа double.
goosberry
Предсавляю, я конечно подумала, что тип переменной надо поменять, только вот, если double (это, как я понимаю, вещественный тип?) использовать, тоже ошибку выводит...
sheka
Цитата
Код

writeln('New massiv C:');
for i:=1 to 20 do
  begin
   if (C[i]<0) and (T[i]>0) then C[i]:=T[i];
   write(C[i], '  ');
  end;

а зачем здесь условие and (T[i]>0) и почему C[i]:=T[i]; ?

по моему там все проще:
Код

writeln('New massiv C:');
for i:=1 to 20 do
  begin
   if (C[i]<0) then C[i]:=sr;
   write(C[i], '  ');
  end;

и еще там mas2=array [1..20] of integer;
а sr=real, тоесть массив тоже должен быть of real;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.