• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Systemy liczbowe/tablice dynamiczne

Object Storage Arubacloud
0 głosów
472 wizyt
pytanie zadane 8 kwietnia 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)
char zmiana (int a)
{
  if(a==10) return 'A';
  if(a==11) return 'B';
  if(a==12) return 'C';
  if(a==13) return 'D';
  if(a==14) return 'E';
  if(a==15) return 'F';
  else return a;
}

char konwertuj(int liczba)
{
	int tab[];
	int i(0);
	
	while(liczba>0)
	{
		tab[i]=liczba%16;
		liczba=liczba/16; 
		i+=1;
	}

    for(int l(i);l>=0;l--)
    {
    	cout<<zmiana(tab[l]);
    }
	
}

Napisałam program , który ma zmieniać liczbę podaną w systemie dziesiętnym na szesnastkowy. Czy mógłby mi ktoś wytłumaczyć , nawet chociażby i w skrócie jak używać tablic dynamicznych (tak oglądałam rózne filmiki, czytałam rózne poradniki, ale jakoś nadal nie bardzo mi to wchodzi, a czasem trzeba i ich użyć w końcu) ? 
Bo właśnie chyba w tej tablicy dynamicznej leży tylko problem

 

komentarz 8 kwietnia 2017 przez Patryk Krajewski Nałogowiec (26,170 p.)
W którym miejscu potrzebna ci tablica dynamiczna?
komentarz 8 kwietnia 2017 przez ChiriChiri Obywatel (1,260 p.)
potrzebna mi żeby wpisywać reszty z dzielenia, nie wiem ile ich będzie, a potem muszę je pozamieniać na literki (niektóre) i wyświetlaćod końca
2
komentarz 8 kwietnia 2017 przez 10kw10 Pasjonat (22,880 p.)
komentarz 9 kwietnia 2017 przez ChiriChiri Obywatel (1,260 p.)
#include <iostream>
#include <vector>
using namespace std;

char zmiana (int a)
{
  if(a==10) return 'A';
  if(a==11) return 'B';
  if(a==12) return 'C';
  if(a==13) return 'D';
  if(a==14) return 'E';
  if(a==15) return 'F';
  else return a;
}

char konwertuj(int liczba)
{
	vector<int> reszty;
	int i(0);

	while(liczba>0)
	{
		reszty[i]=liczba%16;
		liczba=liczba/16;
		i+=1;
	}

    for(int i;i>=0;i--)
    {
    	cout<<zmiana(reszty[i]);
    }

}

int main() {

cout<<konwertuj(3456);

	return 0;
}



Program nie działa i nie pojawia się w czym leży błąd. Zazwyczaj w takich sytuacjach miałam problem z whilem ale po sprawdzeniu wydaje mi się, że ten powinien działać dobrze

 

komentarz 9 kwietnia 2017 przez Patryk Krajewski Nałogowiec (26,170 p.)
Na vector dodaję się za pomocą push_back() poczytaj o tym.

1 odpowiedź

0 głosów
odpowiedź 9 kwietnia 2017 przez mokrowski Mędrzec (155,460 p.)

Tylko wiesz co, to jest taki sobie pretekst do użycia tablic dynamicznych. Przecież wiesz jak długa będzie liczba konwertowana. Jeśli w Twoim systemie int ma 32 bity (a jak wiadomo najmniej może mieć 16), to będzie to 8 bajtów czyli 8 pozycji hex. No ale załóżmy że się upierasz. To sprawa jest prosta.

// Będzie "na piechotę" dla zrozumienia.. 

// Określenie wielkości int'a
size_t intSize = sizeof(int);

// + 1 bo będziesz chciała zapisać znak \0 kończący c-string
// Od razu zerujemy tablicę poprzez użycie ()
char * hexResult = new char[intSize + 1]();

// ... tu jakieś użycie tej tablicy...

// Na koniec sprzątanie
delete hexResult;

Tylko to podejście generuje łatwo potencjalne błędy (zapomnisz sprzątnąć, pomylisz się itp... ). Lepiej użyć dedykowanego kontenera. To może być vector który robi to wszystko sam tylko... będziesz parsowała dane od ostatniego znaku hex a push_back() na vector odkłada je na końcu. Tak więc po parsowaniu, należy zawartość vector obrócić. Zrobisz z użyciem std::reverse(...) z <algorithm>. A nie ma innego kontenera który ma push_front(...)? No pewnie że jest!

Kontenerem który posiada push_front(...) jest np. std::list. Możesz dodawać znaki z jego użyciem na początku.

Co do rozwiązań z kontenerami, oczywiście są "ciężkie". Nie ma jednak sensu optymalizować na etapie ćwiczeń i zapoznawania się z kontenerami (do czego pretekst tu może być). Można np. dokonać konwersji dec->hex szybko z użyciem masek bitowych. Ale tu nie chodzi o "ściganie" :-) 

Podobne pytania

0 głosów
3 odpowiedzi 2,427 wizyt
pytanie zadane 21 września 2017 w C i C++ przez Ziom Początkujący (430 p.)
0 głosów
2 odpowiedzi 443 wizyt
pytanie zadane 23 stycznia 2016 w C i C++ przez Remo Początkujący (280 p.)
0 głosów
1 odpowiedź 472 wizyt
pytanie zadane 15 listopada 2015 w C i C++ przez Baakoma Użytkownik (780 p.)

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...