Przesuwanie elementu na koniec tablicy.

0

Cześć,

Mam kolejne pytanie, które pewnie z punktu widzenia kogoś bardziej doświadczonego nie będzie miało sensu, ale warto zapytać, aby raz na zawsze rozwiać wątpliwości.
A więc przejdźmy do sedna. W obu tablicach znajdują się 3 elementy i chodzi mi o to by po spełnieniu warunku porównywaną wartość tab2 przypisać na koniec tab. Czy jest to możliwe, zważywszy na fakt, że zadeklarowane tablice nie są dynamiczne? Czy ten kod ma wogółe sens? Prosiłbym kogoś bardizej doświadczonego o pomoc

index = 0;
index2 =0;
if(tab[index] > tab2[index2]){
    cout<<"Karty bierze gracz: 1 "<<endl;
    licznik++;
    licznik2--;
   tab[licznik] = tab2[index2];
    cout<<"Karty 1 ["<<licznik<<"]: "<<endl;
    cout<<"Karty 2 ["<<licznik2<<"]: "<<endl;
index++;
index2++;
}

W momencie kodu, który widnieje na ekranie stałe wynoszą odpowiednio:
licznik = 4
licznik2 = 2

0

Czym są tab i tab2? Jeśli dobrze rozumiem, chcesz zmienić rozmiar tablicy o niezmiennym rozmiarze. W takim wypadku nie jest to możliwe.

Zainteresuj się std::vector

0

@kq:
Nawet jesli ich deklaracja wyglada w ten sposób?

int tab[26];
int tab2[26];
1

To właśnie są tablice o stałym rozmiarze. Przy czym jeśli trzymasz w nich po trzy elementy, to jak najbardziej możesz przypisać do kolejnych elementów (ale nie jest to dopisanie do końca tablicy, jakkolwiek to rozumieć)

0

@kq:
W takim razie jeśli tak jak wspomniałem w mojej tablicy, w której jest miejsce na 26 elementów znajdują się aktualnie 3 i chciałbym aby na 4 miejscu znalazł się ten z mojego kodu - to jakbym miał to zadeklarować?
Gdy robie tak:

 tab[licznik] = tab2[index2];

A następnie

cout<<tab[licznik];

To zamiast wartości wyrzuca mi niestety adres komórki

1

Nie opisałeś dokładnie problemu.
Zapisać na koniec tablicy oczywiście można, ale nie wiem czy o to Ci chodzi.


#include <iostream>
using namespace std;

int main() {
	int tab[26] = {10, 5, 6, 1, 8};
	int tab2[26] = {3, 5, 5, 2, 8};
	
	int n = sizeof(tab) / sizeof(tab[0]);
	int i = 0;
	int j = n - 1;
	while(i < n) {
	  if (tab[i] > tab2[i]) {
	  	cout << "Moving value " << tab[i] << " from tab[" << i << "] to tab2[" << j << "]\n";
	    tab2[j] = tab[i];
	    j--;
	  } else {
	  	cout << "Moving skiping tab[" << i << "] = " << tab[i] << "\n";
	  }
	  ++i;
	}
	
	cout << "Final tab2: \n";
	for(int i=0; i < n; ++i) {
		cout << i << ": " << tab2[i] << "\n";
	}
	return 0;
}

http://ideone.com/XBNGMF

0

@vpiotr:
Masz rację, trochę niejasno opisałem problem. Chodzi mi o to żeby ten element z tab2 przesunąć na pierwsze niezapisane(?) miejsce w tab. Czyli w przypadku kiedy obie tablice mają po 3 elementy, to po całej operacji tab będzie miała 4 a tab2 -2. Przepraszam, że tak mieszam, mam nadzieję, że teraz już jest wszystko jasne.

0

Pierwsze niezapisane miejsce albo sobie określisz przez zmienną (= liczba zapisanych elementów), albo będziesz wyszukiwał przy pomocy jakiejś wymyślonej reguły (np. pierwsza niezerowa wartość). Nie ma chyba innej opcji.

Musisz tylko upewnić się że wszystkie możliwe wartości się zmieszczą (w tym moim przykładzie niekoniecznie się zmieszczą jeśli obie tablice będą jakoś wypełnione i trzeba będzie coś przesunąć).

1 użytkowników online, w tym zalogowanych: 0, gości: 1