Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Тест по Delphi при приеме на работу   Найти похожие ветки 

 
default ©   (2005-01-25 23:39) [40]

"> if (A > B) and (F1 < F2) then...
> или
> if (F1 < F2) and (A > B) then..."
а если человек не уверен что сравнение обязательно будет слева направо и напишет код
if F1 < F2 then if A > B then...
то зачтётся ответ?


 
SergP ©   (2005-01-25 23:49) [41]


>  [13] palva ©   (25.01.05 17:34)
> Пусть в вашем присутствии пройдет онлайновый тест на certifications.ru
> Delphi 5 или Delphi 7. Там 40 вопросов. Кто на большее число
> вопросов ответит, того возьмете.


Тот тест даже при присутствии кого-нить (т.е. честно) может пройти большая часть людей, которые только поверхностно знакомы с Delphi.
И вообще использование тестов (простых, сложных или даже суперсложных) в таких вопросах как сабж ИМХО нежелательно.


 
SergP ©   (2005-01-25 23:56) [42]


> [35] Юрий Зотов ©   (25.01.05 22:38)
> > Gero ©   (25.01.05 21:22) [30]
>
> Еще пример (A и B - целые переменные, F1 и F2 - функции,
> возвращающие целые значения).
>
> Какой код лучше:
> if (A > B) and (F1 < F2) then...
> или
> if (F1 < F2) and (A > B) then...
>
> Так вот - в коде профи все нюансы подобного рода продуманы
> и написаны оптимальным образом. А ведь это тоже элементы
> оформления (хотя и не форматирование, конечно).


ИМХО в большинстве случаев if (A > B) and (F1 < F2) then...
Но если представить ситуацию что может быть задача где A>B практически во всех случаях сравнении и иначе только в тысячных долях процента от всех случаев, а функции F1 и F2 сами по себе простенькие. В таком случае будет лучше использовать второй вариант.


 
saNat ©   (2005-01-26 00:03) [43]

Я скорее начинающий, но написал бы

If (A>B)And(F1<F2)
Then

исходя из того, что если (A>B) не выполняется, то не зачем тратить время на проверку результата функций

С уважением, ЕВА


 
Palladin ©   (2005-01-26 00:04) [44]


> Кроме читабельности ничего не страдает.

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


 
Piter ©   (2005-01-26 01:07) [45]

Developerr   (25.01.05 19:03) [22]
Юзеру до лампочки, какой код в программе, главное чтобы хорошо работало и без глюков или я не прав?


прав. Только дело в том, что профессиональный программист будет оформлять код ВСЕГДА ГРАМОТНО. Он просто так привык и ему ТАК УДОБНЕЕ.

Поэтому если оформления нету - то это на 99,999999% не профессиональный программист

Gero ©   (25.01.05 19:38) [27]
Да ни о чем это не говорит.
Форматирования кода и уровень знаний никак не связаны.


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

Я например даже в чисто тестовых приложениях, может быть в десяток строк, все равно делаю форматирование, уже на уровне рефлексов. Так ГОРАЗДО проще, когда код оформлен.

И если человек профи, если он уже писал миллионы строк в своей жизни - как у него не может быть такого же рефлекса?

Я согласен с тем, что хорошее форматирование не всегда говорит о профессионале. Но плохое форматирование всегда говорит о НЕпрофессионале

Вот комментирую я очень редко, хотя по заявлениям профессионалов это тоже должно придти и это надо делать

KilkennyCat ©   (25.01.05 23:08) [38]
а вот я не понял... имеется ввиду, что выполнение (F1 < F2) может повлиять на (A > B) ?


Может и так. Хотя это имхо плохой стиль программирования.

К тому же, в функциях F1 и F2 могут выполняться операции, которые просто не имеет смысла выполнять, если A<=B. И вообще, функции наверняка будут выполняться куда дольше, чем мгновненное сравнение A с B.


 
Юрий Зотов ©   (2005-01-26 01:24) [46]

> default ©   (25.01.05 23:39) [40]

> а если человек не уверен что сравнение обязательно будет
> слева направо...

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

> All

Этот пример нельзя рассматривать в отрыве от всей программы. И поэтому я задал вопрос, но не стал на него отвечать. Помните дона Хуана? "Что лучше - пена или дом?".
:о)

Здесь, на форуме, однозначного ответа дать нельзя.

Но в контексте конкретной программы ответ (иногда - однозначный, иногда - наиболее вероятный), как правило, все же существует. Фокус как раз в том и состоит, что профи, во-первых, знает о таких фичах, а во-вторых, учитывает их. Буквально в каждой строчке.

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

При взгляде же на код середнячка тоже видно. Но совсем другое.


 
KilkennyCat ©   (2005-01-26 01:25) [47]


> Может и так. Хотя это имхо плохой стиль программирования.


поэтому и не понял...


 
Arm79 ©   (2005-01-26 11:42) [48]

kaZaNoVa ©   (25.01.05 18:33) [18]

Arm79 ©   (25.01.05 17:15) [9]

> Но решаемость этой задачи в короткие сроки с хелпом и
> справочной литературой у меня не вызывает никаких
> сомнений.

имхо как раз умение решать средней сложности задачи сразу, находу, без заглядываний в справку и отличает опытного программера, "профи", так как на каждое обращение к справке тратится время и "прогер средней руки" будет писать прогу намного медленее, чем профи)))


 Не считаю себя профи. Не тяну. Вот "прогер средней руки" - самое оно. Но к справке обрашаюсь, только когда делаю что нибудь новое, а не каждый раз.

kaZaNoVa ©   (25.01.05 18:24) [15]

Arm79 ©   (25.01.05 17:15) [9]

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

я тоже, но могу сказать, что например для коннекта импользую WinApi сокеты в потоке, блокирующие, для определения папки рабочего стола использую Shell-функции, для поиска файлов - FindFile из SysUtils и т.д. и только одну процедуру чистого кода написать - я так думаю ...

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


 Алгоритм то отсылки понятен, но весь вопрос в реализации. Я вот  почту бы попытался бы отослать через Indy или NM. Разве это хуже работы с сокетами? Я так не считаю. Если есть готовая реализация (уже отлаженная), то почему бы ее и не использовать...


 
Игорь Шевченко ©   (2005-01-26 11:57) [49]

Gero ©   (25.01.05 19:38) [27]


> > И по форматированию многое можно сказать об опыте.
>
> Ничего подобного.


Когда у тебя будет такой же опыт, как у Сергея или у меня, тогда ты сам придешь к тому, что по форматированию и прочим аспектам оформления кода можно очень многое сказать о его авторе. Без обид.

С уважением,


 
MetalFan ©   (2005-01-26 12:33) [50]


> type
> PWord = ^word;
> var
> I: integer;
> W: word;
> begin
> I := High(I) shr 8;
> W := PWord(Integer(@I) + 2)^;
> end;

простите за оффтоп)
объясните в чем соль этого кода!
видимо не очень хорошо знаю:
Вопрос 1 (на знание основ и платформы).
Чему будет равно W после выполнения следующего кода процессором Intel x86? Ответ
объяснить.


 
default ©   (2005-01-26 12:39) [51]

MetalFan ©   (26.01.05 12:33) [50]
да не в чём, разве что в знании что младший байт лежит по младшему адресу


 
Piter ©   (2005-01-26 12:40) [52]

Arm79 ©   (26.01.05 11:42) [48]
имхо как раз умение решать средней сложности задачи сразу, находу, без заглядываний в справку и отличает опытного программера, "профи", так как на каждое обращение к справке тратится время и "прогер средней руки" будет писать прогу намного медленее, чем профи


да ну, бред. Конечно, программист с большим опытом уже какие-то вещи запомнил на 100%, но это только так сказать побочный эффект, это вовсе не отличительная способность высококлассного специалиста. Это разве может говорить о хорошей памяти.

А вот знать ГДЕ искать и КАК искать - это другое...


 
MetalFan ©   (2005-01-26 12:52) [53]

так в W мы всегда имеем $7F. почему?


 
MetalFan ©   (2005-01-26 12:59) [54]

I := High(I) shr 8
 mov [ebp-$08], $007fffff
W := PWord(Integer(@I)+2)^;
 lea eax,$02
 jno TForm1.Button1Click + $20
 call @IntOver
 mov ax,[eax]
 mov [ebp-$0a],ax

объясните плз суть ассемблерного кода!


 
begin...end ©   (2005-01-26 13:03) [55]

> [51] default ©   (26.01.05 12:39)

Не только. Как минимум, для осмысленного решения данного примера нужно знать внутреннее устройство Integer и правила выполнения операций с указателями. Если значение PWord увеличивается на 1, то это, в частности, не означает, что новый указатель будет указывать на следующий байт памяти.

> [53] MetalFan ©   (26.01.05 12:52)

А почему бы и нет? :-)


 
default ©   (2005-01-26 13:06) [56]

MetalFan ©   (26.01.05 12:52) [53]
да, подлый код
он рассчитан на то что решающий эту задачу даст ответ на этот код как на код:
type
PWord = ^word;
var
 I: integer;
 W: word;
begin
 I := High(Cardinal) shr 8;
 W := PWord(Cardinal(@I) + 2)^;
end;


 
Fay ©   (2005-01-26 13:08) [57]

2 begin...end ©   (26.01.05 13:03) [55]
>> Если значение PWord увеличивается на 1, то это, в частности, не означает,
>>что новый указатель будет указывать на следующий байт памяти.

Очень свежая мысль


 
default ©   (2005-01-26 13:11) [58]

MetalFan ©   (26.01.05 12:52) [53]
он рассчитан на то что High(I) мы будет считать за High(Cardinal)=$FFFFFFFF и на понимание того чего там делается


 
Developerr   (2005-01-26 13:13) [59]


> Юрий Зотов ©

Видно сразу, что опытный программист, с хорошей культурой программирования.
Этому учат в самом начале программирования. Код в Паскале (Делфи) нужно офрмлять лесенкой.
Но посмотрите в [12]

> Серьезный пока занят...


Как может, человек без опыта оценить хороший программист или нет. На мой взгляд для Опытного программиста это будет выглядеть нелепо. Обычно чем меньше человек знает, тем больше он задает глупых вопросов, на которые даже Отцы программирования могут затрудниться ответить.

Что значит, Серьезный пока занят.... Да для опытного программиста достаточно пары минут, чтобы понять соображает человек или нет. Я не думаю, что нельзя выделить 5 минут, чтобы проверить кого-либо.


 
Piter ©   (2005-01-26 13:15) [60]

Блин, все время забываю:

Romkin ©   (25.01.05 19:31) [25]
г). У каких компонентов есть событие OnCreate? Почему его нет у других
компонентов?


Какой правильный ответ то?

MetalFan ©   (26.01.05 12:33) [50]
объясните в чем соль этого кода!


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


 
Developerr   (2005-01-26 13:15) [61]


> Видно сразу, что опытный программист, с хорошей культурой
> программирования.

Это я сказал без иронии.
Просто следующая фраза:

> Этому учат в самом начале программирования. Код в Паскале
> (Делфи) нужно офрмлять лесенкой.

может показать, что я иронизирую. Отнюдь нет.


 
Игорь Шевченко ©   (2005-01-26 13:19) [62]


> Какой правильный ответ то?


У TForm


 
begin...end ©   (2005-01-26 13:21) [63]

> [57] Fay ©   (26.01.05 13:08)

Блин!!! :-) Я хотел написать "означает". "Не" написал, потому что сначала хотел про другое сказать - про значение самой переменной, а не указателя. Мои извинения.


 
MBo ©   (2005-01-26 13:40) [64]

>У TForm
еще TDataModule


 
MetalFan ©   (2005-01-26 13:40) [65]

так может мне кто-нибудь объяснить на пальцах, почему мы в результате в W имеем 127?????!!!


 
Fay ©   (2005-01-26 13:43) [66]

2 MBo ©   (26.01.05 13:40) [64]
А constructor, видимо, придумали для лохов 8)


 
Игорь Шевченко ©   (2005-01-26 13:45) [67]

MBo ©   (26.01.05 13:40) [64]

Точно, спасибо. Вредно начинать изучение Delphi с первой версии :)

С уважением,


 
begin...end ©   (2005-01-26 13:52) [68]

> [65] MetalFan ©   (26.01.05 13:40)

I := High(I) shr 8

Значение High(Integer) возвращает 2147483647.
В двоичной системе это число выглядит так:

01111111 11111111 11111111 11111111

Теперь выполняем сдвиг на 8 битов вправо:

00000000 01111111 11111111 11111111

Integer(@I) - получаем адрес первого (нулевого) байта (см. строку выше).

Integer(@I) + 2 - теперь указатель указывает не на первый (нулевой байт), а на 2-й (3-й).

PWord(Integer(@I) + 2)^ - получаем слово, расположенное по этому адресу. Вот оно (выделено):

00000000 01111111 11111111 11111111

Значение этого слова и есть 127.


 
KSergey ©   (2005-01-26 13:59) [69]

> [62] Игорь Шевченко ©   (26.01.05 13:19)
> У TForm

Просто для общего развития: а TCustomForm - это можно считать компонентом? Или компонент - то, что на палитре?

но есть и более другой вопрос.
А вот как ответить на "Почему его нет у других компонентов?". Вот тут я теряюсь...
Неужели просто "им и не надо"? Хотя опять же - почему?..


 
Fay ©   (2005-01-26 14:05) [70]

2 KSergey ©   (26.01.05 13:59) [69]
>> Или компонент - то, что на палитре?
Ага, а форма - это в песочнице для куличиков 8)


 
Игорь Шевченко ©   (2005-01-26 14:05) [71]

KSergey ©   (26.01.05 13:59) [69]


> А вот как ответить на "Почему его нет у других компонентов?".
> Вот тут я теряюсь


Теряться не надо, надо просто подумать немного :)

С уважением,


 
MetalFan ©   (2005-01-26 14:07) [72]


> Значение High(Integer) возвращает 2147483647.

млиииин... ну вот! приехали! а я High() и Hi() перепутал((( видать похмелье сказывается!


 
default ©   (2005-01-26 14:14) [73]

Игорь Шевченко ©   (26.01.05 14:05) [71]
по-моему от того имеет-ли смысл это делать
ведь OnCreate всплывает на WM_CREATE которое отсылается при создании окон в том числе эдитов, кнопок и др виндовых контролов
для них же нет OnCreate-он - там нафиг не нужен он


 
Юрий Зотов ©   (2005-01-26 14:18) [74]

> Fay © (26.01.05 13:43) [66]

Конструктор и OnCreate - вещи, принципиально разные. В том-то и весь фокус. А смысл вопроса - выяснить, понимает ли человек эту разницу.

> begin...end ©   (26.01.05 13:52) [68]

Ответ неточный. На четверочку, не более.
:о)


 
KSergey ©   (2005-01-26 14:18) [75]

> [73] default ©   (26.01.05 14:14)
> для них же нет OnCreate-он - там нафиг не нужен он

Но вопрос "почему" - как-то у меня остается... Вернее, я что-то не могу увидеть принципиальную проблему от того, что такое сообщение будет...
Может мало/плохо думаю?

> [70] Fay ©   (26.01.05 14:05)
> Ага, а форма - это в песочнице для куличиков 8)

Не понял
Я к тому, что OnCreate есть в TCustomForm, хоть и в Protected


 
begin...end ©   (2005-01-26 14:22) [76]

> [74] Юрий Зотов ©   (26.01.05 14:18)

> Ответ неточный.

Ну хоть подскажите, чего не хватает :-)

> На четверочку, не более.

А мне больше и не надо :-)


 
Юрий Зотов ©   (2005-01-26 14:22) [77]

> default ©   (26.01.05 14:14) [73]

> ведь OnCreate всплывает на WM_CREATE

Неверно в принципе!!!

TDataModule - вообще невизуальный компонент и не имеет никаких окон - но OnCreate имеет вполне успешно.


 
Игорь Шевченко ©   (2005-01-26 14:23) [78]

KSergey ©   (26.01.05 14:18) [75]

Если ты обратил внимание, то почти все свойства в TCustomxxxx объявлены в разделе protected :)

С уважением,


 
Юрий Зотов ©   (2005-01-26 14:24) [79]

> begin...end ©   (26.01.05 14:22) [76]

> Ну хоть подскажите, чего не хватает :-)

Физического расположения в памяти.


 
KSergey ©   (2005-01-26 14:24) [80]

> [74] Юрий Зотов ©   (26.01.05 14:18)
> Конструктор и OnCreate - вещи, принципиально разные.

Я вижу только 2 разницы:

1.OldCreateOrder
2.Давятся все исключения, возникшие в OnCreate...

Впрочем, опять же на вопрос "почему нет" это как-то не отвечает...
Есть еще что-то?

> [73] default ©   (26.01.05 14:14)
> ведь OnCreate всплывает на WM_CREATE

Что-то не правда ваша... или я что-то пропустил?



Страницы: 1 2 3 4 5 вся ветка

Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.038 c
9-1098104871
NightFire
2004-10-18 17:07
2005.02.13
Всем всем программистам игр и не только


14-1106542876
Kerk
2005-01-24 08:01
2005.02.13
Филармония.


1-1107075190
Зигмунд
2005-01-30 11:53
2005.02.13
Как закодировать строчку в URL-кодированную.


4-1103887279
Sphinx
2004-12-24 14:21
2005.02.13
Имеет ли TTread Handle


1-1106655454
Phoenix
2005-01-25 15:17
2005.02.13
Help в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский