Pole obiektu w nawiasie

0

Witam,

Może mi ktoś wyjaśnić lub podrzucić materiały wyjaśniające, dlaczego to pole obiektu (inf.ogon)->nastepny=q; jest w nawiasie? Kod pochodzi z książki Wróblewskiego o algorytmach.

void LISTA::dorzuc1(int x) // dołączamy rekord na koniec listy
{ // bez sortowania; operator :: jest
ELEMENT *q=new ELEMENT; // niezbędny, bowiem definiujemy kod
q->wartosc=x; // metody poza „ciałem” klasy
q->nastepny=NULL;
if (pusta()) // lista pusta?
inf.glowa=inf.ogon=q;
else
// coś jest w liście
{
(inf.ogon)->nastepny=q; // pole następny jest
inf.ogon=q; // wskaźnikiem, stąd -> a nie . (kropka)
}
}

8
  1. za mało kontekstu
  2. W tej chwili mogę powiedzieć, że autor kodu się nie zna i sam nie wie po co mu te nawiasy, bo standardowe priorytety operatorów dają ten same efekt (gdy nie ma nawiasów).
  3. Skoro to nie twój kod, to porzuć go jaknajszybciej, bo uczysz się ze złogo źródła od którego nabawisz się "kontuzji".
0

To książka którą polecił nam wykładowca.
https://helion.pl/ksiazki/algorytmy-struktury-danych-i-techniki-programowania-wydanie-v-piotr-wroblewski,algor5.htm#format/e
Lista jednokierunkowa, wstawianie elementu bez sortowania/
Cały kod:

lista.zip

3

Co do tej książki - poczytaj recenzje. Sam jej wprawdzie nie znam, ale wiele opinii jest w stylu tych poniżej. Oczywiście - są też pozytywne, ale różnica jest taka, że dobre oceny dają osoby początkujące, a złe ludziki, którzy się znają.

Popieram @MarekR22 - lepiej poszukaj innego źródła inspiracji, bo uczenie się od początku z błędami nie jest dobrym pomysłem. Tak z ciekawości - co to za uczelnia?

Autor twierdzi że mocną stroną tej książki jest fakt że algorytmy sa napisane w C++. ALE Książka opublikowana w 2015 a autor nie używa ani C++14, ani C++11 (bardzo ważny standard zmieniający język w dużym stopniu) za to autor używa bardzo satarego standardu C++0x ... Jakość kodu: Tragedia. Podstawowe błędy. Na przykład alokowanie pamieci operatorem new i niezwalnianie jej w destruktorze. To podstawowy błąd którego uczą na pierwszym semestrze informatyki... Styl kodu: Porażka.

Książka dość przeciętna. Olbrzymią wadą są listingi z kodem. Kod jest nie czytelny i źle sformatowany. Styl programowania naprawdę fatalny. Bardzo dużo niepotrzebnej treści. Cały rozdział o algorytmach numerycznych sprawiał wrażenie wepchniętego na siłę. Tak naprawdę wydaję się, że autor nie za bardzo wiedział na czym chcę się w książce skupić i o czym pisać.

jest troszkę błędów w kodach. Co innego kod, co innego autor - ale najprawdopodobniej to nie jest wina autora tylko speców od składu tekstu

1
MarekR22 napisał(a):
  1. W tej chwili mogę powiedzieć, że autor kodu się nie zna i sam nie wie po co mu te nawiasy, bo standardowe priorytety operatorów dają ten same efekt (gdy nie ma nawiasów).

może w celu edukacyjnym, aby pokazać do czego jest ten następny, ze nie do dowolnego ogona tylko tego z obiektu inf

2

Jak widzę tą samą instrukcje inf.ogon=q; w if oraz else to wiem że pisał jakiś noob.
Zamiast smarowania po ścianach:

if (pusta())
    inf.glowa=inf.ogon=q;
else
{
    (inf.ogon)->nastepny=q;
    inf.ogon=q;
}

wystarczy:

inf.ogon=(inf.ogon?inf.ogon->nastepny:inf.glowa)=q;
0

Ok, reasumując nawiasy nic nie wnoszą. Dziękuję za pomoc.

4
MarekR22 napisał(a):
  1. za mało kontekstu
  2. W tej chwili mogę powiedzieć, że autor kodu się nie zna i sam nie wie po co mu te nawiasy, bo standardowe priorytety operatorów dają ten same efekt (gdy nie ma nawiasów).
  3. Skoro to nie twój kod, to porzuć go jaknajszybciej, bo uczysz się ze złogo źródła od którego nabawisz się "kontuzji".

Może wyjaśnię czemu ten mały fragment kodu wygląda dla mnie podejrzanie (bez wiedzy, że jest powiązany z książką):

hansikkk napisał(a):
void LISTA::dorzuc1(int x) // dołączamy rekord na koniec listy
{ // bez sortowania; operator :: jest
ELEMENT *q=new ELEMENT; // niezbędny, bowiem definiujemy kod
q->wartosc=x; // metody poza „ciałem” klasy
q->nastepny=NULL;
if (pusta()) // lista pusta?
inf.glowa=inf.ogon=q;
else
// coś jest w liście
{
(inf.ogon)->nastepny=q; // pole następny jest
inf.ogon=q; // wskaźnikiem, stąd -> a nie . (kropka)
}
}

  1. Pisany po polsku (każdy kod powinien być pisany po angielsku, to ma być odruch)
  2. Dziwna konwencja nazewnictwa (symbole typów mają nazwy w UPPER CASE) - w każdym standardzie jaki znam i używanym w przemyśle tylko makara są upper case.
  3. Jawne użycie new https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/
  4. dziwna nazwa metody dorzuc - taka próba wstawienie ulicznego slangu
  5. zalew komentarzy - ok jeśli to kod z książki ma to częściowo jest to wyjaśnienie, ale nadal to jest za dużo komentarzy.
  6. brak dbałości i klamry (jeśli else ma klamry to normalna gałąź kodu też powinna mieć klamry - nie jest to wymóg formalny, ale ustalona norma dobrych praktyk programowania w C i pochodnych językach)
  7. No i oczywiście te nawiasy
  8. Brak wcięć, ale to pewnie tobie zniknęło podczas przenoszenia kodu do pytania.

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