Показать сообщение отдельно
  #2  
Старый 06.12.2007, 03:52
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 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.

Но скажите, что у вас там происходит? На вас наложили взыскание и заставляют решать вот такие странные задачи? Вы сдаете сессию? Меня разбирает любопытство.
Ответить с цитированием