Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2009, 22:46   #1
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию Оптимизировать алгоритм вычисления сумм элементов главной и побочной диагонали в матрице - Delphi

Задача:
Задана матрица A(N,N) где N <= 10 Вычислить суммы элементов главной и побочной диагоналей.

Решение:
Код:
uses crt;
type matrix = array [1..11,1..11] of integer;
var
   A:matrix;
   i,j,m,n,sum1,sum2:integer;
   
   begin
        clrscr;
        write ('Задача:',#10,#10, 'Задан двумерный массив (матрица) A(N,N), где',#10,
               'N <= 10. Вычислить суммы элементов главной и',#10,'побочной диагонали. Результат вывести на дисплей!',#10,#10);
        write ('Введите число строк: '); readln(m);
        write ('Введите число столбцов: '); readln(n);
        writeln;
        
        // Проверка на квадратичность матрицы.
        if m <> n then
        writeln('Ошибка! Матрица с заданными параметрами не является квадратной!')
        else
        
        // Заполняем матрицу
        begin
        for i:=1 to n do
            for j:=1 to m do begin
                write('A[',i,',',j,'] = ');
                readln (A[i,j]);
            end;
        clrscr;
        writeln ('Исходная матрица: ');

        // выводим массив
        for i:=1 to n do
            for j:=1 to n do begin
                writeln ('A[',i,',',j,'] = ',A[i,j]);
            end;

       // вычисляем главную диагональ
       // n - колличество столбцов
       
        for i:=1 to n do
                 sum1:=sum1+A[i,i];

       // вычисляем побочную диагональ
       j:=n;
       for i:=1 to n do begin
                sum2:=sum2+A[i,j];
                dec (j);
       end;

       // Вывод результата
       writeln ('Сумма элементов главной диагонали: ',sum1);
       writeln ('Сумма элементов побочной диагонали: ',sum2);
       
end;end.
Вопрос:
Посмотрите пожалуйста свежим взглядом. Можно ли ещё больше оптимизировать и/или сократить код приложения? Спасибо!
r9m вне форума Ответить с цитированием
Старый 04.02.2009, 00:10   #2
RealSHELS
Форумчанин
 
Аватар для RealSHELS
 
Регистрация: 04.03.2008
Сообщений: 176
По умолчанию

Код:
uses crt;
type matrix = array [1..10,1..10] of integer;
var
   A:matrix;
   i,j,n,sum1,sum2:integer;

   begin
        clrscr;
        write ('Задача:',#10,#10, 'Задан двумерный массив (матрица) A(N,N), где',#10,
               'N <= 10. Вычислить суммы элементов главной и',#10,'побочной диагонали. Результат вывести на дисплей!',#10,#10);
        write ('Введите число столбцов и строк: '); readln(n);
        writeln;
        randomize;
        for i:=1 to n do
            for j:=1 to n do
              a[i,j]:=random(10);
        clrscr;
        writeln ('Исходная матрица: ');

        {// выводим массив }
        for i:=1 to n do
            for j:=1 to n do
                if j<>n then write(a[i,j],' ') else writeln(a[i,j]);

       {// вычисляем главную диагональ
       // n - колличество столбцов    }

        for i:=1 to n do
                 sum1:=sum1+A[i,i];

       {// вычисляем побочную диагональ    }
       j:=n;
       for i:=1 to n do begin
                sum2:=sum2+A[i,j];
                dec (j);
       end;

       {// Вывод результата}
       writeln ('Сумма элементов главной диагонали: ',sum1);
       writeln ('Сумма элементов побочной диагонали: ',sum2);

end.
RealSHELS вне форума Ответить с цитированием
Старый 04.02.2009, 00:46   #3
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Супер. Спасибо... Тока полюбому нужно с клавы вводить значения... Пожалуй синтезирую оба варианта...

Но может быть ещё кто нибудь чего подскажет?
r9m вне форума Ответить с цитированием
Старый 04.02.2009, 10:20   #4
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

вычесляем обе суммы в одном цикле:
Код:
  for i:=1 to n do begin
    s1:=s1+a[i,i];
    s2:=s2+a[n-i+1,i];
  end;
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 04.02.2009, 10:54   #5
r9m
₪₪₪₪₪₪₪₪
Форумчанин
 
Аватар для r9m
 
Регистрация: 16.04.2007
Сообщений: 471
По умолчанию

Вот оно! Точно, мне тот кусок сразу не нравился... Спасибо ) Свежий взгляд на казалось бы избитые вещи действительно творит чудеса ))
r9m вне форума Ответить с цитированием
Старый 04.02.2009, 11:01   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот мой вариант оптимизации:
Код:
  var a:array[1..10,1..10] of integer;
  i,j,s1,s2:integer;
begin
 for i:=1 to 10 do begin
  for j:=1 to 10 do begin
   a[i,j]:=random(20);
   write(a[i,j]:5);
   if i=j then begin s1:=s1+a[i,j];   end;
   if (11-i)=j then begin    s2:=s2+a[i,j];   end;
  end;
  writeln;
  end;
  writeln;
   writeln(s1,' ',s2);
   readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрица. Сумма элементов главной диагонали RECREATOR Помощь студентам 13 11.05.2011 22:12
[Pascal] найти сумму элементов лежащих ниже побочной диагонали Рамик Помощь студентам 12 28.03.2011 22:53
в сглаженой матрице найти сумму модулей элементов расположенных ниже главной диагонали Sergeo_89 Паскаль, Turbo Pascal, PascalABC.NET 8 07.12.2010 00:02
Вычислить сумму элементов главной и побочной диагонали двумерного массива , найти среднее арифметическое neBu4kaMaXiM Помощь студентам 7 24.02.2009 15:58
Найти отношения суммы элементов главной диагонали и суммы элементов побочной диагонали квадратной матрицы Elmander Помощь студентам 2 21.06.2007 07:15