Turbo Pascal - Композиция Двух Двумерных Массивов

Тема в разделе "Pascal and Delphi", создана пользователем -, 9 ноя 2011.

  1. Гость

    Доброго времени суток всем! :icq_on:
    Дано: две квадратные матрицы (два двумерных массива) 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 и т.д....
    Ну и самое интересное)))
    Текст моей программы:
    Код (Delphi):
    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 до бесконечность х бесконечность? Заранее спасибо всем откликнувшимся! :)
     
  2. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    А цикл запустить? for k:=1 to n do ... R[k,j]
     
Загрузка...
Похожие Темы - Turbo Pascal Композиция
  1. vivekast
    Ответов:
    0
    Просмотров:
    1.032
  2. Max69
    Ответов:
    0
    Просмотров:
    1.246
  3. Sabishka13
    Ответов:
    0
    Просмотров:
    1.186
  4. adam-mospan
    Ответов:
    3
    Просмотров:
    3.361
  5. ovaaal
    Ответов:
    1
    Просмотров:
    1.112

Поделиться этой страницей