C/C++: How to round up a number
#include intergerVariable = ceil (floatVariable);
To compile with math.h library you MUST include the -lm flag.
gcc -lm main.c
#include intergerVariable = ceil (floatVariable);
To compile with math.h library you MUST include the -lm flag.
gcc -lm main.c
A standard If Statement in C/C++ can become an one line statement by using the following structure
variable = (STATEMENT)?(RETURN VALUE IF TRUE):(RETURN VALUE IF FALSE)
which is the same as
if (STATEMENT){ variable = (RETURN VALUE IF TRUE); }else{ variable = (RETURN VALUE IF FALSE); }
FILE *results; int queen; if (!(results = popen("./precosat -f nqueens.cnf | tail -n +2 | head -n -1 | tr -d v | tr ' ' '\n' | grep -v '^$' | grep ^[0-9]", "r"))) { cout << "Unable to Execute Precosat" << endl << "./precosat -f nqueens.cnf | tail -n +2 | head -n -1 | tr -d v | tr ' ' '\n' | grep -v '^$' | grep ^[0-9]" << endl; exit(1); } for (i = 0; i < queens; i++) { fscanf(results,"%d",&queen); cout << "Queen #" << i+1 << " goes to [" << ((queen%queens)?(queen%queens):queens) << "]" << endl; } pclose(results);
Above, you will find an example that was used to extract data from the PrecoSAT SAT Solver in order to solve the N-Queens problem. It returns all positive variables, one per line.
You can see that after the call to popen, it creates a pointer to a file stream that can be used as a regular file to read the data from the called process.
By downloading PrecoSAT from http://fmv.jku.at/precosat/ and trying to install it on Ubuntu 11.10 32-bit (Oneiric Ocelot) by:
I got the following error at make:
g++ -O3 -m32 -static -Wall -Wextra -DNDEBUG -DNLOGPRECO -DNSTATSPRECO -c precomain.cc In file included from precomain.cc:23:0: precosat.hh:164:31: error: ‘ptrdiff_t’ has not been declared precosat.hh:270:13: error: ‘ptrdiff_t’ has not been declared make: *** [precomain.o] Error 1
which can be resolved by adding
#include <cstddef>
at the includes in the file precosat.hh