По аналогии с
темой Krist_ALL'a решил создать отдельный топик с заданиями по С/С++. Надеюсь что вы enjoy it
Задание 1.
Код:
int a, sum=0; char buf[4096];
printf("Tell me your name:"); gets(buf);
for(a=0; a<100; a++) sum+=0;
//(с) мыщьх
Как оптимизировать программу с точки зрения использования ею оперативной памяти? И что в ней не так?
Верное решение
Задание 2.
Мы создаем класс без конструкторов. Что сгенерирует компилятор дополнительно?
Мы создаем класс, в котором есть только конструктор без аргументов. Что сгенерирует компилятор дополнительно?
Мы создаем класс, в котором есть только конструктор копии. Что сгенерирует компилятор дополнительно?
Задание 3.
Код:
class SimpleClass {
private:
int a;
int b;
public:
SimpleClass(int x) : b(x), a(b) {}
void print() {
std::cout << "a=" << a << " b=" << b << std::endl;
}
};
int main() {
SimpleClass a(42);
a.print();
return 0;
}
Что здесь не так?
Верное решение
Задание 4.
Код:
class A {
public:
virtual void Foo (int n = 10) {
cout << "A::Foo, n = " << n << endl;
}
};
class B : public A {
public:
virtual void Foo (int n = 20) {
cout << "B::Foo, n = " << n << endl;
}
};
int main() {
A * pa = new B ();
pa->Foo ();
return 0;
}
//(c) habrahabr//h1ppo
Что выведет программа и почему?
Верное решение
Задание 5.
Код:
foo() {
char a;
char b;
char c;
char d[5];
}
(c) мыщьх
Сколько байт локальной памяти мы израсходовали? Почему? Как оптимизировать эту "оптимизированную"(здесь подсказка

) программу?
Верное решение
Задание 6.
Код:
void display(int in) {
// What im doing here????????/
cout << ++in;
}
void foo() {
int a=10;
display(a);
}
Что выведет программа?
Верное решение
Задание 7. (by slesh)
Код:
struct _REC {
unsigned char data1;
unsigned short data2;
bool data3;
bool data4;
bool data5;
bool data6;
bool data7;
unsigned short data8;
} REC;
Как оптимизировать данную структуру чтобы она занимала в памяти 6 байта, то есть sizeof(REC) = 6
В таком виде структура занимает 12 байт.
При этом не был потерян функционал!!!
Верное решение
Верное решение
Задание 8. (by slesh)
Необходимо откомпилить консольную прожку. Я тестил на VC++ 2008
ПРИМЕЧАНИЯ:
1) в коде нельзя ничего удалять!!
2) нельзя подключать новые хидеры!!
Код:
#include "stdio.h"
void _stdcall Sleep(unsigned long dwMilliseconds);
int main(int argc, char* argv[]) {
printf("START PAUSE");
Sleep(2000);
printf("STOP PAUSE");
return 0;
}
ПОДСКАЗКА: решение требует дописания одной строки.
Верное решение
Задание 9. (by slesh)
Код:
#include "stdio.h"
#include "windows.h"
int main(int argc, char* argv[]) {
printf("SRART\n");
__asm
{
hlt
}
return 0;
}
При выполнении появляется ошибка из-за того, что команда hlt является привилегированной и недоступной из пользовательского режима.
Необходимо обработать это исключение, выдать на экран сообщение об ошибке и завершить работу программы.
И Главное - решение не должно использовать конструкцию try except и должно иметь глобальные характер. т.е. даже если это исключение появится в отдельном потоке, то действия программы должны быть такими же.
P.S. Решение требует примерно 5 строчек кода.
Верное решение
Задание 10.
Создать динамический двумерный массив размерностью N. Заполнить его значениями. Вывести значения массива на экран. Запрещается использовать символы '[' и ']'.
Верное решение
Верное решение
Задание 11.
Как можно выполнить эффективное побайтовое сравнение структур, не используя прагмы компилятора и группировку членов?
Верное решение
Задание 12.
Код:
for (int k=0, int A=0; k < strlen(str); k++)
A+=str[k];
Оптимизировать код.
Верное решение
Особое решение slesh'a
Задание 13.
Что эффективней использовать и почему:
Код:
strcpy(str, "bytes "); strcat(str, very_long_string);
или
strcpy(str, "bytes: "); strcat(str, very_long_string);
?
Верное решение
Задание 14.
Создать массив, начальный индекс которого есть произвольное число (например, 1, а не с 0).
Верное решение
Задание 15.
Код:
const int x = 1; {
enum { x = x + 1, y, z = x };
std::cout << x << ' ' << y << ' ' << z << std::endl;
}
Что выведет программа и почему? Без компиляции, пожалуйста )
Верное решение
Задание 16. (by desTiny)
Что будет в переменной после выполнения кода (не компилить!)
Код:
/*very very long not ever overflowable*/ int a = 5+765432l;
?
Верное решение
Задание 17. (by fker)
Ввести число n, и заполнить двухмерный массив размерностью n числами от 1 до n*n по спирали.
Верное решение
Задание 18.
Привести
три эффективных варианта выхода из большого количества вложенных циклов без использования операторов break.
Верное решение (Part 1) +
Верное решение (Part 2)
################################################## ###########################
Пока все ) Каждый может добавлять свои задания отдельным постом, я же по возможности буду их добавлять сюда.
Просьба к авторам задач: после того, как вашу задачу решили, напишите, что это верное решение.
Еще хочу добавить: если вам интересны интересные(оО) и нестандартные задачи по С/С++, вам понравится книги
Г. Саттер - Решение сложных задач C++
Г. Саттер - Новые сложные задачи C++
М.В. Мозговой - 85 нетривиальных проектов, решений и задач