-
-
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 6 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,113 @@ | ||||||||||||||||||||
/** | ||||||||||||||||||||
* Modified 07/12/2017, Kyler Smith | ||||||||||||||||||||
* | ||||||||||||||||||||
/** | ||||||||||||||||||||
* @file binary_to_decimal.c | ||||||||||||||||||||
* @brief Converts a binary number to a decimal one. | ||||||||||||||||||||
Panquesito7 marked this conversation as resolved.
Show resolved
Hide resolved
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
* @details | ||||||||||||||||||||
* A binary number is input , it is check to be binary | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
* then number is converted to a decimal number. | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
* Some tests are added too. | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
* Modified 07/12/2017 | ||||||||||||||||||||
* Modified 2021 | ||||||||||||||||||||
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> | ||||||||||||||||||||
#include <stdbool.h> | ||||||||||||||||||||
#include <stdint.h> | ||||||||||||||||||||
#include <stdio.h> | ||||||||||||||||||||
#include <stdlib.h> | ||||||||||||||||||||
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 one-line description of what the library/header is for (see the example below). #include <stdio.h> /// for IO operations
#include <assert.h> /// for assert |
||||||||||||||||||||
|
||||||||||||||||||||
// function prototypes | ||||||||||||||||||||
bool is_binary(intmax_t num); | ||||||||||||||||||||
int num_len(intmax_t num); | ||||||||||||||||||||
intmax_t binary_decimal(intmax_t num); | ||||||||||||||||||||
void test(void); | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
|
||||||||||||||||||||
int main() | ||||||||||||||||||||
/** | ||||||||||||||||||||
* @brief main function | ||||||||||||||||||||
* @param void | ||||||||||||||||||||
* @returns 0 on exit | ||||||||||||||||||||
*/ | ||||||||||||||||||||
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
|
||||||||||||||||||||
int main(void) | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
{ | ||||||||||||||||||||
int remainder, number = 0, decimal_number = 0, temp = 1; | ||||||||||||||||||||
printf("\n Enter any binary number= "); | ||||||||||||||||||||
scanf("%d", &number); | ||||||||||||||||||||
test(); | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
printf("All tests passed.\n"); | ||||||||||||||||||||
return 0; | ||||||||||||||||||||
} | ||||||||||||||||||||
|
||||||||||||||||||||
/** | ||||||||||||||||||||
* @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(intmax_t num) | ||||||||||||||||||||
{ | ||||||||||||||||||||
int remainder = 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. Consider using 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. uintmax_t has the biggest length for machine running the code. I would prefer it over uint64_t which has a fixed size. |
||||||||||||||||||||
|
||||||||||||||||||||
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. |
||||||||||||||||||||
} | ||||||||||||||||||||
|
||||||||||||||||||||
/** | ||||||||||||||||||||
* @brief num_len finds length of an intmax_t num | ||||||||||||||||||||
* @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(intmax_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
|
||||||||||||||||||||
*/ | ||||||||||||||||||||
intmax_t binary_decimal(intmax_t number) | ||||||||||||||||||||
{ | ||||||||||||||||||||
intmax_t remainder, decimal_number = 0, temp = 1; | ||||||||||||||||||||
|
||||||||||||||||||||
int length = num_len(INTMAX_MAX) - 1; | ||||||||||||||||||||
|
||||||||||||||||||||
assert(number>=0); | ||||||||||||||||||||
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 some tests using assert | ||||||||||||||||||||
* @param void | ||||||||||||||||||||
* @return void | ||||||||||||||||||||
*/ | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
void test(void) | ||||||||||||||||||||
lazy-dude marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
{ | ||||||||||||||||||||
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
|
Uh oh!
There was an error while loading. Please reload this page.