Re[2]: Давайте проверим?
От: Smal Россия  
Дата: 16.08.07 12:57
Оценка: 14 (1)
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Awaken, Вы писали:


A>>надо для собеседования


RO>У меня почему-то сложилось впечатление, что под собеседованием разные люди понимают очень и очень разные вещи. По крайней мере, под «хорошим» собеседованием.


RO>Давайте проверим.


RO>Вы пришли на собеседование. Вам предлагают следующий вопрос, мало раскрытый в литературе: развернуть строку задом наперед. Уточню: одна функция возвращает данные, а вторая их обрабатывает, но по той или иной причине эти функции расходятся во взглядах на то, с какого конца за эти данные следует браться. Итак, данные нужно развернуть.


RO>


RO>Разумеется, я заранее знаю «правильный» ответ, и ничто меня не поколеблет в этой уверенности. Кто угадает его, поставлю тройку


RO>Ваши предложения?


rbegin/rend ?
С уважением, Александр
Re[5]: придумайте умный вопрос по с++
От: OdesitVadim Украина  
Дата: 16.08.07 13:03
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Roman Odaisky, Вы писали:


E>>>Что напечатает эта программа?

RO>>Попытается вызвать ::exit(int), ибо в зависимые базы ADL не лезет. За неимением такой функции не скомпилируется.
E>Упс!
E>Надо ещё что-то типа stdlib включить, чтобы exit( int ) таки была
Да, если добавить #include <stdlib.h>, то ничего не выведет. Но заметье, что в исходной задаче об этом ни слова.
Также я уже писал, что можно просто :: перед exit поставить.
Так что ответом наверное будет таков
дайте мне точно версию компилятора и точных исходный код. Иначе поведение не определено. А вопрошающему поставить минус за неполную формулировку задачи
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[6]: придумайте умный вопрос по с++
От: Erop Россия  
Дата: 16.08.07 13:13
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

E>>Надо ещё что-то типа stdlib включить, чтобы exit( int ) таки была

OV>Да, если добавить #include <stdlib.h>, то ничего не выведет. Но заметье, что в исходной задаче об этом ни слова.
Ну там и про std::cout тоже ни слова

OV>Также я уже писал, что можно просто :: перед exit поставить.

Вообще-то логичнее было бы this->

OV>дайте мне точно версию компилятора и точных исходный код. Иначе поведение не определено. А вопрошающему поставить минус за неполную формулировку задачи


Вообще-то вопрос про знание особенностей C++. То что ты не знаешь о функции exit тодже интересно.

Но мне этот вопрос всё равно не нравится
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: глупый, но логически выводимый
От: Erop Россия  
Дата: 16.08.07 13:18
Оценка:
Здравствуйте, Erop, Вы писали:

E>1) Какие соглашения о вызове совместимы с функциями с переменным числом параметров (которые ...)?

E>ИМХО этот вопрос задавать на собеседовании глупо

E>2) Если я заключу кусок кода в
extern "c" {
тут код
}
, то что-нибудь в коде поменяется?


Прикольно, что никто е пробует отвечать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[7]: придумайте умный вопрос по с++
От: OdesitVadim Украина  
Дата: 16.08.07 13:31
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, OdesitVadim, Вы писали:


E>>>Надо ещё что-то типа stdlib включить, чтобы exit( int ) таки была

OV>>Да, если добавить #include <stdlib.h>, то ничего не выведет. Но заметье, что в исходной задаче об этом ни слова.
E>Ну там и про std::cout тоже ни слова
Не понял юмора.
OV>>Также я уже писал, что можно просто :: перед exit поставить.
E>Вообще-то логичнее было бы this->
Это зависит от того, что мы хотим видеть под функцией exit
OV>>дайте мне точно версию компилятора и точных исходный код. Иначе поведение не определено. А вопрошающему поставить минус за неполную формулировку задачи

E>Вообще-то вопрос про знание особенностей C++.

знаем мы таких вопрошающих. задали мне задачку были на одном собеседовании, правда меня там хотели как пхп кодера брать. Но задача была не решаема в принципе(это я дома понял, когда более подробно литературу почитал). Я потратил час на собеседовании, но не смог устранить глюк (устранение которого и было решение задачи). Естественно мне сказали, что ты ничего не понимаеш, так как не можеш решить простую задачку. Решив дома я пришёл к ним на следующий день и сказал, что знаю решение. На что они ответили, что не против его получить, так как над решением бьются сами не первый день. Ответ был прост — перепроектировать всё (типичный для словянского менталитета. И обяснил им о глюках. Роботу предлагали, но я уже отказался. Не могу, когда мной командует человек, который неумеет ставить задачки.
E>То что ты не знаешь о функции exit тодже интересно.
С чего это бы?
E>Но мне этот вопрос всё равно не нравится
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[8]: придумайте умный вопрос по с++
От: Erop Россия  
Дата: 16.08.07 13:35
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

E>>>>Надо ещё что-то типа stdlib включить, чтобы exit( int ) таки была

OV>>>Да, если добавить #include <stdlib.h>, то ничего не выведет. Но заметье, что в исходной задаче об этом ни слова.
E>>Ну там и про std::cout тоже ни слова
OV>Не понял юмора.
Ну в вопросе было и std::cout и exit.
Для одного ты include написал, а для другого нет. Интересно почему?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: придумайте умный вопрос по с++
От: alpha21264 СССР  
Дата: 16.08.07 13:38
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, alpha21264, Вы писали:


A>>Попроси оператор присваивания написать вот для такого обьекта:

A>>class Struct
A>>{ int *Massiv1,*Massiv2 ;
A>>};

A>>Если тебе не нравятся массивы, заданные указателем, сделай вектора.


RO>Так если вектора, то ничего не нужно писать вообще, дефолтный оператор справится.


Или я чего-то не понимаю, или ты не прошел тест.
Что произойдет, если первый массив скопировался, а на второй не хватило памяти?

A>>А дальше смотри что будет:

A>>1) Догадается ли он проверить на тождественность обьектов.
A>>2) Освободить память присваиваемого обьекта.
A>>3) Поймать все исключения.
A>>4) Отловить все ситуации, когда под один массив память захватилась, а под другой нет.
A>>5) Корректно откатить ситуацию п 4. не повредив обьект.
A>>6) Не будет ли течь память во всяких ситуациях

RO>п. 3 — ???


что делает new при нехватке памяти?

A>>Короче. в этом примере может быть 10 различных ошибок. Все я не могу вспомнить.

A>>Если абитуриент делает не больше трех — жить будет.

RO>Элементарно.


RO>C++98, C++03:

RO>
RO>HelloSutter& HelloSutter::operator =(HelloSutter other)
RO>{
RO>    swap(other);
RO>    return *this;
RO>}
RO>

RO>C++09:
RO>
RO>HelloSutter& HelloSutter::operator =(HelloSutter other)
RO>{
RO>    return *this = std::move(other);
RO>}
RO>



Течёт вода Кубань-реки куда велят большевики.
Re[9]: придумайте умный вопрос по с++
От: OdesitVadim Украина  
Дата: 16.08.07 13:40
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, OdesitVadim, Вы писали:


E>>>>>Надо ещё что-то типа stdlib включить, чтобы exit( int ) таки была

OV>>>>Да, если добавить #include <stdlib.h>, то ничего не выведет. Но заметье, что в исходной задаче об этом ни слова.
E>>>Ну там и про std::cout тоже ни слова
OV>>Не понял юмора.
E>Ну в вопросе было и std::cout и exit.
E>Для одного ты include написал, а для другого нет. Интересно почему?
А с чего взято, что я не написал? всё написано. #include <stdlib.h> предложили люди позже, что бы заставить работать пример по другому.
а #include <iostream> я написал сразу, как увидел std. без него то не компилиться.
Сложно говорить, что выведет пример, елси он не компилиться. Может с этого и начать?
"Пример не компилиться, автор недодумал вопрос, всем ...".
... << RSDN@Home 1.2.0 alpha rev. 717>>
Re[8]: придумайте умный вопрос по с++
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 16.08.07 13:46
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>Решив дома я пришёл к ним на следующий день и сказал, что знаю решение. На что они ответили, что не против его получить, так как над решением бьются сами не первый день. Ответ был прост — перепроектировать всё (типичный для словянского менталитета. И обяснил им о глюках. Роботу предлагали, но я уже отказался. Не могу, когда мной командует человек, который неумеет ставить задачки.




Напомнило пару историй.

Первая — судя по легендам о МФТИ, там на вступительных дают задачи, которые в не могли решить профессора/аспиранты

А вторая — у меня есть друг "детства" (башка как компьютер, но программированием он не занимается). Играл в преф с тремя субъектами. Заявил 8 взяток. Потом взял прикуп (2 туза, кажется) и бросил его в морду раздающему. И, наконец, сыграл как 10, просадив двух других, которые решили вистовать
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: Давайте проверим?
От: Roman Odaisky Украина  
Дата: 16.08.07 13:48
Оценка:
Здравствуйте, Smal, Вы писали:

S>rbegin/rend ?


Ну примерно. А если вторая функция упорно требует std::string const &, а не Iterator, Iterator?
До последнего не верил в пирамиду Лебедева.
Re[4]: придумайте умный вопрос по с++
От: Roman Odaisky Украина  
Дата: 16.08.07 13:54
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>>>Попроси оператор присваивания написать вот для такого обьекта:

A>>>class Struct
A>>>{ int *Massiv1,*Massiv2 ;
A>>>};

A>>>Если тебе не нравятся массивы, заданные указателем, сделай вектора.


RO>>Так если вектора, то ничего не нужно писать вообще, дефолтный оператор справится.


A>Или я чего-то не понимаю, или ты не прошел тест. :)

A>Что произойдет, если первый массив скопировался, а на второй не хватило памяти?

Исключение и basic exception guarantee.

A>>>А дальше смотри что будет:

A>>>1) Догадается ли он проверить на тождественность обьектов.
A>>>2) Освободить память присваиваемого обьекта.
A>>>3) Поймать все исключения.
A>>>4) Отловить все ситуации, когда под один массив память захватилась, а под другой нет.
A>>>5) Корректно откатить ситуацию п 4. не повредив обьект.
A>>>6) Не будет ли течь память во всяких ситуациях

RO>>п. 3 — ???


A>что делает new при нехватке памяти?


Кидается. Но зачем их ловить-то? Их надо дальше передавать. Вот тебе strong exception guarantee без catch:
RO>>
HelloSutter& HelloSutter::operator =(HelloSutter other)
{
    swap(other);
    return *this;
}
До последнего не верил в пирамиду Лебедева.
Re[10]: придумайте умный вопрос по с++
От: Erop Россия  
Дата: 16.08.07 13:54
Оценка:
Здравствуйте, OdesitVadim, Вы писали:

OV>а #include <iostream> я написал сразу, как увидел std. без него то не компилиться.

да он впроде и без stdlib не должен на совместимом компиляторе...

Но я согласен, что на собеседовании лучше включить в пример оба инклюда и void тоже стоит написать перед ToDo
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: придумайте умный вопрос по с++
От: Vintik_69 Швейцария  
Дата: 16.08.07 14:00
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Или я чего-то не понимаю, или ты не прошел тест.

A>Что произойдет, если первый массив скопировался, а на второй не хватило памяти?

Программа рухнет с bad_alloc. По-моему, нормально . А то абсолютно везде проверять на наличие памяти — это рехнуться можно, и смысла не видно.
Re[3]: придумайте умный вопрос по с++
От: Константин Л. Франция  
Дата: 16.08.07 14:03
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Константин Л., Вы писали:


КЛ>>а кожалению, так не бывает. Либо ты задаешь конкретные вопросы по языку, либо вообще абстрагируясь от конкретного языка.

E>Почему? С++ довольно логично устроен, вообще-то.

для постороения этой логики нужны как раз те самые знания

КЛ>>По языку всегда интересны вопросы про templates, poi, spicialization/overriding.

E>Я бы их не стал задавать. Но у моих подчинённых и использование своих шаблонов запрещенно...

И чем тут гордиться?

КЛ>>1.

КЛ>>//Why this code "works" fine and outs "Hello, world!"

E>Потому что UB может быть и таким? Или ты какой ответ расчитываешь получить?


Хочу услышать в ответ представления с++ объектов в памяти. Точнее, чувак должен связать это представление и данное поведение.

КЛ>>2.

КЛ>>//What function will be called in *1*?
E>Ты бы хоть вывод разный в разных функциях сделал...

зачем?

E>А в целом хотелось бы понять что тут такого "умного" и зачем это всё надо при работе?


Понимание что такое templates, overloading.

E>Вообще засчем так программировать, что зависишь от типа литерала
10


я говорил что надо так? Надо понимать, что должно происходить в данном случае, и что при прочих равных компайлер всегда выберет нешаблонную функцию

КЛ>>3.

E>Вопроса нет
E>Нужно догадаться, что хотел спросить автор? Типа "будет ли компилироваться код?"
E>ИМХО так тоже не стоит прогать. Соответственно не понятно хорошо ли то, что кандидат умеет искать такие ошибки
E>

E>Тогда уж вот тебе вопрос, в коллекцию:

E>
E>class CMyOps {
E>public:
E>    void exit( int code ) { std::cout << "Exit code: " << code << std::endl; }

E>};

E>template<class T>
E>class CMyProcessor : T {
E>public:
E>    ToDo() { exit( 1 ); }
E>};

E>int main()
E>{
E>    CMyProcessor<CMyOps> p;
E>    p.ToDo();
E>    std::cout << "All right!!!" << std::endl;
E>}


E>Что напечатает эта программа?


тут просматривается ворос на 2 phase name lookup. Вроде как должна вызваться ::exit.

В любом случае, вариантов 2:

а) 2pnl не работает — пытаемся вызвать CMyOps::exit, но тк у нас private наследование, то не скомпилируется
б) 2pnl работает — вызовется ::exit
Re[3]: глупый, но логически выводимый
От: Roman Odaisky Украина  
Дата: 16.08.07 14:18
Оценка:
Здравствуйте, Erop, Вы писали:

E>>1) Какие соглашения о вызове совместимы с функциями с переменным числом параметров (которые ...)?

E>>ИМХО этот вопрос задавать на собеседовании глупо

wtf «соглашения о вызове»? ISO 14882:2003 такого не знает.

E>>2) Если я заключу кусок кода в
extern "c" {
тут код
}
, то что-нибудь в коде поменяется?


E>Прикольно, что никто е пробует отвечать... :)


Поменяется.
До последнего не верил в пирамиду Лебедева.
Re[4]: придумайте умный вопрос по с++
От: Erop Россия  
Дата: 16.08.07 14:19
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>>>а кожалению, так не бывает. Либо ты задаешь конкретные вопросы по языку, либо вообще абстрагируясь от конкретного языка.

E>>Почему? С++ довольно логично устроен, вообще-то.
КЛ>для постороения этой логики нужны как раз те самые знания
Обычно нужны другие, чем для ответов на хитрые вопросы...

КЛ>>>По языку всегда интересны вопросы про templates, poi, spicialization/overriding.

E>>Я бы их не стал задавать. Но у моих подчинённых и использование своих шаблонов запрещенно...
КЛ>И чем тут гордиться?
ИМХО гордиться надо не использованием шаблонов, или неиспользованием, а тем, что мы первые там или вторые в мире по качеству решания нашей задачи, что нашей прогой пользуются десятки миллионов человек, и тому подобными вещами.
А шаблоны запрещены по делу. Пока что контрпримеров не было. Тем более, что если они таки нужны, то их для этого конкретного дела разрешают. Правда на самом деле они нужны редко


КЛ>Хочу услышать в ответ представления с++ объектов в памяти. Точнее, чувак должен связать это представление и данное поведение.

Вообще-то никто не гарантирует, что всегда всё будет так. Главное чего я не понимаю, почему тебе кажется что такой ответ важен для кандидата...

E>>Ты бы хоть вывод разный в разных функциях сделал...

КЛ>зачем?
ЧТобы можно было спорить аргументированно.

E>>ИМХО так тоже не стоит прогать. Соответственно не понятно хорошо ли то, что кандидат умеет искать такие ошибки

В целом опыт в поиске таких ошибок говорит либо о большом опыте вообще, либо о том, что кандидат именно так и программирует...

E>>

КЛ>тут просматривается ворос на 2 phase name lookup. Вроде как должна вызваться ::exit.
Угу. Она.

КЛ>В любом случае, вариантов 2:


КЛ>а) 2pnl не работает — пытаемся вызвать CMyOps::exit, но тк у нас private наследование, то не скомпилируется

А вот с этого места, пожалуйста, поподробнее...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: глупый, но логически выводимый
От: Erop Россия  
Дата: 16.08.07 14:25
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Erop, Вы писали:


E>>>1) Какие соглашения о вызове совместимы с функциями с переменным числом параметров (которые ...)?

E>>>ИМХО этот вопрос задавать на собеседовании глупо

RO>wtf «соглашения о вызове»? ISO 14882:2003 такого не знает.

__cdecl например. Слышал такое слово?


E>>>2) Если я заключу кусок кода в
extern "c" {
тут код
}
, то что-нибудь в коде поменяется?


E>>Прикольно, что никто е пробует отвечать...


RO>Поменяется.

А что именно?
В смысле в семантике самого кода?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Давайте проверим?
От: Smal Россия  
Дата: 16.08.07 14:33
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Smal, Вы писали:


S>>rbegin/rend ?


RO>Ну примерно. А если вторая функция упорно требует std::string const &, а не Iterator, Iterator?

В эависимости от того как первая возвращает значение.
С уважением, Александр
Re[5]: придумайте умный вопрос по с++
От: Константин Л. Франция  
Дата: 16.08.07 14:40
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Константин Л., Вы писали:


КЛ>>>>а кожалению, так не бывает. Либо ты задаешь конкретные вопросы по языку, либо вообще абстрагируясь от конкретного языка.

E>>>Почему? С++ довольно логично устроен, вообще-то.
КЛ>>для постороения этой логики нужны как раз те самые знания
E>Обычно нужны другие, чем для ответов на хитрые вопросы...

тут мне нечего сказать. Логику строить надо на чем то. Обычно её строят на знаниях

КЛ>>>>По языку всегда интересны вопросы про templates, poi, spicialization/overriding.

E>>>Я бы их не стал задавать. Но у моих подчинённых и использование своих шаблонов запрещенно...
КЛ>>И чем тут гордиться?
E>ИМХО гордиться надо не использованием шаблонов, или неиспользованием, а тем, что мы первые там или вторые в мире по качеству решания нашей задачи, что нашей прогой пользуются десятки миллионов человек, и тому подобными вещами.

это понятно

E>А шаблоны запрещены по делу. Пока что контрпримеров не было. Тем более, что если они таки нужны, то их для этого конкретного дела разрешают. Правда на самом деле они нужны редко


ну если конечно в команде есть ацкий любитель шаблонов, пихающий их куда попало...

КЛ>>Хочу услышать в ответ представления с++ объектов в памяти. Точнее, чувак должен связать это представление и данное поведение.

E>Вообще-то никто не гарантирует, что всегда всё будет так. Главное чего я не понимаю, почему тебе кажется что такой ответ важен для кандидата...

Конечно не всегда. Тут UB. Важно, чтобы он знал, что this идет как скрытый аргумент методов класса.

E>>>Ты бы хоть вывод разный в разных функциях сделал...

КЛ>>зачем?
E>ЧТобы можно было спорить аргументированно.

А тут и без этого можно.

E>>>ИМХО так тоже не стоит прогать. Соответственно не понятно хорошо ли то, что кандидат умеет искать такие ошибки

E>В целом опыт в поиске таких ошибок говорит либо о большом опыте вообще, либо о том, что кандидат именно так и программирует...

Опыт в поиске ошибок говорит о знаниях, которые не бывают лишними.

E>>>

КЛ>>тут просматривается ворос на 2 phase name lookup. Вроде как должна вызваться ::exit.
E>Угу. Она.

КЛ>>В любом случае, вариантов 2:


КЛ>>а) 2pnl не работает — пытаемся вызвать CMyOps::exit, но тк у нас private наследование, то не скомпилируется

E>А вот с этого места, пожалуйста, поподробнее...



template<class T>
class CMyProcessor : T {
public:
    ToDo() { exit( 1 ); }
};


По дэфолту наследование private когда не указан спецификатор доступа, соотв. СMyOps::exit становится private для CMyprocessor. Или protected? кароче, забыл

А вопрос хороший
Re[6]: придумайте умный вопрос по с++
От: Erop Россия  
Дата: 16.08.07 14:52
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>ну если конечно в команде есть ацкий любитель шаблонов, пихающий их куда попало...

Ну однажды был и такой.
Но в целом в конторе очень много разработок, весьма наукоёмких. За всеми-то не уследишь, а рефакторинг потом дорогой.
Ещё правда помогает то, что STL не используется. Используется своя библиотека контейнеров.

КЛ>Опыт в поиске ошибок говорит о знаниях, которые не бывают лишними.

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

Просто опыт и знания можно как-то более прямо проверить, ИМХО

E>>>>

КЛ>>>а) 2pnl не работает — пытаемся вызвать CMyOps::exit, но тк у нас private наследование, то не скомпилируется
E>>А вот с этого места, пожалуйста, поподробнее...


КЛ>

КЛ>template<class T>
КЛ>class CMyProcessor : T {
КЛ>public:
КЛ>    ToDo() { exit( 1 ); }
КЛ>};

КЛ>


КЛ>По дэфолту наследование private когда не указан спецификатор доступа, соотв. СMyOps::exit становится private для CMyprocessor. Или protected? кароче, забыл


То есть
struct CXXX { void out() { std::cout << "XXX"; } };
class CMy : CXXX {
public:
    void ToDo() { out(); }
};
не скомпилируется?

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

А всё потому, что private наследование -- тоже маргинальщина.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.