#include
#include
using namespace std;
int main()
{
char znak[6]="D";
int tablica[32];
int liczba=45;
int i = 0;
int zm_pom;
int r;
do
{
zm_pom = liczba / 16;
if(zm_pom=13)
{
liczba=znak[6];
}
tablica[i] = zm_pom;
liczba = liczba % 16;
i++;
}
while(liczba > 0);
cout<<"Podana liczba :\n\n";
for(i =i-1; i >= 0; --i)
cout <<"\t"<< tablica[i]<< " " ;
cin>>r; //Tylko żeby program sie nie wyłączał odrazu
return 0;
}
Probelm w tym ze nie wiem jak zrobic aby w momencie gdy zmienna zm_pom bedzie rowna 13 na ekranie wyswietlila mi sie litera D a nie 13.
OK, wszystko fajnie,tylko że program jest jakiś taki… bez sensu?
Jakbyś napisał, co ten program ma robić to by na pewno umożliwiłoby nam Ci jakoś pomóc. Masz mnóstwo dziwnych przypisań zmiennych, wszystko jest mocno pogmatwane a jedynym efektem tego programu jest wypisanie na ekran kilkanaście razy liczby “13” poprzedzonej nic nie mówiącym napisem “Podana liczba to:” Na ekran nigdy nie dostaniesz litery bo cała tablica jest typu integer więc co najwyżej możesz mieć na ekranie liczbę całkowitą…
#include
#include
#include
using namespace std;
int main()
{
int tablica[32];// <-???????
int liczba=45;
int i = 0;
int zm_pom;
do
{
zm_pom = liczba % 16;
if(zm_pom==13)
{
//???????
}
tablica[i] = zm_pom;
liczba = liczba / 16;
i++;
}
while(liczba > 0);
cout<<"Podana liczba :\n\n";
for(i =i-1; i >= 0; --i)
cout <<"\t"<< tablica[i]<< " " ;
getch();
return 0;
}
Program ma zamieniac liczbe z systemu dziesietnego na szesnastkowy. Jest to tylko czesc programu. Chodzi mi tylko o to co zrobic gdy przy podzieleniu liczby 45 gdy pozostaje 13 reszty nie wyswietlalo mi 13 tylko odpowiadajaca jej w systemie hex litery D. Z reszta liter ABCEF juz sobie analogcznie poradze. I co w takim razie z ta tablica?
Po pierwsze w temacie masz “Jak użyć stringu” więc zastosowałem go zamiast tablicy intów, bo miałeś tam znaki zapytania w komentarzu. Oto przerobiony kod:
#include
#include
using namespace std;
int main() {
string hexNumber;
int liczba = 45;
int tmp = 0;
do {
tmp = liczba % 16;
if(tmp >= 0 && tmp <= 9)
hexNumber.insert(0, 1, char('0' + tmp)); // string& insert( size_type index, size_type num, char ch );
else
hexNumber.insert(0, 1, char('7' + tmp));
liczba /= 16;
} while(liczba > 0);
cout << "Podana liczba " << liczba << " to szestnastkowo " << hexNumber << endl;
}
I teraz wyjaśnienia. Musisz wiedzieć, że klasa string i tak korzysta z tablic znaków - char. Po drugie dobrze jest wiedzieć co to jest ASCII gdyż jest ono używane przez C++. Po trzecie znaki można traktować w szczególny sposób jako liczby - właśnie jako ich kody ASCII. Dlatego aby uzyskać znaki od ‘A’ do ‘F’ używam:
char('7' + tmp)
tmp zawiera resztę z dzielenia przez szesnaście, np. 13. Tak więc jest tam ‘7’ + 13. Co oznacza 55 + 13 - sprawdź, ‘7’ ma kod 55 w ASCII. Wynik to 68, sprawdź co znajduje się pod tym kodem w tabeli kodu ASCII… W komentarzu umieściłem deklarację funkcji z klasy string, której użyłem, więcej dowiesz się z http://www.cppreference.com/index.html . Tak w ogóle to wiem, że ten programik ma pokazać jak robić konwersję, ale cały ten kod jest zbędny w codziennym programowaniu, wystarczyłoby napisać:
w ciele funkcji main. hex to manipulator strumieni, pochodzi ze standardowej przestrzeni nazw, więc jest to std::hex. Zmienia on sposób wyświetlania liczb na format szesnastkowy.