Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dlina : array of integer;


Страницы:   1 2

Нуб ©   (2007-03-16 10:14:00) 

У меня вот такой вопрос у меня есть массив элементов типа int, я в программе задаю количество элементом путем
SetLength(dlina,kol4isel);
необходимо ли в конце выполнения программы освобождать память выделенную под элементы этого массива ?


GrayFace   (2007-03-17 11:04:00) [1]

> Никаких исключений. Вся память будет освобождена. Менеджер памяти обеспечит...

Память освобождать не надо, надо освобождать атомы и делать другие полезные вещи, которые могут содержаться в деструкторах объектов. Это менеджер памяти не обеспечит.


Kolan   (2007-03-16 21:41:00) [2]

неужели Вы так не писали ?

Писал так на паскале, потому что так научили на информатике. А ты учись на чужих ошибках, и так не пЕши..

И вообще есть такое правило/призыв:
Пиши не для себя а для другого программиста, который будет читать твой код(даже если этого никогда не случится).
(с) Kent Beck, кажется

показать себя выше кого-то , а зачем

Это про меня что ли? И не думал даже. :)


Johnmen   (2007-03-16 21:06:00) [3]


> GrayFace ©   (16.03.07 20:29) [23]
> >TUser ©   (16.03.07 11:42) [12]В конце работы программы
> >не надо. Операционка сотрет все из памяти, не разбирая,
> >массив там или цитаты из Лао Цзы.
> Исключение - массив объектов,
>  если они при Free уничтожают атомы, сохраняют настройки
> и т.п.

Никаких исключений. Вся память будет освобождена. Менеджер памяти обеспечит...


GrayFace   (2007-03-16 20:29:00) [4]

TUser ©   (16.03.07 11:42) [12]
В конце работы программы не надо. Операционка сотрет все из памяти, не разбирая, массив там или цитаты из Лао Цзы.

Исключение - массив объектов, если они при Free уничтожают атомы, сохраняют настройки и т.п.

Нуб   (16.03.07 15:54) [18]
Код должен быть красивым. И себе приятно, и тем, кто его будет читать.


Jeer   (2007-03-16 16:27:00) [5]


> та я и в Си не любил когда нумерация начинается на 0 , по-
> этому когда перешел на Делфи решил 0 не пользоваться ,


А вот это подразумевает, что была была практика на C.

Да, похоже, такая же как и на Delphi - плохая.

Если человек получил опыт программирования на каком-либо языке, то освоенные правила и методы он легко переносит на новый язык и эта наследственность есть признак сбережения положительного опыта.


Плохиш   (2007-03-16 16:19:00) [6]


> неужели Вы так не писали ?

Можешь не поверить, но так не писал. Недавно смотрел свои первые исходники начала 90х и, честно скажу, мне за них стыдно не было. Может это от того, что тогда сначало были прочитанные книги по программированию и только потом топтание кнопок...


Jeer   (2007-03-16 16:17:00) [7]


> оптимизировали ,


Далеко не все:))
if s[i] = TAB then
  k := i + 1
else
  k := i + 2;

Надо стремится к пониманию того, что делаешь и не плодить сущности там, где можно обойтись меньшим.


Нуб   (2007-03-16 15:56:00) [8]


> Kolan ©


Нуб   (2007-03-16 15:54:00) [9]

ну монстры , монстры браво Вам, я Вами горжусь , я пишу всего лишь месяц на Делфи , чего Вы от меня хотите ? :), неужели Вы так не писали ? :) и та это смешно смотреть на то как люди хотят показать себя выше кого-то , а зачем ? работай , зарабатывай свое и помогай другим чем можешь, но унижать кого-то - зачем ? :), ядро красивое ничего не скажу - супер оптимизировали , надеюсь само рано или поздно к такому приду


Jeer   (2007-03-16 15:49:00) [10]

Вышенаписанного ужаса тут никто не советовал, а вся функциональность
сводится вот к такому ядру:

const
 TAB = #9;
 CR = #13;
var
 s: string;
 i, j, k, m, rows, cols: integer;
begin
 s := Clipboard.AsText;
 j := Pred(Length(s));
 rows := 1;
 cols := 0;
 grid.RowCount := rows;
 k := 1;
 m := 0;
 for i := 1 to j do begin
   if (s[i] = TAB) or (s[i] = CR) then begin
     if (rows = 1) then begin
       Inc(cols);
       grid.ColCount := cols;
     end;
     grid.Cells[m, rows - 1] := copy(s, k, i - k);
     if s[i] = TAB then k := i + 1;
     if s[i] = CR  then k := i + 2;
     Inc(m);
   end;
   if (s[i] = CR) and (i < j) then begin
     Inc(rows);
     grid.RowCount := rows;
     m := 0;
   end;
 end;
end;


Kolan   (2007-03-16 15:31:00) [11]

> ну уж извинте, потрудитесь Вы сами уже заменить :)

Мне оно нафиг ненадо, увидев такой код я его тут же выкину.

Я тебя вразумить пытаюсь.
Предствь что ты открываешь код а там написано:

var
 Largo: Integer;
 Quantitat: Integer;
 Compteur: Integer;
begin
 for Compteur := 1 to  Quantitat do
   Largo := Largo + 1;
end;


Нравится? Понятно? Вот и твои каракули никому кроме тибя непонятны, даже я зная русский струдом их понимаю....


Нуб   (2007-03-16 14:48:00) [12]


> Kolan ©


ну уж извинте, потрудитесь Вы сами уже заменить :) если будете юзать , а зачем же руки отбивать length называть как-то не хочется плутаница может получица, а не ужели на этом сайте висят со всего мира ? :)


Kolan   (2007-03-16 14:42:00) [13]

> dlina,kol4isel

Руки бы отбил...

Трудно написать так чтобы поняли во всем мире? Length, SelCount например, если я правильно понял этот ужОс...
:(


Нуб   (2007-03-16 14:35:00) [14]

благодаря усилиям мастеров заварганил следующий код . Копирует с экселя данные с ячеек размерности n*m в стрингрид еще при том в область которую вы хотите :)

var
 Form1: TForm1;
 row : Integer;
 col : Integer;

implementation

{$R *.dfm}

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
var
 i, c,b, kol4isel: integer;
 k, posl_tab : integer;
 arrstr : string;
 str : string;
 step : integer;
 dlina : array of integer;
 stroki : array of string;
 kolstrok : integer;
begin
 kolstrok := 1;
 str := Clipboard.asText;
 step := 1;

 if ((Key = ord('V')) and (ssCtrl in Shift)) then  begin
     for i := 1 to Length(str) do    // kol ya4eek
        if str[i] = chr(13) then
           Inc(kolstrok);
     SetLength(stroki,kolstrok+1);    // massiv iz "kolstrok" strok
     kolstrok := 1;
     for i := 1 to Length(str) do begin   // kazhduyu stroku zanosim v array of string
        if str[i] = chr(13) then begin
          stroki[kolstrok] := copy(str,step,i-step+2);
          step := i+2;
          Inc(kolstrok);
        end;
     end;
     for c:=1 to kolstrok-1 do begin                    // perebor po vsem strokam
       kol4isel := 1;
       step := 1;
       posl_tab :=0;
       k := 1;
       for i := 1 to Length(stroki[c]) do    // kol ya4eek
        if stroki[c][i] = chr(9) then
           Inc(kol4isel);
           SetLength(dlina,kol4isel+1);     // massiv iz "kol4isel" elementov

        for i := 1 to Length(stroki[c]) do begin      // opredelyaem all dlinuYa4eyki v simvolah
           if stroki[c][i] = chr(9) then begin
              dlina[k] := i-posl_tab-1 ;
              posl_tab := i;                    // indeks posl tab
              Inc(k);
           end;
        end;
           dlina[k] := Length(stroki[c]) - posl_tab-2;     // dlina posl ya4eyki
           for b := 1 to kol4isel do begin           // zaganyaem 4isla v grd
              arrstr := copy(stroki[c],step,dlina[b]);
              step := step + dlina[b]+1;
              StringGrid1.Cells[b+col-1,row-1+c] := arrstr;
           end;
     end;                                            // end perebor po vsem strokam
 end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
 ARow: Integer; var CanSelect: Boolean);
begin
    row := ARow;
    col := ACol;
end;

end.


TUser   (2007-03-16 11:42:00) [15]

В конце работы программы не надо. Операционка сотрет все из памяти, не разбирая, массив там или цитаты из Лао Цзы. А вот если это выделяется в программе, скажем, 100000 раз, то изволь освободить, а то каждый раз будешь новую память кушать. Исключение - динамические массивы, объявленные как локальные переменные.


Jeer   (2007-03-16 10:59:00) [16]

Нуб   (16.03.07 10:57) [10]


> та вы что ? :),  а я типа не знал :),


Судя по тону вопросов и стилю программирования еще многое не знаешь.


Нуб   (2007-03-16 10:57:00) [17]


> Jeer ©   (16.03.07 10:52) [9]

та вы что ? :),  а я типа не знал :), та я и в Си не любил когда нумерация начинается на 0 , по-этому когда перешел на Делфи решил 0 не пользоваться , как-то это не естественно, а то что я в программе не задействовал 0 элемент массива , это только потому что ну я уже писал выше


Jeer   (2007-03-16 10:52:00) [18]


> dlina[k]

разумеется:))


Jeer   (2007-03-16 10:51:00) [19]


> ЮЮ ©   (16.03.07 10:38) [7]


Вряд ли до автора этот намек дошел.
Разъясню популярнее:
индексация в динамических массивах строк начинается с 1, а в остальных случаях по умолчанию с нуля, а потому:

k := 0;
..
SetLength(dlina,kol4isel);

for i := 1 to Length(str) do begin      // opredelyaem all dlinuYa4eyki v simvolah
 if str[i] = chr(9) then begin
    dlina[k-1]:= i-posl_tab-1 ;
   posl_tab := i;                    // indeks posl tab
   Inc(k);
 end;
end;


ЮЮ   (2007-03-16 10:38:00) [20]

Не > - ПОЖЛОБИЛСЯ НА 1 :), а не расточительно не используешь dlina[0]


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо