коллекционер жизни
 
Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /
Репутация: нет Всего: нет
|
Пример работы с квадратной матрицей, думаю поможет разобраться. Авторство к сожалению не известно, нашёл на харде в загашниках. Код | program matrix;
{$APPTYPE CONSOLE}
uses SysUtils; const n = 4; // это размерность нашей матрицы. Если хочешь много всякой всячины на экране чтобы // написано было замени на 8 , если хочешь чтобы легче проверять было замени на 2
var a,b: array[1..2*n,1..2*n] of integer; // a - начальная квадратная матрица, b - конечная матрица i,j: integer; // вспомогательные переменные r11,r12,r21,r22 : integer; //расстояния в каждом из блоков R : integer; // минимальное расстояние //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Procedure MinMax7(const iFrom,iTo, jFrom,jTo: integer; var Distance : integer); // Процедура получает координаты расчитываемого квадрата // записывает в конечную матрицу b семерки ( в этом квадрате) // на месте максимума и минимума соответсвенно // а также возвращает расстояние между минимумом и максимумом var Min, Max: integer; // временные минимумы и максимумы i,j: integer; // вспомогательные переменные iMin, iMax, jMin, jMax: integer; // координаты минимумов и максимумов begin // to do Min:= 100; // начальный минимум делаем огромным Max:=-100; // а максимум минимальным iMin:=0; jMin:=0; iMax:=0; jMax:=0; for i:= iFrom to iTo do for j:= jFrom to jTo do begin if a[i,j]< Min // если число меньше текущего минимума then begin Min:= a[i,j]; // то текущий минимум приравниваем к этому числу iMin:= i; // а координаты этого jMin:= j; // числа запоминаем end; if a[i,j]> Max // аталогично поступаем если число больше текущего максимума then begin Max:= a[i,j]; iMax:= i; jMax:= j; end; end; Distance:= abs(iMin-iMax) + abs(jMin-jMax); //сумма модулей разниц в координатах //думаю это имелось ввиду под расстоянием между минимумом и максимумом... //если нужен был корень из суммы квадратов разниц координат (на манер расстояний в векторах) //значит надо будет программу немного переделать расстояние считаться будет так: //Distance:= sqrt(sqr(iMin-iMax) + sqr(jMin-jMax)); //и расстояния эти уже будут не integer а real (то есть дробные)
b[iMin,jMin]:=-7; // заменяем в конечной матрице минимальное в квадрате число на -7 b[iMax,jMax]:= 7; // заменяем в конечной матрице максимальное в квадрате число на 7 end; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin randomize; //запускаем генератор случайных чисел writeln('Generating matrix'); for i:= 1 to 2*n do begin for j:= 1 to 2*n do begin a[i,j]:= random(198)-99; //генерируем число от -99 до 99 if a[i,j]> -1 then write(' '); // рисуем один пробел, если не надо писать минус ( число больше -1) write(a[i,j],' '); // пишем само число if abs(a[i,j])< 10 then write(' ');// и если число из одной цифры состоит добавляем еше пробел if j= n then write(' ');// это чтобы были видны блоки end; writeln; // чтобы новый ряд писался с новой строки if i= n then writeln;// это тоже чтобы были видны блоки end; writeln; b:=a; // Конечному массиву присваиваем перво наперво начальный массив
MinMax7(1,n,1,n, r11);// находим семерки в левом верхнем квадрате MinMax7(n+1,2*n,1,n, r21);// находим семерки в правом верхнем квадрате MinMax7(1,n,n+1,2*n, r12);// находим семерки в левом нижнем квадрате MinMax7(n+1,2*n,n+1,2*n, r22);// находим семерки в правом нижнем квадрате
writeln('Press ENTER...'); readln; writeln('Final Matrix is:'); //выводим финальную матрицу writeln;
for i:= 1 to 2*n do begin for j:= 1 to 2*n do begin if b[i,j]> -1 then write(' '); // рисуем один пробел, если не надо писать минус ( число больше -1) write(b[i,j],' '); // пишем само число if abs(b[i,j])< 10 then write(' ');// и если число из одной цифры состоит добавляем еше пробел if j= n then write(' ');// это чтобы были видны блоки end; writeln; // чтобы новый ряд писался с новой строки if i= n then writeln;// это тоже чтобы были видны блоки end;
writeln; R:=99; // ищем минимальное расстояние if r11< R then R:= r11; if r12< R then R:= r12; if r21< R then R:= r21; if r22< R then R:= r22;
Writeln('Min distance between minimum and maximum is : ',R); if R= r11 then writeln('Quadrant with min distance is upper left '); if R= r12 then writeln('Quadrant with min distance is upper right '); if R= r21 then writeln('Quadrant with min distance is lower left '); if R= r22 then writeln('Quadrant with min distance is lower right ');
writeln('Press ENTER...'); readln; end.
|
--------------------
Подпись >> /dev/null
|