Wątek przeniesiony 2014-02-03 11:36 z C/C++ przez ŁF.

Liczenie średniej z podanych przez użytkownika wyników rzutów kostką

0

Witam,

jestem początkująca i mam do napisania program który zlicza rzuty
kostką. Użytkownik podaje wyniki, program umieszcza je w tablicy.
Następnie podaje średnią, liczbę która wypadła najwięcej razy a która
najmniej i ile razy. Niestety utknęłąm w tym momencie i nie umiem wybrnąć.

int tab[6];
tab[6]=0;
int i,j=0;
while(true)
{		
    cout<<"wprowadz wynik: ";
    cin>>i;
    if (i>=1&&i<=6)
        tab[j]=i;
    else 
        break;
}
float srednia=0;
float suma=0;
int k;
for(k=0;k<=6;k++)
    suma+=tab[j];
return 0;
0

A z czym dokładnie masz problem?

0

Nie umiem policzyć tej średniej. Nie mam nawet pojęcia jak ją policzyć. Suma tez jest źle bo nie liczy tak jak powinno

0
int tab[6];
tab[6]=0;

Wychodzisz poza zakres tablicy. UB.

int i,j=0;
while(true)
{        
    cout<<"wprowadz wynik: ";
    cin>>i;
    if (i>=1&&i<=6)
        tab[j]=i;
    else 
        break;
}

Chyba mieszasz ilość wyników i ich wartości. Wychodzisz z pętli po podaniu pierwszej liczby spoza zakresu (wygląda to dziwnie). Ponadto nie inkrementujesz j, więc za każdym razem zapisujesz do tej samej komórki pamięci.

int k;
for(k=0;k<=6;k++)
    suma+=tab[j];

Iterujesz po k, ale używasz j. Może nazywaj te zmienne pełnymi nazwami jeśli masz z tym takie problemy. Przy okazji - iterujesz 7 razy, tablica ma 6 elementów.

0

No mnie to nie dziwi.

  1. Zmienna j zawsze ma u ciebie wartość 1 więc przypisywanie tab[j] = i zawsze wykonuje tab[0] = i. Nigdy nie wczytujesz więcej... Poza tym ciekawi mnie czy u ciebie te warunki dla i nie miały być warunkami dla j
  2. Tablica tab[6] ma indeksy od 0 do 5. A ty próbujesz przy okazji wchodzić nawet do tab[6] które jest poza tablicą.
0
{
	int tab[6];
	tab[5]=0;
	int i,j=0;
	while(true)
		{		
		cout<<"wprowadz wynik: ";
		cin>>i;
			if (i>=1&&i<=6)
			tab[j++]=i;
			else 
				break;
		}
	float srednia=0;
	float suma=0;
	for(j=0;j<5;j++)
	suma+=tab[j];

Nie wiem czy o to chodzi.

1

Nie. Chodzi o to że przespałaś matematykę w podstawówce.

  1. Teraz twoja pętla z sumą sumuje o 1 element ZA MAŁO bo warunek pętli masz <5 a powinno być <6 albo <=5
  2. Nadal masz jakis dziki warunek pierwszej pętli, który ogranicza wartość i zamiast j. Czemu nie robisz tej pierwszej pętli za pomocą for() ?
  3. Nie rozumiem tego zerowania tab[5]. Co ci to niby daje? o_O
0

wartość i może być od 1 do 6, tyle oczek ma kostka

0

Wobec tego masz bzdurny warunek wyjścia (podanie innej wartości wyniku). Pobierz wartość 6 razy i kończ, nie uzależniaj tego od podanego wyniku.

0

No dobra, ale u ciebie wczytywanie rzutów od użytkownika kończy się tylko jeśli użytkownik poda liczbę mniejsza od 1 albo większą od 6. Tak miało być? Zastanów sie nad tym szczególnie że masz tablicę na 6 rzutów a nigdzie nie limitujesz ile rzutów wczytujesz od użytkownika. A jeśli on spróbuje podać więcej niż 6 rzutów to program się wysypie ;]

0

nie no poddaje się.

0

Jeśli tak słabo znosisz porażki to może faktycznie nie jest to dla Ciebie.

Zgodnie z tym, co mówisz, chcesz wczytać n liczb, każda w zakresie [x,y]. Spróbuj dla literek to rozpisać, a potem podstaw liczby (które się powtarzają i mogą przez to być mylące)

0

chciałam żeby dane wyniki przyporządkowało do danego indeksu, znaczy że np. pod tab[0] były wszystkie 1 itd

0

W takim razie chwyć za pierwszy lepszy kurs lub książkę o C++, bo wyraźnie nie masz pojęcia n/t takich podstawowych pojęć jak tablice.

1

Znaczy sie chciałaś zrobić zliczanie? No dobra, ale w takim razie zupełnie źle się za to zabrałaś. Zliczanie byłoby takie:

int tab[6]={}
//pętla z jakimśtam warunkiem stopu
  cin>>i;
  tab[i]++

I voila, w tablicy tab masz teraz zliczone dla każdego i ile razy wystąpiło.

0

o to mi chodziło, bo nie wiedziałam ile użytkownik poda wyników

ale nadal nie wiem jak policzyć srednią

0

suma(index*liczba_wystąpień /suma(liczba_wystąpień)
Ale warto mieć na uwadze że w takiej sytuacji lepiej zrobić tablicę int tab[7] i wpisywać do niej liczby 1-6, bo inaczej jest problem z 0 przy liczeniu średniej.

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