Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.12.2007, 22:47
Vitek220 Vitek220 вне форума
Заблокирован
 
Регистрация: 03.12.2007
Сообщения: 22
Репутация: 5
Сообщение Формирование массивов

Привет Rosenkrantz !!!
Тут немного посложнее...
1) Даны действительные числа а1,а2..an . Получить квадратную матрицу порядка n (см.рис 1)
2) Для заданной квадратной матрицы сформировать одномерный массив из её диагональных элементов. Найти следующие матрицы, суммируя элементы одноменого массива. Преобразовать исх. матрицу по правилу: чётные строки разделить на полученное значение, нечётные оставить без изменения.
Зараннее спасибо!!! http://www.delphisources.ru/forum/im...lies/smile.gif
Изображения
Тип файла: jpg img1.JPG (11.1 Кбайт, 12 просмотров)

Последний раз редактировалось Vitek220, 05.12.2007 в 22:52. Причина: Добавление img1
Ответить с цитированием
  #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.

Но скажите, что у вас там происходит? На вас наложили взыскание и заставляют решать вот такие странные задачи? Вы сдаете сессию? Меня разбирает любопытство.
Ответить с цитированием
  #3  
Старый 07.12.2007, 01:31
Vitek220 Vitek220 вне форума
Заблокирован
 
Регистрация: 03.12.2007
Сообщения: 22
Репутация: 5
По умолчанию

Не совсем взыскания... Это у нас такой предмет - Основы алгоритмизации и программирования, я ,почти, все сделал ,но остались такие задачи...
Ответить с цитированием
  #4  
Старый 07.12.2007, 01:33
Vitek220 Vitek220 вне форума
Заблокирован
 
Регистрация: 03.12.2007
Сообщения: 22
Репутация: 5
По умолчанию

Rosenkrantz, а можно на два задания два листинга ? И как рисуется блок-схема для таких проектов ?
Спасибо !!!
Ответить с цитированием
  #5  
Старый 07.12.2007, 02:06
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Про листинги вопрос не понял. На какие два задания? И что имеется в виду под словом листинг?

Блок-схемы рисуются так же как и на другие программы - оператор в прямоугольнике, сравнение - в ромбике Тут же многопоточности нет, вроде как не должно быть сложностей. Если есть конкретные затруднения, спрашивайте, я отвечу.
Ответить с цитированием
  #6  
Старый 07.12.2007, 22:26
Vitek220 Vitek220 вне форума
Заблокирован
 
Регистрация: 03.12.2007
Сообщения: 22
Репутация: 5
По умолчанию

Надо, как-бы, сделать две раздельные программы ( одна программа на первое задание, 2 программа под второе задание ). А листинг - это участок кода программы ...Кстати, можешь ко мне обращаться на ты
Ответить с цитированием
  #7  
Старый 08.12.2007, 11:40
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

А, понял. Я думал, это два этапа одного задания. Завтра утром сделаю.
Мне на "вы" комфортнее. Привычка.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter