![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Turbo Pascal - Композиция Двух Двумерных Массивов 100x100
Юлька © (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 до бесконечность х бесконечность? Заранее спасибо всем откликнувшимся! =)
Омлет (2011-11-10 08:35:00) [1]> KilkennyCat © (09.11.11 21:41) [51]
>ставь расширение от Керка - читать легко.
Не, без отступов, даже с подсветкой тяжело читать.
Jeer (2011-11-09 21:45:00) [2]
> ставь расширение от Керка - читать легко.
>
Offtop:
Кого читать-то легко ?
Расширение или Керка ? :)
Или расширенного Керка ?
KilkennyCat (2011-11-09 21:41:00) [3]
> Jeer © (09.11.11 17:32) [44]
> 1.Научитесь форматировать код, тогда его кто-то будет читать.
>
ставь расширение от Керка - читать легко.
KilkennyCat (2011-11-09 21:40:00) [4]
> и как говорят другие преподы, в программировании он ни
> бум-бум...
>
тогда я бы ему другой код бы подсунул... позаумней.
Dennis I. Komarov (2011-11-09 17:48:00) [5]
> > max:=-maxint;
возьми соответствующее значение из массива и не надо выдумывать...
Омлет (2011-11-09 17:40:00) [6]> в 16-ричном паскале
16-битном )
Омлет (2011-11-09 17:38:00) [7]> Юлька © (09.11.11 16:18) [28]
> max:=-maxint;
Не путай вещественные и натуральные числа.
maxint - это всего лишь 32767 (в 16-ричном паскале).
Юлька (2011-11-09 17:37:00) [8]Всем спасибо, все замечания непременно учту =)
Dennis I. Komarov (2011-11-09 17:34:00) [9]Ну, не знаю на сколько она стала проще, спорить не буду...
Но объяснить это преподавателю будет сложнее, ибо в условии строки и столбцы. Кроме того, если транспонирование как таковое ей не известно, тогда вообще чума :) Хотя вроде на I-курсе дают...
Jeer (2011-11-09 17:32:00) [10]
> Юлька © (09.11.11 16:22) [30]
>
> Жду справедливой критики =)
>
1.Научитесь форматировать код, тогда его кто-то будет читать.
2. min и max - стандартные функции из Math в более высоких версиях Pascal.
Следует избегать таких наименований.
Jeer (2011-11-09 17:26:00) [11]
> А зачем? Только лишние тики тратить...
"Многомерность не сразу и не всем дается." (С)
Если есть способ привести задачу к более простому виду, хотя бы для учебных целей - грех этим не воспользоваться.
К тому же "засвечиваем" одну из стандартных матрчиных операций - транспонирование.
Dennis I. Komarov (2011-11-09 17:20:00) [12]
> Jeer © (09.11.11 15:26) [22]
>
> Из дидактических соображений я бы предложил такой вариант:
>
>
> Transpose(B);
> for k := 1 to N do begin
> C[k, 1] := Min(A[k, 1], B[k, 1]);
> for j := 1 to N do
> for i := 1 to N do
> C[k, j] := Max(C[k, j], Min(A[i, j], B[i, j]));
> end;
>
> P.S.
> Реализация Transpose(), Min(), Max() - тривиальна.
А зачем? Только лишние тики тратить...
Dennis I. Komarov (2011-11-09 17:12:00) [13]
> Да, лень очень мешается... нашему преподу =) Ибо во время
> семинара он бегает в буфет и в курилку, и как говорят другие
> преподы, в программировании он ни бум-бум...
Что мешает читать книжки?
И потом, исходя из того что код в [0] - написан самостоятельно, знаний вполне должно хватить для решения задачи...
Юлька (2011-11-09 17:03:00) [14]Но я не буду обвинять препода =) Он тут абсолютно ни при чём, он нам, тупорылым студентам, вообще ничего не должен, мы самостоятельно должны обучаться, это же уже не школа! Это вуз! Не маленькие уже! А препод замечательный человек, анекдоты классно рассказывает =)
Юлька (2011-11-09 16:51:00) [15]Да, лень очень мешается... нашему преподу =) Ибо во время семинара он бегает в буфет и в курилку, и как говорят другие преподы, в программировании он ни бум-бум...
Dennis I. Komarov (2011-11-09 16:49:00) [16]
> Что ж Вы так плохо обо мне думаете-то...
Это когда же?
Очень даже хорошо думаю и уверен, что такую задачку могла бы и сама решить, только лень мешается...
Юлька (2011-11-09 16:49:00) [17]Об этом нам пока что ничего не рассказывали =)
Dennis I. Komarov (2011-11-09 16:47:00) [18]
> Юлька © (09.11.11 16:28) [32]
>
> Ничего, пусть enter щёлкает, ему полезно пальчики размять
А Read[ln](f, знакомо?
Юлька (2011-11-09 16:45:00) [19]
> Dennis I. Komarov © (09.11.11 16:40) [34]
>
> Помогли?
Что ж Вы так плохо обо мне думаете-то...
Dennis I. Komarov (2011-11-09 16:40:00) [20]Помогли?