Конференция "Прочее" » Тесты на знание Delphi
 
  • Григорьев Антон © (23.11.08 16:48) [0]
    Тут народ несколько раз интересовался, есть ли где в интернете тесты, по которым можно оценить своё знание Delphi. Теперь есть :) В честь случившегося недавно 10-летнего юбилея Королевства Delphi открылся раздел "Квинтана", содержащий такие тесты. Кому интересно, заходите.

    http://www.delphikingdom.com/quintana/
  • DVM © (23.11.08 17:42) [1]
    Надеюсь, там в вопросах нет двусмысленности из-за которой люди даже отлично знающие предмет иногда тесты не проходят.
  • Григорьев Антон © (23.11.08 19:23) [2]

    > DVM ©   (23.11.08 17:42) [1]

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

    Цель этих тестов несколько другая. Там к каждому вопросу прилагается комментарий, который становится виден только после прохождения теста. Если человек ответил неправильно, он сразу поймёт, в чём именно он ошибся, а в такой ситуации это объяснение запоминается гораздо лучше, чем если просто дать человеку прочитать теорию. Так что главная цель этого теста - чтобы если не с первого, то со второго раза человек не только правильно ответил на все вопросы, но и мог обосновать каждый ответ.

    Ну, а если где-то найдёте двусмысленность, неточность, ошибку и т.п., пишите, поправим.
  • DVM © (23.11.08 19:35) [3]

    > Григорьев Антон ©   (23.11.08 19:23) [2]

    там есть вопрос в классах такой, на котором я задумался:

    Есть переменная Obj: TSomeClass. Каким условием можно проверить, ссылается ли Obj на какой-то объект или нет?
    Варианты ответов:
    1) if Obj <> nil then ...
    2) if Assigned(Obj) then ...
    3) if obj <> Null then ...
    4) Это невозможно проверить

    Ответ я конечно знал заранее (к тому же 1) и 2) почти одно и тоже, а выбран может быть только один, так что они отпадают оба), но задумался все же, а так ли однозначно можно сказать, что 4) правильный ответ.

    Ведь можно определить, что переменная НЕ ссылается на какой либо объект.
  • Сергей М. © (23.11.08 19:42) [4]

    > если где-то найдёте двусмысленность, неточность, ошибку
    > и т.п.


    "Использование DLL"
    Вопрос №1

    Нет безусловно верного ответа.

    Ответы "Ошибок нет" и "В списке импортируемых модулей отсутствует ShareMem" верны (равно как и не верны) лишь условно.
  • asail (23.11.08 19:46) [5]

    > DVM ©   (23.11.08 19:35) [3]


    > Ведь можно определить, что переменная НЕ ссылается на какой
    > либо объект.

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

    По сабжу: прошел пока только первый тест - 9 из 13... Расстроился... :-(
  • DVM © (23.11.08 19:51) [6]

    > в общем случае, не возможно...

    Ну да, именно в общем случае. В частном же возможно.
    Наверное так стоит написать:

    4) Это в общем случае невозможно проверить.
  • Григорьев Антон © (23.11.08 20:00) [7]

    > DVM ©   (23.11.08 19:51) [6]
    > Наверное так стоит написать:
    >
    > 4) Это в общем случае невозможно проверить.

    Принято, сейчас исправлю.

    > Сергей М. ©   (23.11.08 19:42) [4]
    > Ответы "Ошибок нет" и "В списке импортируемых модулей отсутствует
    > ShareMem" верны (равно как и не верны) лишь условно.

    Что-то не понял, в чём условность. Если в параметрах есть string'и, в uses должен быть ShareMem или его аналог. Вы имели ввиду добавку про аналог? Или то, что string - это может быть ShortString?
  • blackman © (23.11.08 20:08) [8]
    Неплохо бы явно указать кодировку страницы UTF-8. Иначе IE при автомате неверно отображает
  • DVM © (23.11.08 20:19) [9]
    Хех. На 7 вопросе в разделе классы я попался. Хороший вопрос.

    Вопрос №7
    Что произойдёт при выполнении следующего кода?

    type
     TSomeClass = class
     public
       procedure ShowMsg;
     end;

    procedure TSomeClass.ShowMsg;
    begin
     ShowMessage('Это метод TSomeClass.ShowMsg');
    end;

    ...
    var
     Obj: TSomeClass;
    begin
     Obj.ShowMsg;
     ...
    end;

  • Григорьев Антон © (23.11.08 20:21) [10]

    > blackman ©   (23.11.08 20:08) [8]
    > Неплохо бы явно указать кодировку страницы UTF-8. Иначе
    > IE при автомате неверно отображает

    Странно... Заходил с разных машин, везде IE, и нигде проблем с кодировкой не видел. Правда, IE везде 6-ой, 7-ой я не тестировал. У вас какая версия?
  • DVM © (23.11.08 20:36) [11]

    > Григорьев Антон ©  

    На мой взгляд спорный верный ответ в 6 вопросе в разделе Потоки.

    Вопрос №6
    Метод Execute класса TSomeThread, унаследованного от TThread, содержит не имеющий параметров метод DoSomething, а метод Execute у него реализован следующим образом

    procedure TSomeThread.Execute;
    begin
     while not Terminated do
       Synchronize(DoSomething);
    end;

    Содержит ли этот код ошибки, и если да, то какие?
    Варианты ответов:
    1) Код не содержит ошибок
    2) Код не содержит формальных ошибок, но смысла не имеет
    3) Прототип метода DoSomething не подходит для передачи в Synchronize
    4) В методе Execute отсутствует вызов метода Execute предка

    Вообще говоря, код ошибок не содержит. А имеет ли он смысл или не имеет - об этом можно сказать, если знать что внутри метода DoSomething. Может там как раз обновление интерфейса? В вопросе же не указано что там! Надо либо привести реализацию DoSomething, либо верный ответ - 1)
  • blackman © (23.11.08 20:39) [12]
    Григорьев Антон ©   (23.11.08 20:21) [10]
    7. Но думаю, что не в этом дело. Не могу посмотреть код вашей страницы
    http://www.delphikingdom.com/quintana/quintana.asp
    Есть ли там строка
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    Если нет и в IE установлено Кодировка=Автовыбор, отбражаться будет крякозябрами
  • antonn © (23.11.08 20:40) [13]

    > DVM ©   (23.11.08 20:19) [9]

    тест не читал, но на первый взгляд AV :)
  • antonn © (23.11.08 20:45) [14]

    > Но думаю, что не в этом дело. Не могу посмотреть код вашей
    > страницы
    > http://www.delphikingdom.com/quintana/quintana.asp
    > Есть ли там строка
    > <meta http-equiv="Content-Type" content="text/html; charset=utf-
    > 8">
    > Если нет и в IE установлено Кодировка=Автовыбор, отбражаться
    > будет крякозябрами
    >

    ИЕ очень нервничает из-за хедеров - либо их неправильного составления, либо несоответствия кодировки хедера и в тегах. В данном случае в хедерах неверный формат (указан только тип документа, без CP)
  • DVM © (23.11.08 20:47) [15]

    > antonn ©   (23.11.08 20:40) [13]


    > тест не читал, но на первый взгляд AV :)

    Я тоже так решил, не подумав. Потом проверил. Все будет работать. О как.
  • Григорьев Антон © (23.11.08 20:48) [16]

    > DVM ©   (23.11.08 20:36) [11]
    > Вообще говоря, код ошибок не содержит. А имеет ли он смысл
    > или не имеет - об этом можно сказать, если знать что внутри
    > метода DoSomething. Может там как раз обновление интерфейса?
    >  В вопросе же не указано что там! Надо либо привести реализацию
    > DoSomething, либо верный ответ - 1)

    По этому поводу категорически не согласен. Такая реализация Execute не имеет смысла независимо от того, что содержится в DoSomething. В комментарии к вопросу я это специально написал:

    Таким образом, при данной реализации нить TSomeThread не делает никаких действий, кроме подачи сигналов главной нити и ожидания выполнения ею метода DoSomthing, т.е. никакого распараллеливания не происходит, и всю работу выполняет главная нить. Поэтому приведённый здесь код формально правильный, но смысла не имеет.

    Я утверждаю, что такая реализация Execute только нагружает процессор бесполезной работой по переключению нитей и не даёт никакого выигрыша. Если вы с этим не согласны, прошу привести такой пример реализации DoSomething, когда это имеет смысл.
  • DVM © (23.11.08 21:00) [17]

    > Григорьев Антон ©   (23.11.08 20:48) [16]

    Хотя, вы правы. Такую странную конструкцию никому в голову использовать не придет. Я почему то думая над вопросом, представлял себе что-то вроде такого:

    procedure TSomeThread.Execute;
    begin
    while not Terminated do
      begin
        ....
        Synchronize(DoSomething);
        ....
      end;
    end;
  • DVM © (23.11.08 21:05) [18]

    > Григорьев Антон ©   (23.11.08 20:48) [16]

    Но все же вот такая конструкция работоспособна и смысл иметь может:

    unit Unit2;

    interface

    uses
     Windows, Classes, SysUtils;

    type
     TSomeThread = class(TThread)
     private
       { Private declarations }
     protected
       procedure Execute; override;
       procedure DoSomething;
       procedure Synchronize(Method: TThreadMethod); overload;
     end;

    implementation

    uses
      Unit1;

    //------------------------------------------------------------------------------

    procedure TSomeThread.Synchronize(Method: TThreadMethod);
    begin
     sleep(10);
     // тут что-то делаем
     inherited Synchronize(Method);
    end;

    //------------------------------------------------------------------------------

    procedure TSomeThread.DoSomething;
    begin
     Form1.Label1.Caption := inttostr(GetCurrentThreadID)//TimeToStr(Now);
    end;

    //------------------------------------------------------------------------------

    procedure TSomeThread.Execute;
    begin
    while not Terminated do
      begin
        Synchronize(DoSomething);
      end;
    end;

    //------------------------------------------------------------------------------

    end.

  • Григорьев Антон © (23.11.08 21:07) [19]

    > DVM ©   (23.11.08 21:00) [17]
    > Такую странную конструкцию никому в голову
    > использовать не придет.

    Тут вы, к сожалению, опять не правы. Придёт в голову не только использовать, но и другим советовать. В книге Архангельского "Программирование в Delphi 6" такой совет приводится. Вот, Игорь Шевченко об этой книге писал здесь: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1082

    Так что этот код не с потолка взят, он реально в вопросах на форумах встречается.
 
Конференция "Прочее" » Тесты на знание Delphi
Есть новые Нет новых   [134446   +39][b:0][p:0.002]