Usuwanie elementu.

0

Program nawiązuje a jest praktycznie taki sam jak w tym temacie : https://4programmers.net/Forum/C_i_C++/323420-podprogram_kasujacy_wybrany_element_z_tablicy
Tyle że tutaj dodany kod na końcu zeruje element i wyświetla tablicę a tu chodzi o usunięcie elementu z tablicy i wyświetlenie tablicy o rozmiarze o jeden mniejszy.
Od razu uprzedam nie mogę używać żadnych bibliotek itd i klasy też nie wchodzą w grę.
Mój kod

#include <iostream>
using namespace std;
int* utworz(int*& t, const unsigned n)
{
    t = new int[n];
    for (unsigned i = 0; i < n; i++) {
        t[i] = i;
    }
    return t;
}
void wyswietl(const int* t, const unsigned n)
{
    for (unsigned i = 0; i < n; i++) {
        cout << t[i] << "\t";
    }
}
int* kasuj_element(const int* t, const unsigned n, int ktory)
{
    int* tab = 0;
    utworz(tab, n - 1);
    for (unsigned i = 0; i < n; i++) {
        if (i != ktory) {
            tab[i] = t[i];
        }
    }
    return tab;
}
int main()
{
    unsigned n, ktory;
    int* t = 0;
    cout << "Podaj rozmiar tablicy: ";
    cin >> n;
    utworz(t, n);
    wyswietl(t, n);
    cout << endl;
    cout << "Ktory element usunac?: ";
    cin >> ktory;
    int* wynik = kasuj_element(t, n, ktory);
    wyswietl(wynik, n - 1);
}

Wiem,o usuwaniu tablic dynamicznych ale mi chodzi tylko o funkcję kasującą element na razie.
Napisana przez mnie nie działa prawidłowo.

1

Wychodzisz poza zakres, tablica tab ma rozmiar n - 1. Ale funkcja jest zła z innych względów. Iteracja musi być rozbita na dwie pętle:
Od i = 0 do k - 1, tab[i] = t[i];
I od i = k do n - 1, tab[i] = t[i + 1].
Dla k = 0, pierwsza pętla ma się nie wykonać, a dla k = n - 1 druga.

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