- 1
- 2
- 3
- 4
int spisok::kolvo()
{
return spisok::N;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+144
int spisok::kolvo()
{
return spisok::N;
}
+142
#define ns 7
#define nfio 15
Клевый стиль определения глобальных констант
+141
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
BitBtn1->Enabled=false;
String KolDaysInMonth=MonthDays[IsLeapYear(Edit1->Text.ToInt())][ComboBox1->ItemIndex];//кол-во дней в месяце выбранного года
String TimeOT="cast('"+String(ComboBox1->ItemIndex+1)+".01."+Edit1->Text+" 00:00:00' as datetime)";
String TimeDO="cast('"+String(ComboBox1->ItemIndex+1)+"."+KolDaysInMonth+"."+Edit1->Text+" 23:59:59' as datetime)";
String BTWOTDO="BETWEEN "+TimeOT+" and "+TimeDO;
AnsiString NomZav="";
AnsiString NomPar="";
//заявки
ADOQuery1->Close(); //and nomzav NOT IN (select distinct nomzav from ochzav.dbf where deleted=0 and nomopr IN (select distinct nomoprl from kompar.dbf where deleted=0 and nompar IN (select distinct nompar from kompar.dbf where deleted=0 and datzaob NOT "+BTWOTDO+")))
ADOQuery1->SQL->Clear(); //and nomzav NOT IN (select distinct nomzav from ochzav.dbf where deleted=0 and dakote NOT "+BTWOTDO+")
ADOQuery1->SQL->Add("select distinct nomzav from ochzav.dbf where deleted=0 and dakote "+BTWOTDO+" and nomzav NOT IN (select distinct nomzav from ochzav.dbf where deleted=0 and dakote>"+TimeDO+") and nomzav NOT IN (select distinct nomzav from ochzav.dbf where deleted=0 and nomopr IN (select distinct nomoprl from kompar.dbf where deleted=0 and datzaob IS NULL)) and nomzav NOT IN (select distinct nomzav from ochzav.dbf where deleted=0 and nomopr IN (select distinct nomoprl from kompar.dbf where deleted=0 and nompar IN (select distinct nompar from kompar.dbf where deleted=0 and nomoprl IN (select distinct nomopr from ochzav.dbf where deleted=0 and dakote IS NULL))))");
ADOQuery1->Open();
if (!ADOQuery1->Eof) {//если что то нашлось
while (!ADOQuery1->Eof) {
NomZav=NomZav+"'"+ADOQuery1->FieldByName("nomzav")->AsString.Trim()+"',";
ADOQuery1->Next();
}
NomZav=NomZav.Delete(NomZav.Length(),1);//обрезаем запятую на конце
//партии
ADOQuery1->Close();
ADOQuery1->SQL->Clear(); //and nompar NOT IN (select distinct nompar from kompar.dbf where deleted=0 and datzaob NOT "+BTWOTDO+")
ADOQuery1->SQL->Add("select distinct nompar from kompar.dbf where deleted=0 and nompar IN (select distinct nompar from kompar.dbf where deleted=0 and nomoprl IN (select distinct nomopr from ochzav.dbf where deleted=0 and nomzav IN ("+NomZav+")))");
ADOQuery1->Open();
if (!ADOQuery1->Eof) {//если что то нашлось
while (!ADOQuery1->Eof) {
NomPar=NomPar+"'"+ADOQuery1->FieldByName("nompar")->AsString.Trim()+"',";
ADOQuery1->Next();
}
NomPar=NomPar.Delete(NomPar.Length(),1);//обрезаем запятую на конце
}
}
if (NomZav.Trim().Length()==0||NomPar.Trim().Length()==0) {
ShowMessage("Не найденно завершённых заявок и партий за "+ComboBox1->Text+" "+Edit1->Text+" года");
BitBtn1->Enabled=true;
Abort();
}
if (Application->MessageBoxA(AnsiString("Вы действительно хотите удалить все завершённые заявки и партии за "+ComboBox1->Text+" "+Edit1->Text+" года?\n\n"
"Завершённые заявки: "+NomZav+"\nЗавершённые партии: "+NomPar).c_str(),"Удаление завершённых заявок и партий",MB_YESNO)==IDYES) {
//удаление партий из ochpar.dbf
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update ochpar.dbf set deleted=1 where deleted=0 and nompar IN ("+NomPar+")");
ADOQuery1->ExecSQL();
//удаление партий из kompar.dbf
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update kompar.dbf set deleted=1 where deleted=0 and nompar IN ("+NomPar+")");
ADOQuery1->ExecSQL();
//удаление заявок из ochzav.dbf
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update ochzav.dbf set deleted=1 where deleted=0 and nomzav IN ("+NomZav+")");
ADOQuery1->ExecSQL();
ShowMessage("Удаление партий и заявок за "+ComboBox1->Text+" "+Edit1->Text+" года завершено успешно");
}
BitBtn1->Enabled=true;
}
+141
AnsiString SQLAdderFictDel(TADOQuery * QueryForTry,/*для неотображаемых операций*/
TADOQuery * QueryForOpen,/*для отображаемых операций*/ AnsiString TableName,/*имя таблицы*/ AnsiString Deleted,/*имя поля "признак удаления"*/
AnsiString AutoInc,/*автоинкримент(уникальное в представлении СУБД)*/ AnsiString SQL_TestOnUnique,/*уникальные поля в представлении пользователя(одно или несколько, если таковых нет, то им будет являться автоинкримент(уникальное в представлении СУБД("and id = "+id_который_под_курсором)))*/
AnsiString SQL_Insert_Fields,/*имена полей, в которые надо внести значения*/ AnsiString SQL_Insert_Values,/*вносимые значения*/
AnsiString SQL_Update_Str,/*имена полей и вносимые значения*/ AnsiString CursorRec,/*значение уникального поля под курсором("0", если ToUpdating == false)*/ AnsiString Order,/*упорядочивание*/
bool ToUpdating,/*true, если используется для update*/ bool CursorToAddUpdRec,/*true, если нужно поместить курсор на добавленную запись(только если уникальное поле(в представлении СУБД) - автоинкримент)*/ bool ReturnRealFutureID)/*true, если нужно вернуть значение ID, которое будет добавлено в следующий раз*/
{
AnsiString ValToLocate,/*значение уникального поля будущей записи*/ DP;/*формирование значения уникального поля(либо первое попавшееся удалённое, либо под курсором)*/
if (CursorToAddUpdRec==true&&ToUpdating==false)//ПОИСК ЗНАЧЕНИЯ УНИКАЛЬНОГО ПОЛЯ БУДУЩЕЙ ЗАПИСИ
{
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("select "+AutoInc+" from "+TableName+" where "+Deleted+" = 1 order by "+AutoInc+" asc");//отображаем то, что получилось
QueryForTry->Open();
if (QueryForTry->Eof)
{
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("select max("+AutoInc+") from "+TableName+" where "+Deleted+" = 0");//отображаем то, что получилось
QueryForTry->Open();
ValToLocate=QueryForTry->Fields[0][0]->AsString.ToIntDef(0)+1;
}
else ValToLocate=QueryForTry->Fields[0][0]->AsString.ToInt();
}
else if (CursorToAddUpdRec==true&&ToUpdating==true) ValToLocate=CursorRec;
if (ToUpdating)
{//удаление выделенного поля
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("update "+TableName+" set deleted = 1 where "+AutoInc+" = "+CursorRec);
QueryForTry->ExecSQL();
}
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("select distinct "+Deleted+" from "+TableName+" where "+Deleted+" = 0 "+SQL_TestOnUnique);//проверка на уникальность(есть ли запись со значениями соответствующих полей?)
QueryForTry->Open();
if (!QueryForTry->Eof)
{//если тест на уникальность провален(такая запись уже есть)
if (ToUpdating)
{//восстановление поля, удалённого при выделении
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("update "+TableName+" set deleted = 0 where "+AutoInc+" = "+CursorRec);
QueryForTry->ExecSQL();
}
MessageDlg("Такая запись уже существует!",mtWarning,TMsgDlgButtons()<<mbOK,0);
return ".FAIL.";
}
else
{//проверяются поля с фильтром удаления("удалённые")
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("select distinct "+AutoInc+" from "+TableName+" where "+Deleted+" = 1");//выбрать поля в которых есть признак отсутствия информации(удалённые) и соответствующее им уникальное поле
QueryForTry->Open();
if (!QueryForTry->Eof)
{//если есть поля с фильтром удаления("удалённые")
if (ToUpdating) DP=CursorRec;//для обновления выбирается запись с тем же самым уникальным полем
else DP=QueryForTry->Fields[0][0]->AsString;//для добавления выбирается первая попавшаяся запись с признаком удаления
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("update "+TableName+" set "+Deleted+" = 0, "+SQL_Update_Str+" where "+AutoInc+" = "+DP);//отменить удаление для поля, присвоить ему значения
QueryForTry->ExecSQL();
}
else
{//если нет полей с фильтром удаления, то вставляем как в обычном SQL
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("insert into "+TableName+" ("+SQL_Insert_Fields+","+Deleted+") values("+SQL_Insert_Values+",0)");//SQL вставка
QueryForTry->ExecSQL();
}
QueryForOpen->Close();//отображение и сортировка
QueryForOpen->SQL->Clear();
QueryForOpen->SQL->Add("select * from "+TableName+" where "+Deleted+" = 0 "+Order);//отображаем то, что получилось
QueryForOpen->Open();
if (CursorToAddUpdRec)
{//установка курсора на добавленное значение
TLocateOptions Options;
Options<<loCaseInsensitive<<loPartialKey;
QueryForOpen->Locate(AutoInc,ValToLocate,Options);
}
if (ReturnRealFutureID)//ПОИСК ЗНАЧЕНИЯ УНИКАЛЬНОГО ПОЛЯ БУДУЩЕЙ ЗАПИСИ
{
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("select "+AutoInc+" from "+TableName+" where "+Deleted+" = 1 order by "+AutoInc+" asc");//отображаем то, что получилось
QueryForTry->Open();
if (QueryForTry->Eof)
{
QueryForTry->Close();
QueryForTry->SQL->Clear();
QueryForTry->SQL->Add("select max("+AutoInc+") from "+TableName+" where "+Deleted+" = 0");//отображаем то, что получилось
QueryForTry->Open();
ValToLocate=QueryForTry->Fields[0][0]->AsString.ToIntDef(0)+1;
}
else ValToLocate=QueryForTry->Fields[0][0]->AsString.ToInt();
}
else if (ReturnRealFutureID==false&&CursorToAddUpdRec==false) return ".WIN.";
return ValToLocate;
}
}
+142
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String Stroka, Str;
int DlinnaStroki, Position, Schetchik, i , j , x;
Stroka=Edit1->Text;
DlinnaStroki = Stroka.Length();
String SimvolRazdelitel=" ";
//модификация строки для добавления последнего слова
Stroka = Stroka + SimvolRazdelitel;
//вычисляет количество пробелов в строке
Schetchik = 1;
for (x = 1; x < DlinnaStroki; x++)
{
if (Stroka[x] == *SimvolRazdelitel.c_str())
Schetchik = Schetchik + 1;//количество разделительных символов
}
//разделяет строку по символу на слова
for (j = 0; j < Schetchik; j++)
{
Position = Stroka.Pos(SimvolRazdelitel);//разделительный символ
for (i = 1; i < Position; i++)
Str = Str + Stroka[i];
Stroka.Delete(1,Position);
Memo1->Lines->Add(Str);//слово добавляется сюда
Str = "";
}
}
+142
String notE(double exp)
{
if (exp < 0.0001 && exp > 0)//положительное число
{
exp += 0.0001;
String str = exp;
// str.c_str()[1] = ',';//принудительный децимальный сепаратор
str.c_str()[5] = '0';
return str;
}
if (exp > -0.0001 && exp < 0)//отрицательное число
{
exp -= 0.0001;
String str = exp;
// str.c_str()[2] = ',';//принудительный децимальный сепаратор
str.c_str()[6] = '0';
return str;
}
return exp;//большие числа, либо ноль
}
Принудительно отменяет научный формат
+141
#include <stdio.h>
#include <dstring.h>
#include <iostream>
#include <fstream>
#include <sysmac.h>
#include <System.hpp>
class ImpFromTxt
{
AnsiString S1; //переменная для выбранного текста из файла
AnsiString buf; //буферная переменная для записи необходимых слов
public:
AnsiString Import(const char* Aftr, int Chislo=0, ...)
{ //^число слов после которых необходимо вычленить слова
// using namespace std;
size_t count=0; //Число символов в файле
char S; //для подсчета символов
const char* word_before = "Точка: "; //слово, после которого необходимо выделить слово
/*Просто считаем число символов*/
ifstream f(Aftr);
while (!f.eof())
{
f.get(S);
count++;
}
f.close();
/*Добавляем текст в переменную*/
char *S2=new char [count]; //Выделяем память по определенному числу символов
for (int i=0;i<count;i++) S2[i]=NULL; //Очищаем строку от хлама
ifstream f2(Aftr); //создаем поток для работы с файлом
int i=0; //куроср на текущий символ (как номер буквы в слове)
while (!f2.eof()) //Проходим ао файлу
{
f2.get(S2[i]); //Записываем симыол за символом
i++; //передвинули курсор для записи следующего символа
}
f2.close(); //закончили работу с файлом
S1 = S2;
// cout<<S2<<endl; //Теперь переменная char[] содержит текст из файла
delete []S2; //освобождаем память
/**************************************/
switch (Chislo) //цикл для выбора количества видов слов
{ //слова будут собираться в буферной переменной
//для возвращения в основную программу
case 2:
break;
case 1: { // TX;
while (S1.Pos(word_before))
{
char buf1[100]= " ";
int j=0;
i=(S1.Pos(word_before)) ? (S1.Pos(word_before)+strlen(word_before)) : 0;
int M = S1.Pos(word_before); //индекс первой буквы Т в первом нахождении слова Точка
int L = S1.Length(); //длинна всего текста
if (i)
while (S1[i] != '\n')
{
buf1[j]=S1[i];
j++;
i++;
}
buf1[strlen(buf1)] = '\r';
buf1[strlen(buf1)] = '\n';
buf += buf1;
//buf = buf.Insert((S1.SubString(S1.Pos("Точка:")+8,5)),(S1.Pos("Точка:")+8));
S1 = S1.SubString(S1.Pos(word_before)+strlen(buf1)-1+strlen(word_before),S1.Length()-(S1.Pos(word_before)+strlen(word_before)+strlen(buf1)-2));
//-1 и -2 в этом присваивании поставлены для компенсации добавленных лишних символов \r \n
L = S1.Length();
}
}
break;
case 3:
break;
default:
;
}
return buf;
}
};
Класс парсит текстовый файл вида
Точка: Инфа 1
Точка: Инфа 2
Точка: Инфа ...
Точка: Инфа n
доставая инфу, находящуюся после лексемы "Точка: ".
Нет, код писался не специально, чтобы потешить кого-то на этом сайте. Это из реального рабочего проекта.
+48
auto filename = std::string{};
+142
typedef enum {
INIT1=0, INIT2, INIT3, INIT4, INIT5, INIT6, INITN,
BIND1, BIND2, BIND3, BIND4, BIND5, BIND6, BINDN,
YIELD1, YIELD2, YIELD3, YIELD4, YIELD5, YIELD6, YIELDN,
COMPARE, CHECK, FILTER, CFILTER, PFILTER, CHOOSE, NOOP, CONTINUE,
GET_ENODE,
GET_CGR1, GET_CGR2, GET_CGR3, GET_CGR4, GET_CGR5, GET_CGR6, GET_CGRN,
IS_CGR
} opcode;
...
...
...
switch (m_pc->m_opcode) {
case INIT1:
m_app = m_registers[0];
if (m_app->get_num_args() != 1)
goto backtrack;
m_registers[1] = m_app->get_arg(0);
m_pc = m_pc->m_next;
goto main_loop;
case INIT2:
m_app = m_registers[0];
if (m_app->get_num_args() != 2)
goto backtrack;
m_registers[1] = m_app->get_arg(0);
m_registers[2] = m_app->get_arg(1);
m_pc = m_pc->m_next;
goto main_loop;
case INIT3:
m_app = m_registers[0];
if (m_app->get_num_args() != 3)
goto backtrack;
m_registers[1] = m_app->get_arg(0);
m_registers[2] = m_app->get_arg(1);
m_registers[3] = m_app->get_arg(2);
m_pc = m_pc->m_next;
goto main_loop;
case INIT4:
m_app = m_registers[0];
if (m_app->get_num_args() != 4)
goto backtrack;
m_registers[1] = m_app->get_arg(0);
m_registers[2] = m_app->get_arg(1);
m_registers[3] = m_app->get_arg(2);
m_registers[4] = m_app->get_arg(3);
m_pc = m_pc->m_next;
goto main_loop;
case INIT5:
m_app = m_registers[0];
if (m_app->get_num_args() != 5)
goto backtrack;
m_registers[1] = m_app->get_arg(0);
m_registers[2] = m_app->get_arg(1);
m_registers[3] = m_app->get_arg(2);
m_registers[4] = m_app->get_arg(3);
m_registers[5] = m_app->get_arg(4);
m_pc = m_pc->m_next;
goto main_loop;
case INIT6:
m_app = m_registers[0];
if (m_app->get_num_args() != 6)
goto backtrack;
m_registers[1] = m_app->get_arg(0);
m_registers[2] = m_app->get_arg(1);
m_registers[3] = m_app->get_arg(2);
m_registers[4] = m_app->get_arg(3);
m_registers[5] = m_app->get_arg(4);
m_registers[6] = m_app->get_arg(5);
m_pc = m_pc->m_next;
goto main_loop;
case INITN:
m_app = m_registers[0];
m_num_args = m_app->get_num_args();
if (m_num_args != static_cast<const initn *>(m_pc)->m_num_args)
goto backtrack;
for (unsigned i = 0; i < m_num_args; i++)
m_registers[i+1] = m_app->get_arg(i);
m_pc = m_pc->m_next;
goto main_loop;
Из изходников STM-солвера Z3
https://github.com/Z3Prover/z3/blob/master/src/smt/mam.cpp#L2298
Почему нельзя было оставить только вариант INITN? Цикл отбирает так много ресурсов?
+139
//Башня хаханойская
#include <iostream>
#include<ctime>
#include<math.h>
using namespace std;
int count=0;
void hanoi_towers(int quantity, int from, int to, int buf_peg)
{
int mass[10];
if (quantity != 0)
{
hanoi_towers(quantity-1, from, buf_peg, to);
for (int i = 0; i < quantity; i++) {
mass[i]=1+rand()%quantity;
cout <<" ["<<i<<"]="<<mass[i]<<endl;}
cout <<"S kol'ca # "<< from << " na kol'co # " << to << endl;
hanoi_towers(quantity-1, buf_peg, to, from);
count++;
}
}
int main()
{
int mas[10];
int start_peg = 1, destination_peg=3, buffer_peg=2, plate_quantity,p;
cout << "Koli4estvo discov:" << endl;
cin >> plate_quantity;
for (int i = 0; i < plate_quantity; i++) {
mas[i]=i;
cout <<"1 massiv=["<<i<<"]="<<mas[i]<<endl;}
hanoi_towers(plate_quantity, start_peg, destination_peg, buffer_peg);
cout<<"Kol. iteracui = "<<count<<endl;
p=pow(2.0,plate_quantity)-1 ;
cout<<"Po formule ="<<p<<endl;
for (int i = 0; i < plate_quantity; i++) {
cout <<"3 massiv=["<<i<<"]="<<mas[i]<<endl;
}
getchar();
getchar();
}
//Башня хаханойская