-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
[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 30 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](https://github.com/KylerSmith) | ||||||
* @author [lazy-dude](https://github.com/lazy-dude) | ||||||
*/ | ||||||
|
||||||
#include <assert.h> /// for assert | ||||||
#include <stdbool.h> /// for bool | ||||||
#include <stdint.h> /// for uintmax_t | ||||||
#include <stdio.h> /// for IO operations | ||||||
|
||||||
/** | ||||||
* Modified 07/12/2017, Kyler Smith | ||||||
* | ||||||
* @brief checks whether the number is binary | ||||||
* @param num to be checked if it has binary representation | ||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
* @returns true if the number IS binary | ||||||
* @returns false if the number is NOT binary | ||||||
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 finds the length of an `uintmax_t` number | ||||||
* @param num whose length to be computed | ||||||
* @return the length of the number | ||||||
*/ | ||||||
uint16_t num_len(uintmax_t num) | ||||||
{ | ||||||
uint16_t len = 0; | ||||||
for (len = 0; num > 0; len++) { | ||||||
num /= 10; | ||||||
} | ||||||
return len; | ||||||
} | ||||||
|
||||||
/** | ||||||
* @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); | ||||||
uint8_t remainder; | ||||||
uintmax_t decimal_number = 0; | ||||||
uint32_t temp = 1; | ||||||
|
||||||
uint16_t length = num_len(UINTMAX_MAX) - 1; | ||||||
|
||||||
assert(num_len(number) <= length); | ||||||
assert(is_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. Wrong indentation. Please fix it. 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. Let's see if it works. |
||||||
|
||||||
// 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
|
||||||
|
||||||
printf("All tests have passed!\n"); | ||||||
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 | ||||||
return 0; | ||||||
} |
Uh oh!
There was an error while loading. Please reload this page.