[C++] Zamiana tablicy int na char.

mich12
Użytkownik
Użytkownik
Posty: 180
Rejestracja: 13 paź 2013, o 13:41
Płeć: Mężczyzna
Podziękował: 29 razy

[C++] Zamiana tablicy int na char.

Post autor: mich12 »

Witajcie,

Mam do zrobienia program, który zamienia liczbę binarną na dziesiętną. Kod wygląda następująco:

Kod: Zaznacz cały

#include <iostream>
#include <cmath>
using namespace std;

//-------------------------------------------------------------------
int zamiana (int liczbabit, int wynik, int array[])
{	
	int x;
	x = 0;
	
 	for (int k = liczbabit - 1; k >= 0; k--) {
 			wynik += array[k] * pow(2,x);
 			x++;
		}
    cout << wynik;
}

//----------
int main ()
{
  int liczbabit; // ilość bitów liczby binarnej
  int x;
  int wynik;
  
  x = 0;
  wynik = 0; 
  cout << "Wczytaj ile znakow ma liczba binarna: " << endl;
  cin >> liczbabit;
  
  int array [liczbabit + 1];
  
  cout << "Liczba binarna: " << endl;
  for (int i = 0; i < liczbabit; i++)
  	  cin >> array [i];
 
  cout << "Liczba dziesietna: " << endl;
  zamiana (liczbabit, wynik, array);
  return 0;
}
Chciałbym teraz zamienić tablicę int na tablicę char. Nie wiem jednak jak to sensownie zrobić. Jakieś pomysły?
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Zamiana tablicy int na char.

Post autor: kalwi »

Kod: Zaznacz cały

 int liczbabit
Przewidujesz ujemną liczbę bitów? Bo jeśli nie, to stosuj typ unsigned albo najlepiej size_t

Kod: Zaznacz cały

  int x;
  int wynik;
  
  x = 0;
  wynik = 0; 
Po co tak?

Kod: Zaznacz cały

  int x = 0;
  int wynik = 0;
Eh, to jest chyba 3 raz jak ci piszę, że w CPP nie powinno się stosować tablicy VL.
Ta linijka:

Kod: Zaznacz cały

  int array [liczbabit + 1];
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?

Kod: Zaznacz cały

  zamiana (liczbabit, wynik, array);
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;
}
ODPOWIEDZ