-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
[feat/fix/docs]: Improved on conversion code , length variable , asserts added #840
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 17 commits
67eeefe
0008c67
7185941
6e5e561
905b80c
e771021
157f6d1
bbb6024
82e1f41
1e4c396
166dc0b
57bcffa
129f4b0
8526600
61bed00
4d91c9d
8defb93
6397733
45e4eff
6553640
09df4a4
63cf38c
e078df2
0b199fb
f66cd1b
fd82d9e
ebf83bb
63a9a16
a2ca660
81ab47c
0f96de5
254cabf
8c1b548
8632490
8fa92c5
4ab5a25
da73878
71c17ee
c3433f7
53e719b
af4b346
aa8e55b
0d61a4a
82fb3ae
9612325
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -1,24 +1,103 @@ | ||||||
/** | ||||||
* @file | ||||||
* @brief Converts a binary number to a decimal one. | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @details | ||||||
* A binary number is an input, it is checked to be binary | ||||||
* then, the number is converted to a decimal number. | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @author Kyler Smith | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @author [lazy-dude] (https://github.com/lazy-dude) | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
*/ | ||||||
|
||||||
// includes | ||||||
#include <assert.h> /// for assert | ||||||
#include <stdbool.h> /// for bool | ||||||
#include <stdint.h> /// for uintmax_t | ||||||
#include <stdio.h> /// for IO operations | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
/** | ||||||
* Modified 07/12/2017, Kyler Smith | ||||||
* | ||||||
* @brief is_binary checks whether num is a binary one | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @param num to be checked if it has binary representation | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @return boolean true if num is binary false if not | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
*/ | ||||||
bool is_binary(uintmax_t num) | ||||||
{ | ||||||
unsigned remainder = 0; | ||||||
|
||||||
#include <stdio.h> | ||||||
while (num > 0) { | ||||||
remainder = num % 10; | ||||||
if (remainder == 0 || remainder == 1) { | ||||||
num /= 10; | ||||||
continue; | ||||||
} else | ||||||
return false; | ||||||
} | ||||||
return true; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please add a bit of documentation here of what this code does. |
||||||
} | ||||||
|
||||||
int main() | ||||||
/** | ||||||
* @brief num_len finds length of an uintmax_t num | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @param num whose length to be computed | ||||||
* @return i int length of num | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
*/ | ||||||
int num_len(uintmax_t num) | ||||||
{ | ||||||
int i; | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
for (i = 0; num > 0; i++) { | ||||||
num /= 10; | ||||||
} | ||||||
return i; | ||||||
} | ||||||
|
||||||
/** | ||||||
* @brief binary_decimal function does the actual job of conversion | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @param number binary to be converted | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @return decimal_number decimal representation of binary number | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
*/ | ||||||
uintmax_t binary_decimal(uintmax_t number) | ||||||
{ | ||||||
int remainder, number = 0, decimal_number = 0, temp = 1; | ||||||
printf("\n Enter any binary number= "); | ||||||
scanf("%d", &number); | ||||||
unsigned remainder; | ||||||
uintmax_t decimal_number = 0, temp = 1; | ||||||
|
||||||
int length = num_len(UINTMAX_MAX) - 1; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider using |
||||||
|
||||||
assert(num_len(number) <= length); | ||||||
assert(is_binary(number)); | ||||||
|
||||||
// Iterate over the number until the end. | ||||||
while (number > 0) | ||||||
{ | ||||||
while (number > 0) { | ||||||
remainder = number % 10; | ||||||
number = number / 10; | ||||||
decimal_number += remainder * temp; | ||||||
temp = temp * 2; // used as power of 2 | ||||||
temp = temp * 2; // used as power of 2 | ||||||
} | ||||||
|
||||||
printf("%d\n", decimal_number); | ||||||
return decimal_number; | ||||||
} | ||||||
|
||||||
/** | ||||||
* @brief Self-test implementations | ||||||
* @returns void | ||||||
*/ | ||||||
static void test() | ||||||
{ | ||||||
assert(binary_decimal(0)==0); | ||||||
assert(binary_decimal(1)==1); | ||||||
assert(binary_decimal(1110001)==113); | ||||||
assert(binary_decimal(11111111)==255); | ||||||
assert(binary_decimal(10000000000)==1024); | ||||||
assert(binary_decimal(1001110100000100)==40196); | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
} | ||||||
|
||||||
Panquesito7 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
/** | ||||||
* @brief main function | ||||||
* @param void | ||||||
* @returns 0 on exit | ||||||
*/ | ||||||
int main() | ||||||
{ | ||||||
test(); // run self-test implementations | ||||||
printf("All tests passed.\n"); | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
return 0; | ||||||
} | ||||||
|
||||||
|
||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
Uh oh!
There was an error while loading. Please reload this page.