-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
long Date :: ConvertToDays()
{
int M=0,Y=0;
for(int i=2;i<=m_Year;i++)
{
if((i%4 == 0) && (i%100 !=0) || (i%400==0))Y+=366;
else Y+=365;
}
for(i=2;i<=m_Month;i++){
if (i == 1)M=0;else
if ((((m_Year%4 == 0) && (m_Year%100 !=0) || (m_Year%400==0)) && (i == 3)))M+=29;else
if ((((m_Year%4 != 0) || ((m_Year%100 ==0) && (m_Year%400 !=0))) && (i == 3)))M+=28;else
if ((i == 2) || (i == 4) || (i == 6) || (i == 8) || (i == 9) || (i == 11))M+=31;else
if ((i == 5) || (i == 7) || (i == 10) || (i == 12))M+=30;
}
return m_Day+M+Y;
}
Взято с forum.xakep.ru
psina-from-ua,
14 Ноября 2010
-
+159
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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 makedata(int id,int part,void *d,int datalen,void *buf)
{
//packet struct :
// code = short int, lenght = shotr int, id = int, numofpart = int, data = 1024
int packlen = sizeof(short int)*2 + sizeof(int)*2 + datalen;
char *tbuf = new char [packlen];
char* tbufptr = tbuf;
*((short int *)tbufptr) = data; //first field
(short int *)tbufptr++;
*((short int *)tbufptr) = packlen; //second field
(short int *)tbufptr++;
*((int *)tbufptr) = id;
(int *)tbufptr++;
*((int *)tbufptr) = part;
(int *)tbufptr++;
*((short int *)tbufptr) = datalen;
(short int *)tbufptr++;
memcpy((void*)tbufptr,d,datalen);
buf=tbuf;
return packlen;
}
fileinfo* getask(void *b)
{
fileinfo *fi = new fileinfo();
char *bufptr = (char*)b;
(short int*)bufptr++;
short int plen = *((short int*)bufptr);
(short int*)bufptr++;
fi->numofpart = *((int*)bufptr);
(int*)bufptr++;
fi->filelenght = *((int*)bufptr);
(int*)bufptr++;
int filelen = plen-(bufptr-(char*)b);
fi->filename = new char[filelen];
strncpy(fi->filename,bufptr,filelen);
return fi;
}
Вместо того, что бы воспользоваться структурой, забиваем всё ручками.
KoirN,
14 Ноября 2010
-
+160
- 1
- 2
- 3
- 4
- 5
int m[3][3]={
{1, 6, 7},
{2, 5, 8},
{3, 4, 9}};
int tmp[3]={m[0][0],m[0][1],m[0][2]}; m[0][0]=m[1][0];m[0][1]=m[1][1];m[0][2]=m[1][2]; m[1][0]=tmp[0];m[1][1]=tmp[1];m[1][2]=tmp[2];
Программа меняет местами 2 строки
qbasic,
13 Ноября 2010
-
+160
- 1
- 2
- 3
- 4
- 5
for( int b = 0; b < cntblocket; ++b )
{
delete msrLst[b]->record;
delete msrLst[b]->record;
}
Сразу вспоминается: "- А зачем у вас тут два одинаковых jump'а стоять? - А вдруг один не сработает?"
Видимо, совсем не выспался программист ;)
ftptrash,
13 Ноября 2010
-
+156
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
char* setw_c(int width, char* str, const char align){
width = width - strlen(str) / 2;
if (align == 'l'){
std::cout << str;
if (width > 0)
for (int i = 0; i < width - 1; i++)
std::cout << " ";
return " ";
} else {
if (width > 0)
for (int i = 0; i < width; i++)
std::cout << " ";
return str;
}
}
вот так коряво я решил проблему с setw(), кириллицей и utf-8.
strlen() - чуть ли не единственная функция из cstring, более-менее нормально работающая с кириллицей в utf-8, да и то возвращает не реальную длину, а в два раза бОльшую, т.к. в utf-8 символ кириллицы занимает 2 байта, вместо одного, чего эта функция не учитывает.
bugaga_,
13 Ноября 2010
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
std::vector<double> WBuffer;
std::vector<double> CleanWBuffer;
std::vector<Color> PixelBuffer;
std::vector<Color> CleanPixelBuffer;
void Scene3D::ClearBuffers()
{
const size_t n = static_cast<size_t>(ScreenSize[0] * ScreenSize[1]);
memcpy(&*(WBuffer.begin()), &*(CleanWBuffer.begin()), n * sizeof(*(WBuffer.begin())));
memcpy(&*(PixelBuffer.begin()), &*(CleanPixelBuffer.begin()), n * sizeof(*(PixelBuffer.begin())));
}
Быстрая очистка буферов.
CleanWBuffer предварительно заполнен 0.0, CleanPixelBuffer предварительно заполнен нужным цветом.
Можно было воспользоваться std::fill, но оно работает в несколько раз дольше.
Пришлось так вот лезть в потроха std::vector. Доставляют подряд идущие & и *.
burdakovd,
12 Ноября 2010
-
+157
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
void Scene3D::DrawTriangle(const Point3D &A, const Point3D &B, const Point3D &C, const Color& color)
{
// ---------------------------------------------------------------------------------------
// вспомогательные вычисления
// нормаль
const Vector3D& n = (B - A) ^ (C - A);
// ...
// центр треугольника
const Point3D& medium = (A + B + C) / 3.0;
Руки как-то привыкли const TypeName& variableName набирать в определении параметров методов.
И случайно набралось такое (строки 6, 11)
Операторы (+, -, ^, /) над векторами возвращают Vector3D, не const Vector3D&.
Заметил только через полгода, и всё это время оно почему-то работало, и даже ворнингов не было.
Но такое ведь не должно работать!
Результат вычисления в правой части присваивания структура, то есть она возвращается в стеке. Если бы я присвоил её какой-то локальной переменной, для которой выделена память в стеке текущей функции, то она бы перед удалением скопировалась в локальную переменную. А так получается что ссылка (n, medium) указывает куда-то на стек, где временно хранится возвращенное оператором значение. И при следующем вызове любой функции эта область стека должна перезаписаться.
burdakovd,
12 Ноября 2010
-
+144
- 1
- 2
- 3
- 4
if (!bNextPageVisited)
this->button(QWizard::NextButton)->setEnabled(false);
if (bNextPageVisited)
this->button(QWizard::NextButton)->setEnabled(true);
Упячка мозга?..
des-1008d,
12 Ноября 2010
-
+164
- 1
- 2
- 3
- 4
double *ptr = new (nothrow) double[n];
if (ptr) {
//....
} else throw bad_alloc();
Sanya_M,
11 Ноября 2010
-
+172
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
void Logger::LogString( std::string &s )
{
if (s.size() > 4096) {
// предотвращаем слишком длиные строки в логе.
s.resize( 4096 );
}
m_LogStream << LogMessagePrefix() << s << std::endl;
}
народ пару дней понадобилось найти почему XML сообщения, размером слегка больше обычного, Xerces не принимает. идеи иссякли - пока в лог не посмотрели и не нашли вот по такому (проиллюстрированому выше) чудо принципу работающий логгер.
Dummy00001,
10 Ноября 2010