PDA

View Full Version : Помощ със задача с функция на C



aleksandur359
11-28-2012, 17:04
Здравейте, имам проблем с една задача, която трябва да се направи с функция. Пробвах да я направя сам, но не можах.
Задачата е следната : Да се напише функция, която да приема като аргумент цяло число и да го принтира в двоична бройна система. Ще бъда много благодарен ако някой ми помогне :)

dimitar_ak
11-28-2012, 18:42
Нямам работещ компилатор, за да ти напиша цял код, но ти давам идея.

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;
}

Тук работят с байт, но може лесно да се смени и за по дълго входно число. Например дума или двойна дума. Разликата ще е в размера на масива и числото, от което започва да върти цикъла.

Foreverbg
11-28-2012, 18:54
Няма смисъл да ползваш битови операции за да намериш двоичния запис. Делиш целочислено числото на 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];
}

}

MaGuSs
11-28-2012, 19:06
...
Автор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;
}

Foreverbg
11-28-2012, 19:12
Разликата между С и C++ е съвсем малка, и целта беше да види горе-долу как изглежда и да си я напише сам/а. ;)

MaGuSs
11-28-2012, 19:17
Разликата между С и C++ е съвсем малка, и целта беше да види горе-долу как изглежда и да си я напише сам/а. ;)

и все пак едно е на "С" друго е на "С++" има разлика, дори и тя да е малка !

MrCreeper
11-28-2012, 19:47
Леле майко какви кодове сте писали :Д



#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;
}

aleksandur359
11-29-2012, 16:48
Благодаря много на всички :)

dimitar_ak
11-30-2012, 05:40
Още нещо малко. Ако искаш да се придържаш напълно към теорията за функция не слагай печата вътре. Функцията трябва да върне резултат, а да не остане void.