игра брюс 2048
Главная / Программирование / Программирование на С/С++ / Тест 128

Программирование на С/С++ - тест 128

Упражнение 1:
Номер 1
Какую парадигму программирования поддерживают лямбда-функция в языке С/С++

Ответ:

 (1) мето-программирование 

 (2) функциональное программирование 

 (3) объектно-ориентированное программирование 

 (4) процедурное программирование 


Номер 2
В каких случаях эффективно использование лямбда-функции?

Ответ:

 (1) передача в обобщённый алгоритм STL 

 (2) передача функтора по указателю в пользовательскую функцию 

 (3) использование функциональности, унаследованной от другого класса 

 (4) при необходимости использования в функторе всех автоматические переменные из места передачи функтора в алгоритм 

 (5)  


Номер 3
Каковы преимущества использования лямбда функций?

Ответ:

 (1) краткость кода 

 (2) эффективность скомпилированного кода 

 (3) повторное использование кода 

 (4) возможность работы в функции с всеми автоматическими переменными, доступными в месте объявления лямда-функции 


Упражнение 2:
Номер 1

	//====================== start of sample.h ==========================
		int main(int argc, char* argv[])
		{
			auto lf1 = [] (int x) {return x > 0;};
			auto lf2 = [] (int x) -> bool {return x+1;};
			auto lf3 = [] (int& x) { x++; return;};
			auto lf4 = [] (int x, int& y) -> double {return x+y;};
			auto lf5 = [] (bool& z) { z = !z; return;};
			return lf1(0);
		}
	//======================  end of sample.h  ==========================
                
]]>Какие из приведённых выше лямбда функций возвращают тип bool?
Ответ:

 (1) lf1 

 (2) lf2 

 (3) lf3 

 (4) lf4 

 (5) lf5 


Номер 2

	//====================== start of sample.cpp ==========================
		#include <algorithm>
		#include <vector>
		
		int main(int argc, char* argv[])
		{
			std::vector<int> v1;
		
			auto lf1 = [] (int x) {return x > 0;};
			auto lf3 = [] (int& x) { x++; return;};
			auto lf5 = [] (bool& z) { z = !z; return;};
		
			int cnt1 = std::count_if(v1.begin(), v1.end(), lf1);
			int cnt2 = std::count_if(v1.begin(), v1.end(), [] (int x) -> bool {return x+1;});
			int cnt3 = std::count_if(v1.begin(), v1.end(), lf3);
			int cnt4 = std::count_if(v1.begin(), v1.end(), [] (int x, int& y) -> double {return x+y;});
			int cnt5 = std::count_if(v1.begin(), v1.end(), lf5);
		
			return cnt1;
		}
	//======================  end of sample.cpp  ==========================
                
]]>При вычислении каких переменных лямбда-функции в алгоритме count_if используются корректно?
Ответ:

 (1) cnt1 

 (2) cnt2 

 (3) cnt3 

 (4) cnt4 

 (5) cnt5 


Номер 3
Какие из объявлений лямбда функций ниже выполнены корректно?

Ответ:

 (1) auto lf1 = [] (int x) {return x+1;}; 

 (2) auto lf2 = [] -> double (int x) {return x+1;}; 

 (3) auto lf3 = [] (int x) -> double {return x+1;}; 

 (4) auto lf4 = double [] (int x) {return x+1;}; 


Упражнение 3:
Номер 1

	//====================== start of sample.cpp ==========================
		int main(int argc, char* argv[])
		{
			int a = 0;
			int b = 0;
			int X = 0;
		
			auto lf1 = [a,b,X] (int x) {return x > 0;};
			auto lf2 = [a,b] (int x) { x++; return x;};
			auto lf3 = [=] (int x) { x++; return x;};
			auto lf4 = [&] (int x) { x++; return x;};
			auto lf5 = [] (bool& z) { z = !z; return;};
		
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Какие лямбда функции из примера выше имеют доступ к значению переменной X?
Ответ:

 (1) lf1 

 (2) lf2 

 (3) lf3 

 (4) lf4 

 (5) lf5 


Номер 2

	//====================== start of sample.cpp ==========================
		int main(int argc, char* argv[])
		{
			const int a = 0;
			int b = 0;
			const int X = 0;
			int Y = 0;
			int Z = 0;
		
			auto lf1 = [&Y, Z, &a, &b, X] (double x) {return x > 0;};
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Значения каких переменным лямбда функция lf1 может изменить?
Ответ:

 (1)

 (2)

 (3)

 (4)

 (5)


Номер 3

	//====================== start of sample.cpp ==========================
		int main(int argc, char* argv[])
		{
			int a = 0;
			int b = 0;
			int X = 0;
		
			auto lf1 = [&a,&b,&X] (int x) {return x > 0;};
			auto lf2 = [a,b] (int x) { x++; return x;};
			auto lf3 = [=] (int x) { x++; return x;};
			auto lf4 = [&] (int x) { x++; return x;};
			auto lf5 = [] (bool& z) { z = !z; return;};
		
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Какие из приведённых в примере лямбда функций могут изменить значения переменных а и b?
Ответ:

 (1) lf1 

 (2) lf2 

 (3) lf3 

 (4) lf4 

 (5) lf5 


Упражнение 4:
Номер 1
Каковы основные цели разработки boost?

Ответ:

 (1) решение задач часто встречающихся задач, выходящих за пределы возможностей STL 

 (2) тестирование новых компиляторов С++ 

 (3) тестирование новых библиотек-кандидатов на включение в принимаемые и перспективные стандарты языка С++ 

 (4) стандартизация, используемых в различных компаниях, средств разработки ПО 


Номер 2
Какие утверждения о boost верны?

Ответ:

 (1) boost имеет большое комьюнити 

 (2) использование boost у себя одобрено всеми компаниями-производителями ПО без ограничений 

 (3) boost включает в себя набор из нескольких десятков библиотек 

 (4) это передний фронт языка С++ 

 (5) использование разного функционала boost требует включения единого набора библиотек в проект 


Номер 3
Какие преимущества даёт использование boost?

Ответ:

 (1) уменьшение времени компиляции проекта 

 (2) решены наиболее часто встречающиеся при разработке ПО проблемы 

 (3) компактность полного набора библиотек boost  

 (4) использование в проекте качественный эффективный код 

 (5) возможность ознакомиться с техниками обобщённого программирования 


Упражнение 5:
Номер 1
Какие из объектов шаблонов и макросов в рассмотренных библиотеках boost предназначены для предупреждения сборки с некорректными типами?

Ответ:

 (1) BOOST_STATIC_ASSERT 

 (2) boost::variant 

 (3) boost::any 

 (4) boost::circular_buffer 


Номер 2
Какие из объектов шаблонов и макросов в рассмотренных библиотеках boost предоставляют безопасный обобщённый контейнер с возможностью хранения различных типов?

Ответ:

 (1) BOOST_STATIC_ASSERT 

 (2) boost::variant 

 (3) boost::any 

 (4) boost::circular_buffer 


Номер 3
Какие из объектов шаблонов и макросов в рассмотренных библиотеках boost предоставляют безопасный обобщённый класс хранилище единичных значений любых различных типов?

Ответ:

 (1) BOOST_STATIC_ASSERT 

 (2) boost::variant 

 (3) boost::any 

 (4) boost::circular_buffer 


Номер 4
Какие из объектов шаблонов и макросов в рассмотренных библиотеках boost предоставляют STL совместимый контейнер с перезаписью элементов при заполнении?

Ответ:

 (1) BOOST_STATIC_ASSERT 

 (2) boost::variant 

 (3) boost::any 

 (4) boost::circular_buffer 


Упражнение 6:
Номер 1
Какие утверждения о применении и реализации проверки времени компиляции в boost верны?

Ответ:

 (1) представляет собой аналог assert, но работает во время компиляции 

 (2) в реализации использованы отдельные шаблоны, для "корректного" и "некорректного" случаев и "корректный" шаблон ничего не делает 

 (3) в реализации использованы отдельные шаблоны, для "корректного" и "некорректного" случаев и оба шаблона выводят соответствующие сообщения 

 (4) в реализации использованы отдельные шаблоны, для "корректного" и "некорректного" случаев и "некорректный" шаблон ничего не делает 

 (5) не может быть применён внутри класса 


Номер 2
Какие преимущества обеспечивает тип boost::variant по сравнению с union?

Ответ:

 (1) контроль хранимого типа 

 (2) более экономное использование памяти 

 (3) поддержка стандартных функций boost 

 (4) большее разнообразие хранимых типов 

 (5) различимость хранимых типов 


Номер 3
Какие операции можно выполнять с объектом boost::any?

Ответ:

 (1) специализировать шаблон для хранения конкретных пользовательских типов 

 (2) создавать пустой объект 

 (3) пытаться преобразовать к любому типу посредством boost::any_cast 

 (4) получать тип хранимого значения 

 (5) выполнять преобразование хранимого типа в другой без извлечения из контейнера 


Номер 4
Какие утверждения о контейнере boost::circular_buffer верны?

Ответ:

 (1) может быть использован для организации программного кэша 

 (2) является STL совместимым контейнером 

 (3) обеспечивает логарифмическое время вставки в конец 

 (4) позволяет выделять память для контейнера только один раз 

 (5) гарантирует непрерывность используемого участка памяти 


Упражнение 7:
Номер 1

	//====================== start of sample.cpp ==========================
		#include <climits>
		#include <limits>
		#include <boost/static_assert.hpp>
		
		namespace name {
		BOOST_STATIC_ASSERT(std::numeric_limits<int>::digits == 32);
		}
		
		int main(int argc, char* argv[]) {
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Что случится c программой из файла sample.cpp если в системе размер int больше 32 разрядов?
Ответ:

 (1) программа будет работать без изменений 

 (2) будет брошен exception при выполнении программы 

 (3) при запуске программы, как в assert будет поднято окно диалога с информацией о ошибке 

 (4) компиляция программы будет прервана, в логе компиляции будет сообщение о ошибке 

 (5) при компиляции возникнет предупреждение о возможной ошибке 


Номер 2

	//====================== start of sample.cpp ==========================
		#include <boost/variant/variant.hpp>
		
		struct A {};
		
		struct B {
			B(int src);
		private:
			B(const B& src);
		};
		
		struct C {
			C(int src);
		private:
			C();
		};
		
		struct D {};
		
		int main(int argc, char* argv[])
		{
			boost::variant<int, A, B, C> myvariant;
		
			int x;
			int* y;
			A a;
			B b(x);
			C c(x);
			D d;
		
			myvariant = x;
			myvariant = y;
			myvariant = a;
			myvariant = b;
			myvariant = c;
			myvariant = d;
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Какие объекты можно присвоить объекту myvariant из примера в файле sample.cpp?
Ответ:

 (1)

 (2)

 (3)

 (4)

 (5)

 (6)


Номер 3

	//====================== start of sample.cpp ==========================
		#include <boost/circular_buffer.hpp>
		
		int main(int argc, char* argv[])
		{
			boost::circular_buffer<int> circ(3);
			circ.push_back(1);
			circ.push_back(2);
			circ.push_back(3);
			circ.push_back(4);
			circ.push_back(5);
			circ.pop_back();
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Какие значения останутся в циклическом буфере circ в примере в файле sample.cpp?
Ответ:

 (1)

 (2)

 (3)

 (4)

 (5)


Упражнение 8:
Номер 1
Какие из приведённых умных указателей выполняет автоматическое удаление объекта?

Ответ:

 (1) scoped_ptr 

 (2) shared_ptr 

 (3) weak_ptr 

 (4) intrusive_ptr 


Номер 2
Какие операторы перегружаются для умных указателей (в частности для shard_ptr)?

Ответ:

 (1) operator*() 

 (2) operator->() 

 (3) operator<() 

 (4) operator=() 

 (5) operator!=() 


Номер 3
Каковы минимальные требования к объектам, указатель на которые могут быть храниться в умных указателях?

Ответ:

 (1) наличие конструктора по умолчанию 

 (2) конструктор не может кидать исключения 

 (3) деструктор не может кидать исключения 

 (4) delete не должен кидать исключений 

 (5) деструктор должен быть виртуальным 


Упражнение 9:
Номер 1
Каковы особенности умного указателя boost::scoped_ptr?

Ответ:

 (1) защищает объект от копирования 

 (2) поддерживает подсчёт ссылок на объект 

 (3) отсутствуют накладных расходов оперативной памяти 

 (4) может использоваться в контейнерах STL 

 (5) высокая скорость выполнения операций 


Номер 2
Каковы особенности умного указателя boost::shared_ptr?

Ответ:

 (1) защищает объект от копирования 

 (2) поддерживает подсчёт ссылок на объект 

 (3) может использоваться в контейнерах STL 

 (4) возможность образования циклических ссылок 

 (5) поддержка операции сравнения, необходимой для хранения в ассоциативном контейнере 


Номер 3
Каковы особенности умного указателя boost::weak_ptr?

Ответ:

 (1) поддерживает автоматическое удаление объекта 

 (2) решает проблему создания циклических ссылок 

 (3) поддерживает ограниченное множество операций 

 (4) требует имплементации пользователем функций подсчёта ссылок на пользовательский объект 


Номер 4
Каковы особенности умного указателя boost::intrusive_ptr?

Ответ:

 (1) поддерживает автоматическое удаление объекта 

 (2) решает проблему создания циклических ссылок 

 (3) требует имплементации пользователем функций подсчёта ссылок на пользовательский объект 

 (4) предназначен для работы с объектами, имеющими встроенный механизм подсчёта ссылок 


Упражнение 10:
Номер 1

	//====================== start of sample.cpp ==========================
		#include <boost/shared_ptr.hpp>
		#include <boost/scoped_ptr.hpp>
		#include <boost/weak_ptr.hpp>
		#include <vector>
		
		struct A {
			virtual ~A();
		};
		
		struct B: public A {};
		
		struct C {};
		
		void foo1(boost::scoped_ptr<A> a);
		void foo2(boost::scoped_ptr<B>& a);
		void foo3(boost::shared_ptr<C> a);
		void foo4(boost::scoped_ptr<A>* a);
		void foo5(std::vector< boost::scoped_ptr<C> >& c);
		
		int main(int argc, char* argv[])
		{
			boost::scoped_ptr<A> b1(new A);
			boost::scoped_ptr<B> b2(new B);
			boost::scoped_ptr<C> b3(new C);
			boost::scoped_ptr<A> b4;
			std::vector< boost::scoped_ptr<C> > v1;
		
			v1.push_back(b3);
		
			foo1(b1);
			foo2(b2);
			foo3(b3.lock());
			foo4(&b4);
			foo5(v1);
		
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>В каких из функциях умный указатель boost::scoped_ptr используется правильно?
Ответ:

 (1) foo1 

 (2) foo2 

 (3) foo3 

 (4) foo4 

 (5) foo5 


Номер 2

	//====================== start of sample.cpp ==========================
		#include <boost/shared_ptr.hpp>
		#include <boost/weak_ptr.hpp>
		#include <vector>
		
		struct A {
			virtual ~A();
		};
		struct B: public A {};
		
		struct C {};
		
		void foo1(boost::shared_ptr<A>& a);
		void foo2(boost::shared_ptr<A const> a);
		void foo3(boost::shared_ptr<B>& a);
		void foo4(boost::shared_ptr<const A> a, boost::shared_ptr<C> c);
		void foo5(std::vector< boost::shared_ptr<C> >& c);
		
		int main(int argc, char* argv[])
		{
			boost::shared_ptr<A> b1(new A);
			boost::shared_ptr<B> b2(new B);
			boost::shared_ptr<C> b3(new C);
			boost::weak_ptr<A> b4(b1);
			std::vector<boost::shared_ptr<C>> v1;
		
			v1.push_back(b3);
		
			foo1(b1);
			foo2(b2);
			foo3(b3);
			foo4(b4.lock(), b3);
			foo5(v1);
		
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Вызовы каких функций выполнены корректно и операции создания их параметров не содержат очевидных проблем?
Ответ:

 (1) foo1 

 (2) foo2 

 (3) foo3 

 (4) foo4 

 (5) foo5 


Номер 3

	//====================== start of sample.cpp ==========================
		#include <boost/shared_ptr.hpp>
		#include <boost/scoped_ptr.hpp>
		#include <boost/weak_ptr.hpp>
		#include <vector>
		
		struct A {
			virtual ~A();
		};
		
		struct B: public A {};
		
		struct C {};
		
		void foo1(boost::shared_ptr<A> a);
		void foo2(boost::weak_ptr<B>& a);
		void foo3(boost::shared_ptr<C> a);
		void foo4(boost::scoped_ptr<A>& a);
		void foo5(std::vector< boost::weak_ptr<C> >& c);
		
		int main(int argc, char* argv[])
		{
			boost::shared_ptr<A> a(new A);
			boost::shared_ptr<B> b(new B);
			boost::shared_ptr<C> c(new C);
			boost::weak_ptr<A> b1(a);
			boost::weak_ptr<B> b2(b);
			boost::weak_ptr<C> b3(c);
			std::vector< boost::weak_ptr<C> > v1;
		
			v1.push_back(b3);
		
			foo1(b2.lock());
			foo2(b2);
			try
			{
				boost::shared_ptr<C> c1(c);
				foo3(c1);
			}
			catch(boost::bad_weak_ptr& e)
			{ }
		
			foo4(b2.lock());
			foo5(v1);
		
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Вызовы каких функций выполнены корректно и операции создания их параметров не содержат очевидных проблем?
Ответ:

 (1) foo1 

 (2) foo2 

 (3) foo3 

 (4) foo4 

 (5) foo5 


Упражнение 11:
Номер 1
Какая из библиотек Boost поддерживает работу с тернарной логикой?

Ответ:

 (1) Boost Interval Container Library 

 (2) Boost.Tribool 

 (3) Boost.Units 

 (4) Math Toolkit 

 (5) Meta State Machine 


Номер 2
Какая из библиотек Boost поддерживает анализ размерностей операндов вычислительных операций?

Ответ:

 (1) Boost Interval Container Library 

 (2) Boost.Tribool 

 (3) Boost.Units 

 (4) Math Toolkit 

 (5) Meta State Machine 


Номер 3
Какая из библиотек Boost поддерживает работу со статистическими распределениями, бесконечными рядами и специальными математическими функциями?

Ответ:

 (1) Geometry 

 (2) Ratio 

 (3) Boost.Units 

 (4) Math Toolkit 

 (5) Meta State Machine 


Упражнение 12:
Номер 1

	//====================== start of sample.cpp ==========================
		struct A {
			A();
		
			virtual ~A();
		
		private:
			A(A&a);
			A& operator=(const A& a);
		};
		
		struct B: public A {};
		
		struct C {};
		
		struct D {
			D();
			D& operator=(const D& d);
		};
	//======================  end of sample.cpp  ==========================
                
]]>Какие из типов из файла sample.cpp удовлетворяют требованию CopyConstructible?
Ответ:

 (1)

 (2)

 (3)

 (4)


Номер 2

	//====================== start of sample.cpp ==========================
		#include <string>
		#include <type_traits>
		
		struct my_string
		{
			std::string s;
			my_string(const std::string& s);
		};
		
		int main(int argc, char* argv[])
		{
			is_copy_constructible<my_string>;
			return 0;
		}
	//======================  end of sample.cpp  ==========================
                
]]>Каким образом можно проверить требование CopyConstructable посредством шаблона стандартной библиотеки is_copy_constructible для типа my_string из файла sample.cpp?
Ответ:

 (1) вызов метода проверки структуры is_copy_constructible вернёт true или false 

 (2) вызов метода проверки структуры is_copy_constructible бросит исключение в случае несоответствия требованиям 

 (3) в случае несоответствия стандарту для пользовательского типа при компиляции возникнет ошибка 

 (4) результат проверки можно узнать из атрибута is_copy_constructible<my_string>::value, он будет равен true или false 


Номер 3
Какие типы и методы должен поддерживать контейнер, соответствующий требованию Container?

Ответ:

 (1) forward итераторы 

 (2) итераторы произвольного доступа 

 (3) конструкторы по умолчанию и копирования 

 (4) конструктор переноса 

 (5) операции сравнения 




Главная / Программирование / Программирование на С/С++ / Тест 128