Znajdowanie minimum tablicy z użyciem wyłącznie wskaźników

0

Cześć,

Ostatnio na uczelni przerabialiśmy wskaźniki, ale ja w ogóle ich nie rozumiem. Jako jedno z kilkunastu zadań do zrobienia, chciałbym aby ktoś na poniższym przykładzie wyjaśnił mi pokrótce co i jak powinienem zrobić. Treść wraz z tym co dotychczas napisałem znajduje się w kodzie poniżej.

/*
Napisz funkcję min, która przyjmuje tablicę liczb rzeczywistych oraz jej długość i zwraca indeks najmniejszego
elementu tej tablicy. Jeżeli w tablicy jest kilka takich elementów, funkcja zwraca indeks któregokolwiek
z nich. Nie używaj indeksów tablicy ani żadnych zmiennych całkowitych, a jedynie wskaźników.
Napisz program min, który czyta ze standardowego wejścia dowolną długość tablicy liczb rzeczywistych,
wypełnia tę tablicę liczbami losowymi i wypisuje na standardowe wejście wszystkie elementy tablicy wraz
z indeksami oraz wartość i indeks elementu najmniejszego.
*/

#include <iostream>

using namespace std;

float min(float *tablica, int d)
{
    tablica[0] = 0.998749;
    tablica[1] = 0.162389;
    tablica[2] = 0.229255;
    tablica[4] = 0.739219;


        for(int i = 0; i<d; i++)
        {
            cout << tablica[i] << endl;
        }
}

int main()
{
    int d;
    cout << "Podaj długość tablicy" << endl;
    cin >> d;

    float *tablica;
    tablica = new float [d];

    min(tablica, d);

    delete [] tablica;
    return 0;
}

1

Funkcja min ma nic nie przypisywać, ma tylko zwrócić indeks dowolnego z najmniejszych elementów.

Aby zmniejszyć czytelność kodu, nie możesz korzystać z indeksów ani zmiennych całkowitych, operując wyłącznie na wskaźnikach. Tak więc zastosowanie operatora [] jest nie na miejscu, zamiast tego musisz iterować po tablicy za pomocą wskaźnika, tak długo jak będzie on różny od początek+wielkość.

Swoją drogą, zadanie jest bzdurne. Zakaz użycia zmiennych całkowitych powoduje, że nie masz jak zapisać wielkości tablic, która jest wielkością całkowitą.

0
kq napisał(a):

jest nie na miejscu, zamiast tego musisz iterować po tablicy za pomocą wskaźnika, tak długo jak będzie on różny od początek+wielkość.

Hmm a jak iterować za pomocą wskaźnika? Może pytanie jest banalne, ale od tego są pytania, aby wiedzieć, prawda?

0

Pewnie, chociaż takie rzeczy znajdziesz w pierwszym lepszym kursie C lub C++ :​)

Mając wskaźnik w możesz go przesuwać za pomocą instrukcji pre-/postinkrementacji i, analogicznie, -dekrementacji: ++w/w++/--w/w--. Możesz też po prostu dodawać do niego wartości, np. w+1 albo w += 1, ale nie wiem czy w tym dziwnym zadaniu nie będzie to uznane za korzystanie z indeksów, bo korzystanie z liczb całkowitych to jest na pewno.

Dodatkowo, poza takimi zadaniami, staraj się unikać arytmetyki wskaźników, ponieważ są lepsze alternatywy, a tutaj łatwo popełnić błąd.

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