Rozwiązanie zadania TABLICE DYNAMICZNE

0

Witam, jestem uczniem technikum. Nasz nauczyciel nie umie zbyt dobrze tłumaczyć, a muszę wykonać poniższe zadanie. Czy byłby ktoś w stanie podpowiedzieć jak to zrobić?

Napisz funkcje ułatwiające pracę na tablicach. Funkcje mają odpowiadać za wstawianie elementów do tablicy (funkcja insert), usuwanie elementów z tablicy (funkcja remove), czyszczenie zawartości tablicy (clear), dodawanie wartości na końcu tablicy (funkcja push_back), wypisywanie zawartości tablicy w czytelnym formacie (funkcja print), zwracanie rozmiaru aktualnej tablicy (funkcja get_size). Program ma operować na jednej tablicy o początkowym rozmiarze 10, którą tworzymy dynamicznie na starcie i uzupełniamy ją zerami. W naszym programie musimy napisać wyżej wymienione funkcje, z których każda z nich powinna przyjmować jako argument wskaźnik na tablicę oraz inne niezbędne wartości. Np. deklaracja funkcji insert może wyglądać następująco: int* insert(int wskaznik_na_tablice, int pozycja_na_ktorej_wstawiamy_element, int wstawiana_wartosc); W środku funkcji należy zarezerwować pamięc na tyle elementów ile miała przekazywana tablica i na nowo dodany element. Następnie skopiować wartości do tej tablicy, ale na miejscu wskazanym przez argument funkcji wstawić nową wartość, a resztę elementów wstawić po nim. Rozmiar tablicy powinniśmy przechowywać w zmiennej globalnej. Skoro tworzymy zmienną o rozmiarze 10 to taka będzie początkowa wartość. Następnie np. w metodzie insert, remove, push_back odpowiednio zmieniamy tę wartość zwiększając ją o 1 lub zmniejszając o 1. Przy tworzeniu aplikacji należy pamiętać o odpowiednim zarządzaniu pamięcią to jest jej usuwaniu przy użyciu operatora delete[] i jej rezerwowaniu przy użyciu new. Po napisaniu wszystkich funkcji w mainie należy wywołać 3 razy funkcje push_back z dodawaniem dowolnej wartości do tablicy, po niej funkcje print, 3 razy funkcję insert z dowolnymi wartościami, znowu print, 3 razy funkcje remove i znowu print. Na końcu wywołujemy funkcje clear i znowu printujemy zawartość tablicy. Ocenianiu będzie podlegać stopień ukończenia programu oraz jego poprawność. To znaczy, że będę zwracał uwagę na to, czy rezerwowana pamięć jest zawsze zwalniania. Pomoc! Przykładowa implementacja funkcji insert. int insert(int *wsk, int nr, int val) { //rezerwujemy pamiec na tyle elementów co miała tablica plus ten jeden dodatkowy int *wsk2 = new int[size+1]; //przepisujemy zawartosc tablicy do nowej tablicy, a na pozycji przekazanej jako argument wpisujemy naszą wartość. for(int i=0; i < size+1; i++) { if(i < nr) { wsk2[i] = wsk[i]; } else if(i == nr) { wsk2[i] = val; }
else { wsk2[i] = wsk[i-1]; } } //zwiekszamy zmienna przechowującą rozmiar tablicy size++; //usuwamy pamięć na naszą domyślną tablicę delete[] wsk; //zwracamy adres na nową zmienioną tablicę return wsk2; } W mainie wywołujemy tę funkcję w ten sposób: //tu rezerwowaliśmy pamiec na 10 elementow int * tablica = new int[10]; //w metodzie insert zwolnilismy pamiec zarezerwowaną wyżej i zwróciliśmy adres nowego miejsca w pamięci, który przekazujemy do naszego wskaźnika tablica, który już ma 11 elementów. tablica = insert(tablica, 2, 2);

0

Ok, co już Masz i jeszcze, czego nie rozumiesz w treści zadania?

0

@Kacper Turkiewicz: To jest C++? Bo po opisie wnioskuję C.

2

Próba ogarnięcia treści:

Kacper Turkiewicz napisał(a):

Witam, jestem uczniem technikum. Nasz nauczyciel nie umie zbyt dobrze tłumaczyć, a muszę wykonać poniższe zadanie. Czy byłby ktoś w stanie podpowiedzieć jak to zrobić?

Napisz funkcje ułatwiające pracę na tablicach.
Funkcje mają odpowiadać za

  • wstawianie elementów do tablicy (funkcja insert),
  • usuwanie elementów z tablicy (funkcja remove),
  • czyszczenie zawartości tablicy (clear),
  • dodawanie wartości na końcu tablicy (funkcja push_back),
  • wypisywanie zawartości tablicy w czytelnym formacie (funkcja print),
  • zwracanie rozmiaru aktualnej tablicy (funkcja get_size).

Program ma operować na jednej tablicy o początkowym rozmiarze 10, którą tworzymy dynamicznie na starcie i uzupełniamy ją zerami. W naszym programie musimy napisać wyżej wymienione funkcje, z których każda z nich powinna przyjmować jako argument wskaźnik na tablicę oraz inne niezbędne wartości. Np. deklaracja funkcji insert może wyglądać następująco:

int* insert(int *wskaznik_na_tablice, int pozycja_na_ktorej_wstawiamy_element, int wstawiana_wartosc);

W środku funkcji należy zarezerwować pamięc na tyle elementów ile miała przekazywana tablica i na nowo dodany element. Następnie skopiować wartości do tej tablicy, ale na miejscu wskazanym przez argument funkcji wstawić nową wartość, a resztę elementów wstawić po nim.
Rozmiar tablicy powinniśmy przechowywać w zmiennej globalnej. Skoro tworzymy zmienną o rozmiarze 10 to taka będzie początkowa wartość. Następnie np. w metodzie insert, remove, push_back odpowiednio zmieniamy tę wartość zwiększając ją o 1 lub zmniejszając o 1. Przy tworzeniu aplikacji należy pamiętać o odpowiednim zarządzaniu pamięcią to jest jej usuwaniu przy użyciu operatora delete[] i jej rezerwowaniu przy użyciu new. Po napisaniu wszystkich funkcji w mainie należy wywołać 3 razy funkcje push_back z dodawaniem dowolnej wartości do tablicy, po niej funkcje print, 3 razy funkcję insert z dowolnymi wartościami, znowu print, 3 razy funkcje remove i znowu print. Na końcu wywołujemy funkcje clear i znowu printujemy zawartość tablicy. Ocenianiu będzie podlegać stopień ukończenia programu oraz jego poprawność. To znaczy, że będę zwracał uwagę na to, czy rezerwowana pamięć jest zawsze zwalniania. Pomoc! Przykładowa implementacja funkcji insert.

int* insert(int *wsk, int nr, int val) { //rezerwujemy pamiec na tyle elementów co miała tablica plus ten jeden dodatkowy
    int *wsk2 = new int[size+1]; //przepisujemy zawartosc tablicy do nowej tablicy, a na pozycji przekazanej jako argument wpisujemy naszą wartość.
    for (int i = 0; i < size + 1; i++) {
        if (i < nr) {
            wsk2[i] = wsk[i];
        }
        else if (i == nr) {
            wsk2[i] = val;
        }
        else {
            wsk2[i] = wsk[i - 1];
        }
    } //zwiekszamy zmienna przechowującą rozmiar tablicy
    size++; //usuwamy pamięć na naszą domyślną tablicę
    delete[] wsk; //zwracamy adres na nową zmienioną tablicę
    return wsk2;
}

W mainie wywołujemy tę funkcję w ten sposób:

//tu rezerwowaliśmy pamiec na 10 elementow 
int * tablica = new int[10];

W metodzie insert zwolnilismy pamiec zarezerwowaną wyżej i zwróciliśmy adres nowego miejsca w pamięci, który przekazujemy do naszego wskaźnika tablica, który już ma 11 elementów. tablica = insert(tablica, 2, 2);

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