Diskuze: Program na převod z desítkové do binární soustavy

C a C++ C a C++ Program na převod z desítkové do binární soustavy

Aktivity (1)
Avatar
akantogaming
Člen
Avatar
akantogaming:17.11.2016 11:06

Ahoj, učím se céčko, a napadlo mě napsat program, který převede zadané desítkové číslo na binární, ovšem po dlouhém hledání chyb a zkoušení stejně program nefunguje a já už nevím co s tím. Kdybyste někdo věděl co upravit nebo zjinačit, opravdu byste mi pomohli, protože já fakt netuším. Program dole.

#include <stdio.h>

int Rozpoznani(int x);
int main()
{
  printf("Zadej cislo a ja ho prevedu na binarni.\n");
  printf("Cislo: ");
  int a;
  scanf("%d", &a);
  int pocet = Rozpoznani(a);
  int binar[pocet];
  binar[pocet - 1] = a % 2;
  int p = 2;
  int i = a / 2;
  for(i; i != 0;) {
    binar[pocet - p] = i % 2;
    p++;
    i /= 2;
  }

  printf("Vysledek je: ");
  int j = 0;
  while(j < pocet)
  {
    printf("%d", binar[j]);
    j++;
  }
  return 0;
}
int Rozpoznani(int x) {
  int y = 1;
  int z = 1;
  while(1) {
    if(x < y) {
      break;
    }
    z++;
    y *= 2;
  }
  return z;
}
 
Odpovědět 17.11.2016 11:06
Avatar
HONZ4
Člen
Avatar
Odpovídá na akantogaming
HONZ4:17.11.2016 14:40

máš to nějaké složité:

#include <stdio.h>
#include <stdlib.h>

void PrintAsBinary(int x);

int main()
{
        int val;

        printf("Zadej cislo a ja ho prevedu na binarni.\nCislo: ");
        scanf("%i", &val);
        PrintAsBinary(val);
        system("pause");
        return 0;
}

void PrintAsBinary(int x)
{
        char bits[33];
        int i = 0;

        while(i<32)
        {
                bits[i] = (x & 1) ? '1' : '0';
                //píšu to do pole, ale taky by se to mohlo rovnou vypisovat
                x >>= 1;
                i++;
        }
        bits[32] = '\0';
        printf("Vysledek je: %s\n", bits);
}
Editováno 17.11.2016 14:41
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 17.11.2016 14:40
Avatar
Tycek
Člen
Avatar
Odpovídá na HONZ4
Tycek:17.11.2016 15:02

Jen bych doplnil, že pro úplnou správnost by se mělo při výpisu to pole s binárním číslem obrátit.

 
Nahoru Odpovědět  +1 17.11.2016 15:02
Avatar
HONZ4
Člen
Avatar
Odpovídá na Tycek
HONZ4:17.11.2016 15:56

nebo možná by se to mělo vypisovat podle endianity systému.

 
Nahoru Odpovědět 17.11.2016 15:56
Avatar
HONZ4
Člen
Avatar
Odpovídá na HONZ4
HONZ4:17.11.2016 16:33

což vlastně tak je:

void PrintAsBinary(int x)
{
        char bits[33];
        int i = 31;

        while(i > -1)
        {
                bits[i] = (x & 1) ? '1' : '0';
                x >>= 1;
                i--;
        }
        bits[32] = '\0';
        printf("Vysledek je: %s\n", bits);
}
 
Nahoru Odpovědět 17.11.2016 16:33
Avatar
HONZ4
Člen
Avatar
HONZ4:17.11.2016 16:58

nebo i:

void PrintAsBinary(int x)
{
                char bits[33];
                int i = 0;

                while(i < 32)
                {
                                bits[i] = (x & 0x80000000) ? '1' : '0';
                                x <<= 1;
                                i++;
                }
                bits[32] = '\0';
                printf("Vysledek je: %s\n", bits);
}

(ať je to kompletní:))

 
Nahoru Odpovědět 17.11.2016 16:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.