Avatar
akantogaming
Člen
Avatar
akantogaming:

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. listopadu 11:06
Avatar
HONZ4
Člen
Avatar
Odpovídá na akantogaming
HONZ4:

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. listopadu 14:41
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 17. listopadu 14:40
Avatar
Tycek
Člen
Avatar
Odpovídá na HONZ4
Tycek:

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. listopadu 15:02
Avatar
HONZ4
Člen
Avatar
Odpovídá na Tycek
HONZ4:

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

 
Nahoru Odpovědět 17. listopadu 15:56
Avatar
HONZ4
Člen
Avatar
Odpovídá na HONZ4
HONZ4:

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. listopadu 16:33
Avatar
HONZ4
Člen
Avatar
HONZ4:

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. listopadu 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.