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]
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
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.
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.
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