proszę o komentarz do 7 linijek kodu funkcji

0

Kręcę się wokół własnego ogona od 2 dni. Rozpocząłem naukę programowania (0,5 roku temu)od C++ i jestem na poziomie 1 tomu Grębosza. Zdawać by się mogło, że bez większego problemu ugryzę listę zadań 'Algorytmów' z 2 roku studiów pisanych w C. I jeśli zadania dotyczą tablic, prostych funkcji to ok.

Mam listę 11 zadań, gdzie struktura danych będzie zdefiniowana jako:

typedef struct osoba
{struct osoba *w_nast;
int waga;
}OSOBA, *WSKOSOBA;

Proszę o komentarz do tej struktury jak ją czytać.

Mam też rozwiązanych 5 zadań z tej listy. Proszę o skomentowanie, wytłumaczenie co dzieje się w każdej linijce najkrótszego kodu jaki wybrałem do 1 zadania. Bym mógł jakoś ruszyć dalej.

Zadanie 1 Napisać funkcję, która kasuje pierwszych n (parametr) elementów listy jednokierunkowej.

WSKOSOBA ROOT;
void kasuj_1(void);
{wskosoba pom;
if(ROOT=null)return
pom=ROOT;
ROOT=ROOT->w_nast;
}free(pom);

dalej jest pętla for wywołująca tę funkcję.

lub

Zadanie 2 Napisać funkcję, która kasuje elementy listy jednokierunkowej o pewnych cechach (np. waga > 50)

WSKOSOBA find (int cecha);
{
WSKOSOBA wsk;
if ( ROOT == NULL) return (null);
wsk = ROOT;
while (wsk -> w_nast != null && wsk->w_nast-> waga <=cecha)
{
wsk=wsk->w_nast;
}
if (wsk ->w_nast==null) return (null);
return(wsk);
void kasuj_2 (int cecha)
{wskosoba wsk;
while (1)
wsk=find (cecha);
if (wsk!= null)
  {pom=wsk->w_nast;
  wsk->w_nast=pom->w_nast;
  } free(pom);
else
  {
  if (ROOT:=null)
    {
     if (ROOT->waga=<cecha)
    }
  }
break;

Proszę o wytłumaczenie jak do konia, tak jak mnie przyzwyczaił Grębosz.

1

po pierwsze koniu, czemu żałujesz białych znaków? Nie pisz ciasno, ale czytelnie.
Poza tym masz kilka błędów w tej funkcji (tu wersja porawiona)

WSKOSOBA ROOT;

void kasuj_1(void) 
{
    if(ROOT==null) // nic nie rób jeśli lista jest pusta
        return;
    wskosoba pom=ROOT; // zapamiętaj pierwszy element
    ROOT=ROOT->w_nast; // zastąp pierwszy element następnym (moze być null)
                       // w ten sposób usuniesz z listy pierwszy element
    free(pom); // zwolnij pamięć byłego pierwszego elementu
}
0

dzięki i za krytykę.

Czy mógłby/ś jeszcze wytłumaczyć co dzieje się w zdefiniowanej strukturze i poza nią?

typedef struct osoba
{struct osoba *w_nast;// tzn co, wskaźnik jako pole struktury, który pokazuje na tę strukturę? póki co nie czaję.
int waga;
}OSOBA, *WSKOSOBA; //a tu? 
1

Może poczytaj pierwszy lepszy kurs Cpp C/C++. Jeżeli uważasz że nieuporządkowane urywki informacji które uzyskasz na forum dadzą ci lepsze zrozumienie, to się mylisz.
typedef deklaruje typy danych użytkownika. Łopatoalogicznie: przykryj ręką typedef i zastanów się jakie zmienne i jakiego typu powstaną w wyniku tej instrukcji. Z typedef'em nazwy tych zmiennych stają się "skrótami" do typów którymi by byli bez typedef'a.
struct osoba *w_nast; - wskaźnik na strukturę typu struct osoba, może to być NULL lub inna lub właśnie ta sama.

1
typedef struct osoba // deklaracja struktury `osoba`
{
 struct osoba *w_nast; // wskaźnik na kolejną strukturę typu `osoba`; dzięki temu można tworzyć listy połączone (linked list)
 int waga; // pole `waga` typu `int`
} OSOBA, *WSKOSOBA; // zadeklarowanie typu `OSOBA` oraz wskaźnika na tę strukturę o nazwie typu `WSKOSOBA`

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