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?
[c] zamiana liczby dwójkowej na dziesiętną
-
- 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ą
Kod: Zaznacz cały
scnaf(&dwojkowo);
for(i = 0; i < strlen(dwojkowo); i++)
{
wartosc *= 2;
wartosc += (dwojkowo[i] == '1' ? 1 : 0);
}
printf("%d", wartosc);
edit
a przy pomocy while to prosto:
Kod: Zaznacz cały
i = 0;
while(dwojkowo[i] != 0)
{
}
-
- 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ą
a czy to jest przy użyciu tablic ?
bo tablic jeszcze nie miałem więc program musi być bez nich
bo tablic jeszcze nie miałem więc program musi być bez nich
-
- 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ą
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:
Pozdrawiam.
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.