Przewidujesz ujemną liczbę bitów? Bo jeśli nie, to stosuj typ
unsigned
albo najlepiej
size_t
Po co tak?
Eh, to jest chyba 3 raz jak ci piszę, że w CPP nie powinno się stosować tablicy VL.
Ta linijka:
Nie powinna się pojawić, bo przy fladze
-pedantic
przy kompilacji otrzyma się następujący błąd:
Kod: Zaznacz cały
warning: variable length arrays are a C99 feature [-Wvla-extension]
int array [liczbabit + 1];
W Visual Studio ten kod by się w ogóle nie skompilował.
Poza tym po co tam jest
+1
?
Po co przekazujesz zmienną
wynik
? Zmiana wartości zmiennej
wynik
w funkcji
zamiana
kompletnie nie wpłynie na zmienną
wynik
w mainie. I po co jest zmienna
x
w mainie? nic ona nie robi.
No i po co ci tablica typu char? To nawet nie zadziała dobrze z tablicą tego typu, bo będziesz wczytywał chary zamiast intów, więc 1 wczytane do char będzie równe 49 decymalnie, przez co twoja liczba binarna
111
wczytana do tablicy charów da wynik końcowy równy
\(\displaystyle{ 49+49\cdot2+49\cdot4=343}\). Da się to obejść, rzecz jasna, ale to jest bez sensu.
Kod: Zaznacz cały
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
void zamiana(size_t liczbabit, const vector <char> & array);
void zamiana(size_t liczbabit, const vector <char> & array)
{
unsigned int x = 0;
unsigned int wynik = 0;
for (int k = liczbabit - 1; k >= 0; --k)
wynik += (array[k] - '0') * pow(2, x++);
cout << wynik;
}
int main(void)
{
size_t liczbabit; // ilość bitów liczby binarnej
vector <char> array;
char temp;
cout << "Liczba bitow:" << endl;
cin >> liczbabit;
cout << "Liczba binarna: " << endl;
for (size_t i = 0; i < liczbabit; ++i)
{
cin >> temp;
array.push_back(temp);
}
cout << "Liczba dziesietna: " << endl;
zamiana(liczbabit, array);
return 0;
}