Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5

Модерирует : ShIvADeSt

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 4

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).

Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    apnss
    Проследите, чтобы и библиотеки и приложение использовали общий менеджер памяти.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:15 11-04-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Odysseos
    Спасибо за подробный ответ, но найти аккорд перебором "пострунно" вверх - это конечно не составляет проблем и я уже давно сделал. Вопрос как найти аккорды если допустим, 1-ая струна вообще не звучит, Далее - 2-ая струна на 3-ем ладу (РЕ), 3-яя струна на 2-ом ладу (ЛЯ), далее 4-ая и 5-ая струна пропускаем, 6-ая струна 1-ый лад (ФА). Это тоже аккорд Dm. То есть можно пропустить 4-ую и 5-ую струны, хотя на них и есть требуемые ноты, просто чтобы найти все варианты в 1 (одной!) позиции то есть в пределах 4-ех ладов. То есть chord может состоять и из 3 и из 4, 5 нот. К примеру, для нот аккорда  tunes_to_find := [tFs, tE, tGs, tH] находится далеко не самый удобный вариант. Логичнее было бы найти Фа-диез на 1-ой струне, Ми - на 4-ой струне, Соль-диез на 3-ей и Си на 2-ой открытой.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 12:07 11-04-2010 | Исправлено: Bonivur, 12:25 11-04-2010
    apnss

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins

    Цитата:
    Проследите, чтобы и библиотеки и приложение использовали общий менеджер памяти.

     
    в случае использования  widestring это не  обязательно и бесполезно  т.к. при работе с widestring юзаются функции SysAllocString, SysReallocString , SysFreeString , а следовательно используется системный менеджер памяти (изначально это было сделано для совместимости с COM)  
     
    и опять же повторюсь  на 2009м  все работает как часы. На самом деле уже принято решение, выделен бюджет и ресурсы  на создание  своих dll  с расширенным функционалом совместимым с д2010.  

    Всего записей: 708 | Зарегистр. 26-02-2002 | Отправлено: 12:58 11-04-2010
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    svs123456789
    Сразу определись план или 3D иначе будут проблемы.
    Если 3D, то однозначно
    Цитата:
    opengl или directx

    Есть куча билиотек. Вот например Omega sdk, Asphyre, GLScene, или вот наборчик от KSDev BlockEngine, DXScene, VGScene.
    Очень важно знать какие действия будут кроме визуализации, например, как заносить исходжные данные, где их хранить, как редактировать и т.п.
    В принципе, если речь идет о редакторе, то у меня есть собственное готовое решение на OpenGL, вот пример редактора, который я использую для тестирования.
    http://www.onlinedisk.ru/file/403777/  
    Версия не последняя, но полное представление даст.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 13:02 11-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
     
    А разве Вы что-то упоминали про оптимизацию? И разве Вы где-то сформулировали критерий, что такое - логичнее? Компьютер устроен не так, как человеческий мозг, ему надо "объяснить", что такое "логичнее". То есть - надо описать все критерии, согласно которым надо выбирать именно такое, а не иное, расположение нот на грифе в каждом случае, обощить эти случаи, а потом запрограммировать.
     
    ...Вернемся к началу - я ведь с самого начала спросил, абстрактная ли задача, или это - на самом деле реальный построитель аппликатур? Если б это была задача для лабораторной (например) - она бы решалась легко и просто. Если же это реальная задача, да еще и с требованиями находить удобную позицию для пальцев - то это, простите, уже достаточно сложная задача, чтоб решать ее просто так, из чистого интереса.

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 13:11 11-04-2010 | Исправлено: Odysseos, 13:13 11-04-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Odysseos
    Вопрос не в логичности. Алгоритм, который я ищу, должен находить ВСЕ возможные позиции для данного аккорда - удобные и неудобные. Предложенный Вами находит лишь одну позицию для аккорда, что, согласитесь не достаточно для решения задачи. Возможно ли изменить Ваш алгоритм так, чтобы он продолжал находить другие варианты аккорда в данной позиции? Так вот вопрос в том, возможно ли решить такую задачу перебором (циклами)? Если да, то как задать параметры окончания цикла? Как узнать, что все возможные варианты были уже найдены? Вот основная проблема - механизм решения.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 13:34 11-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
     
    Возможно ли изменить Ваш алгоритм так, чтобы он продолжал находить другие варианты аккорда в данной позиции?
     
    Изменить - вряд ли. А вот написать именно для поиска всех - конечно, можно.
     
    Нужны новые структуры данных - нечто вроде:
     

    Код:
     
    type
      TStringNum = 1 .. 6;
      TStringTune = record
        Tune: TTune;
        Pos: Integer;
      end;
      TStringTunes = array of TStringTune;
    var
      AllChordTunes: array [TStringNum] of TStringTunes;
     

     
    Сначала проходим по каждой струне от позиции до позиции+дистанции, находим все входящие в аккорд ноты, добавляем в массив для соответствующей струны ноту и позицию (чтоб потом не искать это все повторно).
     
    А потом - уже по полученному массиву цикл, в котором:
      - сначала перебираем все звуки на первой струне - при том, что на остальных струнах берем первые ноты из соотв. массивов (если они на соотв струнах вообще есть);
      - потом - пробегаем по всем нотам первой струны при том, что на второй струне берем вторую ноту (если она есть - если же нет, то для второй ноты на третьей струны etc.), а на оставшихся берем все так же первую ноту;
      - потом - пробегаем по всем нотам первой струны при том, что на второй струне берем третью ноту - и так пока не кончатся ноты на второй струне;
      - потом - пробегаем все ноты на первой струне, на второй - первая нота, на третьей - _вторая_ нота, на остальных - первые, потом снова по всем нотам первой, на второй - вторая нота, на третьей - все та же вторая, на осталбьных первая, потом - по первой по всем нотам, на второй - третья нота, на третьей вторая, на остальных первая;
      - и так далее до шестой струны.
     
    То есть - примерно так (предположим, что на каждой струне мы нашли по три ноты - очень большую дистанцию задали):
     
    Подробнее...
     
    Естественно - на каждом проходе проверяем аккорд на "допустимость" (то есть, все ли ноты в нем присутствуют), и если он допустим - добавляем его в результирующий массив пригодных аккордов.
     
    Уж простите - готовый цикл писать не буду, лень.

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 14:33 11-04-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Я так понял нужно 6 массивов для каждой струны, чтобы держать данные по нотам и соответствующим позициям? То есть допустим,  
     
     struna[1].Tune = F;
     struna[1].Pos=1;
     struna[3].Tune=A;
     struna[3].Pos=2 etc ?
     
    Потом значит 6 циклов один-в-другом чтобы перебрать все варианты? И еще - возможно что на одной струне будут найдены 2 ноты для данного аккорда, на другой 1 а на третьей вообще ни одной. Как быть?

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 15:33 11-04-2010
    svs123456789

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    можно будет потом посмотреть на эту прогу про аккорды?

    Всего записей: 2934 | Зарегистр. 10-04-2003 | Отправлено: 16:40 11-04-2010 | Исправлено: svs123456789, 12:21 12-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
     
    Я так понял нужно 6 массивов для каждой струны, чтобы держать данные по нотам и соответствующим позициям?
     
    Нет. Нужно по одному динамическому массиву на каждую струну, _всего_ шесть массивов.
     
    Потом значит 6 циклов один-в-другом чтобы перебрать все варианты?
     
    Можно так, да.
     
    И еще - возможно что на одной струне будут найдены 2 ноты для данного аккорда, на другой 1 а на третьей вообще ни одной. Как быть?
     
    Как я уже указал выше - динамические массивы. Цикл по пустой струне просто не выполняется.

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 17:40 11-04-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Odysseos
    Спасибо. Буду пробовать...
     
    P.S. Как обратиться к массиву AllChordTunes?  
    AllChordTunes[1].Pos:=1; - не получается. Не встречался с такими массивами записей. Помогите плиз.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 18:23 11-04-2010 | Исправлено: Bonivur, 18:57 11-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
     
    Как обратиться к массиву AllChordTunes?
     
    Динамический массив в Delphi (начиная с 3-й версии, кажется, они появились) - это массив переменной длины, длину которого можно менять "на лету" процедурой SetLength(dyn_array, new_length). Также можно прлучить его длину - Length(dyn_array), индекс первого - Low(dyn_array), и последнего - High(dyn_array), - элементов (в текущих реализациях Delphi динамические массивы всегда индексируются от 0 до Length() - 1, но это может измениться в будущем, потому лучще использовать именно Low и High; собственно, это касается всех массивов, не только динамических - чтобы в случае изменения индексации не лазать по всему коду и не искать все куски, где есть проход по элементам массива).
     
    AllChordTunes же - это массив массивов, причем - в каждой ячейке статического массива находится динамический массив. То есть - для того, чтоб добавить новую ноту для струны n, надо сделать следующее:
     

    Код:
     
    SetLength(AllChordTunes[n], Length(AllChordTunes[n]) + 1);
    AllChordTunes[n][High(AllChordTunes[n])].Pos := ...;
    AllChordTunes[n][High(AllChordTunes[n])].Tune := ...;
     

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 19:12 11-04-2010 | Исправлено: Odysseos, 19:16 11-04-2010
    apnss

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    сорри, что влезаю в разговор, но, имхо, в вашем случае проще юзать TList, а если элемент структуры можно идентифицировать строкой, то  TStringList (AddObject, IndexOf).  
     
    Использование динамических массивов, для которых часто выполняется SetLength, приводит к сильной фрагментации памяти  выделенной приложению  

    Всего записей: 708 | Зарегистр. 26-02-2002 | Отправлено: 19:23 11-04-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Odysseos
    Про Low, High, SetLengh, Length я знал. А вот про использование массива массивов нет Спасибо. Сижу пыхтю, но пока не получается сваять рабочий цикл.
     
    apnss
    Попробую и TList.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 21:21 11-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    apnss
     
    Использование динамических массивов, для которых часто выполняется SetLength, приводит к сильной фрагментации памяти выделенной приложению
     
    Во-первых - TList (а равно и TStringList) переаллоцируют память ровно так же (просто реже).
     
    Во-вторых - какой смысл городить огород с написанием собственного класса элементов списка (или хотя бы с динамическим выделением/освобождением памяти под записи - что, кстати тоже будет вызывать фрагментацию памяти) для записи из двух элементов и для алгоритма, где этих переаллокаций - в реальной работе - будет максимум две?..

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 21:24 11-04-2010 | Исправлено: Odysseos, 21:27 11-04-2010
    apnss

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    во-первых  перераспределяется память только под  изменяемые  элементы списка, а не под весь массив в случае динамического массива... по большому счету при работе с ТList'ом идет многоразовое использование памяти в виду того что размер элементов структуры указаетли на которые хранит список зачастую  одинаков. в случае дин массива КАЖДОЕ использование SetLength  приводит к созданию копии этого массива +- дельта.  
     
    во-вторых  есть такая вещь как ООП, слыхали? так вот что по вашему мнению к ней ближе динамический массив или  все же  объект содержащий список?  

    Всего записей: 708 | Зарегистр. 26-02-2002 | Отправлено: 22:08 11-04-2010 | Исправлено: apnss, 22:10 11-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    apnss
     
    О-о-оххх...
     
    во-первых  перераспределяется память только под  изменяемые  элементы списка
     
    Ну, считаем:
     
    1. вариант с дин. массивом:
     
      - добавляем первый элемент - выделяем память под 8-мь байт
      - добавляем второй элемент - перевыделем память под 16-ть байт
      - и так еще пять раз (потому что дин. массивов 6-ть)
      - освобождаем все шесть блоков - каждый раз одной операцией
     
    2. вариант в TList'ом и указателями:
     
      - выделяем память под сам объект TList (х.з. знает, сколько, лень смотреть - но байт 30-40 наверняка)
      - выделяем 16-ть байт под внутренний дин. массив указателей (TList инициализируется с Capacity = 4, 4 * SizeOf(Pointer) = 16)
      - добавляем первый элемент - выделяем память под 8-мь байт записи (в TList'е ничего не меняется, потому как Count < Capacity)
      - добавляем второй элемент - выделяем память под 8-мь байт записи (в TList'е ничего не меняется, потому как Count < Capacity)
      - и так еще пять раз
      - освобождаем для каждого TList'а по 8-мь байт для каждого элемента (6 * 2 = 12 освобождений)
      - освобождаем сами TList'ы - еще шесть освобождений
     
    Сами посчитаете, где тут больше аллокаций/реаллокаций/освобождений?
     
    во-вторых  есть такая вещь как ООП, слыхали?
     
    А Вы поговорку про пушку и воробьев слыхали? Зачем использовать ООП для 10-ти строчного алгоритма?
    Научитесь правильно выбирать иснтрументы и распределять силы - приходите.
     
    так вот что по вашему мнению к ней ближе динамический массив или  все же объект содержащий список?
     
    Если под объектом, содержащим список, имеется в виду TList - то это еще тот пример ООП, ага
     
    ...Я так думаю, что пора завязывать с флудом и троллингом.

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 00:03 12-04-2010
    apnss

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. нет не так Учите матчасть    
    память под дин массив выделяется сразу под все элементы, а не так  как вы  описали  
    2. если уж все равно по юнитам ходили не нужно было торопиться, а взглянуть на то что в основе TList лежит как раз дин масcив поинтеров  . а арифметика у каждой делфи своя. и пытаться описать логику стандартных объектов дело неблагодарное.  

    Цитата:
    А Вы поговорку про пушку и воробьев слыхали?
       
    Так зачем вы в делфи подались. Линейный турбо паскаль рулит.  

    Цитата:
    Зачем использовать ООП для 10-ти строчного алгоритма?
     
    порядок должен быть во всем. особенно при использовании модульного метода программирования когда код пишется под многоразовое использование. А не как у вас. ФОРМАЛЬНЫЙ ПОДХОД К РЕШЕНИЮ ЗАДАЧ (АБЫ ОТСТАЛИ) ни к чему не приведет. Разве что к постоянному переписыванию одних и тех же алгоритмов раз за разом т.к. разобраться в том, что написали ранее дороже, чем написать с изново. и тут мы приходим  к  

    Цитата:
     Научитесь правильно выбирать инструменты и распределять силы - приходите.  
     
    слава богу, уже давно научился и сам научил и не один проект за плечами. Eсли я отреагировал на динмассивов, значит у меня на то были причины, можете считать это комплексом. На мелких проектах оно, конечно, пройдет. Но когда рефакторишь 100 структур на динмассивах в проекте на 500 форм, желание бить программеров по рукам железной линейкой усиливается в геометрической прогрессии. Что в принципе и делал  

    Цитата:
    TList - то это еще тот пример ООП
     
    А чем хоть он вам не угодил ? На нем 50% всех компонентов сделано или по его подобию.  

    Цитата:
    Я так думаю, что пора завязывать с флудом и троллингом.
     
    согласен - пустой разговор

    Всего записей: 708 | Зарегистр. 26-02-2002 | Отправлено: 01:10 12-04-2010 | Исправлено: apnss, 01:37 12-04-2010
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Odysseos

    Цитата:
    Научитесь правильно выбирать иснтрументы и распределять силы - приходите.

    apnss

    Цитата:
    нет не так Учите матчасть  

    А вы не подеретесь... А если серьезно - давайте как-то все-таки терпимее друг с другу, что-ли ... Не надо таких громких лозунгов, ага.

    ----------
    У программёра есть два состояния: "Втупляю" и "Попёрло"...

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 02:46 12-04-2010
    Odysseos



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    apnss
     
    нет не так Учите матчасть
     
    Послушайте-ка, тролль, хамить хватит.
     
     
    память под дин массив выделяется сразу под все элементы, а не так  как вы  описали
     

    Код:
     
    SetLength(dyn_array, 1); // выделили память под первый элемент
    SetLength(dyn_array, Length(dyn_array) + 1); // перевыделили память для Length() + 1 элементов
     

     
    Вопрос на "засыпку" - сколько аллокаций/реаллокаций в приведенном коде?
     
    ...Это под статический массив память выделяется вся сразу, да еще и не в куче, а на на стеке. Дальше - учите устройтво менеджемента памяти в Delphi.
     
     
    а арифметика у каждой делфи своя. и пытаться описать логику стандартных объектов дело неблагодарное
     
    Если Вы так подходите к программированию на Delphi - то лучше занимайтесь проектированием классов, проблемы распределения памяти, кэширования, оптимизации - явно не для Вас.
     
     
    2. если уж все равно по юнитам ходили не нужно было торопиться, а взглянуть на то что в основе TList лежит как раз дин масcив поинтеров
     
    Я, не поверите, об этом знаю. Я даже об этом написал:
     

    Цитата:
     
       - выделяем 16-ть байт под внутренний дин. массив указателей (TList инициализируется с Capacity = 4, 4 * SizeOf(Pointer) = 16)
     

     
    Только Вы этого не заметили в вашем апломбе "знатока".
     
     
    Так зачем вы в делфи подались. Линейный турбо паскаль рулит.
     
    ООП не заменяет алгоритмы, а позволяет упрощать инфраструктуру описания и использования оных алгоритмов, не более того. И если описание инфраструктуры в конкретном случае оказывается сложней, чем то, для чего она создаётся - то в рабочем процессе, например, за это надо увольнять, как за растрату рабочего времени.
     
     
    порядок должен быть во всем. особенно при использовании модульного метода программирования когда код пишется под многоразовое использование. А не как у вас.
     
    Еще раз повторяю - алгоритм без преувеличения на 10-ть строк. И без предполагаемого многоразового использования.
     
    Мало того - это вообще не _программа_, а именно алгоритм, описанный такими структурами данных и кода, чтоб его понял человек, не знающий программирование глубоко (учитывая, что вопрошающий не смог реализовать столь простой алгоритм и не знает, что такое двумерный массив, а основы динамического выделения/освобождения памяти для записей объяснять мне ну очень лень).
     
     
    слава богу, уже давно научился и сам научил и не один проект за плечами.
     
    Рад за Вас. Продолжайте рефакторить проекты на 500 форм. Но не лезьте в 10-тистрочный алгоритм - особенно если по теме работы самого алгоритма Вам сказать нечего.
     
     
    А чем хоть он вам не угодил?
     
    Расскажите-ка, знаток и любитель ООП и порядка, каким же именно образом TList реализует все "три кита" ООП. Ну, ладно, два - потому что инкапсуляция там таки есть.
     
     
    Да - и уж раскройте секрет, каким образом можно в _данном_случае_, для поиска аппликатур аккордов, извлечь пользу из наследования и полиморфизма.
     
     
    Не раскроете - подтвердите реноме тролля, и разговаривать с Вами более не о чем. В ответ принимается только код, а не разглагольствование на общие темы.
     
    Добавлено:
    psa1974
     
    Человек пришел в конструктивное обсуждение с какими-то совершенно "левыми" замечаниями не по теме - мало того, полуграмотными замечаниями. Как-то вот... напрягает, да.

    Всего записей: 186 | Зарегистр. 02-01-2006 | Отправлено: 02:58 12-04-2010 | Исправлено: Odysseos, 03:01 12-04-2010
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru