|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
А, понял. Я думал, это два этапа одного задания. Завтра утром сделаю.
Мне на "вы" комфортнее. Привычка. |