Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Alena
Мальчишки вы все так классно решаете, а я в паскале не понимаю, через 2 дня надо сдавать контрольную , помогите пожалуйста а? :p2:

Дали вот такое запутанное задание

Вычислить
Цитата

                          s1    s2
                        E  + E
                z= _____________
                          k1*k2

s2 - сумма положительных элементов массива X(80)
k2 - кол- во положительных элементов массива X(80)

s1 - сумма положительных элементов массива y(60).
k1 - кол- во положительных элементов массива y(60).
выполнить с использованием подпрограмм
Alena
немного не так создало тему
корректирую
E в степени s1 прибавить E в степени s2 и делиться все это на k1*k2
volvo
Значит, принцип такой:
function get_amount(var arr: array of integer;
const n: integer): integer;
var i, count: integer;
begin
count := 0;
for i := 0 to pred(n) do
if arr[i] > 0 then inc(count);
get_amount := count;
end;

function get_sum(var arr: array of integer;
const n: integer): integer;
var i, s: integer;
begin
s := 0;
for i := 0 to pred(n) do
if arr[i] > 0 then inc(s, arr[i]);
get_sum := s;
end;

var
x: array[1 .. 80] of integer;
y: array[1 .. 60] of integer;

begin
{ здесь - заполнение массивов }
write('z = ', (exp(get_sum(y, 60)) + exp(get_sum(x, 80))) /
(get_amount(y, 60) * get_amount(x, 80)) );
end.
Alena
а у меня при запуске выдаёт здесь ошибку еррор 200, а когда компилируешь всё в порядке, подскажите volvo что я не так делаю

Код
begin
 { здесь - заполнение массивов }

!!!!!!!!!!!  write('z = ', (exp(get_sum(y, 60)) + exp(get_sum(x, 80))) /
               (get_amount(y, 60) * get_amount(x, 80)) );
end.
klem4
10 и 11 посты

посмотри.
volvo
Может, можно обойтись без модуля Crt? Просто не указывай его в Uses и не будет Error 200...

Хотя СТОП !!! Ты массивы заполнила значениями? Если нет, то у тебя действительно деление на 0, потому что количество положительных элементов в обоих массивах = 0. Комментарии читаем ВНИМАТЕЛЬНО. Там где написано "здесь - заполнение массивов" должно быть заполнение массивов. Без него программа работать не будет.
Alena
Я сделала так но в конце опять ошибка( после заполнения массива)
что то опять напартачила, а можно как то автоматизировать заполнение массива ну случайными числами например??????

Код

function get_amount(var arr: array of integer;

        const n: integer): integer;

var i, count: integer;

begin

 count := 0;

 for i := 0 to pred(n) do

   if arr[i] > 0 then inc(count);

 get_amount := count;

end;


function get_sum(var arr: array of integer;

        const n: integer): integer;

var i, s: integer;

begin

 s := 0;

 for i := 0 to pred(n) do

   if arr[i] > 0 then inc(s, arr[i]);

 get_sum := s;

end;


var

 x: array[1 .. 80] of integer;

 y: array[1 .. 60] of integer;
 i: integer;

begin

 { здесь - заполнение массивов }


WriteLn ('Vvedite elementi massiva X:');
For i := 1 To 80 Do
Begin
Write ('x[', i, '] = ');              
ReadLn (x[i]);
end;


WriteLn ('Vvedite elementi massiva Y:');
For i := 1 To 60 Do              

Begin
Write ('y[', i, '] = ');
ReadLn (y[i]);
               end;

 write('z = ', (exp(get_sum(y, 60)) + exp(get_sum(x, 80))) /

               (get_amount(y, 60) * get_amount(x, 80)) );
     end.
volvo
For i := 1 To 60 Do y[i] := Random(100); {числа от 0 до 99 }
Guest
т.е должно быть так??

Код

var
 x: array[1 .. 80] of integer;
 y: array[1 .. 60] of integer;
begin
For i:= 1 To 80 Do
begin
x[i] := Random(100); {числа от 0 до 99 }
end;

For i:= 1 To 60 Do
  begin
y[i] := Random(100); {числа от 0 до 99 }
end;
 write('z = ', (exp(get_sum(y, 60)) + exp(get_sum(x, 80))) /
               (get_amount(y, 60) * get_amount(x, 80)) );
end.
klem4
Похоже на правду, но есть маленькое замечание, у тебя в телах циклов for всего одни оператор - присвоение элементу массива случайного значения, по этому вовсе не нужно ставить
Begin...end;
Это для составного оператора, у тебя можно просто
for i := 1 to n do x[i] := random(100);


;) Это так ... к слову
Guest
вот так всё равно не работает sad.gif
Код

function get_amount(var arr: array of integer;
        const n: integer): integer;
var i, count: integer;
begin
 count := 0;
 for i := 0 to pred(n) do
   if arr[i] > 0 then inc(count);
 get_amount := count;
end;
function get_sum(var arr: array of integer;
        const n: integer): integer;
var i, s: integer;
begin
 s := 0;
 for i := 0 to pred(n) do
   if arr[i] > 0 then inc(s, arr[i]);
 get_sum := s;
end;
var
 x: array[1 .. 80] of integer;
 y: array[1 .. 60] of integer;
  i: integer;
begin
 { здесь - заполнение массивов }
For i := 1 To 80 Do x[i] := Random(100); {числа от 0 до 99 }
For i := 1 To 60 Do y[i] := Random(100);
 write('z = ', (exp(get_sum(y, 60)) + exp(get_sum(x, 80))) /
               (get_amount(y, 60) * get_amount(x, 80)) );
end.

klem4
А что конкретно не работает ? Компилируется нормально.

зы и будь добра, выложи полностью свою программу.
volvo
Странно. У меня эта программа выдает:
Цитата
z =  3.3281958460818649E+1865
Alena
спасибо мальчики разобралась всё дело в той самой полурабочей версии паскаля.
Спасибо ВСЕМ вы супер!!! :thanks:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.