![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Привет Rosenkrantz !!!
Тут немного посложнее... 1) Даны действительные числа а1,а2..an . Получить квадратную матрицу порядка n (см.рис 1) 2) Для заданной квадратной матрицы сформировать одномерный массив из её диагональных элементов. Найти следующие матрицы, суммируя элементы одноменого массива. Преобразовать исх. матрицу по правилу: чётные строки разделить на полученное значение, нечётные оставить без изменения. Зараннее спасибо!!! http://www.delphisources.ru/forum/im...lies/smile.gif Последний раз редактировалось Vitek220, 05.12.2007 в 22:52. Причина: Добавление img1 |
|
#2
|
|||
|
|||
|
Код:
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.Но скажите, что у вас там происходит? На вас наложили взыскание и заставляют решать вот такие странные задачи? Вы сдаете сессию? Меня разбирает любопытство. |
|
#3
|
|||
|
|||
|
Не совсем взыскания... Это у нас такой предмет - Основы алгоритмизации и программирования, я ,почти, все сделал ,но остались такие задачи...
|
|
#4
|
|||
|
|||
|
Rosenkrantz, а можно на два задания два листинга ? И как рисуется блок-схема для таких проектов ?
Спасибо !!! |
|
#5
|
|||
|
|||
|
Про листинги вопрос не понял. На какие два задания? И что имеется в виду под словом листинг?
Блок-схемы рисуются так же как и на другие программы - оператор в прямоугольнике, сравнение - в ромбике Тут же многопоточности нет, вроде как не должно быть сложностей. Если есть конкретные затруднения, спрашивайте, я отвечу. |
|
#6
|
|||
|
|||
|
Надо, как-бы, сделать две раздельные программы ( одна программа на первое задание, 2 программа под второе задание ). А листинг - это участок кода программы ...Кстати, можешь ко мне обращаться на ты
|
|
#7
|
|||
|
|||
|
А, понял. Я думал, это два этапа одного задания. Завтра утром сделаю.
Мне на "вы" комфортнее. Привычка. |