• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lista - sposób zapisu kodu

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 1 lutego 2019 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

Hejka. Chciałabym się Was zapytać, czy prawidłowo rozwiązałam to zadanie z listy, o treści:
Wyznaczenie liczby elementów o nazwie "mleko"
i o strukturze:
 

typedef struct
{
	char nazwa[50];
	int ilosc;
	float cena_jedn;
	struct tTowar *next;
}tTowar;
typedef tTowar *wTowar;

wTowar poczatek, koniec;

Próba napisania wypadła tak:
 

int Wyszukaj(tTowar *P)
{
	int suma = 0;
	while(P!=NULL && P->nazwa!="mleko")
	{
		P=P->next;
	}
	while(P!=NULL && P->nazwa == "mleko")
	{
		if(strcmp(nazwa, "mleko")==0)
		{
			suma += P->nazwa;
			P=P->next;
		}
	}
	return suma;
}

Czy taki zapis jest poprawny?
I takie pytanko dodatkowe, w niektórych strukturach danych stosuje się w funkcji typ argumentu (tTowar *P) albo (wTowar P). Czym się to różni i czy któreś z nich jest błędem? Byłabym wdzięczna za sprawdzenie rozwiązania i odpowiedź :)

2 odpowiedzi

0 głosów
odpowiedź 1 lutego 2019 przez jankustosz1 Nałogowiec (35,880 p.)
edycja 1 lutego 2019 przez jankustosz1

Jakoś bez sensu to robisz. W pierwszej pętli idziesz do momentu aż napotkasz mleko, w drugiej dopóki są mleka pod rząd to dodajesz do sumy ich nazwę xd, już pomijając to że 2 razy sprawdzasz czy nazwa to mleko.

int count = 0;
while(p!=NULL){
  if(p->nazwa == "mleko")
     count+=p->ilosc;
  p=p->next;
}

Chyba bardziej chciałaś mieć coś takiego.

 

Edit: A odnośnie tego wTowar i *tTowar, to jest to chyba to samo, bo robisz typedefa:

typedef tTowar *wTowar;

komentarz 1 lutego 2019 przez jankustosz1 Nałogowiec (35,880 p.)
i jeszcze chyba ten wskaźnik na kolejny element musisz w konstruktorze ustawić na null

i nazwa zmień na string żeby jakoś normalnie dało się to porównywać
komentarz 1 lutego 2019 przez gorgonkowa Obywatel (1,810 p.)
Hmm... pewnie tak, tylko... zastanawiałam się, czy przy liście jest ten wyjątek, że robi się to trochę inaczej, nie ukrywam, że kodowanie jest dla mnie jak jazda samochodem we mgle bez prawa jazdy, a po prostu to prawdopodobnie ostatnie zapytanie dotyczące tego języka. Tak czy inaczej bardzo dziękuję za upewnienie :) Nie wiedziałam, że można to w taki krótki sposób zapisać, w końcu najprostsze rozwiązania czasem są najtrudniejsze :P
0 głosów
odpowiedź 1 lutego 2019 przez criss Mędrzec (172,590 p.)

Nie mam pojęcia po co jest ta pętla:

    while(P!=NULL && P->nazwa!="mleko")
    {
        P=P->next;
    }

 Btw. porównanie `P->nazwa!="mleko"` porównuje wskaźniki (adresy), ciągi znaków w C porównuje się za pomocą strcmp.

W drugiej pętli warunek `P->nazwa == "mleko"` jest zarówno niepoprawny (wyjaśnione powyżej) jak i niepotrzebny (tutaj nie wiem co ci powiedzieć, bo serio - nie wiem po co).

suma += P->nazwa;

Pomijając, że to się w ogóle nie skompiluje: wystarczy `++suma;`. suma ma zawierać liczbe elementów o nazwie mleko, tak?

To 

P=P->next;

Nie powinno być wewnątrz ifa. Chcemy przejść do następnego elementu zawsze. Obecnie masz możliwość wpadnięcia w nieskończoną pętlę.

 w niektórych strukturach danych stosuje się w funkcji typ argumentu (tTowar *P) albo (wTowar P). Czym się to różni i czy któreś z nich jest błędem?

wTowar to typedef (alias dla nazwy typu) oznaczający dokładnie tTowar*. Więc nie - niczym się nie różni i żadno nie jest błędne. 

Podobne pytania

0 głosów
1 odpowiedź 241 wizyt
0 głosów
1 odpowiedź 126 wizyt
pytanie zadane 31 stycznia 2019 w C i C++ przez gorgonkowa Obywatel (1,810 p.)
0 głosów
3 odpowiedzi 120 wizyt
pytanie zadane 28 maja 2018 w HTML i CSS przez Majki Obywatel (1,410 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...