koot Temat założony przez niniejszego użytkownika |
Średnia ważona z nieokreśloną liczbą argumentów » 2017-12-19 19:32:46 Cześć! Mam do napisania funkcję, która obliczy średnią ważoną wg tego wzoru: a1p1 + a2p2 +···+ anpn + an+1(1−p1 −p2 −···−pn). Jej jedyny określony argument to n. Pozostałe argumenty to ciąg liczb typu double postaci a1,p1,a2,p2,...,an,pn,an+1. Ponadto funkcja ma sprawdzać podane warunki pi >= 0 dla i = 1,2,...,n; pi <= 1 dla i = 1,2,...,n; p1 + p2 +···+ pn <= 1. Przygotowałem sobie taki oto szkielet funkcji, ale nie za bardzo wiem, jak go wypełnić. Ktoś mógłby pomóc? double sredniaWazona( unsigned int n,...) { va_list ap; unsigned int i; double * wagi = new double[ n ]; double * oceny = new double[ n + 1 ]; va_start( ap, n ); for( int i = va_arg( ap, unsigned int ); i < n; i = va_arg( ap, unsigned int ) ) { } va_end( ap ); } |
|
pekfos |
» 2017-12-19 19:47:36 Ta pętla nie ma żadnego sensu. |
|
koot Temat założony przez niniejszego użytkownika |
» 2017-12-19 20:30:21 @pekfos: Dlatego proszę o pomoc. Bo nie wiem, jak to zrobić. |
|
pekfos |
» 2017-12-19 21:16:10 Jeśli rozumiesz działanie va_arg, to nie widzę żadnych problemów do rozwiązania. Tzn jak już wywalisz tą pętlę i wstawisz nową, taką z sensem tym razem. Jeśli rozumiesz użycie tu tablic, to z tym też nie będzie żadnych problemów. |
|
koot Temat założony przez niniejszego użytkownika |
» 2017-12-19 21:28:41 A jednak problem jest. I liczyłem chociaż na podpowiedź. Ale skoro to problem, to ok. |
|
pekfos |
» 2017-12-19 21:40:36 No, i jaki to problem? Ile trzeba ciągnąć za język, by dostać coś bardziej konkretnego od "nie wiem jak zrobić", "proszę o pomoc".. Podpowiedź dostałeś i jakoś to specjalnie wiele nie dało. To co nie wiesz jak zrobić..? Jak napisać pętlę która wypełnia tablicę czymkolwiek? Podstaw 'cokolwiek' na va_arg i gotowe, aby tylko wczytywać odpowiednią daną do odpowiedniej tablicy. |
|
koot Temat założony przez niniejszego użytkownika |
» 2017-12-19 21:44:42 Chciałem zrobić tablice, do których bym wczytywał do jednej wartości a, do drugiej - p. Ale nawet nie wiem, czy to dobry pomysł. Czy może da się to zrobić jakoś prościej. Może tak powinna wyglądać pętla? for(int i=0;i<n;i=va_arg(ap,double))
|
|
pekfos |
» 2017-12-19 22:13:35 Chciałem zrobić tablice, do których bym wczytywał do jednej wartości a, do drugiej - p. Ale nawet nie wiem, czy to dobry pomysł. |
Tablice nie są tu potrzebne. Sumować elementy możesz na bieżąco. Może tak powinna wyglądać pętla? for(int i=0;i<n;i=va_arg(ap,double)) |
Czyli jednak nie rozumiesz działania va_arg. Ta pętla ma mieć dokładnie n przebiegów i to jest jedyne co powinno tu wpływać na jej wygląd. |
|
« 1 » 2 3 4 |