Midas Temat założony przez niniejszego użytkownika |
» 2014-03-28 20:08:44 Chciałem to zrobić na wskaźnikach. Poza tym mam pytanie, bo jeżeli wyłączył bym ten warunek na nieparzystość i przekopiowywał wszystkie elementy, to dlaczego zawsze pierwszy element tablicy ma taką samą wartość jak ostatni ? |
|
OczkoSX |
» 2014-03-28 20:19:36 Jakim cudem? Musisz coś żle robić. Może wychodzisz poza zakres pamięci i nadpisujesz jakieś inne procesy. pamiętaj że numeracja tablicy rozpoczyna się od zera |
|
Midas Temat założony przez niniejszego użytkownika |
» 2014-03-28 20:22:42 Mowie o moim kodzie. #include <iostream> #include <cstring> using namespace std; int main() { int i, rozmiar; int * wsk, liczba, powiekszanie_tab = 1, aktulany_rozm = 0, akt_roz = 0; int * tab_liczby; int * tab_nowa = NULL; int * tab = NULL; cin >> rozmiar; tab_liczby = new int[ rozmiar ]; for( i = 0; i < rozmiar; i++ ) cin >> tab_liczby[ i ]; for( i = 0; i < rozmiar; i++ ) { liczba = tab_liczby[ i ]; * tab_liczby = *( tab_liczby + akt_roz ); tab_nowa = new int[ powiekszanie_tab ]; memcpy( tab_nowa, tab_liczby, powiekszanie_tab * sizeof( * tab ) ); } for( int c = 0; c < powiekszanie_tab; c++ ) cout << tab[ c ] << endl; delete[] tab_liczby; return 0; } |
|
alixir |
» 2014-03-29 11:14:33 Przeanalizuj ten przykład: #include <iostream> #include <cstring>
class tablica_nieparzyste;
class tablica { private: int ilosc_elementow; int * element; public: tablica(); ~tablica(); void wczytaj_elementy(); void wyswietl(); friend class tablica_nieparzyste; };
tablica::tablica() { ilosc_elementow = 0; element = NULL; }
tablica::~tablica() { if( ilosc_elementow != 0 ) { delete[] element; element = NULL; } }
void tablica::wczytaj_elementy() { std::cout << "Podaj ilosc elementow tablicy: "; std::cin >> ilosc_elementow; element = new int[ ilosc_elementow ]; std::cout << "\tWprowadz elementy tablicy" << std::endl; for( int i = 0; i < ilosc_elementow; i++ ) { std::cout << "\t" << i + 1 << ": "; std::cin >> element[ i ]; } }
void tablica::wyswietl() { for( int i = 0; i < ilosc_elementow; i++ ) { std::cout << element[ i ] << "; "; } std::cout << std::endl; }
class tablica_nieparzyste { private: int ilosc_elementow; int * element; public: tablica_nieparzyste(); ~tablica_nieparzyste(); void wczytaj_nieparzyste( tablica * ); void wyswietl(); };
tablica_nieparzyste::tablica_nieparzyste() { ilosc_elementow = 0; element = NULL; }
tablica_nieparzyste::~tablica_nieparzyste() { if( ilosc_elementow != 0 ) { delete[] element; element = NULL; } }
void tablica_nieparzyste::wczytaj_nieparzyste( tablica * tab ) { for( int i = 0; i < tab->ilosc_elementow; i++ ) if(( tab->element[ i ] % 2 ) == 0 ) ilosc_elementow++; element = new int[ ilosc_elementow ]; for( int i = 0, j = 0; i < tab->ilosc_elementow; i++ ) if(( tab->element[ i ] % 2 ) == 0 ) { memcpy( element + j, tab->element + i, sizeof( int ) ); j++; } }
void tablica_nieparzyste::wyswietl() { for( int i = 0; i < ilosc_elementow; i++ ) { std::cout << element[ i ] << "; "; } std::cout << std::endl; }
int main() { tablica * tab = NULL; tablica_nieparzyste * tab_nieparzyste = NULL; tab = new tablica; tab_nieparzyste = new tablica_nieparzyste; tab->wczytaj_elementy(); tab->wyswietl(); tab_nieparzyste->wczytaj_nieparzyste( tab ); tab_nieparzyste->wyswietl(); delete tab_nieparzyste; delete tab; return 0; }
|
|
Midas Temat założony przez niniejszego użytkownika |
» 2014-03-29 20:15:49 W tym kodzie jest zaimplementowana lista. memcpy( element + j, tab->element + i, sizeof( int ) ); Jak napisać warunek pobierający 1 element z tablicy, a nie z listy, tak jak jest tab->element + i ? Czy jest możliwe dodatkowo w czasie liniowym pomniejszać elementy tablicy początkowej o te wartości, które został już przekopiowane do 2 tablicy (parzyste)? |
|
alixir |
» 2014-03-29 21:13:46 Przecież to tablica zapakowana w klasę. Tu masz najprostszy przykład kopiowania po jednym elemencie (co drugi element) z pierwszej tablicy: int * tab1 = new int[ 10 ] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int * tab2 = new int[ 5 ];
for( int i = 0, j = 0; i < 10; i += 2, j++ ) memcpy( tab2 + j, tab1 + i, sizeof( int ) );
for( int i = 0; i < 5; i++ ) std::cout << tab2[ i ] << "; ";
std::cout << std::endl;
delete[] tab1; delete[] tab2; |
|
Midas Temat założony przez niniejszego użytkownika |
» 2014-03-29 21:29:12 Dzięki kopiowanie zrobiłem :), a co do pomniejszania ? Jak zmieniać rozmiar pierwotnej tablicy o elementy skopiowane do drugiej ? |
|
1 « 2 » |