[C++] Błąd w programie zmieniającym system liczbowy

Qwestus
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 24 cze 2013, o 02:46
Płeć: Mężczyzna
Lokalizacja: Polska

[C++] Błąd w programie zmieniającym system liczbowy

Post autor: Qwestus »

Kod: Zaznacz cały

#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
main()
{
	int binarna;
	cout<<"wpisz liczbe w systemie binarnym"<<endl;
	cin>>binarna;
	int i=0, b=0, T[i], a[b];
	do 
	{
		if (binarna%10==0) T[i]=0;
		else T[i]=1;
		i++;
		binarna=binarna/10;
	}
	while (binarna>0);
	int f=0;
	for (int k=0;k<i;k++) {
		a[b]=(T[k])*(pow(2,f));
		b++;
		f++;
	}
	for (int k=0;k<b;k++) cout<<a[k];
	int d=0;
	for (int k=0;k<b;k++) d=d+a[k];
	cout<<"
liczba w dziesietnym: "<<d<<endl;
	return 0;
}
W tym programie niektóre liczby przelicza poprawnie, np \(\displaystyle{ 10_{2}}\) oblicza poprawnie ale np \(\displaystyle{ 1110001_{2}}\) oblicza niepoprawnie. Moglibyście poszukać ten błąd? Uczę się na jutro i od ponad godziny próbuję dojść do tego jak to się dzieje. pętla wypisująca składniki tablicy a[] jest wstawiona pomocniczo, próbowałem w ten sposób dojść co jest nie tak, i stwierdzam, że błąd jest w a[b-1] czyli ostatnim składniku tablicy a[].
Z góry dziękuje
Ostatnio zmieniony 24 cze 2013, o 10:34 przez Dasio11, łącznie zmieniany 1 raz.
Powód: Poprawa tagów w nazwie tematu.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10223
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C++] Błąd w programie zmieniającym system liczbowy

Post autor: Dasio11 »

Qwestus pisze:

Kod: Zaznacz cały

int i=0, b=0, T[i], a[b];
W pesymistycznym wypadku ta linijka się nie skompiluje, bo do podania wielkości tablic T i a użyłeś zmiennych. W optymistycznym, te tablice otrzymają rozmiar 0, więc użycie którejkolwiek komórki będzie stanowiło błąd - bo będzie oznaczało manipulowanie pamięcią, która nie należy do tablicy - i może spowodować niesamowite cuda w działaniu.

Zamiast tego, zadeklaruj

Kod: Zaznacz cały

int i = 0, b = 0, T[10] = {}, a[10] = {};
.

Przy takiej deklaracji, tablice T i a będą miały długość 10 i na początek zostaną wypełnione zerami. Nie potrzeba więcej długości, bo liczba którą poda użytkownik, i tak nie będzie mogła mieć więcej niż 10 cyfr ze względu na rozmiar zmiennej binarna, do której wczytywana jest liczba z wejścia.
ODPOWIEDZ