Ogolnie, ja zrobilbym to troche inaczej, wychodzisz z zalozenia, ze uzytkownik poda maksymalnie 32 liczby, do tablicy, ale co jesli poda wiecej?
Ogolnie nie rozumiem czemu dales petle do {} while; , skoro wystarczy zwykla petla for, zaczynajaca sie od zera. Oprocz tego, czemu przechowujesz swoje dane jako znak, a nie jako cyfry? Pseudo kod brzmialby (tylko dla funkcji):
- Sprawdz rozmiar tablicy i przypisz go do zmiennej
- Stworz petle for i = 0; i < ilosc elemtow tablicy, i++
- Podczas pracy petli, sprawdz czy dany elemnt tablicy jest '1', jesli tak:
- to pobierz ten element tablicy i pomnoz razy pow(2, x_miejsce_w_tablicy - (i+1))
- zwroc sume
Ja rozwiazalem to na szybko tak o, sam nie wiem czy dobrze (program dziala, ale pewnie znajdzie sie ktos, kto napisalbym ten kod lepiej):
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
int binaryToDecimal (std::vector <int>& wektor, int & sum) //przekazujemy nasz wektor przez oraz sume referencje
{
int numberOfElements; //zmiena ktora przechowa ilosc elemntow w wektorze
int key = 1; //to element, ktory nas interesuje podczas przesukiwania wektora
numberOfElements = wektor.size();
for (int i = 0; i <numberOfElements; i ++)
{
if (std::count(wektor.begin(), wektor.end(), key)) { //przeszukuje nasz wektor od poczatku do konca w poszukiwaniu '1'
sum += wektor[i] * pow(2, numberOfElements - (i+1));
}
}
return sum; //zwaracam sume
}
int main ()
{
std::string inputFromUser;
std::vector <int> binaryNumber;
int sum = 0;
do {
std::cin>>inputFromUser;
if ((inputFromUser == "1") || (inputFromUser == "0")) {
binaryNumber.push_back(std::stoi(inputFromUser)); //dodajemy elementy do wektora
} else {
//
}
} while (inputFromUser != "n"); //tak dlugo az user poda 'n'
std::cout<<"\n";
std::cout<<binaryToDecimal(binaryNumber, sum);
return 0;
}