.
Отговор в тема
Резултати от 1 до 9 от общо 9
  1. #1

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

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

  2. #2
    Мега фен Аватара на dimitar_ak
    Регистриран на
    Sep 2008
    Град
    София
    Мнения
    4 979
    Нямам работещ компилатор, за да ти напиша цял код, но ти давам идея.

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

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

  3. #3
    Повече от фен
    Регистриран на
    May 2010
    Мнения
    425
    Няма смисъл да ползваш битови операции за да намериш двоичния запис. Делиш целочислено числото на 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

  4. #4
    Мега фен Аватара на MaGuSs
    Регистриран на
    Nov 2009
    Град
    Варна
    Мнения
    3 182
    Цитирай Първоначално написано от Foreverbg Виж мнението
    ...
    Автор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й в утре!

  5. #5
    Повече от фен
    Регистриран на
    May 2010
    Мнения
    425
    Разликата между С и C++ е съвсем малка, и целта беше да види горе-долу как изглежда и да си я напише сам/а.

  6. #6
    Мега фен Аватара на MaGuSs
    Регистриран на
    Nov 2009
    Град
    Варна
    Мнения
    3 182
    Цитирай Първоначално написано от Foreverbg Виж мнението
    Разликата между С и C++ е съвсем малка, и целта беше да види горе-долу как изглежда и да си я напише сам/а.
    и все пак едно е на "С" друго е на "С++" има разлика, дори и тя да е малка !
    -Щастието е нещо вътрешно, а не външно, затова то не зависи от онова, което имаме, а от това, което сме.
    -Учи се от вчера, живей за днес, вярвaй в утре!

  7. #7
    Супер фен Аватара на MrCreeper
    Регистриран на
    May 2011
    Мнения
    2 121
    Леле майко какви кодове сте писали :Д

    Код:
    #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!

  8. #8
    Благодаря много на всички

  9. #9
    Мега фен Аватара на dimitar_ak
    Регистриран на
    Sep 2008
    Град
    София
    Мнения
    4 979
    Още нещо малко. Ако искаш да се придържаш напълно към теорията за функция не слагай печата вътре. Функцията трябва да върне резултат, а да не остане void.

Правила за публикуване

  • Вие не можете да публикувате теми
  • Вие не можете да отговаряте в теми
  • Вие не можете да прикачвате файлове
  • Вие не можете да редактирате мненията си