Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2 3

Юлька ©   (2011-11-09 10:33:00) 

Доброго времени суток всем!
Дано: две квадратные матрицы (два двумерных массива) 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 до бесконечность х бесконечность? Заранее спасибо всем откликнувшимся! =)


KilkennyCat   (2011-11-09 12:40:00) [41]


> Омлет ©   (09.11.11 12:37) [12]

может, он просто смотрит в окно, наблюдая приход осени :)


Омлет   (2011-11-09 12:37:00) [42]

> Dennis I. Komarov ©   (09.11.11 12:22) [11]

Ага. Твои комменты, прямо, образец преподавания:

> Dennis I. Komarov ©   (09.11.11 11:22) [3]
> Красотищееее :)

> Dennis I. Komarov ©   (09.11.11 11:38) [5]
> Ромашки отцвели...


Dennis I. Komarov   (2011-11-09 12:22:00) [43]

Э, "Студенты", дайте Юльке мозг немного напрячь...


Омлет   (2011-11-09 12:08:00) [44]

> Омлет ©   (09.11.11 12:06) [9]

Здесь только n, т.к. по условию матрицы все квадратные (m=n), т.е. m можно выкинуть.

var
 S, R, RoS: array[1..n, 1..n] of real;


Омлет   (2011-11-09 12:06:00) [45]

Если я правильно понял задачу, заполнение RoS сводится к этому:

for i := 1 to n do
begin
 // Заполняем строку i массива RoS
 for j := 1 to n do
 begin
   RoS[i,j] := 2.9e-38; // Инициализируем ячейку
   for k := 1 to n do
   begin
     if S[i, j] < R[j, k] then
       x := S[i, j]
     else
       x := R[j, k];

     if x > RoS[i, j] then
       RoS[i, j] := x; // максимум среди минимумов
   end;
 end;
end;


Ega23   (2011-11-09 12:04:00) [46]


> кстати, а в тупбопаскале индексация с 1? че-то я не помню
> уже


Там динамических массивов в "нашем" понимании нет. Поэтому - как объявишь.
У ТС объявлено S,R,RoS: array[1..n,1..m] of real;
Значит с единицы.

А для дин.массива там хитрО надо было делать.
Навскидку могу ошибаться, но что-то типа:

var
 arr[0..0] of Integer;

Не, не помню. А вспоминать сейчас времени нет. Может быть вечером, если желание будет...


KilkennyCat   (2011-11-09 11:55:00) [47]

кстати, а в тупбопаскале индексация с 1? че-то я не помню уже


KilkennyCat   (2011-11-09 11:53:00) [48]


> Юлька ©   (09.11.11 11:26) [4]
>
> Да уж, да уж, но кроме "красоты" нужна универсальность=(

а чем этот не универсален? и потом, это справедливо лишь для квадратов, поэтому можно упростить
for i:=1 to N do
for j:=1 to N do begin


Dennis I. Komarov   (2011-11-09 11:38:00) [49]


> А может перед

Ромашки отцвели...


Юлька   (2011-11-09 11:26:00) [50]

Да уж, да уж, но кроме "красоты" нужна универсальность=(
А может перед
for i:=1 to n do begin
for j:=1 to m do begin
if R[i,j]<=S[j,i] then
K1[i,j]:=R[i,j]
else
K[i,j]:=S[j,i];
write(' ',K[i,j]:4:1);
end;
writeln;
end;

поставить ещё один FOR? Напр., FOR k:=1 to i?


Dennis I. Komarov   (2011-11-09 11:22:00) [51]

Красотищееее :)


Юлька   (2011-11-09 11:22:00) [52]

если я напишу
for i:=1 to n do begin
for j:=1 to m do begin
if R[i,j]<=S[j,i] then
K1[i,j]:=R[i,j]
else
K[i,j]:=S[j,i];
write(' ',K[i,j]:4:1);
end;
writeln;
end
;
Т.е. не буду указывать в коде номер строки, с которой сравниваются столбцы, то программа сравнивает 1ую строку с 1ым столбцом, 2ую строку со 2ым столбцом, 3ю строку с 3им столбцом и т.д. =(


Омлет   (2011-11-09 11:15:00) [53]

Ты же уже используешь циклы - используй их до конца.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо