Problem z funkcjami - operacje na tablicach

0

Witam, mam problem z napisaniem osobnych funkcji dla operacji na tablicach. Chciałbym wywoływać je w programie głównym, podejrzewam, że popełniam błędy w deklaracjach zmiennych.
Wyniki mogą być zwracane dowolnie czy to przez return czy wskaźnik.

Byłbym wdzięczny za każdą radę.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static const int N = 50;

int main()
{
    srand((unsigned int)time(NULL));
    int tab[N], i, a, ile1;
    float srednia, suma;
    ile1 = 0;
    suma = 0;
    srednia = 0;

    for (i=0;i<=N;i++) //funkcja losuj
    {
        tab[i] = rand()%25;
    }

    for (i=0;i<=N;i++) //funkcja powyzej15
    {
        if (tab[i] > 15)
            ile1 = ile1 + 1;
    }

    for (i=0;i<=N;i++) //funkcja suma
    {
        suma = suma + tab[i];
    }

    for (i=0;i<=N;i++) //funkcja srednia
    {
        srednia = suma/N;
    }

    printf("ile powyzej 15: %d\n", ile1);
    printf("suma wszystkich elementow: %.0f\n", suma);
    printf("srednia wszystkich elementow %.2f", srednia);

    return 0;
}

0

Jak na razie nie masz żadnych funkcji poza main.

0

O tym wiem, dlatego proszę o pomoc. Szczególnie w kwestii deklaracji tablicy w osobnej funkcji, bo podejrzewam, że w tym miejscu popełniam błąd.

Załóżmy, że chce wypełnić tablicę stosując funkcję losuj();

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>

static const int N = 50;

int losuj (int tab[N])
{
    int i;
    for (i=0;i<=N;i++) //funkcja losuj
    {
        tab[i] = rand()%25;
    }
}

int main()
{
    srand((unsigned int)time(NULL));
    int tab[N], i;
    losuj(tab[N]);
    return 0;
}

Wtedy wysypuje mi się program, czy powinienem zastosować jakieś wskaźniki?

1

Błąd Ci wyrzuca bo próbujesz wyjść poza rozmiar tablicy tutaj:

 i<=N

powinno być:

 i<N

lub

i<=N-1

gdyż tablica jest numerowana od 0, do N-1

Jeśli chodzi o samą funkcję, to musisz przekazać do funkcji wskaźnik, nie możesz całej tablicy.

Na szybko:

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

using namespace std;

 static const int N = 50;
void losuj(int* t)
{
	for (int i = 0;i < N;i++)
		t[i] = rand() % 25;
}
int main()
{
	srand(time(NULL));
	int* tab = new int[N];//tworzenie tablicy
	losuj(tab);
	for (int i = 0;i < N;i++)
		cout << tab[i] << endl;
	delete[] tab;//zwalnianie pamięci
	tab = NULL;

   cin.get();
}
0

No i tutaj mam problem, bo kombinowałem na różne sposoby i średnio mi to wychodzi :/ Czy mógłbyś na tym przykładzie podpowiedzieć w jaki sposób to zrobić?

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