[c] zamiana liczby dwójkowej na dziesiętną

FEMO
Użytkownik
Użytkownik
Posty: 348
Rejestracja: 13 lut 2007, o 17:15
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 163 razy

[c] zamiana liczby dwójkowej na dziesiętną

Post autor: FEMO »

Wczytać z wejścia ciąg zer i jedynek nie dłuższy niż 30 znaków, traktowany jako reprezentacja liczby naturalnej dwójkowej i wypisać tę liczbe jako dziesiętną. Pamiętać o kontroli poprawności danych.

jak to zrobić przy pomocy pętli while?
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

[c] zamiana liczby dwójkowej na dziesiętną

Post autor: spajder »

Kod: Zaznacz cały

scnaf(&dwojkowo);

for(i = 0; i < strlen(dwojkowo); i++)
    {
         wartosc *= 2;
         wartosc += (dwojkowo[i] == '1' ? 1 : 0);
    }

printf("%d", wartosc);
pierdółki takie jak deklaracje zmiennych, wstawienie bibliotek itp. zostawiam Tobie

edit
a przy pomocy while to prosto:

Kod: Zaznacz cały

i = 0;
while(dwojkowo[i] != 0)
{
}
a w środku to samo co w pętli
FEMO
Użytkownik
Użytkownik
Posty: 348
Rejestracja: 13 lut 2007, o 17:15
Płeć: Mężczyzna
Lokalizacja: warszawa
Podziękował: 163 razy

[c] zamiana liczby dwójkowej na dziesiętną

Post autor: FEMO »

a czy to jest przy użyciu tablic ?
bo tablic jeszcze nie miałem więc program musi być bez nich
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

[c] zamiana liczby dwójkowej na dziesiętną

Post autor: soku11 »

Dane musisz wczytac do tablicy jesli maja byc zapamietane... W rejestrach sie przeciez nie zmiesci ciag 30 znakow char :)
Chyba, ze bedziesz wczytywal po znaku i odrazu zliczal... Wtedy kod wyglada tak:

Kod: Zaznacz cały

#include <stdio.h>

typedef unsigned int uint;

int main(void)
{
  const uint limit=30;
  uint i=1;
  uint dec=0;
  uint pow=1;
  char digit=0;


  while(i<limit)
  {
    scanf("%c",&digit);
    if(digit=='\n')
      break;

    if(digit!='0' && digit!='1')
    {
      printf("Uzyj tylko 0,1");
      return 0;
    }

    if(i==1)
      dec+=digit-'0';
    else
      dec+=(pow)*(digit-'0');
    pow*=2;

    ++i;
  }

  printf("Dziesietnie: %u\n",dec);

  return 0;
}

Pozdrawiam.
ODPOWIEDZ