Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 28 29 30 31 32 [33] 34 35 36 37   вперед  Ctrl
 Re: Топик "как я лажанулся"  [new]
__Avenger__
Member

Откуда:
Сообщений: 1957
Этот же код но на C++
+
{
 static int depth=0;

 if(i<st_n)
  len_cnt[(depth<16)?depth:16]++;
 else
 {
  depth++;
  count_len(left[i]);
  count_len(right[i]);
  depth--;
 }
}

/* Makes length counter table */

static void NEAR make_len(int root)
{
 int i, k;
 unsigned short cum;

 for(i=0; i<=16; i++)
  len_cnt[i]=0;
 count_len(root);
 cum=0;
 for(i=16; i>0; i--)
  cum+=len_cnt[i]<<(16-i);
 while(cum!=0)
 {
  if(debug_enabled&&strchr(debug_opt, 'f')!=NULL)
   msg_cprintf(0, M_HDF_FIX);
  len_cnt[16]--;
  for(i=15; i>0; i--)
  {
   if(len_cnt[i]!=0)
   {
    len_cnt[i]--;
    len_cnt[i+1]+=2;
    break;
   }
  }
  cum--;
 }
 for(i=16; i>0; i--)
 {
  k=len_cnt[i];
  while(--k>=0)
   len[*sortptr++]=i;
 }
}

/* Sends i-th entry down the heap */

static void NEAR downheap(int i)
{
 int j, k;

 k=heap[i];
 while((j=2*i)<=heapsize)
 {
  if(j<heapsize&&freq[heap[j]]>freq[heap[j+1]])
   j++;
  if(freq[k]<=freq[heap[j]])
   break;
  heap[i]=heap[j];
  i=j;
 }
 heap[i]=k;
}

/* Encodes a length table element */

static void NEAR make_code(int n, unsigned char *len, unsigned short FAR *code)
{
 int i;
 unsigned short start[18];

 start[1]=0;
 for(i=1; i<=16; i++)
  start[i+1]=(start[i]+len_cnt[i])<<1;
 for(i=0; i<n; i++)
  code[i]=start[len[i]]++;
}

/* Makes tree, calculates len[], returns root */

static int make_tree(int nparm, unsigned short *freqparm, unsigned char *lenparm, unsigned short FAR *codeparm)
{
 int i, j, k, avail;

 st_n=nparm;
 freq=freqparm;
 len=lenparm;
 avail=st_n;
 heapsize=0;
 heap[1]=0;
 for(i=0; i<st_n; i++)
 {
  len[i]=0;
  if(freq[i]!=0)
   heap[++heapsize]=i;
 }
 if(heapsize<2)
 {
  codeparm[heap[1]]=0;
  return(heap[1]);
 }
 for(i=heapsize>>1; i>=1; i--)
  downheap(i);                          /* Make priority queue */
 sortptr=codeparm;
 /* While queue has at least two entries */
 do
 {
  i=heap[1];                     	/* Take out least-freq entry */
  if(i<st_n)
   *(sortptr++)=i;
  heap[1]=heap[heapsize--];
  downheap(1);
  j=heap[1];                            /* Next least-freq entry */
  if(j<st_n)
   *(sortptr++)=j;
  k=avail++;                     	/* Generate new node */
  freq[k]=freq[i]+freq[j];
  heap[1]=k;
  downheap(1);                   	/* Put into queue */
  left[k]=i;
  right[k]=j;
 } while(heapsize>1);
 sortptr=codeparm;
 make_len(k);
 make_code(nparm, lenparm, codeparm);
 return(k);                            /* Return root */
}
30 июл 17, 23:40    [20686516]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 728
__Avenger__
Няшик
__Avenger__,

Почитай про дебагер, и отладку в один шаг =))


А иногда лучше жевать, чем говорить. Вот сиди и жуй документация про профайлинг, может она через желудок до тебя и дойдет =))



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

Царское это в слепую гадать неделю, желательно с гадалками.
31 июл 17, 02:30    [20686618]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2677
Няшик
ставить брейкпоинт и жать F7 смотря результаты переменных

Однажды, такая вера в дебагер тебя подведёт. У меня была ситуация, когда возникала проблема с некорректно работающим алгоритмом, но проявлялась она на сильно не маленьком размере данных и на сильно не маленькой итерации цикла. Поэтому все стандартные инструменты, типа условных точек останова и просмотра содержимого переменных отправились в помойку, т.к. были попросту бесполезны (условные точки останова весьма тормозные, а большой объём данных дебагер показать не может). В результате пришлось делать дамп структуры и глазками искать аномалии. Дебагер для поиска ошибок не нужен. На простных сценариях он просто не нужен, на сложных просто бесполезен. Лучше аналитические скилы прокачивать.

Няшик
Царское это в слепую гадать неделю

Есть более другие способы для отладки.
31 июл 17, 10:26    [20687009]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3205
Kazantsev Alexey,

и даже пропуск брейкпойнтов по количеству/условиям не помог?
31 июл 17, 10:38    [20687052]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
krapotkin
Member

Откуда: Екатеринбург
Сообщений: 544
Из-за того, что в конкретном случае дебаггер не пригодился, не стоит отказываться от его использования во всех остальных. А аналитика не помешает и в любых других случаях
31 июл 17, 10:40    [20687055]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
__Avenger__
Member

Откуда:
Сообщений: 1957
Няшик
__Avenger__
пропущено...


А иногда лучше жевать, чем говорить. Вот сиди и жуй документация про профайлинг, может она через желудок до тебя и дойдет =))



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

Царское это в слепую гадать неделю, желательно с гадалками.


Дебагер тут не поможет, один байт ушел в любой процедуре и все развалилось. Почитай что такое архиватор, может поймешь.
31 июл 17, 10:40    [20687057]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 728
Kazantsev Alexey
Няшик
ставить брейкпоинт и жать F7 смотря результаты переменных

Однажды, такая вера в дебагер тебя подведёт. У меня была ситуация, когда возникала проблема с некорректно работающим алгоритмом, но проявлялась она на сильно не маленьком размере данных и на сильно не маленькой итерации цикла. Поэтому все стандартные инструменты, типа условных точек останова и просмотра содержимого переменных отправились в помойку, т.к. были попросту бесполезны (условные точки останова весьма тормозные, а большой объём данных дебагер показать не может). В результате пришлось делать дамп структуры и глазками искать аномалии. Дебагер для поиска ошибок не нужен. На простных сценариях он просто не нужен, на сложных просто бесполезен. Лучше аналитические скилы прокачивать.

Няшик
Царское это в слепую гадать неделю

Есть более другие способы для отладки.



=_= На разу не подводил, потому что я чётко понимал что после цикла должно быть. А что до. И что на выходе. И от этих данных я с большой уверенностью могу предполагать где ошибка, и в какой момент она настигает...


Та и не такие они и тормозные, даже и не заметно как скачешь на следующую строку или по ним.

Ну если тебе надо быть суперменом и смотреть за 0,01 то тормозные!


И ко виноват что ты там обрабатывал так, что не мог вывести позицию со смещением N со своими большими данными, если идёт речь про обработку строк.
31 июл 17, 10:44    [20687074]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2677
JaDi
и даже пропуск брейкпойнтов по количеству/условиям не помог?

Условные точки тормозят. Пришлось условие выносить в код и точку ставить уже там. Но это всё равно не помогло, т.к. просмотреть структуру было невозможно. Дельфя то показывала её не полностью (это нормально для больших структур), то просмотр тормозил на скроллинге так, что мама не горюй, то просто падала.
31 июл 17, 10:45    [20687077]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 728
__Avenger__,

Найти начальную стадию когда он ушёл Мб? А не после.
31 июл 17, 10:45    [20687079]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2677
krapotkin
Из-за того, что в конкретном случае дебаггер не пригодился, не стоит отказываться от его использования во всех остальных.

Это далеко не единственный случай. Дебагер хорош для исследования работы чужого кода, для своего нафиг не нужно.

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

Я вижу ты даже не понял о чём я :)

Няшик
И ко виноват что ты там обрабатывал так, что не мог вывести позицию со смещением N со своими большими данными, если идёт речь про обработку строк

Речь совсем не об обработке строк. Если упрощать, то проблема была с некорректным переупорядочиванием данных, поэтому на какое смещение телепатировать у меня как-то не придумалось. Для выяснения причины нужно было, как раз, просмотреть структуру, но дебагер не шмог, увы.
31 июл 17, 10:54    [20687128]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Bred eFeM
Member

Откуда:
Сообщений: 519
__Avenger__, 20681090 'else' не нужен?
31 июл 17, 11:57    [20687443]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
__Avenger__
Member

Откуда:
Сообщений: 1957
Bred eFeM
__Avenger__, 20681090 'else' не нужен?


Да, else лишний.
31 июл 17, 13:19    [20687720]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
Kazantsev Alexey> Дебагер для поиска ошибок не нужен.

Каких только глупостей не услышишь, ей-Богу.

Posted via ActualForum NNTP Server 1.5

31 июл 17, 15:13    [20688536]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2677
Гаджимурадов Рустам
Каких только глупостей не услышишь, ей-Богу.

Глупость - это выдернуть фразу из контекста, а потом щёки раздувать.
31 июл 17, 15:18    [20688578]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
Kazantsev Alexey> Глупость - это выдернуть фразу из контекста

Даже с последовавшим уточнением про
сложные/простые случаи - это глупость.

Впрочем, наверняка, ты и сам прекрасно это
понимаешь и сформулировал бы мысль иначе.

Posted via ActualForum NNTP Server 1.5

31 июл 17, 16:30    [20688937]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
чччД
Guest
Kazantsev Alexey
Гаджимурадов Рустам
Каких только глупостей не услышишь, ей-Богу.

Глупость - это выдернуть фразу из контекста, а потом щёки раздувать.


И что, "контекст" все меняет?...

Kazantsev Alexey
Дебагер для поиска ошибок не нужен. На простных сценариях он просто не нужен, на сложных просто бесполезен. Лучше аналитические скилы прокачивать.
31 июл 17, 17:42    [20689201]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 51467
Блог
чччД
И что, "контекст" все меняет?...

Да ничего он не меняет. Просто в программировании раз за разом прокручивается один и тот же сценарий:

а) Программисты дружно мучаются с некоторой проблемой
б) Разрабатывается удачное решение этой проблемы, которое постепенно становится стандартом де-факто
в) Проходит сколько-то лет. Решаются ещё несколько проблем, работать становится ещё легче
г) Приходит новое поколение программистов, которое уже в жизни не геморроилось с исходной проблемой
д) Поскольку им слишком просто жить и они ни хрена не знают историю, активные ламеры из них начинают кричать, что это решение - фигня, и надо использовать какой-либо из альтернативных подходов, с которыми нагеморроилось предыдущее поколение, пока не придумало это удачное решение.
31 июл 17, 17:51    [20689243]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
чччД
Guest
Сегодня утром проводил младшего сына в армию ("ка-эм-бэ" называется). Вчера весь день пришивал всякую военную муру к форме; в квартире характерный складской запах военной краской и обуви.
Военная форма стала более удобной, но, имхо, худшего качества. Раньше было наоборот: офигенного качества, но очень неудобная.
Ну что, военная служба из любого программиста человека сделает.
31 июл 17, 18:21    [20689363]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Bred eFeM
Member

Откуда:
Сообщений: 519
чччД, будем искренне надеяться, что, невзирая на топик, так оно и будет.
31 июл 17, 21:34    [20689647]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
чччД
Guest
Bred eFeM
чччД, будем искренне надеяться, что, невзирая на топик, так оно и будет.


Да, тут я два раза лажанулся. :)
Все, завтра с утра в отпуск. Никаких интернетов.
31 июл 17, 21:46    [20689664]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Alexander2
Member

Откуда: Calgary
Сообщений: 1119
немного разряжу беседу наглядным примером )

К сообщению приложен файл. Размер - 120Kb
31 июл 17, 22:10    [20689692]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Любезный
Member

Откуда:
Сообщений: 441
Сейчас наткнулся. Мать-перемать.
Есть несколько подобных константных массивов разной размерности:
const
 DAYSOFWEEK: array [1..7] of String = ('Воскресенье', 'Понедельник',
                                       'Вторник', 'Среда', 'Четверг',
                                       'Пятница', 'Суббота');


Чтобы унифицировать индексный поиск по ним, я написал вот такой код:
function FindTextInArray (const Str: String;
                          const arr: array of String): Integer;
var I: Integer;
begin
 Result:=-1;
 for I:=Low (arr) to High (arr)
  do if arr [I]=Str
      then begin
            Result:=I;
            Break;
           end;
end;


Для меня при отладке приложения стало шоком, что Low(arr) равно нулю, а не единице.
20 авг 17, 22:43    [20737518]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 51467
Блог
Любезный
Чтобы унифицировать индексный поиск по ним, я написал вот такой код:

Вас не смутило даже существование аналогичной стандартной функции?

Любезный
Для меня при отладке приложения стало шоком, что Low(arr) равно нулю, а не единице.

А не думали ли Вы, что DAYSOFWEEK и arr - это разные массивы?
20 авг 17, 22:57    [20737528]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Любезный
Member

Откуда:
Сообщений: 441
автор
Вас не смутило даже существование аналогичной стандартной функции?

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

автор
А не думали ли Вы, что DAYSOFWEEK и arr - это разные массивы?

Почему же разные? Я скармливаю массив этой функции на вход, чтобы схватить индекс объекта. Это скорее не массивы разные, а их нумерация.
20 авг 17, 23:05    [20737540]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
softwarer> А не думали ли Вы, что DAYSOFWEEK и arr - это разные массивы?

Нет, разумеется, он заметил это после.

Ещё один шок будет, если ему придётся столкнуться с
массивами с "совсем нестандартной" нижней границей.

Posted via ActualForum NNTP Server 1.5

20 авг 17, 23:08    [20737543]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 28 29 30 31 32 [33] 34 35 36 37   вперед  Ctrl
Все форумы / Delphi Ответить