Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите переделать код С++ в С! Помогите переделать код С++ в С! 
:(
    Опции темы
jdk
Дата 25.6.2015, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
rudolfninja
Дата 25.6.2015, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



А этот код сами писали?
PM MAIL Skype   Вверх
jdk
Дата 25.6.2015, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.6.2015

Репутация: нет
Всего: нет



Нет.
PM MAIL   Вверх
rudolfninja
Дата 25.6.2015, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Вам надо полностью избавиться от класса, заменив его на глобальные переменные и функции работы с ними или всего лишь избваиться от работы с файлами средствами С++?
PM MAIL Skype   Вверх
jdk
Дата 25.6.2015, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.6.2015

Репутация: нет
Всего: нет



  Создать программу, генерирующую систему логических функций с заданными параметрами n - число входных переменных, m - число функций.
В соответствии с заданным чмслом генерируется (2 ** n) входных комбинаций и каждой входной комбинации по индивидуальному заданию присваиваится одна из (2 ** m) выходных комбинаций (начиная с комбинации все нули) в циклической последовательности.
Записать сгенерированную систему логических функций в виде файла.
При создании функции предусмотреть возможность задания параметров m, n в качестве аргументов командной строки.
Генерация выходных комбинаций в порядке возрастания с шагом 1.

  Данное задание нужно написать на языке С.
PM MAIL   Вверх
jdk
Дата 25.6.2015, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.6.2015

Репутация: нет
Всего: нет



Помогите пожалуйста
PM MAIL   Вверх
rudolfninja
Дата 26.6.2015, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Переделываем класс в структуру:

Код

struct Logfunc
{
        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 init(int n, int m, int step, Logfunc* plogfuncobj); //init longfunc object with needed values
void generate(Logfunc* plogfuncobj); // function generation
bool* tobool(unsigned int p, int n, Logfunc* plogfuncobj); // transfer of an integer to an array of booleans
bool* calc(bool* params, Logfunc* plogfuncobj); // Evaluation of the function
void write(char* filename, Logfunc* plogfuncobj); // write dates to file


Дальше пишем функцию main:

Код

int main()
{
    int step = 1;
    int n, m;
    printf("The number of input variables: ");
    scanf("%d", &n);
    if(n<1 || n>28){
        printf("Input error\n");
        system("pause");
        return 1;
    }
    printf("Number of functions m : ");
    scanf("%d", &m);
        if(m<1 || m>32){
        printf("Input error\n");
        system("pause");
        return 1;
    }    
    
    Logfunc f;
    init(n, m, step, &f); //create function
    write("output.txt", &f); 
    printf("Result is saved to file - output.txt\n");
    system("pause"); //delay before programm closing
    return 0;    


Осталось только переписать тела всех функции после функции main. Это попробуйте сделать сами.
P.S. вероятнее всего, адрес объекта Logfunc не нужен во всех функциях. Я не смотрел что делает каждая функция, поэтому точно сказать не могу. Но если функцию нужна только для чтения значений данной струткуры, то лучше передавать объект по значению.

PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1169 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.