Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2013, 19:22   #1
anuta1995
Новичок
Джуниор
 
Регистрация: 23.12.2013
Сообщений: 4
По умолчанию Вычислить выражение, обработав исходные массивы! Free Paskal

Найти Z=(x^k1)*(y^k2)/(S1+S2) , где x,y - заданные числа ; S1 и k1 - сумма и количество положительных элементов заданного массиве (a1,a2......,a30), S2 и k2 сумма и количество отрицательных элементов заданного массива(b1,b2.......,b20)
Код:
var
a: array [ 1 .. 20] of integer;
b: array [ 1.. 30] of integer;
z : real;
j: integer;
s1,s2,k1,k2,x,y : integer;
procedure Sums( var s1, s2: integer; var k1,k2: integer);
var i: integer;
write('x.y');
realdn(x,y);
begin
s1:= 0 ;
k1:= 0 ;
for i:= 1 to 20 do if a[i]> 0 then begin
s1:=s1+a[i];
inc(k1);
end ;
s2:= 0 ;
k2:= 0 ;
for i:= 1 to 30 do if b[i]< 0 then begin
s2:=s2+b[i];
inc(k2);
end ;
end ;
begin
randomize;
for j:= 1 to 20 do begin
if j<= 30 then b[j]:=Random( 10)- 3;
a[j]:=Random( 10)- 3;
end ;
sums(s1,s2,k1,k2);
z:=(x^k1+y^k2) /(s1*s2);
WriteLn(z);
ReadLn;
end .
Помогите исправить ошибки

Последний раз редактировалось Stilet; 23.12.2013 в 20:32.
anuta1995 вне форума Ответить с цитированием
Старый 23.12.2013, 20:28   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,602
По умолчанию

По условию задания а у вас массив до 30, а b до 20. А в разделе var описано наоборот.

И заполнение массивов сделано через... Странно как-то. Напишите два отдельных цикла для каждого массива.

Последний раз редактировалось ZX Spectrum-128; 23.12.2013 в 20:31.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 23.12.2013, 20:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ага! Фри. отлично.
Код:
var
a: array [ 1 .. 20] of integer;
b: array [ 1.. 30] of integer;
z : real;
j: integer;
s1,s2,k1,k2,x,y : integer;

begin
randomize;
for i:= Low(a) to high(a) do begin a[i]:=Random( 10)- 3; if a[i]> 0 then s1:=s1+a[i];inc(k1); end;
for i:= Low(b) to high(b) do begin b[i]:=Random( 10)- 3; if b[i]< 0 then s2:=s2+b[i];inc(k2); end;

z:=(x^k1+y^k2) /(s1*s2);
WriteLn(z);
ReadLn;
end .
Фсе!!!
И ничего лишнего не надо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2013, 23:18   #4
anuta1995
Новичок
Джуниор
 
Регистрация: 23.12.2013
Сообщений: 4
По умолчанию

Спасибо вам большое . А не подскажите как сделать чтобы Были на рандомные значение А я сама ввела значения X и Y.
anuta1995 вне форума Ответить с цитированием
Старый 23.12.2013, 23:21   #5
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,602
По умолчанию

Read(a[i]); вместо random
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 24.12.2013, 11:35   #6
anuta1995
Новичок
Джуниор
 
Регистрация: 23.12.2013
Сообщений: 4
По умолчанию

Код:
var
a: array [ 1 .. 20] of integer;
b: array [ 1.. 30] of integer;
z : real;
j: integer;
s1,s2,k1,k2,x,y : integer;

begin
randomize;
for i:= Low(a) to high(a) do begin a[i]:=Read(a[i]);; if a[i]> 0 then s1:=s1+a[i];inc(k1); end;
for i:= Low(b) to high(b) do begin b[i]:=Read(b[i]); if b[i]< 0 then s2:=s2+b[i];inc(k2); end;

z:=(x^k1+y^k2) /(s1*s2);
WriteLn(z);
ReadLn;
end .


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.12.2013 в 12:58.
anuta1995 вне форума Ответить с цитированием
Старый 24.12.2013, 12:59   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

строчка с
Цитата:
Код:
randomize;
лишняя! Её нужно выкинуть.
(это иницилизация генератора псевдослучайных чисел).

обязательно добавить иницилизацию переменных s1,s2 и k1, k2 перед циклами.

Нужно ещё дописать ввод x и y:

Код:
begin
  WriteLn('Введите x: '); Readln(x);
  WriteLn('Введите y: '); Readln(y);
 
  s1 := 0;  s2 := 0;
  k1 := 0; k2 := 0;
  for i:= Low(a) to high(a) do begin a[i]:=Read(a[i]);; if a[i]> 0 then s1:=s1+a[i];inc(k1); end;
  for i:= Low(b) to high(b) do begin b[i]:=Read(b[i]); if b[i]< 0 then s2:=s2+b[i];inc(k2); end;
...
Остальное похоже на правду...

Последний раз редактировалось Serge_Bliznykov; 24.12.2013 в 13:01.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2013, 14:20   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
лишняя! Её нужно выкинуть.
(это иницилизация генератора псевдослучайных чисел).
А почему мы должны её выкинуть? Тогда результат будет одним и тем же.. (в нескольких, наиболее распространных версиях паскаля)
Poma][a вне форума Ответить с цитированием
Старый 24.12.2013, 14:38   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
А почему мы должны её выкинуть? Тогда результат будет одним и тем же.. (в нескольких, наиболее распространных версиях паскаля)
потому что мы выкинули random из кода и числа ВВОДЯТСЯ оператором ВРУЧНУЮ

только поэтому он и не нужен. (хотя, конечно, и вреда особого от него никакого не будет!)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
НАПИСАТЬ НА FREE PASKAL katiuhka Помощь студентам 5 20.03.2013 18:31
Free Paskal и Turbo Paskal Polly~Sunbeam Паскаль, Turbo Pascal, PascalABC.NET 7 18.04.2011 16:00
Вычислить выражение, массивы drp Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 10.04.2011 18:19
free paskal ALISHER01 Помощь студентам 4 31.10.2010 10:51