Średnia tablicy

0

Witajcie

Mam problem z programem w C++, otóż losuję tablicę o podanej liczbie elementów w podanym przedziale i wykonuje na tej tablicy różne operacje, i oczywiście ta najprostsza nie chce wyjść mianowicie obliczanie średniej arytmetycznej tej tablicy. Za każdym razem losowane są dziwne wartości z "kosmosu". Proszę o zerknięcie w kod, może jest coś oczywistego na co nie zwracam uwagi. Pozdrawiam Daniel

 
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <cstdlib>
 
using namespace std;
//--------------------------------- Czytanie danych/przypisywanie zmiennych do tablicy 
void czyt_dane(int A[], int &n){
        int a, b, i;
        cout << "Podaj początek przedziału" << endl;
        cin >> a;
        cout << "Podaj koniec przedziału" << endl;
        cin >> b;
        cout << "Podaj rozmiar tablicy <=100" << endl;
        cin >> n;
        n = n - 1;
        for (i = 0; i <= n; i++){
                A[i] = (rand() % (b - a + 1)) + a;
        }
}
//---------------------------------- Rysowanie tablicy
void pisz_tab(int A[], int n){
        int i, przecinek = 0;
        cout << "oto tablica" << endl << endl;
        for (i = 0; i <= n; i++){
                cout << A[i] << '\t';
                przecinek++;
                if (przecinek == 10) {
                        przecinek = 0;
                        cout << endl;
                }
        }
}
//-------------------------------------Liczenie średniej arytmetycznej
float srednia(int A[], int n){
        int i;
        float suma = 0;
        float sr = 0;
        for (i = 0; i <= n; i++){
                suma += A[i];
        }
        sr = suma / n;
        return sr;
}
int _tmain(int argc, _TCHAR* argv[])
{
	char wybor;
	int A[100], n;
	czyt_dane(A, n);
	pisz_tab(A, n);
	do{
		switch (menu()) {
		case 1:
			srednia(A, n);
			cout << srednia;
			break;                        // to nie cały main
}
1

A gdzie klamra zamykająca tą funkcję?

0

nie skopiowałem przypadkiem, na pewno nie to jest błędem a to z racji takiej że Visual nie wyrzuca żadnych błędów, program uruchamia się prawidłowo. Podczas gdy wywołuję funkcję również jest ok. Tylko wartość którą zwraca jakaś nie realna..

0
        for (i = 0; i <= n; i++){
                suma += A[i];
        }
        sr = suma / n;

Nie jestem pewien reszty kodu, ale tutaj na pewno masz błąd. Masz n+1 elementów, a liczysz średnią tak jakbyś miał ich n.

0

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
#include <algorithm>

using namespace std;
//--------------------------------- Czytanie danych/przypisywanie zmiennych do tablicy 
void czyt_dane(int A[], int &n){
	int a, b, i;
	cout << "Podaj początek przedziału" << endl;
	cin >> a;
	cout << "Podaj koniec przedziału" << endl;
	cin >> b;
	cout << "Podaj rozmiar tablicy <=100" << endl;
	cin >> n;
	n = n - 1;
	for (i = 0; i <= n; i++){
		A[i] = (rand() % (b - a + 1)) + a;
	}
}
//---------------------------------- Rysowanie tablicy
void pisz_tab(int A[], int n){
	int i, przecinek = 0;
	cout << "oto tablica" << endl << endl;
	for (i = 0; i <= n; i++){
		cout << A[i] << '\t';
		przecinek++;
		if (przecinek == 10) {
			przecinek = 0;
			cout << endl;
		}
	}
}
//-------------------------------------Liczenie średniej arytmetycznej
float srednia(int A[], int n){
	int i;
	float suma = 0;
	float sr = 0;
	for (i = 0; i <= n; i++){
		suma += A[i];
	}
	sr = suma / n;
	return sr;
}
//------------------------------------------Ile razy wystepuje ok
void ile(int A[], int n){
	int liczba, i, licznik = 0;
	cout << "podaj liczbe" << endl;
	cin >> liczba;
	for (i = 0; i <= n; i++) {
		if (A[i] == liczba) { 
			licznik++;
		}	
	}
	cout << "liczba powtarza się " << licznik << "razy" << endl;
}
//---------------------------------------nieparzyste ok
void nieparzyste(int A[], int n){
	int i, licznik = 0;
	int suma=0;
	for (i = 0; i <= n; i++){
		if (A[i] % 2 != 0){
			licznik++;
			suma += A[i];
		}
	}

	cout << "jest " << licznik << "liczb nieparzystych w tej tablicy" << "ich suma to " << suma << endl;
}
//----------------------------------min ok
void min(int A[], int n){
	int i, min,licznik=0;
	min = A[0];
	for (i = 1; i <= n; i++){
		if (A[i] <= min) {
			min = A[i];
			licznik = i+1;
		}
	}
	cout << "najmniejsza wartosc to " << min << "indeks to " << licznik << endl;
}
//-------------------------------------max ok
void max(int A[], int n){
	int i, max, licznik;
	max = A[0];
	for (i = 0; i <= n; i++) {
		if (A[i] > max) {
			max = A[i];
			licznik = i+1;
		}
	}
	cout << "najwieksza wartosc to " << max << "indeks to " << licznik << endl;
}
///-------------------------------------sasiednie ok
void sasiednie(int A[], int n) {
	int i, suma=0,naj=0;
	for (i = 0; i < n; i++) {
		suma = A[i] + A[i + 1];
		if (suma > naj) {
			naj = suma;
			
		}
	}
	cout << naj << endl;
}
//-------------------------------------------------------najczesciej ok
void najczestszy(int A[], int n) {
	int ile_razy = 0, i, j, L, W, jaka;
	for (i = 0; i < n; i++)
	{
		W = A[i]; L = 0;
		for (j = 0; j < n; j++) if (A[j] == W) L++;
		if (L > ile_razy)
		{
			ile_razy = L; jaka = W;
		}
	}
	cout << "Najczęsciej wystepujaca liczba jest " << jaka << " ukazała się " << ile_razy << "razy." << endl;
}
//-------------------------------------------------------najczesciej przes sortowanie
void najczestszysort(int A[], int n) {
	sort(A, A + n);
	pisz_tab(A, n);
	int i = 0,licznik=0,jaka=0;
	int x=A[i];
	cout << x;
	for (; i <= n; i++) {
		if (A[i] == x) {
			licznik++;
			jaka = A[i];
		}
	}
	cout << "Najczęsciej wystepujaca liczba jest " << jaka << " ukazała się " << licznik << "razy." << endl;
}

//----------------------------------------------------------------------menu
int menu(){
	int wybor;

	cout << "wybierz jedna z funkcji do wykonania" << endl;
	cout << "1. obliczanie sredniej" << endl;
	cout << "2. liczba wystapien tego samego elementu" << endl;
	cout << "3. Liczby nieparzyste oraz ich suna" << endl;
	cout << "4.Element minimalny oraz jego indeks" << endl;
	cout << "5.element maksymalny oraz jego indeks" << endl;
	cout << "6. para sasiednich elementów o najwiekszej sumie" << endl;
	cout << "7. element najczesciej wystepujacy w tablicy" << endl;
	cout << "8. element najczesciej wystepujacy w tablicy sortowanie tablicy" << endl;
	cout << "9. koniec programu " << endl;
	cin >> wybor;
	if (wybor == 8) {
		return 0;
	}
	return wybor;
}
//-----------------------------------------------------------main
int _tmain(int argc, _TCHAR* argv[])
{
	char wybor;
	int A[100], n;
	czyt_dane(A, n);
	pisz_tab(A, n);
	do{
		switch (menu()) {
		case 1:
			srednia(A, n);
			cout << srednia;
			break;
		case 2:
			ile(A, n);
			break;
		case 3:
			nieparzyste(A, n);
			break;
		case 4:
			min(A, n);
			break;
		case 5:
			max(A, n);
			break;
		case 6:
			sasiednie(A, n);
			break;
		case 7:
			najczestszy(A, n);
			break;
		case 8:
			najczestszysort(A, n);
			break;
		case 9:
			return 0;
			break;
		default:
			break;
		}
		cout << "jeszcze raz? t/n" << endl;
		cin >> wybor;
	} while (wybor == 't');
	return 0;
}
0

i jak tam widzę że nic nie udało się wykombinować ?

0
kq napisał(a):
        for (i = 0; i <= n; i++){
                suma += A[i];
        }
        sr = suma / n;

Nie jestem pewien reszty kodu, ale tutaj na pewno masz błąd. Masz n+1 elementów, a liczysz średnią tak jakbyś miał ich n.

Poza tym co to ma być:

            srednia(A, n);
            cout << srednia;
0

Utrudniles sobie juz na poczatku bo od n odejmujesz jeden a potem nie bierzesz tego pod uwage...
w fukcji sredniej powinienes dzielic przez (n+1)
Jak juz to zwrocil uwage @Patryk27 aby wypisac srednia powienien napisac

 cout << srednia(A, n) 
0

naprawione, dziekuje za pomoc :)

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