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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2011, 10:43   #1
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
Подмигивание Turbo Pascal - Композиция Двух Двумерных Массивов размером 100х100

Доброго времени суток всем!
Дано: две квадратные матрицы (два двумерных массива) R и S. Требуется: сравнить первую строку массива R с первым столбцом массива S и выбрать из них минимумы. Затем сравнить первую строку массива R со вторым столбцом массива S и выбрать из них минимумы и т.д. сравнивать первую строку массива R со всеми столбцами массива S и выбирать минимумы. А потом сравнивать уже вторую строку массива R со всеми столбцами массива S и выбирать минимумы. Т.е. каждая строка массива R поочерёдно сравнивается со всеми столбцами массива S, выбираются минимумы. Потом из полученных минимумов выбрирается максимум - и он будет первым элементом нового массива RoS, который является композицией.
Пример:
массив R
1 0,8 0,7 0,5
0,8 1 0,9 0,6
0,7 0,9 1 0,8
0,5 0,6 0,8 1
массив S
1 0,9 0,7 0,3
0,9 1 0,3 0,2
0,7 0,3 1 0,4
0,5 0,2 0,1 0
1я строка с 1ым столбцом:
(1;1) (0,8;0,9) (0,7;0,7) (0,3;0,5)=1;0,8;0,7;0,3 - минимумы; 1 - максимум из минимумов
1я строка со 2ым столбцом:
(1;0,9) (0,8;1) (0,7;0,3) (0,5;0,2)=0,9;0,8;0,3;0,2 - минимумы; 0,9 - максимум из минимумов
1я строка с 3им столбцом:
(1;0,7) (0,8;0,3) (0,7;1) (0,5;0,1)=0,7;0,3;0,7;0,1 - минимумы; 0,7 - максимум из минимумов
1я строка с 4ым столбцом:
(1;0,3) (0,8;0,2) (0,7;0,4) (0,5;0)= 0,3;0,2;0,4;0 минимумы; 0,4 - максимум из минимумов
Т.о., 1ая строка искомого массива (композиции) будет выглядеть так:
RoS=1 0,9 0,7 0,4
Далее мы сравниваем 2ую строку массива R поочерёдно со всеми столбцами массива S и получаем 2ую строку искомого массива RoS и т.д....
Ну и самое интересное)))
Текст моей программы:
Код:
program laba_6;
uses crt;
const n=4;
const m=4;
var
S,R,RoS: array[1..n,1..m] of real;
K1,K2,K3,K4: array[1..n,1..m] of real; {vspomogatel`nye massivy dlya ras4etov}
i,j: integer;
begin
clrscr;

for i:=1 to n do begin
for j:=1 to m do begin
writeln('Vvedite massiv R=> ');
readln(R[i,j]);
end;
end;

for i:=1 to n do begin
for j:=1 to m do begin
writeln('Vvedite massiv S=> ');
readln(S[i,j]);
end;
end;

writeln('Isxodnyi massiv R=> ');
for i:=1 to n do begin
for j:=1 to m do begin
write(' ',R[i,j]:4:1);
end;
writeln;
end;

writeln('Isxodnyi massiv S=> ');
for i:=1 to n do begin
for j:=1 to m do begin
write(' ',S[i,j]:4:1);
end;
writeln;
end;

writeln('1-ya stroka massiva R sravnivaetsya so vsemi stolbcami massiva S');
for i:=1 to n do begin
for j:=1 to m do begin
if R[1,j]<=S[j,i] then
K1[i,j]:=R[1,j]
else
K1[i,j]:=S[j,i];
write(' ',K1[i,j]:4:1);
end;
writeln;
end;

writeln('2-ya stroka massiva R sravnivaetsya so vsemi stolbcami massiva S');
for i:=1 to n do begin
for j:=1 to m do begin
if R[2,j]<=S[j,i] then
K2[i,j]:=R[2,j]
else
K2[i,j]:=S[j,i];
write(' ',K2[i,j]:4:1);
end;
writeln;
end;

writeln('3-ya stroka massiva R sravnivaetsya so vsemi stolbcami massiva S');
for i:=1 to n do begin
for j:=1 to m do begin
if R[3,j]<=S[j,i] then
K3[i,j]:=R[3,j]
else
K3[i,j]:=S[j,i];
write(' ',K3[i,j]:4:1);
end;
writeln;
end;

writeln('4-ya stroka massiva R sravnivaetsya so vsemi stolbcami massiva S');
for i:=1 to n do begin
for j:=1 to m do begin
if R[4,j]<=S[j,i] then
K4[i,j]:=R[4,j]
else
K4[i,j]:=S[j,i];
write(' ',K4[i,j]:4:1);
end;
writeln;
end;

writeln('RoS=>');

for i:=1 to n do begin
for j:=1 to m do begin
if K1[1,j]>=K1[1,1] then
RoS[1,1]:=K1[1,j];

if K1[2,j]>=K1[2,1] then
RoS[1,2]:=K1[2,j];

if K1[3,j]>=K1[3,1] then
RoS[1,3]:=K1[3,j];

if K1[4,j]>=K1[4,1] then
RoS[1,4]:=K1[4,j];

if K2[1,j]>K2[1,1] then
RoS[2,1]:=K2[1,j];

if K2[2,j]>K2[2,1] then
RoS[2,2]:=K2[2,j];

if K2[3,j]>K2[3,1] then
RoS[2,3]:=K2[3,j];

if K2[4,j]>K2[4,1] then
RoS[2,4]:=K2[4,j];

if K3[1,j]>K3[1,1] then
RoS[3,1]:=K3[1,j];

if K3[2,j]>K3[2,1] then
RoS[3,2]:=K3[2,j];

if K3[3,j]>K3[3,1] then
RoS[3,3]:=K3[3,j];

if K3[4,j]>K3[4,1] then
RoS[3,4]:=K3[4,j];

if K4[1,j]>K4[1,1] then
RoS[4,1]:=K4[1,j];

if K4[2,j]>K4[2,1] then
RoS[4,2]:=K4[2,j];

if K4[3,j]>K4[3,1] then
RoS[4,3]:=K4[3,j];

if K4[4,j]>K4[4,1] then
RoS[4,4]:=K4[4,j];
write(' ', RoS[i,j]:4:1);
end;
writeln;
end;
readln;
end.
Т.е. хорошо конечно что я сравниваю 1ю строку, 2ю строку и т.д., прописывая номер строки прямо в коде. Но у меня массивы 4х4. А если они будут 100х100? Не прописывать же R[1,j]..R[100,j]! Короче, код у меня левый и "не универсальный" как скажет препод. Подскажите, пожалуйста, как сделать этот код подходящим для массивов любых размерностей от 2х2 до бесконечность х бесконечность? Заранее спасибо всем откликнувшимся!
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 09.11.2011, 13:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

абсолютно не разбираясь, что Вы там "мутили" в массивах для расчётов,
просто переписав ваш (подчёркиваю, именно ВАШ код)

можно легко получить такую программу:
Код:
program laba_6;
uses crt;
const n = 4;
const m = 4;
var
  S, R, RoS: array[1..n, 1..m] of real;
  K: array[1..n, 1..n, 1..m] of real; {vspomogatel`nye massivy dlya ras4etov}
  i, j, kI, j2: integer;
begin
  clrscr;

  clrscr;

  for i := 1 to n do begin
    writeln('Vvedite ',i,' stroku massiv R=> ');
    for j := 1 to m do begin
      read(R[i,j]); 
    end;
    Readln;
  end;

  for i := 1 to n do begin
    writeln('Vvedite ',i,' stroku massiv S=> ');
    for j := 1 to m do begin
      read(S[i,j]); 
    end;
    readln;
  end;

  writeln('Isxodnyi massiv R=> ');
  for i := 1 to n do begin
    for j := 1 to m do begin
      write(' ', R[i, j]: 4: 1);
    end;
    writeln;
  end;

  writeln('Isxodnyi massiv S=> ');
  for i := 1 to n do begin
    for j := 1 to m do begin
      write(' ', S[i, j]: 4: 1);
    end;
    writeln;
  end;

  for kI := 1 to n do begin
    writeln(kI, '-ya stroka massiva R sravnivaetsya so vsemi stolbcami massiva S');
    for i := 1 to n do begin
      for j := 1 to m do begin
        if R[kI, j] <= S[j, i] then
          K[kI, i, j] := R[kI, j]
        else
          K[kI, i, j] := S[j, i];
        write(' ', K[kI, i, j]: 4: 1);
      end;
      writeln;
    end;
  end;

  writeln('RoS=>');

  for i := 1 to n do begin
    for j := 1 to m do begin
      RoS[i, j] := K[i, j, 1];
      for j2 := 1 to m do
        if RoS[i, j] < K[i, j, j2] then RoS[i, j] := K[i, j, j2];
      write(' ', RoS[i, j]: 4: 1);
    end;
    writeln;
  end;
  readln;
end.
идея, надеюсь, понятна?

p.s.
сколько я не ломал голову, так и не смог понять, какие максимумы выбираются из временных таблиц.. видимо, эта задача за пределами моего понимания...
поэтому, если программа будет работать НЕПРАВИЛЬНО, то самостоятельно подправьте поиск максимума..
(ну или укажите набор исходных данных с указанием того, что (и главное, почему) собирается неверно. я поправлю код.

p.p.s. О. теперь я понял. в процедуре формирования массива RoS у Вас ошибка! Вы выводите значения ДО того, как они сформируются.

попробуйте после цикла заполнения (перед финальным readln; end.) вывести содержимое массива RoS
"по простому". два цикла. так же, как Вы выводите исходные массивы. И Вы поймёте, о чём я говорю...

Последний раз редактировалось Serge_Bliznykov; 09.11.2011 в 13:50.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.11.2011, 15:54   #3
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Большое спасибо!
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка двумерных массивов Alexxxxxx Помощь студентам 5 23.10.2011 00:07
обработка двумерных массивов... Mizantrop Помощь студентам 2 25.03.2010 09:11
Гики двумерных массивов Кипящий чайник Общие вопросы C/C++ 13 02.02.2010 13:25
Умножение двух чисел в p-ичной системе счисления - turbo pascal oxygen2007rus Помощь студентам 1 13.12.2009 16:00
Обработка двумерных массивов Kreigen Помощь студентам 3 29.11.2009 10:50