Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kopiowanie poszczególnych elementów z jednej tablicy do drugiej

Ostatnio zmodyfikowano 2014-03-29 21:29
Autor Wiadomość
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 ?
P-107352
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
P-107354
Midas
Temat założony przez niniejszego użytkownika
» 2014-03-28 20:22:42
Mowie o moim kodzie.

C/C++
#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;
}
P-107355
alixir
» 2014-03-29 11:14:33
Przeanalizuj ten przykład:

C/C++
#include <iostream>
#include <cstring>

class tablica_nieparzyste;

class tablica {
private:
    int ilosc_elementow;
    int * element;
public:
    tablica(); // konstruktor
    ~tablica(); // destruktor
    void wczytaj_elementy();
    void wyswietl();
    friend class tablica_nieparzyste;
};

tablica::tablica() { // KONSTRUKTOR
    ilosc_elementow = 0;
    element = NULL;
}

tablica::~tablica() { // DESTRUKTOR
    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() { // KONSTRUKTOR
    ilosc_elementow = 0;
    element = NULL;
}

tablica_nieparzyste::~tablica_nieparzyste() { // DESTRUKTOR
    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;
}
P-107383
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)?
P-107439
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:

C/C++
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;
P-107447
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 ?
P-107449
1 « 2 »
Poprzednia strona Strona 2 z 2