Usuwanie elementów z tablicy dynamicznej + kopiowanie do nowej tablicy

0

Witam, mój pierwszy post na forum i już potrzebuje Waszej pomocy... Moim zadaniem jest usunięcie elementów parzystych z tablicy dynamicznej i przepisanie ich do nowej tablicy o odpowiednio mniejszym rozmiarze.

Moja funkcja:

void f3(int tab,int &rozmiar){
int liczba_nieparzystych=0,pom;
for(int m=0;m<rozmiar;m++){
pom=
(tab+m);
if (pom%2==1) {liczba_nieparzystych++;}}
pom=0;

int tablica3=new int[liczba_nieparzystych];
int n=0;
for(int m=0;m<rozmiar;m++){
pom=
(tab+m);
if(pom%2==0) {m++;}
tablica3[n]=*(tab+m);
n++;}

delete []tab;
tab=tablica3;
cout<<endl<<"Tablica po usunieciu elementow parzystych: "<<endl<<endl;
for(int m=0;m<liczba_nieparzystych;m++)
cout<<"tab ["<<m<<"]="<<*(tab+m)<<" "; }

Problem w tym, że program działa jak chce, przepisuje niektóre elementy parzyste, a część nieparzystych omija.Nie wiem,co może być tego przyczyną, dlatego proszę Was o pomoc. Z góry dziękuję :)

0

To:

for(int m=0;m<rozmiar;m++){        
    pom=*(tab+m);          
    if (pom%2==1) {liczba_nieparzystych++;}} 

możesz zapisać jako:

for(int m=0;m<rozmiar;++m) if(tab[m]%2) ++liczba_nieparzystych;

albo wręcz tak: for(int m=0;m<rozmiar;++m) liczba_nieparzystych+=tab[m]%2;

 lub tak: wręcz tak: <code class="cpp">for(int m=0;m<rozmiar;++m) liczba_nieparzystych+=tab[m]&1;
0

_13th_Dragon dzięki za szybką odpowiedź, ale nie rozwiązuje to mojego problemu.
Może mam jakiś błąd w wywołaniu funkcji?
Kod:
case 'c':{
int nowy;
cout<<endl<<"podaj rozmiar nowej tablicy: "<<endl<<endl;
cin>>nowy;
int *tablica2=new int[nowy];
for(int f=0;f<nowy;f++){
(tablica2+f)=rand()%10 ;}
cout<<endl<<endl<<endl;
for(int f=0;f<nowy;f++)
cout<<"tab ["<<f<<"] ="<<
(tablica2+f)<<" ";
f3(tablica2,nowy);
delete [] tablica2;
break;}

0

Owszem nie rozwiązuje, ale pozwala skrócić całość do kilku wierszy, zaś w kilku wierszach bardzo trudno popełnić błąd.

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