- Форум
- По малко от всичко
- Информационни технологии
- Помощ със задача с функция на C
Здравейте, имам проблем с една задача, която трябва да се направи с функция. Пробвах да я направя сам, но не можах.
Задачата е следната : Да се напише функция, която да приема като аргумент цяло число и да го принтира в двоична бройна система. Ще бъда много благодарен ако някой ми помогне![]()
Нямам работещ компилатор, за да ти напиша цял код, но ти давам идея.
const char *byte_to_binary(int x)
{
static char b[9];
b[0] = '\0';
int z;
for (z = 128; z > 0; z >>= 1)
{
strcat(b, ((x & z) == z) ? "1" : "0");
}
return b;
}
Тук работят с байт, но може лесно да се смени и за по дълго входно число. Например дума или двойна дума. Разликата ще е в размера на масива и числото, от което започва да върти цикъла.
Няма смисъл да ползваш битови операции за да намериш двоичния запис. Делиш целочислено числото на 2 и му вземаш остатъка, докато числото не ти стане 0, и вземаш остатъците наобратно.
int dec_to_bin ( int num ) {
int a[16];
int i, pos = 0;
while ( num ) {
a[++ pos] = num % 2;
num /= 2;
}
for ( i = pos; i >= 1; -- i ) {
cout << a[i];
}
}
Последно редактирано от Foreverbg : 11-28-2012 на 18:58
Авторa/ката е писала "C", а не "C++"
Код:#include <stdio.h> #include <stdlib.h> #include <limits.h> static void decimal_to_binary (int number){ char * digits; int n_digits,i,copy; copy = number; n_digits = 0; while (copy) { n_digits++; copy /= 2; } digits = malloc (n_digits); if (! digits) { fprintf (stderr, "No more memory.\n"); exit (EXIT_FAILURE); } i = 0; copy = number; while (copy) { digits[i] = copy % 2; copy /= 2; i++; } printf ("Decimal %d = binary ", number); for (i = n_digits - 1; i >= 0; i--) { printf ("%d", digits[i]); } printf ("\n"); free (digits); } int main (int argc, char ** argv) { int i; const int base = 10; for (i = 1; i < argc; i++) { char * arg; char * end; int number; arg = argv[i]; number = strtol (arg, & end, base); if (arg != end) { decimal_to_binary (number); } } return 0; }
Последно редактирано от MaGuSs : 11-28-2012 на 19:16
-Щастието е нещо вътрешно, а не външно, затова то не зависи от онова, което имаме, а от това, което сме.
-Учи се от вчера, живей за днес, вярвaй в утре!
Разликата между С и C++ е съвсем малка, и целта беше да види горе-долу как изглежда и да си я напише сам/а.![]()
Леле майко какви кодове сте писали :Д
Код:#include <stdio.h> void dectobin(unsigned long long input) { unsigned long long bin=0, i=1, ost; for ( ;input;) { ost=input%2; bin+=(i*ost); input/=2; i*=10; } printf("%llu", bin); } int main(void) { unsigned long long a; scanf("%llu", &a); dectobin(a); return 0; }
Don't hate the hacker,
hate the code!
Още нещо малко. Ако искаш да се придържаш напълно към теорията за функция не слагай печата вътре. Функцията трябва да върне резултат, а да не остане void.