Gdzie jest błąd w średniej i sumie co 3 liczby?

0
#include <iostream>
#include <cstdlib>

using namespace std;

const int N = 15;
int sumatab(int n,int tab[])
{
   int s=0,i;
   for(i=0;i<n;i++)
      s=s+tab[i];
   return s;
}
int sredniatab(int n,int tab[])
{
    int sr=0,i,srdz;
    for(i=0;i<n;i++)
      sr=sr+tab[i]/N;
    return sr;
   
}
int sumaoddotab(int n,int tab[])
{
    int soddo,suma,i;
    for(i=0;i<n;i++)
      soddo=suma+tab[3]+tab[6]+tab[9]+tab[12]+tab[15];
    return soddo;
}
int main()
{
  int d[N],i,suma=0,srednia=0,sumaoddo=0;
  for(i = 0; i < N; i++) d[i] =rand() % 100;
  for(i = 0; i < N; i++) cout << "  " << d[i];



  suma=sumatab(N,d);
  srednia=sredniatab(N,d);
  sumaoddo=sumaoddotab(N,d);

  cout<<endl<<"suma tablicy="<<suma;
  cout<<endl<<"srednia tablicy="<<srednia;
  cout<<endl<<"suma co trzeciej wygenerowanej liczby z tablicy -> razem 5 ="<<sumaoddo;
}

ktoś mi podpowie dlaczego średnia i sumaoddo wychodzi błędna o kilka?

1

Wychodzisz po za zakres tablicy:
const int N = 15; -> int d[N] -> sumaoddotab(N,d); -> tab[15]
int tab[N] tworzy tablice z indexami od 0 do N-1, czyli w sumie N elementów, ty natomiast podając tab[15] tak naprawdę próbujesz odwołać się do 16 elementu tablicy (której wielkość wynosi 15).

A średnią źle liczysz, wpierw zsumuj wszystkie elementy, a następnie zwróć sumę / ilość_elementów

2

Co do

int sumaoddotab(int n,int tab[])
{
    int soddo,suma,i;
    for(i=0;i<n;i++)
      soddo=suma+tab[3]+tab[6]+tab[9]+tab[12]+tab[15];
    return soddo;
}

Sumujesz n razy element 4,7,13,16 z tablicy 16 nawet w tej tablicy nie ma a sumowanie tych elementów n razy też nie robi tego co ma robić

2

Srednia wychodzi mocno błędna bo w każdej iteracji dzielisz element tablicy przez ilość elementów, więc reszta z dzielenia jest odrzucana gdyż operujesz na intach. Zsumuj najpierw wszystkie elementy a potem podziel, wynik też błędny ale tylko o resztę z ostatniego dzielenia.

0
Oggy napisał(a):

Srednia wychodzi mocno błędna bo w każdej iteracji dzielisz element tablicy przez ilość elementów, więc reszta z dzielenia jest odrzucana gdyż operujesz na intach. Zsumuj najpierw wszystkie elementy a potem podziel, wynik też błędny ale tylko o resztę z ostatniego dzielenia.

Oki dziękuję już wiem co muszę zrobić :D Z każdym takim zadaniem wydaje się to coraz bardziej łatwiejsze :DDD Dzięki!

1

Dalej wydaje mi się ,że sumę co trzeciego masz źle. Chyba chodziło ci o taki efekt

int sumaoddotab(int n, int tab[])
{
    int soddo=0, i;
    for (i = 2; i < n; i+=3)
        soddo += tab[i];
    return soddo;
}

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