тяжёлая математическая задача

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

somebody_now
Сообщения: 35
Зарегистрирован: 02 окт 2007, 14:43

19 окт 2007, 16:28

Serge_Bliznykov, somewhere, попробовал, не помогло(
впрочем это уже не так важно, ибо работа отправлена, а делать её надо было через рекуррентную ф-лу с чем я не знаком вобщемто, точнее не могу её составить для этого конкретного ряда..есть конечно время ещё переделать но шансов мало на то что смогу её составить(
somebody_now
Сообщения: 35
Зарегистрирован: 02 окт 2007, 14:43

23 окт 2007, 14:12

Нужно изменить структуру алгоритма так, чтобы количество используемых операторов цикла в программе было минимальным. Можно ли добиться уменьшения количества форов по сравнению с исходным вариантом?

Код: Выделить всё

program proizv_matric;
var n,m,r:integer;
i,j,k:integer;
a,b,c:array[1..15,1..15] of real;
begin
write('zadaite pr-ie dvuh matric');
readln(m,n,r);
write('zadaite A postrochno');
for i:=1 to m do
    for j:=1 to n do
    read(a[i,j]);
write('zadaite B postrochno');
for j:=1 to n do
    for k:=1 to r do
    read(b[j,k]);
  for i:=1 to m do  {вот цикл к-рый имхо можно убрать}
  for k:=1 to r do   {всё равно на суть проги не влияет,}
  c[i,k]:=0;           {а что ещё и можно ли не догадываюсь}
for i:=1 to m do
for k:=1 to r do
begin
     for j:=1 to n do
     c[i,k]:=c[i,k]+a[i,j]*b[j,k];
     {writeln('c[',i:2,',',k:2,']=',c[i,k]:7:3);}
     end;
for i:=1 to n do
begin
    for k:=1 to r do
    begin
    write('c[',i:2,',',k:2,']=',c[i,k]:7:3);
    end;
writeln;
end;
     readln;
     readln;
     end.
Собсно коммент в проге
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

23 окт 2007, 14:20

&quot писал(а): for i:=1 to m do {вот цикл к-рый имхо можно убрать}
for k:=1 to r do {всё равно на суть проги не влияет,}
c[i,k]:=0; {а что ещё и можно ли не догадываюсь}
По-сути здесь обнуление матрицы, тогда можно без форов вообще:

Код: Выделить всё

FillChar(c, sizeof(c), 0);
It's a long way to the top if you wanna rock'n'roll
somebody_now
Сообщения: 35
Зарегистрирован: 02 окт 2007, 14:43

25 окт 2007, 12:35

ещё вопрос: заполняю обычный одномерный массив обычными случайными числами.
если целыми то всё норм, если реаловыми, то выдаёт, как я понял на месте отрицательных, от 65532 до 65535 и получается у меня массив, например такой:
65532.0000
65535.0000
2.0000
65533.0000
5.0000
65532.0000
65534.0000
65535.0000
5.0000
4.0000
мало того что не заполняется дробная часть так ещё и какие-то совсем не к месту эти десятки тысяч.. что делать?!
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

25 окт 2007, 12:44

a[x] := RangeLow + (RangeHigh - RangeLow)*Random
например
a[x] := 5 + 15*random
выберет случайные действительные числа от 5 до 20
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

25 окт 2007, 13:09

псевдослучайные чтоб быть точным :)
Uphiander
Сообщения: 0
Зарегистрирован: 07 ноя 2007, 09:59

08 ноя 2007, 09:12

Если быть точным - равномерно распределенные на некотором отрезке. Так как в Паскале Random выдает на интервале 0..1, то растащить их по интервалу можно по формуле постом выше.
Если нужен другой закон распределения - нужно преобразовывать по формулам этих законов.
Ответить