Napisz w C++ (Code::Blocks) program, wczytujący do zmiennej string liczbę składającą się tylko z zer i jedynek (w przeciwnym razie wyświetla się komunikat o błędzie), zamieniający ją na liczbę dziesiętną. Użyj funkcji dodatkowej (oprócz "main"). Użyj tylko prostych komend (cout, cin, int, string, *.length(), itp.).
" Life is not a problem to be solved but a reality to be experienced! "
© Copyright 2013 - 2024 KUDO.TIPS - All rights reserved.
cin oraz cout to nie są komendy, tylko strumienie, a określenie `proste` jest akurat zbytnio subiektywne, aczkolwiek mam nadzieję, iż rozwiązałem zadanie poprawnie:
Pisane pod standard C++0x, u mnie pod Code::Blocks działa, chociaż i tak zalecałbym pobranie GCC 4.7.x (wyrażenia lambda :>) ;)
Link do kodu:
http://ideone.com/rn1K9
Kod:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string read()
{
string text;
cin >> text;
return text;
}
bool isValid(string text)
{
static bool result=true;
for_each(text.begin(), text.end(), [](char ch){ if ((ch != '0') && (ch != '1')) result=false; });
return result;
}
unsigned int binint(string text)
{
static unsigned int mult=pow(2, text.length()-1);
static unsigned int result=0;
for_each(text.begin(), text.end(),
[=](char ch)
{
result += (ch=='1')?mult:0;
mult /= 2;
});
return result;
}
int main()
{
string str = read();
if (!isValid(str))
{
cout << "Niepoprawna liczba binarna!" << endl;
return 1;
}
cout << binint(str) << endl;
return 0;
}