PDA

Просмотр полной версии : Помогите запустить код на си++


salkov
13.02.2016, 12:01
У кого есть VS и мощный комп отпишите плиз в лс, я вам код скину запустите его, а мне только нужен потом файл с результатами, на своем компе просто другая прога считает уже.
#include <vector>
#include <fstream>
using namespace std;

bool g1(bool a, bool b, bool c, bool d)
{
return(a^b ^ (c&(d^1)) ^ 1);
}
void main()
{
std::vector<int> vector;
//ofstream f("test3.txt");
//ofstream f1("test4.txt");
ofstream f("analize17.txt");
const int len = 17;
bool ent[len + 2];//входной регистр
ent[len] = 0;
ent[len + 1] = 0;
int kol[131072];//выходы в 10ой форме для сортировки
bool ex[len];//выходной регистр
int count = 0;//счетчик различных выходов
//длина регистров
//первое преобразование из ent в ex
for (int i = 0;i < pow(2,len);i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((i >> (len - 1 - k) & 1));
//f << ent[k];
}
//f<< "\n";
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, len - 1 - k);
//f<<ex[k];

}
kol[i] = s;
//f << kol[i];
//f << endl;
}
//сортировка(стоит передалать для общего случая)
int temp;
for (int i = 0; i < pow(2, len); i++)
{
temp = kol[i];
for (int j = i + 1; j < pow(2,len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}
//f << kol[i];
//f << endl;
}
//счетчик в отсортированном массиве

for (int i = 0;i < pow(2,len);i++)
{

if (kol[i] > 0)
{
f << kol[i] << endl;
vector.push_back(kol[i]);
count = count + 1;
}
}

f << "stage1:" << count;
f << endl;
//f.close();
//втрое-четвертое преобразование
for (int k = 0;k < 3;k++)
{
int count2 = 0;

int size = vector.size();

for (int i = 0;i < size;i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((vector[i] >> (6 - k) & 1));
//f << ent[k];
}
//f<< "\n";
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, 6 - k);
//f<<ex[k];

}
kol[i] = s;
//f << kol[i];
//f << endl;
}
//сортировка(стоит передалать для общего случая)
for (int i = 0; i < size; i++)
{
temp = kol[i];
for (int j = i + 1; j < pow(2,len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}

}
//счетчик в отсортированном массиве
vector.erase(vector.begin(), vector.end());
for (int i = 0;i < pow(2,len);i++)
{

if (kol[i] > 0)
{
f << kol[i];
f << endl;
vector.push_back(kol[i]);
count2 = count2 + 1;
}
}

f <<"stage"<<k+2<<":"<< count2<<endl;
}
f.close();
//f1.close();
}

zet-999
13.02.2016, 12:43
Это что такое?

[BlinD]
13.02.2016, 12:43
Не захотел я ждать десять минут, пока комп это всё прогонит, добавил для двух циклов распараллеливание, и в общем в конце прога крашится.

DataTabl
13.02.2016, 12:44
это тебе задали? просто есть библиотеки сортировок(типо algoritm.h) , где это все в одну строку идет
вечером смогу запустить ток если че

[BlinD]
13.02.2016, 12:45
А не, мой косяк, всё ок

[BlinD]
13.02.2016, 12:47
Лови файл https://yadi.sk/i/kSd6VhP1omBRx

[BlinD]
13.02.2016, 12:52
Ну и на будущее, если стоит 15 студия, ну или на крайняк 13 (ниже точно не работает), даже если сильно не заморачиваться, то в самых очевидных моментах можно вставить прагмы, чтобы распараллелить, не мало времени экономит =)

#include "stdafx.h"
#include <vector>
#include <fstream>
using namespace std;

bool g1(bool a, bool b, bool c, bool d)
{
return(a^b ^ (c&(d ^ 1)) ^ 1);
}
void main()
{
std::vector<int> vector;

ofstream f("analize17.txt");
const int len = 17;
bool ent[len + 2];//входной регистр
ent[len] = 0;
ent[len + 1] = 0;
int kol[131072];//выходы в 10ой форме для сортировки
bool ex[len];//выходной регистр
int count = 0;//счетчик различных выходов
//длина регистров
//первое преобразование из ent в ex
for (int i = 0;i < pow(2, len);i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((i >> (len - 1 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, len - 1 - k);
}
kol[i] = s;

}
//сортировка(стоит передалать для общего случая)
int temp;
for (int i = 0; i < pow(2, len); i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}
}
//счетчик в отсортированном массиве

for (int i = 0;i < pow(2, len);i++)
{

if (kol[i] > 0)
{
f << kol[i] << endl;
vector.push_back(kol[i]);
count = count + 1;
}
}

f << "stage1:" << count;
f << endl;
//втрое-четвертое преобразование
for (int k = 0;k < 3;k++)
{
int count2 = 0;

int size = vector.size();

for (int i = 0;i < size;i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((vector[i] >> (6 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, 6 - k);

}
kol[i] = s;
}
//сортировка(стоит передалать для общего случая)
for (int i = 0; i < size; i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}

}
//счетчик в отсортированном массиве
vector.erase(vector.begin(), vector.end());
for (int i = 0;i < pow(2, len);i++)
{

if (kol[i] > 0)
{
f << kol[i];
f << endl;
vector.push_back(kol[i]);
count2 = count2 + 1;
}
}

f << "stage" << k + 2 << ":" << count2 << endl;
}
f.close();
}

Предварительно нужно проект настроить.

salkov
13.02.2016, 13:20
;1208458']Ну и на будущее, если стоит 15 студия, ну или на крайняк 13 (ниже точно не работает), даже если сильно не заморачиваться, то в самых очевидных моментах можно вставить прагмы, чтобы распараллелить, не мало времени экономит =)

#include "stdafx.h"
#include <vector>
#include <fstream>
using namespace std;

bool g1(bool a, bool b, bool c, bool d)
{
return(a^b ^ (c&(d ^ 1)) ^ 1);
}
void main()
{
std::vector<int> vector;

ofstream f("analize17.txt");
const int len = 17;
bool ent[len + 2];//входной регистр
ent[len] = 0;
ent[len + 1] = 0;
int kol[131072];//выходы в 10ой форме для сортировки
bool ex[len];//выходной регистр
int count = 0;//счетчик различных выходов
//длина регистров
//первое преобразование из ent в ex
for (int i = 0;i < pow(2, len);i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((i >> (len - 1 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, len - 1 - k);
}
kol[i] = s;

}
//сортировка(стоит передалать для общего случая)
int temp;
for (int i = 0; i < pow(2, len); i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}
}
//счетчик в отсортированном массиве

for (int i = 0;i < pow(2, len);i++)
{

if (kol[i] > 0)
{
f << kol[i] << endl;
vector.push_back(kol[i]);
count = count + 1;
}
}

f << "stage1:" << count;
f << endl;
//втрое-четвертое преобразование
for (int k = 0;k < 3;k++)
{
int count2 = 0;

int size = vector.size();

for (int i = 0;i < size;i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((vector[i] >> (6 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, 6 - k);

}
kol[i] = s;
}
//сортировка(стоит передалать для общего случая)
for (int i = 0; i < size; i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}

}
//счетчик в отсортированном массиве
vector.erase(vector.begin(), vector.end());
for (int i = 0;i < pow(2, len);i++)
{

if (kol[i] > 0)
{
f << kol[i];
f << endl;
vector.push_back(kol[i]);
count2 = count2 + 1;
}
}

f << "stage" << k + 2 << ":" << count2 << endl;
}
f.close();
}

Предварительно нужно проект настроить.

Спасибо большое, я просто плохое программирую. Впервые пришлось только вот в курсовой писать для анализа преобразований. В общем у меня регистры длины 53, я пытаюсь для мылах регистров набрать статистику и потом теоремку доказать что типо изоморфны автоматы получаться , и тогда будет попроще))

salkov
13.02.2016, 13:21
это тебе задали? просто есть библиотеки сортировок(типо algoritm.h) , где это все в одну строку идет
вечером смогу запустить ток если че
Это в курсовой работе, надо узлы шифра анализировать крч.

salkov
13.02.2016, 13:22
;1208458']Ну и на будущее, если стоит 15 студия, ну или на крайняк 13 (ниже точно не работает), даже если сильно не заморачиваться, то в самых очевидных моментах можно вставить прагмы, чтобы распараллелить, не мало времени экономит =)

#include "stdafx.h"
#include <vector>
#include <fstream>
using namespace std;

bool g1(bool a, bool b, bool c, bool d)
{
return(a^b ^ (c&(d ^ 1)) ^ 1);
}
void main()
{
std::vector<int> vector;

ofstream f("analize17.txt");
const int len = 17;
bool ent[len + 2];//входной регистр
ent[len] = 0;
ent[len + 1] = 0;
int kol[131072];//выходы в 10ой форме для сортировки
bool ex[len];//выходной регистр
int count = 0;//счетчик различных выходов
//длина регистров
//первое преобразование из ent в ex
for (int i = 0;i < pow(2, len);i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((i >> (len - 1 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, len - 1 - k);
}
kol[i] = s;

}
//сортировка(стоит передалать для общего случая)
int temp;
for (int i = 0; i < pow(2, len); i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}
}
//счетчик в отсортированном массиве

for (int i = 0;i < pow(2, len);i++)
{

if (kol[i] > 0)
{
f << kol[i] << endl;
vector.push_back(kol[i]);
count = count + 1;
}
}

f << "stage1:" << count;
f << endl;
//втрое-четвертое преобразование
for (int k = 0;k < 3;k++)
{
int count2 = 0;

int size = vector.size();

for (int i = 0;i < size;i++)
{
int s = 0;
for (int k = 0;k < len;k++)
{
ent[k] = (bool)((vector[i] >> (6 - k) & 1));
}
for (int j = 0;j < len;j++)
{
ex[((4 * j) % len)] = g1(ent[j], ent[j + 3], ent[j + 1], ent[j + 2]);

}
for (int k = 0;k < len;k++)
{
s = s + ex[k] * pow(2, 6 - k);

}
kol[i] = s;
}
//сортировка(стоит передалать для общего случая)
for (int i = 0; i < size; i++)
{
temp = kol[i];
#pragma loop(hint_parallel(8))
#pragma loop(ivdep)
for (int j = i + 1; j < pow(2, len); j++)
{
if (temp == kol[j])
kol[j] = -1;
}

}
//счетчик в отсортированном массиве
vector.erase(vector.begin(), vector.end());
for (int i = 0;i < pow(2, len);i++)
{

if (kol[i] > 0)
{
f << kol[i];
f << endl;
vector.push_back(kol[i]);
count2 = count2 + 1;
}
}

f << "stage" << k + 2 << ":" << count2 << endl;
}
f.close();
}

Предварительно нужно проект настроить.

если скинешь пару ссылок почитать, то буду благодарен. И если не сложно можешь запустить для 23,29,31, там только len исправить и размер массива на 2^23 и т.д.

salkov
13.02.2016, 13:26
Единство результат смущает, потому что если раньше все время было снижение в 4раза примерно, а ша из 2в17 сразу в 9, тогда получается, что много эквивалентных ключей.

[BlinD]
13.02.2016, 14:34
если скинешь пару ссылок почитать, то буду благодарен. И если не сложно можешь запустить для 23,29,31, там только len исправить и размер массива на 2^23 и т.д.

Сомневаюсь, что найду что-нибудь, в англоязычных источникам может есть что-то, вроде как новая фишка

[BlinD]
13.02.2016, 15:06
23 то я еще сделаю. Всего-то в 64 раза дольше. Если для 17 код исполнялся 25 секунд, то тут уже чуть больше 25 минут. А вот для 29 по моим скромным подсчетам это будет уже 28 часов, а для 31 так вообще больше 100...

[BlinD]
13.02.2016, 15:50
А нет, мои расчеты меня подвели, и для 23 будет больше суток код исполняться -_-