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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.12.2010, 15:18
Аватар для Yurgen
Yurgen Yurgen вне форума
Прохожий
 
Регистрация: 09.12.2010
Адрес: Киев
Сообщения: 13
Репутация: 10
По умолчанию Рисуем матрицу в Pascal - [Need optimization]

Здравствуйте. Вот, в универе практикуем на паскале пока самые основы основ. К сожалению, еще до поступления я научился програмировать самомтоятельно, но через ж., за это препод меня гордо охрестил быдлокодером. Вот моя самая быдло-кодерская функция с дз, она рисует матрицу с выравниванием по самому длинному элементу.
Вот пример работы функции:
http://www.dropmocks.com/mNOe6

Кратко о номенклатуре:

Код:
type
float = extended;
TMatrix = array of array of float;

MathCols и MathRows - возвращают кол-во столбцов и строк соответсвтвенно.

Код:
     procedure DrawMatrix     ( m : TMatrix; const Cap : string = '');
       var
           i,
           j,
           p : Integer;
           n : array of Integer;
         max : float;
    begin
        SetLength ( n, MathCols ( m ) );
        for j := 0 to pred ( MathCols ( m ) ) do begin
           max := m[0][j];
           n[j] := LengthNum( m[0][j] );
          for i := 0 to pred ( MathRows ( m ) ) do begin
            if ( m[i][j] > max ) then begin
                 max := m[i][j];
                n[j] := LengthNum ( m[i][j] );
            end;
          end;
        end;

        p := ( MathRows ( m ) div 2 );

        for i := 0 to pred ( MathRows(m) ) do begin
            if ( i = p ) then write ( cap , '|' )
            else begin
                PrintLength ( '', Length ( cap ) );
                write ( '|' );
            end;

            for j := 0 to pred ( MathCols(m) ) do begin
              write ( ' ' );
              Printlength ( FloatToStr( m[i][j] ), n[j] );
              write ( ' ' );
            end;

            write ( '|' );
            Writeln;
        end;

        writeln;

    end;

Как стало заметно, своими кривыми руками для того что бы написать эту функция я написал еще две вспомогательные

Код:
    function  LengthNum      ( n : float ) : Integer;
    begin
         Result := Length ( FloatToStr ( n ) );
    end;

    procedure PrintLength    ( inp : string; n : integer );
    begin
          while ( Length ( inp )  < n ) do inp := ' ' + inp;
          write ( inp );
    end;
Ответить с цитированием
  #2  
Старый 13.12.2010, 20:48
Аватар для Yurgen
Yurgen Yurgen вне форума
Прохожий
 
Регистрация: 09.12.2010
Адрес: Киев
Сообщения: 13
Репутация: 10
Плохо

Мужики, так что там?
Всё так печально, что даже никто не смотрит?
Ответить с цитированием
  #3  
Старый 13.12.2010, 22:32
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Я вижу, что это у тебя не паскаль, а консольная делфи программа. Потому на тебе для делфи:

Код:
program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  size = 6;

var
  a: array[0..size - 1, 0..size - 1] of Extended;
  i, j, n: integer;
  m: Extended;
  mask_start, mask_mid, mask_end: string;

begin
  // Генерю матрицу для тестов
  Randomize;
  m := 0.0;
  for I := Low(a) to High(a) do
    for J := Low(a[i]) to High(a[i]) do
    begin
      a[i, j] := Random($FFFF);
      if a[i, j] > m then
        m := a[i, j];
    end;

  // Собственно весь вывод
  n := Length(FloatToStr(m));
  mask_start := Format('| %%0%d.0f', [n]);
  mask_mid := Format(' %%0%d.0f', [n]);
  mask_end := Format(' %%0%d.0f |', [n]);

  for i := Low(a) to High(a) do
  begin
    j := 0;
    Write(Format(mask_start, [a[i, j]]));
    inc(j);
    while j < high(a[i]) do
    begin
      Write(Format(mask_mid, [a[i, j]]));
      inc(j);
    end;
    Writeln(Format(mask_end, [a[i, j]]));
  end;
  Writeln('Ready');
  Readln;
end.
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter