Wyliczanie średniej ważonej-program


(Cinus4444) #1

Witam

Mam taki mały problem: muszę napisać program który będzie liczył średnią z ocen, to znaczy średnią normalną i średnią ważoną (ważoną tzn.waga oceny np.sprawdzian waga 3,odpowiedź-2, a praca domowa 1)

I niestety nie mam zielonego pojęcia jak się za to zabrać.

Program ma działać na systemie Windows (chociaż nie wiem czy to ma jakieś znaczenie)

Proszę o szybkie odpowiedzi.

Pozdrawiam

cinus4444


(Jaromir Zurawski) #2

A jaki język?


(Tomek Matz) #3

Tu masz wzorki (nieprawdopodobnie skomplikowane :D): http://matematyka.pisz.pl/strona/1026.html.


(toones) #4

jeśli chcesz mogę Ci podesłać skrypt w Excelu :smiley:


(Tomek Matz) #5

Nudziło mi się i napisałem sobie ten programik. Żeby go uruchomić musisz zainstalować to:

(jeśli jeszcze nie masz).

Stąd możesz pobrać program (uruchamiasz poprzez dwukrotne kliknięcie exe):

http://rapidshare.com/files/435034883/Mean.zip

Jako wagi i oceny możesz podawać liczby zmiennoprzecinkowe, czyli np. 4,5.

EDIT: Dodałem, żeby sprawdzało, czy waga i ocena są nieujemne oraz czy ocena jest z przedziału 1 do 6.


(Atw93) #6

Średnia może być powyżej 6 :wink: Przyjmując, że otrzymujesz same oceny celujące i do tego punkty dodatkowe to jest taka możliwość. Tylko tutaj chyba nie było mowy o tych punktach. Ale jeśli chce komuś się bawić to można jeszcze to zmienić:slight_smile:


([alex]) #7

lolu1133 , średnia ważona nie może być większa niż maksymalna wartość ani też mniejsza od minimalnej.


(Damgora) #8

obiektowe podejście :wink: (w javie):

public class Ocena {

	final private int ocena;

	final private float waga;


	public Ocena(final int ocena) throws Exception{

		this(ocena, 1);

	}


	public Ocena(final int ocena, final float waga) throws Exception{

		if (waga > 0)

			this.waga = waga;

		else

			throw new Exception("Waga musi być większa od 0");

		if(ocena >=1 && ocena <= 6)

			this.ocena = ocena;

		else

			throw new Exception("Ocena może mieć wartości od 1 do 6");

	}


	public static float srednia(final Ocena[] oceny){

		float suma = 0f;

		float wagi = 0f;

		for(Ocena ocena:oceny){

			suma += ocena.waga*ocena.ocena;

			wagi += ocena.waga;

		}

		return suma/wagi;

	}

}

a bez kombinowania do jednej zmiennej dodajesz kolejne wartości ocena*waga, do drugiej same wagi, na koniec je dzielisz i masz średnią :slight_smile: (zresztą wzory masz już podane)

dla średniej arytmetycznej wagi ustawiasz zawsze na 1


(somekind) #9

Walidację parametrów ładniej jest robić na początku metody/konstruktora. Wtedy wyjątki związane z ich niepoprawnymi wartościami są oddzielone od właściwego kodu metody, jest to czytelniejsze niż takie pomieszanie.

Skoro to ma być podejście obiektowe, to czemu metoda obliczająca średnią znajduje się w klasie Ocena? Ponadto metody powinno nazywać się wyrażeniami czasownikowymi, a nie rzeczownikami.


(Cinus4444) #10

Tak szczerze powiedziawszy to od dłuższego czasu staram się to zrozumieć, ale jakoś nie jestem w stanie.Pewnie dlatego,że jestem kompletnym laikiem.

Jeżeli panowie możecie to proszę o wytłumaczenie tego jeszcze raz i powoli i zaczynając od tego jakiego w ogóle programu do tego użyć.

Pozdrawiam

cinus4444


(Drobok) #11

matzu , podał ci gotowca, którego wystarczy ściągnąć wpisać dane i sam ci policzy

Natomiast cayman3_11 , podał ci kod w javie który musisz odpalić za pomocą kompilatora np jdk. Sam ci nie doradzę które są najlepsze bowiem z tego języka jestem zielony ;]

Co do ostatniej wypowiedzi to nie była ona skierowana do ciebie, ja sam ledwo rozumiem zdania pisane takim językiem ;]

Jeśli chcesz kod w danym języku programowania raczej powinieneś podaj jaki to język ;p

Ja polecam c++ i visual c++ jako kompilator, albo excela który przecież do takich zadań służy ;]


(Cinus4444) #12

W takim razie mam pytanie: który kompilator ściągnąć z tej strony: http://www.oracle.com/technetwork/java/javase/downloads/index.html?

I wtedy jak to skompiluje to dostanę program czy za każdym razem będę musiał to uruchamiać tym programem,bo będę to potrzebował uruchomić w szkole, a tam nie będę miał tego oprogramowania?