
06.12.2007, 03:52
|
Активный
|
|
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
|
|
Код:
program Matrix_01;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils, StrUtils, Math;
const
NUM_COUNT = 7; // Число элементов исходной последовательности
//------------------------------------------------------------------------------
// Вывод на экран строки
//------------------------------------------------------------------------------
procedure WriteStr(S: String);
var
Dst: Array [0..255] Of Char;
begin
AnsiToOem(PChar(S), Dst);
Writeln(Dst);
end;
//------------------------------------------------------------------------------
// Форматирование значения для вывода на экран
//------------------------------------------------------------------------------
function FmtVal(X:Double): String;
begin
Result := Format('%6.2f', [X]);
end;
//------------------------------------------------------------------------------
// Функция вычисляет позицию (индекс) элемента в исходной последовательности
// для заданной позиции (строка, столбец) в результирующей матрице
//------------------------------------------------------------------------------
function Idx(row, col: Integer): Integer;
begin
Result := row + col - 1;
if Result > NUM_COUNT then
Result := Result - NUM_COUNT;
end;
type
// Это массив для хранения исходной последовательности
TMatrixRow = Array [1..NUM_COUNT] Of Double;
var
Src : TMatrixRow; // исходный массив
r, c : Integer; // индексы
DiagonalSum : Double; // сумма диагональных элементов
X : Double; // вспомогательная переменная
begin
// Заполняем исходный массив случайными числами
WriteStr('Исходная последовательность:');
Randomize;
for c := 1 to NUM_COUNT do begin
Src[c] := Random(5) + Random; // присваиваем значение
Write(' ' + FmtVal(Src[c])); // выводим на экран
end;
Writeln;
Writeln;
// Выводим на экран матрицу, полученную по алгоритму, описанному в задании
WriteStr('Результирующая матрица:');
for r := 1 to NUM_COUNT do begin
for c := 1 to NUM_COUNT do
write(' ' + FmtVal(Src[ Idx(r, c) ]));
Writeln;
end;
Writeln;
Writeln;
// Выводим на экран диагональные элементы матрицы
// Заодно считаем их сумму в переменную DiagonalSum
DiagonalSum := 0.0;
WriteStr('Одномерный массив диагональных элементов матрицы:');
for r := 1 to NUM_COUNT do
for c := 1 to NUM_COUNT do
if (r = c) then begin // если диагональный элемент - вывести и суммировать
Write(' ' + FmtVal(Src[ Idx(r, c) ]));
DiagonalSum := DiagonalSum + Src[ Idx(r, c) ];
end;
Writeln;
Writeln;
// Показать, что получилось при суммировании
WriteStr('Сумма диагональных элементов: ' + FmtVal(DiagonalSum));
Writeln;
// Выводим на экран преобразованную матрицу
WriteStr('Четные строки матрицы делим на полученное значение:');
for r := 1 to NUM_COUNT do begin
for c := 1 to NUM_COUNT do begin
X := Src[ Idx(r, c) ];// используем вспомогательную переменную для
// лучшей читаемости
if (r mod 2) = 0 then // если строка четная - делим элемент матрицы на
// сумму ее диагональных элементов
X := X / DiagonalSum;
Write(' ' + FmtVal(X));
end;
if (r mod 2) = 0 then
write(' <<<'); // индикация измененных строк - для удобства
Writeln;
end;
// Как обычно ждем нажатия Enter
Readln;
end.
Но скажите, что у вас там происходит? На вас наложили взыскание и заставляют решать вот такие странные задачи? Вы сдаете сессию? Меня разбирает любопытство.
|