Sprawdzenie zadania [C]

0

Witam. Mam pewnie problem z zadaniem z C. Otóż mam do napisania funkcję, która przechodzi po liście struktur { wiek, pensja, i wskaźnik do nastepnego}, i oblicza średnią pensji pracowników mających pomiędzy 25, a 30 lat ....napisałem coś takiego:
[code]
float srednia (struct element * head){
struct element * tmp;
float 0.0;
int i;
for (tmp=head; tmp->nast!=NULL; tmp=tmp->nast){
if(tmp->wiek<30 && tmp->wiek>25){
x=x+tmp->pensja;
i++;
}
}
return x/i;
}[/code]

0

float 0.0;
to chyba miało być
float x = 0.0;

Ja bym jeszcze zmienił:

if(tmp->wiek<30 && tmp->wiek>25){

na

if(tmp->wiek<=30 && tmp->wiek>=25){


Opolski Portal Programistyczny
http://programowanie.opole.pl

0

float 0.0; miało chyba być float x=0.0;

poza tym:

for(a;b;c)
  //i

to:

a
while(b)
  //i
  c()

Więc w sprawdzeniu warunku dając tmp->nast!=NULL nie będzie sprawdzany ostatni element. Skoro w trzeciej części for dajesz tmp=tmp->nast, to przy sprawdzeniu (zaraz po tym przypisaniu) będzie sprawdzany następny już tego po przypisaniu.

0

tam oczywiście miał być x przy tym float'cie, racja.

Natomiast co do samej pętli to rzeczywiście ostatni nie jest brany pod uwagę. Ale nie mam pomysłu na inny warunek graniczny. Czy można by było zrobić w ten sposób, że po wyjściu z tego for'a dać drugiego, który przechodzi na koniec listy i potem w return zamiast x/i dać x+tmp->pensja / i+1?? To strasznie na około i wydaje mi się, że jest lepszy sposób na rozwiązanie tego zadania, ale nie mogę na niego wpaść. Albo może po wyjściu z fora dać tmp=tmp+1 i potem x+tmp/i+1? Dopiero ogarniam te listy, i trochę się gubię we wskaźnikach, stąd takie pytania.

0

moze po prostu tak: for (tmp=head; tmp!=NULL; tmp=tmp->nast) // w zasadzie tmp!=NULL mozna by zapisac jako samo tmp, ale dla poczatkujacych moze to byc malo czytelne
poza tym
int i=0; powinno byc na poczatku zamiast int i; <-- to nie gwarantuje ze bedzie zerem na poczatku.
poza tym nie mozesz zalozyc ze na liscie bedzie w ogole jakas osoba o takim wieku wiec na koncu powinno byc:
if (i!=0)
return x/i;
else
return 0; //mozesz jakis blad dopisac ewentualnie

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