ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

[C/C++] ЗАДАНИЯ
  #1  
Старый 21.06.2009, 15:46
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию [C/C++] ЗАДАНИЯ

По аналогии с темой 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 нетривиальных проектов, решений и задач

Последний раз редактировалось Fata1ex; 09.07.2009 в 15:26..
 
Ответить с цитированием

  #2  
Старый 21.06.2009, 16:26
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

задание одын
Код:
int sum=0; char buf[]="Tell me your name:";
puts(buf); fgets(buf, sizeof(buf), stdin);
??
 
Ответить с цитированием

  #3  
Старый 21.06.2009, 16:31
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Нет, имелось в виду несколько не это ) Присмотрись к циклу, к порядку появления переменных.
PS Переполнение здесь роли не играет.
 
Ответить с цитированием

  #4  
Старый 21.06.2009, 21:22
nemaniak
Участник форума
Регистрация: 10.06.2008
Сообщений: 201
Провел на форуме:
1174919

Репутация: 229
По умолчанию

может быть так?

int a, sum=0; char buf[4096];
printf("Tell me your name:"); gets(buf);
for(a=0; a<100; a++, sum++);
 
Ответить с цитированием

  #5  
Старый 21.06.2009, 21:37
jawbreaker
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
Провел на форуме:
1027635

Репутация: 234
По умолчанию

В первой задаче для локальных переменных будет использовано слишком много стековой памяти (8 килобайт вместо 4). Бороться с этим можно если запихать данные в структурку
 
Ответить с цитированием

  #6  
Старый 21.06.2009, 21:42
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Совершенно верно )
 
Ответить с цитированием

  #7  
Старый 21.06.2009, 22:13
Fata1ex
Постоянный
Регистрация: 12.12.2006
Сообщений: 906
Провел на форуме:
4205500

Репутация: 930


По умолчанию

Добавил пару задачек
 
Ответить с цитированием

  #8  
Старый 22.06.2009, 01:04
FireFenix
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме:
3178262

Репутация: 389
По умолчанию

Цитата:
foo() {
char a;
char b;
char c;
char d[5];
}
За счёт выравнивания будет 20 байт (3[a,b,c] по 4 байта, d выравняет на 8 байт = 20 байт)
Если всё запихнуть в структуру, то будет оптимизированно
Цитата:
void display(int in) {
// What im doing here????????/
cout << ++in;
}

void foo() {
int a=10;
display(a);
}
Поидее должно вывести 11, т.е. вначале выполнится инкремент (т.к. знак инкремента стоит слева, если справа - то после вывода), птом вывод

Последний раз редактировалось FireFenix; 22.06.2009 в 01:14..
 
Ответить с цитированием

  #9  
Старый 22.06.2009, 09:25
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

А вот задачка от меня

Код:
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 байт.
При этом небыл потерян функционал!!!

Последний раз редактировалось slesh; 22.06.2009 в 09:48..
 
Ответить с цитированием

  #10  
Старый 22.06.2009, 09:50
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

Код:
struct _REC
{
	unsigned short data2;
	unsigned short data8;
	unsigned char data1;
	bool data3:1;
	bool data4:1;
	bool data5:1;
	bool data6:1;
	bool data7:1;
} REC;
=)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[PHP] ЗАДАНИЯ от Krist_ALL Krist_ALL PHP, PERL, MySQL, JavaScript 205 30.11.2009 18:31
Задания ~Fenix~ Болталка 11 13.05.2006 11:03



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ