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

Вниз

Тест для всех!   Найти похожие ветки 

 
Loginov Dmitry ©   (2006-08-12 12:08) [0]

Обладателей голубых значков просьба смотреть на ответы теста со стороны.
Всем остальным просьба поучаствовать!

Тест очень простой.
Есть код:

 
 with TList.Create do
 try
   List[1] := nil;
 finally
   Free;
 end;

 ShowMessage("Hello World!");
 


Нужно определить, будет ли показан текст "Hello World!".

Delphi и литературу использовать нельзя!

Варианты ответов:
- Да
- Нет


 
Loginov Dmitry ©   (2006-08-12 12:10) [1]

> List[1] := nil;


Сорри,
 Items[1] := nil


 
cyborg ©   (2006-08-12 12:11) [2]

да


 
PZ   (2006-08-12 12:11) [3]

Да


 
VirEx ©   (2006-08-12 12:12) [4]

да!

ПС: я оптимист


 
SerJaNT ©   (2006-08-12 12:20) [5]

Нет, мне кажется List[1] не существует. Будет показано что-то вроде List index out of bouds ...


 
DprYg ©   (2006-08-12 12:26) [6]

Да, согласен что новый экземпляр не инициализирован. Поэтому Items[1] нет. Будет исключение, вызовется Free. А сообщения не будет, поскольку эта процедура будет прервана. А вот если бы ShowMessage до try, то было бы.


 
TUser ©   (2006-08-12 12:28) [7]

Нет. Count = 0, поэтому будет сгенерировано исключение, а finally не убивает его.


 
jack128 ©   (2006-08-12 13:02) [8]

Loginov Dmitry ©   (12.08.06 12:10) [1]
Items[1] := nil

ну.. это даже не интересно.

Вот так лудше:

with TList.Create do
try
  Add(nil);
  List[1] := nil;
finally
  Free;
end;

ShowMessage("Hello World!");


 
TUser ©   (2006-08-12 13:19) [9]

> jack128 ©   (12.08.06 13:02) [8]

Тоже нет.


 
Loginov Dmitry ©   (2006-08-12 13:19) [10]

Просьба отвечать только Да или Нет. Пожалуйста, никаких коментариев!


 
Gero ©   (2006-08-12 13:20) [11]

> [9] TUser ©   (12.08.06 13:19)

Почему нет? Теперь Items[1] будет существовать.


 
Gero ©   (2006-08-12 13:21) [12]

> [8] jack128 ©   (12.08.06 13:02)

В общем, думаю, да.


 
Gero ©   (2006-08-12 13:22) [13]

Ну а насчет сабжа — все расписано в [7].


 
jack128 ©   (2006-08-12 13:30) [14]

Gero ©   (12.08.06 13:20) [11]
Теперь Items[1] будет существовать

Да?


 
StriderMan ©   (2006-08-12 13:35) [15]


> Loginov Dmitry ©   [0]
нет


 
StriderMan ©   (2006-08-12 13:37) [16]


> jack128 ©   (12.08.06 13:02) [8]

тоже не будет сообщения


 
TUser ©   (2006-08-12 13:41) [17]

> Почему нет? Теперь Items[1] будет существовать.

Items[0] будет существовать. Какой там будет размер массива, я не помню - то ли 2, то ли 8. Но Count = 1, а дальше по логике должна быть проверка. Что-то типа

procedure TList.SetItem (Value: pointer; Index: integer);
begin
 if (Index < 0) or (Index >= FCount) then
   raise ...
 FItems[Index] := Value;
end;


 
StriderMan ©   (2006-08-12 13:48) [18]

Это тест для начинающих. давай чего-нить посерьезнее!

вот моя задачка (тоже для нач-их):

var
 o: TObject;
 i: integer;
begin
 o := Tobject.Create;
 i := integer(o);
 o := TObject(i);


вопрос: что будет в пер-ой о и вывалится ли ошибка?


 
Loginov Dmitry ©   (2006-08-12 13:49) [19]

TUser, Gero - спасибо вам большое за то, что знаете ответ на тест. Но зачем нужно было писать пояснения?


 
Loginov Dmitry ©   (2006-08-12 14:00) [20]

> StriderMan ©   (12.08.06 13:48) [18]
> Это тест для начинающих. давай чего-нить посерьезнее!
>
> вот моя задачка (тоже для нач-их):


Вот это как раз не серьезно.

Про try..finally я завел ветку, потому как подозреваю, что далеко не все умеют им правильно пользоваться. Помните, где-то пару месяцев назад была ветка про то, как избежать warning. Было что-то наподобие:

procedure TForm1.Button1Click(Sender: TObject);
var
 List: TStringList;
begin
 try
   List := TStringList.Create;
   List.Add("aaa");
 finally
   List.Free;
 end;
end;


Я ляпнул чушь, что нужно перед try поставить List := nil, и все будет ОК.
Некоторые меня поддержали, в том числе и из мастеров. Аргументированных доводов, что я был не прав, не было вообще.

Вывод - половина форума просто не знает, как пользоваться try..finally

Если кто-нибудь найдет ту ветку (она была в Основной или в Начинающих), дайте ссылку.


 
@BraIN ©   (2006-08-12 14:10) [21]

Т
> Я ляпнул чушь


Дошло :) Ветка лично у меня не сохранилась, хотя учавствовал. Доводы, кстати, были, ближе к концу.


 
@BraIN ©   (2006-08-12 14:11) [22]

учавствовал = участвовал


 
DiamondShark ©   (2006-08-12 14:51) [23]


> Я ляпнул чушь, что нужно перед try поставить List := nil

Но ведь код

constructor TMyClass.Create;
begin
 FList := TStringList.Create;
end;

destructor TMyClass.Destroy;
begin
 FList.Free;
 inherited;
end;

Вы чушью не считаете, верно?


> Вывод - половина форума просто не знает, как пользоваться
> try..finally

А другая половина не понимает, из каких соображений в TObject существует метод Free
;-)

Конечно, случай частный, и крайне антипедагогичный, но на чушь не тянет
;)))


 
jack128 ©   (2006-08-12 15:01) [24]

StriderMan ©   (12.08.06 13:37) [16]
тоже не будет сообщения

ну проверь ;-)

TUser ©   (12.08.06 13:41) [17]
а дальше по логике должна быть проверка. Что-то типа

procedure TList.SetItem (Value: pointer; Index: integer);


разницу между TList.Items[] и TList.List - понимаем? ;-)

А теперь финальный вопрос:

with TList.Create do
try
 Add(nil);
 Capasity := Count;
 List[1] := nil;
finally
 Free;
end;

ShowMessage("Hello World!");


 
SergP ©   (2006-08-12 15:02) [25]

> [0]


Нет.

> [8] jack128 ©   (12.08.06 13:02)


Тоже нет.


 
guav ©   (2006-08-12 15:05) [26]

> Capasity

не скомпилится :-p


 
DprYg ©   (2006-08-12 15:07) [27]

Capacity


 
SergP ©   (2006-08-12 15:11) [28]

> [18] StriderMan ©   (12.08.06 13:48)
> Это тест для начинающих. давай чего-нить посерьезнее!
>
> вот моя задачка (тоже для нач-их):
>
> var
> o: TObject;
> i: integer;
> begin
> o := Tobject.Create;
> i := integer(o);
> o := TObject(i);
>
> вопрос: что будет в пер-ой о и вывалится ли ошибка?


Не вижу причин чтобы ошибки вываливались...
ну а в o соответственно по идее должен быть указатель на созданный экземпляр TObject"а.

или там какие-то "хитрости" ?


 
SergP ©   (2006-08-12 15:14) [29]

> [24] jack128 ©   (12.08.06 15:01)


А что такое  Capasity ? Что-то не припоминаю...


 
guav ©   (2006-08-12 15:17) [30]

capacity - длина массива под список.
[24]  будет мессага Hello World!


 
jack128 ©   (2006-08-12 15:22) [31]

Емкость списка.
with TList.Create do
try
 Capacity := 10; // выделется память под 10 элементов
 //  Теперь ты можешь добавить в список 10 элементов не вызывая при этом перераспределения памяти
 for I := 0 to 9 do
   Add(nil);
 // * а вот сдесь TList вызовит ReallocMem чтобы иметь возможность добавлять новые элементы
 Add(nil);
finally
 Free;
end;


 
Gero ©   (2006-08-12 15:31) [32]

> [14] jack128 ©   (12.08.06 13:30)

Я виноват, я был невнимателен. Сорри.


 
TUser ©   (2006-08-12 16:25) [33]

> jack128 ©   (12.08.06 15:01) [24]

догнал :)


 
Loginov Dmitry ©   (2006-08-12 16:59) [34]

> DiamondShark ©   (12.08.06 14:51) [23]
>
> > Я ляпнул чушь, что нужно перед try поставить List := nil
>
> Но ведь код
>
> constructor TMyClass.Create;
> begin
> FList := TStringList.Create;
> end;
>
> destructor TMyClass.Destroy;
> begin
> FList.Free;
> inherited;
> end;
>
> Вы чушью не считаете, верно?


Не понял, к чему тут это? Единственное, что inherited в Create нет, а в остальном - приличный код.


 
Marser ©   (2006-08-12 19:21) [35]

Да.


 
StriderMan ©   (2006-08-12 20:28) [36]


> jack128 ©   (12.08.06 15:22) [31]

че-т не догнал.

Add(nil) выделит память под один элемент с индексом 0. Items[1]  будет ведь уже за границей массива


 
Юрий Зотов ©   (2006-08-12 20:29) [37]

Заголовок топика неверен. Этот тест - не для всех.


 
StriderMan ©   (2006-08-12 20:35) [38]

А все, понял разницу между .List и .Items


 
Loginov Dmitry ©   (2006-08-12 21:47) [39]

> @BraIN ©   (12.08.06 14:10) [21]

> Дошло :) Ветка лично у меня не сохранилась, хотя учавствовал.
> Доводы, кстати, были, ближе к концу.


Я "воссоздал" ту ветку:
http://matrix.kladovka.net.ru/temp.html

Внушительных доводов я не увидел тогда, я не вижу и сегодня.


 
Loginov Dmitry ©   (2006-08-12 21:49) [40]

> Юрий Зотов ©   (12.08.06 20:29) [37]

> Заголовок топика неверен. Этот тест - не для всех.


Точно. Надо было назвать: "Тест не для всех"



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

Форум: "Прочее";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.039 c
1-1154126106
Цукор5
2006-07-29 02:35
2006.09.10
Ссылка на кокласс внутри другого кокласса


15-1156081068
vain
2006-08-20 17:37
2006.09.10
Я нормальный или нет?


2-1155665628
Edu.1982
2006-08-15 22:13
2006.09.10
Карты


15-1155466218
Andy BitOff
2006-08-13 14:50
2006.09.10
Windows в 85 году


15-1155871534
Megabyte-CeerCop
2006-08-18 07:25
2006.09.10
[Linker Error] Fatal: Access violation. Link terminated.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский