![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| jdk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.6.2015 Репутация: нет Всего: нет |
#include <iostream>
#include <fstream> #include <stdlib.h> #include <cstring> using namespace std; class Logfunc{ private: int _n; // the number of input variables int _m; // the number of functions int _step; // step unsigned int _c; // the number of rows in the table unsigned int* func; // generated function void generate(); // function generation bool* tobool(unsigned int p, int n); // transfer of an integer to an array of booleans public: Logfunc(int n=3, int m=2, int step=2); // the constructor ~Logfunc(); // the destructor bool* calc(bool* params); // Evaluation of the function void write(char* filename); // write dates to file }; // class constructor Logfunc::Logfunc(int n, int m, int step): _n(n), _m(m), _step(step){ generate(); // generate function } // destructor Logfunc::~Logfunc(){ free (func); // make free memory from the table } // function generator void Logfunc::generate(){ _c=1 << _n; // rows quantity of table(2**n) func=(unsigned int*)malloc(_c * sizeof(unsigned int)); // allocates memory for the table int max=1<<_m; // maximum decimal value of the output combinations(2**m) int r=(_step>=0)?0:max-1; //Function result for the first row in the table for (unsigned int i=0;i<_c;i++){ func[i]=r; //write value in the table r+=_step; //increase value for the next step if(r>=max) // cycle for the succession increasing r=0; if(r<0) // cycle for the succession decreasing r=max-1; } } //transfer from an integer to an array of booleans bool* Logfunc::tobool(unsigned int p, int n){ bool* r=(bool*)malloc(n * sizeof(bool)); // allocates memory for an answer memset(r, 0, n * sizeof(bool)); // fills an array by 0 int i=n; while (p>0 && i>0){ bool b=p%2; // determine the value of the last bit p/=2; // seperate last bit r[--i]=b; // write bit value to an array of result } return r; } // calculation of the values of function bool* Logfunc::calc(bool* params){ unsigned int ind=0; for(int i=0; i<_n; i++) // define line number in the table ind=(ind<<1)+params[i]; unsigned int r=func[ind]; // define function value return tobool(r, _m); } // write result to file void Logfunc::write(char* filename){ ofstream fout(filename); // create file for(unsigned int i=0; i<_c; i++){ // We go through all the rows bool* p=tobool(i,_n); // We get a list of Boolean values bool* r=calc(p); // We calculate the value of the function for(int j=0;j<_n;j++) fout<<p[j]?1:0; // displays a list of variables fout<<" "; // separation gap for(int j=0; j<_m; j++) fout<<r[j]?1:0; // displays a list of variables fout<<endl; //displays end of row free(p); //free memory free®; //free memory } fout.close(); // close file } int main() { int step = 1; int n, m; cout<<"The number of input variables: "; cin>>n; if(n<1 || n>28){ cout<<"Input error"<<endl; system("pause"); return 1; } cout<<"Number of functions m : "; cin>>m; if(m<1 || m>32){ cout<<"Input error"<<endl; system("pause"); return 1; } Logfunc f(n, m, step); //create function f.write("output.txt"); cout<<"Result is saved to file - output.txt"<<endl; system("pause"); //delay before programm closing return 0; } Присоединённый файл ( Кол-во скачиваний: 1 )
JD.cpp 3,26 Kb |
|||
|
||||
| rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
А этот код сами писали?
|
|||
|
||||
| jdk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.6.2015 Репутация: нет Всего: нет |
Нет.
|
|||
|
||||
| rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Вам надо полностью избавиться от класса, заменив его на глобальные переменные и функции работы с ними или всего лишь избваиться от работы с файлами средствами С++?
|
|||
|
||||
| jdk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.6.2015 Репутация: нет Всего: нет |
Создать программу, генерирующую систему логических функций с заданными параметрами n - число входных переменных, m - число функций.
В соответствии с заданным чмслом генерируется (2 ** n) входных комбинаций и каждой входной комбинации по индивидуальному заданию присваиваится одна из (2 ** m) выходных комбинаций (начиная с комбинации все нули) в циклической последовательности. Записать сгенерированную систему логических функций в виде файла. При создании функции предусмотреть возможность задания параметров m, n в качестве аргументов командной строки. Генерация выходных комбинаций в порядке возрастания с шагом 1. Данное задание нужно написать на языке С. |
|||
|
||||
| jdk |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.6.2015 Репутация: нет Всего: нет |
Помогите пожалуйста
|
|||
|
||||
| rudolfninja |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: 1 Всего: 6 |
Переделываем класс в структуру:
Теперь надо сделать функции, для работы с этой структурой. Сначала объявляем прототипы этих функций
Дальше пишем функцию main:
Осталось только переписать тела всех функции после функции main. Это попробуйте сделать сами. P.S. вероятнее всего, адрес объекта Logfunc не нужен во всех функциях. Я не смотрел что делает каждая функция, поэтому точно сказать не могу. Но если функцию нужна только для чтения значений данной струткуры, то лучше передавать объект по значению. |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |