better comments and legibility
* add better comments to the code structure * on decrement_number_string(), renamed arguments for better legibility Signed-off-by: Daniel Santos <dacs.git@brilhante.top>
This commit is contained in:
parent
471cd39b04
commit
ad3f14edbd
91
numericx.c
91
numericx.c
|
@ -6,10 +6,21 @@
|
||||||
|
|
||||||
#define PROG_NAME "numericx"
|
#define PROG_NAME "numericx"
|
||||||
|
|
||||||
|
|
||||||
|
/* ||COMPILATION FLAGS|| */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Show debug message of step by step
|
||||||
|
* incrementation of the number
|
||||||
|
*/
|
||||||
#ifndef DEBUG
|
#ifndef DEBUG
|
||||||
#define DEBUG false
|
#define DEBUG false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configuration of the corresponding numeral system
|
||||||
|
* to have the units place of the end (on the right)
|
||||||
|
*/
|
||||||
#ifndef TO_UNITS_ON_THE_END
|
#ifndef TO_UNITS_ON_THE_END
|
||||||
#define TO_UNITS_ON_THE_END false
|
#define TO_UNITS_ON_THE_END false
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,6 +29,11 @@
|
||||||
#define FROM_UNITS_ON_THE_END false
|
#define FROM_UNITS_ON_THE_END false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Configuration of the corresponding numeral system
|
||||||
|
* to start counting on the second number, being the
|
||||||
|
* first number void
|
||||||
|
*/
|
||||||
#ifndef TO_FIRST_NUMBER_VOID
|
#ifndef TO_FIRST_NUMBER_VOID
|
||||||
#define TO_FIRST_NUMBER_VOID false
|
#define TO_FIRST_NUMBER_VOID false
|
||||||
#endif
|
#endif
|
||||||
|
@ -26,6 +42,11 @@
|
||||||
#define FROM_FIRST_NUMBER_VOID false
|
#define FROM_FIRST_NUMBER_VOID false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Configuration of the corresponding numeral system
|
||||||
|
* to have the first number as an infinite number,
|
||||||
|
* for example, if the first number is 'A', then
|
||||||
|
* A == AA == AAA == AAAA ...
|
||||||
|
*/
|
||||||
#ifndef TO_INFINITE_BASE
|
#ifndef TO_INFINITE_BASE
|
||||||
#define TO_INFINITE_BASE false
|
#define TO_INFINITE_BASE false
|
||||||
#endif
|
#endif
|
||||||
|
@ -34,6 +55,9 @@
|
||||||
#define FROM_INFINITE_BASE false
|
#define FROM_INFINITE_BASE false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* ||DATA STRUCTURE|| */
|
||||||
|
|
||||||
typedef struct NumeralPtr
|
typedef struct NumeralPtr
|
||||||
{
|
{
|
||||||
char const* symbol;
|
char const* symbol;
|
||||||
|
@ -41,10 +65,17 @@ typedef struct NumeralPtr
|
||||||
struct NumeralPtr *previous;
|
struct NumeralPtr *previous;
|
||||||
} numeral_ptr;
|
} numeral_ptr;
|
||||||
|
|
||||||
|
|
||||||
|
/* ||FUNCTIONS|| */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Creates new digit for numeral_ptr
|
* Creates new digit for numeral_ptr.
|
||||||
* Return pointer to new numeral_ptr
|
* It needs the last_numeral ('last_numeral') into which will
|
||||||
* Returns NULL in case of no memory
|
* add the new numeral, and also need to know the symbol of the
|
||||||
|
* new numeral ('to_first').
|
||||||
|
*
|
||||||
|
* Return pointer to new numeral_ptr.
|
||||||
|
* Returns NULL in case of no memory.
|
||||||
*/
|
*/
|
||||||
numeral_ptr*
|
numeral_ptr*
|
||||||
new_digit(numeral_ptr* last_numeral, char const* to_first)
|
new_digit(numeral_ptr* last_numeral, char const* to_first)
|
||||||
|
@ -63,6 +94,15 @@ new_digit(numeral_ptr* last_numeral, char const* to_first)
|
||||||
return starting_point;
|
return starting_point;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Creates a number of the form numeral_ptr that
|
||||||
|
* begins with 'case' number of cases, and all cases
|
||||||
|
* are set to 'to_first' char.
|
||||||
|
*
|
||||||
|
* Returns pointer to numeral_ptr.
|
||||||
|
* Returns NULL in case of no memory (because depends
|
||||||
|
* on new_digit() ).
|
||||||
|
*/
|
||||||
numeral_ptr*
|
numeral_ptr*
|
||||||
numeral_infinity(char const* to_first, size_t cases)
|
numeral_infinity(char const* to_first, size_t cases)
|
||||||
{
|
{
|
||||||
|
@ -78,6 +118,13 @@ numeral_infinity(char const* to_first, size_t cases)
|
||||||
return starting_case;
|
return starting_case;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Increments numeral_ptr 'numeral' one unit up.
|
||||||
|
* It needs 'num_first' as the first numeral of the numerical
|
||||||
|
* system. Also needs 'num_last' as the last numeral of the
|
||||||
|
* numerical system.
|
||||||
|
* If incrementing, the function adds a new digit/numeral, it
|
||||||
|
* will use the 'brand_new_digit' as its numeral/digit.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
increment(numeral_ptr* numeral, char* num_first, char* num_last, char* brand_new_digit)
|
increment(numeral_ptr* numeral, char* num_first, char* num_last, char* brand_new_digit)
|
||||||
{
|
{
|
||||||
|
@ -99,12 +146,19 @@ increment(numeral_ptr* numeral, char* num_first, char* num_last, char* brand_new
|
||||||
++(numeral->symbol);
|
++(numeral->symbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decrements a string 'number' by one unit.
|
||||||
|
* It needs to know the first numeral ('first_numeral') and also the
|
||||||
|
* last numeral ('last_numeral'). It also needs the numeral system in
|
||||||
|
* form of a string ('numeral_system') to know which is the numeral
|
||||||
|
* before the actual numeral that needs decrementation.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
decrement_number_string(char* number, char* first_number, char* last_number, char* numeral_system)
|
decrement_number_string(char* number, char* first_numeral, char* last_numeral, char* numeral_system)
|
||||||
{
|
{
|
||||||
while( *number == *first_number )
|
while( *number == *first_numeral )
|
||||||
{
|
{
|
||||||
*number = *last_number;
|
*number = *last_numeral;
|
||||||
++number;
|
++number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,6 +175,11 @@ decrement_number_string(char* number, char* first_number, char* last_number, cha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compares if a numeral_ptr ('numeral') matches the string ('number_arg').
|
||||||
|
*
|
||||||
|
* Return true if matches, false if numeral_ptr doesn't match the string.
|
||||||
|
*/
|
||||||
bool
|
bool
|
||||||
is_the_same(numeral_ptr* numeral, char* number_arg)
|
is_the_same(numeral_ptr* numeral, char* number_arg)
|
||||||
{
|
{
|
||||||
|
@ -139,6 +198,9 @@ is_the_same(numeral_ptr* numeral, char* number_arg)
|
||||||
return (*number_arg == '\0') ? true : false;
|
return (*number_arg == '\0') ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prints to standard output numeral_ptr ('numeral').
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
print_numeral(numeral_ptr* numeral)
|
print_numeral(numeral_ptr* numeral)
|
||||||
{
|
{
|
||||||
|
@ -163,6 +225,9 @@ print_numeral(numeral_ptr* numeral)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reverse a string.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
reverse_string(char* string)
|
reverse_string(char* string)
|
||||||
{
|
{
|
||||||
|
@ -177,6 +242,14 @@ reverse_string(char* string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if string 'number' belongs to the numerical
|
||||||
|
* system ('numeral_system'), which is also a string.
|
||||||
|
* Belonging mean all the symbols of 'number' are included
|
||||||
|
* in 'numeral_system'.
|
||||||
|
*
|
||||||
|
* Return true if it belongs, false otherwise.
|
||||||
|
*/
|
||||||
bool
|
bool
|
||||||
is_valid_number(char* numeral_system, char *number)
|
is_valid_number(char* numeral_system, char *number)
|
||||||
{
|
{
|
||||||
|
@ -194,6 +267,9 @@ is_valid_number(char* numeral_system, char *number)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free up numeral_ptr ('numeral').
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
free_numeral(numeral_ptr* numeral)
|
free_numeral(numeral_ptr* numeral)
|
||||||
{
|
{
|
||||||
|
@ -207,6 +283,9 @@ free_numeral(numeral_ptr* numeral)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ||MAIN FUNCTION|| */
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char* argv[])
|
main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue