powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
25 сообщений из 111, страница 4 из 5
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683278
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНу это предел сверхуЭто не предел сверху. Это именно что оценка времени доступа при линейном поиске.Мне приходится хранить пару, значение и код координаты. И когда я хочу получить значение... то хранение в упорядоченном списке позволяет использовать двоичный поиск.
Правда, возникает задача обеспечения и поддержания этой самой упорядоченности.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683286
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Re: Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
Basil A. Sidorov

... то хранение в упорядоченном списке позволяет использовать двоичный поиск.
Правда, возникает задача обеспечения и поддержания этой самой упорядоченности.

Вы думали что мне это не пришло в голову после комментария от Дмитрия про сортировку ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683288
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не думал. Я как чукча - что вижу, то и пою
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683289
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryИ когда я хочу получить значение, очевидно что у меня происходит запрос
select value from table t where ID=' '. И потом max это количество строк
Ну раз вы привели аналогию с запросом к СУБД, то вам наверно не должно составить труда вспомнить, каким образом подобные запросы там оптимизируются до O(log n), а то и O(1) :)
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683292
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov Я не думал. Я как чукча - что вижу, то и пою
я на вас не обзывался, извините если вы подумали что я критикую вас. Это был не ответ в стиле-отвалите, мне и так всё понятно, а ответ спокойным тоном- я это понимаю.

Anatoly Moskovsky, да я тут с памятью ещё разбираюсь. Что-то не так делаю.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683293
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно выделять память в конец текущего массива ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683300
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Она(среда выполнения) хотела чтобы я сразу выделил память на указатель
Код: plaintext
1.
int* buf=(int*)malloc(4);
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683305
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался с памятью.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

struct Brick {
	unsigned short isSet : 3;
	unsigned short Damage : 4;
	unsigned short Matherial : 8;
};


int* buf=(int*)malloc(8);//сразу выделил память на два элемента: 1.value 2.Код координаты
int* c_buf = buf;
unsigned long int pow_buf = 2;

void setBrick(int x, int y, int z, int value)
{
	//записываем значения
	*c_buf++ = value;
	*c_buf++ = x + (y << 10) + (z << 20);//код координаты
	//выделяю память на следующий элемент
	pow_buf += 2;
	buf = (int*)realloc(buf, 2 + (pow_buf)* 4);
}

int getBrick(int x, int y, int z)
{
	for (int i = 1; i<pow_buf-2; i += 2)//иду по чётным элементам(по кодам координат)
	{
		if (*(buf + i) == x + (y << 10) + (z << 20))
		{
			return *(buf + i-1);
		}
	}
	return -1;//в случае неудачи
}


int main(int argc, char** argv)
{
	printf("Test setBrick()\n");
	setBrick(0, 0, 0, 125);
	setBrick(1023, 1024, 1023, 5678);
	setBrick(125, 512, 512, 10678);
	setBrick(125, 512, 512, 12678);
	for (int i = 0; i < pow_buf-2; i++)
	{
		printf("%i\n", *(buf+i));
	}
	printf("\nTest getBrick()");
	printf("\n%i ", getBrick(125, 125, 125));
	printf("\n%i \n", getBrick(125, 512, 512));
	
	free(buf);
}



Осталось разобраться с sizeof(), и оптимизировать поиск элемента
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38683665
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryРазобрался с памятью.
Код: plaintext
1.
int* buf=(int*)malloc(8);//сразу выделил память на два элемента: 1.value 2.Код координаты



Единственная проблема - это не С, а С++, потому что С не позволяет инициализировать глобальные переменные неконстантами

Если уж изучать С, так и компилировать наверно нужно компилятором С, а не С++.
А то такого наизучаете ...
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38684303
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЕдинственная проблема - это не С, а С++, потому что С не позволяет инициализировать глобальные переменные неконстантами

Этого я не знал. Спасибо.

Добавляю простую индексацию. Пришёл к выводу что функция SetBrick() должна возвращать что-то, вдруг мы добавляем два одинаковых кирпича. Да и вообще, теперь мне кажется что любая функция должна возвращать свой код, чтобы знать, успешно ли она выполнилась или нет. Может и ошибаюсь, но почему-то мне кажется что где-нибудь в канонах программирования написано-"каждая функция должна возвращать что-то"(-1 неудача, 1 всё ок) :D
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38684316
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формирую блок таким образом:
1int - value
1int - код координаты
3int - номер по возрастранию
Потратил час на функцию, не продумав поиск. Таким образом в этом же блоке хранить номер (по возрастанию) нет смысла. Нужно выделять для этого отдельную область памяти. Вот функция, но сейчас буду переделывать её


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
int* buf=(int*)malloc(12);//сразу выделил память на два элемента: 1.value 2.Код координаты
int* c_buf = buf;
unsigned long int pow_buf = 3;
unsigned int pow_block = 3;


int setBrick(int x, int y, int z, int value)
{
	//Проверка на то что такой элемент с такими координатами уже существует
	for (int i = 0; i < pow_buf - pow_block; i += pow_block)//иду по блокам
	{
		if (*(buf + i + 1) == x + (y << 10) + (z << 20))//сравниваю координаты
		{
			printf("\n(%i  %i  %i)This item already exists \n",x,y,z);
			return -1;
		}
	}

	//Индексация
	int new_index = (pow_buf-pow_block)/pow_block;//максимальный текущий индекс
	for (int i = 0; i < pow_buf - pow_block; i += pow_block)//иду по блокам
	{
		if (*(buf + i)>value)
		{
			if (*(buf + i + 2) < new_index)
			{
				new_index = *(buf + i + 2);
			}
			*(buf + i + 2)+=1;//перестраиваю индекс элемента
		}
	}
	*(c_buf + 2) = (new_index == (pow_buf - pow_block) / pow_block) ? new_index + 1 : new_index;//индекс нового элемента

	*c_buf = value;
	*(c_buf+1) = x + (y << 10) + (z << 20);//код координаты
	//выделяю память на следующий элемент
	pow_buf += pow_block;
	c_buf += 3;
	buf = (int*)realloc(buf, pow_buf* 4);
	return 1;
}
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38684328
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, тут плохой код. Мне уже даже циклы не нравятся тут. Не смотрите. В общем выложу как будет готово и проверено. А то выкладываешь, и видишь потом что можно сделать лучше.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38684347
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky Единственная проблема - это не С, а С++, потому что С не позволяет инициализировать глобальные переменные неконстантами

Если уж изучать С, так и компилировать наверно нужно компилятором С, а не С++.
А то такого наизучаете ...

Всё таки это проблема. Я думал что можно решить её позже, но мне не нравится что мне приходится выделять память сразу. Из-за этого приходится поддерживать две переменные up_block, count_block. Они несут одинаковый смысл практически, различие между ними как между де-юре и де-факто. Там две переменных с одной смысловой нагрузкой, тут две переменных, получите распишитесь плохой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
//Выделяю память на два элемента: 1.value 2.код координаты
unsigned long int count_block = 1;//количество блоков в основном массиве с парами значение-код координаты
unsigned long int up_block = count_block - 1;
unsigned int pow_block = 2;//мощность одного блока основго массива
int* buf=(int*)malloc(count_block*pow_block*4);



int setBrick(int x, int y, int z, int value)
{
	//Проверка на то что такой элемент с такими координатами уже существует
	for (int i = 0; i < up_block; i ++)
	{
		if (*(buf + i*pow_block + 1) == x + (y << 10) + (z << 20))
		{
			printf("\n(%i  %i  %i)This item already exists \n",x,y,z);
			return -1;
		}
	}
	//Запись блока нового элемента
	*(buf + up_block*pow_block) = value;
	*(buf + up_block*pow_block + 1) = x + (y << 10) + (z << 20);//код координаты
	//Выделяю память на следующий элемент
	count_block++;
	up_block++;
	buf = (int*)realloc(buf, count_block*pow_block* 4);
	return 1;
}


Не могу нормально индексацией заняться, пока не решу проблему с памятью, либо не решу что это невозможно сделать. Подскажите пожалуйста, как поступить чтобы не выделять лишнюю память ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685106
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНе могу нормально индексацией заняться, пока не решу проблему с памятью, либо не решу что это невозможно сделать. Подскажите пожалуйста, как поступить чтобы не выделять лишнюю память ?
Я пока не ставлю задачи "уплотнения" памяти. Аллоцируй как удобно - потом попробуем
оценить потери на аллокациях.

Кстати нашёл статью. Самому интересно.
http://www.gamedev.net/page/resources/_/technical/general-programming/c-custom-memory-allocation-r3010
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685297
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, спасибо, статью попозже посмотрю, вдруг там какая подсказка, хочу сам сделать так, как я пока могу, и только из своих размышлений, а потом почитаю как это делается правильно.


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

Вчера пока играл в футбол решил эту проблему частично. Мысль неожиданно пришла в голову.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685302
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите пожалуйста, похож ли участок кода ниже на правду ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
//Описание основного массива
unsigned long int count_block = 0;//количество блоков в основном массиве с парами "значение(value)-код координаты" 
unsigned int pow_block = 2;//мощность одного блока основного массива
int* buf = (int*)malloc((count_block + 1)*pow_block * 4);//Основной массив. Какую-то память нужно сразу выделить, потому сразу выделяю

//Вспомогательный массив. В нём по возрастанию координат отсортированы блоки основного участка памяти buf
int* sorted_array = (int*)malloc((count_block + 1) * 4);//Какую-то память нужно сразу выделить, потому сразу выделяю


int setBrick(int x, int y, int z, int value)
{
	//Проверка на то что такой элемент с такими координатами уже существует
	for (int i = 0; i < count_block; i ++)
	{
		if (*(buf + i*pow_block + 1) == x + (y << 10) + (z << 20))
		{
			printf("\n(%i  %i  %i)This item already exists \n",x,y,z);
			return -1;
		}
	}//если совпаданий не найдёно, то функция продолжает работу
	
	//Выделение памяти на новый элемент
	count_block++;
	buf = (int*)realloc(buf, count_block*pow_block * 4);
	//Запись блока нового элемента в выделенную память
	*(buf + (count_block-1)*pow_block) = value;
	*(buf + (count_block-1)*pow_block + 1) = x + (y << 10) + (z << 20);//код координаты

	//Переиндексация вспомогательного массива sorted_array
	//Именование переменных ниже, а именно то что я придумал (хотя наверняка уже используют) назвать переменные в цикле r и l нравится мне настолько,
	//что я даже не вижу смысла делать тут комментарии. Код ниже очень красивый.
	sorted_array = (int*)realloc(sorted_array, count_block * 4);
	int r = count_block - 1;
	for (int l = 0; l < count_block-1; l++)
	{
		int num_block = *(sorted_array + l);
		if (*(buf + num_block*pow_block + 1)>x + (y << 10) + (z << 20))
		{
			for (; r > l; r--)
			{
				*(sorted_array + r) = *(sorted_array + r - 1);
			}
		}
	}
	*(sorted_array + r) = count_block - 1;

	return 1;
}




В этом куске кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
	//Переиндексация вспомогательного массива sorted_array
	//Именование переменных ниже, а именно то что я придумал (хотя наверняка уже используют) назвать переменные в цикле r и l нравится мне настолько,
	//что я даже не вижу смысла делать тут комментарии. Код ниже очень красивый.
	sorted_array = (int*)realloc(sorted_array, count_block * 4);
	int r = count_block - 1;
	for (int l = 0; l < count_block-1; l++)
	{
		int num_block = *(sorted_array + l);
		if (*(buf + num_block*pow_block + 1)>x + (y << 10) + (z << 20))
		{
			for (; r > l; r--)
			{
				*(sorted_array + r) = *(sorted_array + r - 1);
			}
		}
	}
	*(sorted_array + r) = count_block - 1;


, первоначально именовал переменные по которым бежит цикл как i и j. Но очень быстро догадался их назвать по нормальному. Чудесный кусок кода C: В кои века мне что-то понравилось у себя.

PS хотя сейчас я понял что l похожа на 1 (
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685303
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и я подумал ещё. Мне кажется нужно по аналогии с СУБД реализовать все CRUD операции, и назвать их как :
createBrick(),readBrick(),updateBrick(),deleteBrick(). Или ошибаюсь ?
Но сначала нужно убедить что setBrick()(createBrick()), похожа на правду, и исходя из её работы дальше можно плясать
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685306
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВчера пока играл в футбол решил эту проблему частично. Мысль неожиданно пришла в голову.Вот когда эта мысль тебе приснится, тогда можешь считать себя настоящим программистом. А футбол .... ну почти не считается, хотя и близко.


А пока подсказка: почитай о хеш функциях и хешированием с хвостами (не помню как это правильно называется).
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685310
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl А пока подсказка: почитай о хеш функциях и хешированием с хвостами (не помню как это правильно называется).

спасибо. Только сначала сделаю как я могу сам, найду скорость на каждую операцию, а потом почитаю как это правильно делается.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685366
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДа, и я подумал ещё. Мне кажется нужно по аналогии с СУБД реализовать все CRUD операции, и назвать их как :
createBrick(),readBrick(),updateBrick(),deleteBrick(). Или ошибаюсь ?
Но сначала нужно убедить что setBrick()(createBrick()), похожа на правду, и исходя из её работы дальше можно плясать
Для данной задачи - непринципиально будет ли setBrick или CRUD с кирпичами. И сама
постановка с СУБД - избыточна. Но дам подсказку. Кирпичи обычно стоят блоками или группами.

На этом можно соптимизировать хранение.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685369
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой кусок кода

Код: plaintext
1.
2.
3.
//Запись блока нового элемента в выделенную память
	*(buf + (count_block-1)*pow_block) = value;
	*(buf + (count_block-1)*pow_block + 1) = x + (y << 10) + (z << 20);//код координаты



я обычно записываю так

Код: plaintext
1.
2.
3.
        int *p = *(buf + (count_block-1)*pow_block);
        *p = value;
        *(p+1) = x + (y << 10) + (z << 20);
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685910
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКирпичи обычно стоят блоками или группами.

думал про это, но даже если у меня будет некоторый аналог триангуляции (не знаю как это правильно называется в программировании, это термин из математики), и буду хранить например координаты диагонали параллелепипедов, то у меня будут приличные проблемы для формирования этих диагоналей. Нюансы будут и с соседними кубиками.И при удалении одного кирпича из кубика, куб пропадает, надо будет перестраивать весь буфер.

Да и вообще, стреляет танк(не знаю откуда ассоциации с танками) в здание, верхний слой повреждён, а внутреннего значение value то-же. Нужно снова перестраивать массив. Нужно будет ввести норму для сортировки кубиков, но это в принципе не сложно, но всё-таки. Куча нюансов.
Код: plaintext
1.
2.
3.
int *p = *(buf + (count_block-1)*pow_block);
        *p = value;
        *(p+1) = x + (y << 10) + (z << 20);



Конечно можно и так,но мне показалось что не нужно вводить лишнюю переменную, в целом и так понятно что происходит. Хотя если бы в блоке было 30 элементов например, то я согласен с тем что ваш код был бы более приятен для чтения. Скорее всего.

Допустим пока я храню каждый кирпич отдельно. Код для вставки кирпича в массив похож на правду ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38685993
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

По управлению памятью.
Отделите задачу по расширению массива (включая такую абстракцию как блоки) от собственно алгоритма использующего массив как контейнер.
Алгоритму вовсе не зачем оперировать таким понятием как блок из нескольких элементов массива, если он работает с одним элементом.
Поэтому рекомендую сделать такие функции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
struct Item {
  int x, y, z;
  int value;
};

// не нужно тут выделять память (тем более что в С это невозможно). 
// выделяйте либо при первом обращении, либо сделайте отдельную функцию инициализации
struct Item* array = NULL; 
int array_size = 0; // сколько логически выделено элементов
int array_mem_size = 0; //сколько физически выделено элементов (растет поблочно)

/** Возвращает указатель на элемент с указанным индексом или NULL если индекс за границами массива */
struct Item* get_item(int index);
/** Устанавливает значение элемента с указанным индексом. Расширяет массив если индекс за границами массива*/
void set_item(int index, struct Item* value);
/** Возвращает количество элементов */
int get_size();



А уже в вашем алгоритме работать с массивом только через эти функции.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
int setBrick(int x, int y, int z, int value)
{
	//Проверка на то что такой элемент с такими координатами уже существует
	for (int i = 0; i < get_size(); i ++)
	{
		struct Item* item = get_item(i);
		if (item->x == x && item->y == y ...) 
		{
			printf("\n(%i  %i  %i)This item already exists \n",x,y,z);
			return -1;
		}
	}
	
	//если совпаданий не найдёно, то добавляем в конец
	struct Item item = {x, y, z, value};
	set_item(get_size(), &item);
}


Обратите внимание, как резко упрощается код.

ЗЫ. Кстати а с чего вы решили, что если кирпич уже существует то set должно вернуть ошибку? Надо просто заменить старое значение новым :)
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38687398
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, спасибо. Кое что сейчас использую. А зачем хранить каждую координату отдельно ? Ведь хватит 4 байт для хранения всех координат
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38687399
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже их хотел хранить в структуре, и спрашивал про это у mayton_a, но огн сказал что не предполагает менять структуру хранения данных. Потому не стал добавлять координаты в структуру.

SSКак работать с value понятно, тут проблем нет. Нужно решить проблему с однозначно адресуемым расширяемым массивов, либо с тем как хранить эти кирпичи чтобы однозначно адресовать по xyz. Спецификацию кирпича расширять нельзя ?


maytonСпецификацию кирпича я расширять не планирую. Ну даже если расширять то в крайнем случае
заменить short на int. Это не влияет принципально.
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 4 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]