Wpis z mikrobloga

Mam mały problem ze zrealizowaniem jednego zadania ze wskaźnikami. Tablica wskaźników ma być posortowana od najmniejszej do największej. https://pastebin.com/t4EVBKBg treść zadania: http://prntscr.com/mvgf3n
Nie wiem jak zrobić, żeby już nie brało pod uwagę tej najmniejszej, żeby było to ładnie posortowane. W tym momencie ciągle mi wyrzuca wyłącznie jedną najmniejszą liczbę z całej tablicy. Może ktoś poratuje i wie jak to zrobić? Może źle zrozumiałem zadanie? #programowanie #cplusplus
  • 3
  • Odpowiedz
@aircod: na razie nie skupię się na tym dlaczego nie działa, a co jest w ogóle źle

linijka 9. sizeof(tab) zwróci ci rozmiar wskaźnika, a nie rozmiar tablicy. dlaczego? bo argument funkcji to jest pointer, nie tablica, przekaż normalnie wskaźnik i rozmiar tablicy. co więcej, gdyby to nawet była statyczna tablica, to sizeof zwróciłby ci rozmiar*sizeof(int), czyli prawdopodobnie(zakładając architekturę x86), wartość 4x większą niż rozmiar tablicy.
zatem void wypelnij(int tab[]) powinno
  • Odpowiedz
@MamCieNaHita Może spróbowałbym użyć vectora, tylko czasami można na tych studiach zgłupieć bo wykładowcy grzmią, że korzysta się z rzeczy, które nie zostały jeszcze dokładnie zaprezentowane na wykładzie i wybiega się za daleko na przód. Nawet jak zapiszę wskaźnik na wartość do tej tablicy to zapiszę ten wskaźnik na tę jedną najmniejszą wartość. Jak to zrobić, żeby szukało kolejnych najmniejszych nie biorąc już pod uwagę tej zapisanej?
Dziękuje za rozległą i merytoryczną
  • Odpowiedz
@aircod: potrzebujesz przynajmniej dwóch zagnieżdżonych forów.

pierwszy, zewnętrzny for, który będzie określać której kolejnej "minimalnej" będziesz szukać.
teraz jesteśmy w środku tego fora.
dla pierwszej "minimalnej" sprawa jest prosta - znajdujemy indeks najmniejszego elementu i zapisujemy wskaźnik do tego elementu.
dla drugiej, i każdej kolejnej "minimalnej" sprawa jest już złożona
najpierw musimy sprawdzić, czy gdzieś dalej w tablicy nie ma kolejnej takiej samej wartości jak poprzednio znaleziona - jeżeli tak, to
  • Odpowiedz