Witam! Moim zadaniem jest napisanie programu wczytującego funkcję sinusa jedno połówkowego oraz jego współczynników takich jak np. amplituda, a następnie w określonej dziedzinie zaszumienie losowych wartości sygnału sinusoidalnego losowymi wartościami. Wszystko jest okej, programik się kompiluje, ale po wpisaniu wszystkich potrzebnych danych pojawia się taki oto błąd:
(kod programu poniżej)
Zgłoszono wyjątek: naruszenie dostępu do zapisu.
tablica_wynikowa było 0x1100000
#define _CRT_SECURE_NO_WARNINGS //sin jednopołówkowy
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<locale.h>
void wczytanie_rozmiaru(int rozmiar);
void dziedzina(double* poczatek_dz, double* koniec_dz);
void parametry_wejsciowe(double* tab_wspolczynnikow);
void wartosci_funkcji_od_parametrow(double* tab_wspolczynnikow, double* tablica_wynikowa, double* poczatek_dz, double* koniec_dz, int rozmiar);
void wypisz_wartosci(double* tablica_wynikowa, int rozmiar);
void szumy(double* tab_szumy, double* poczatek_dz, double* koniec_dz);
//void filtr_sredniej(double* tab_szumy, double* tab_odfiltrowana, int rozmiar);
//void filtr_medianowy(double* tab_szumy, double* tab_odfiltrowana, int rozmiar);
//void CSV_zapis(double* tablica_wynikowa, double* tab_szumy, double* tab_odfiltrowana, int rozmiar);
int main()
{
srand(time(NULL));
setlocale(LC_ALL, "polish_poland");
int rozmiar;
wczytanie_rozmiaru(&rozmiar);
double poczatek_dz;
double koniec_dz;
dziedzina(&poczatek_dz, &koniec_dz);
double* tab_wspolczynnikow;
tab_wspolczynnikow = calloc(rozmiar, sizeof(double));
parametry_wejsciowe(tab_wspolczynnikow);
double* tablica_wynikowa;
tablica_wynikowa = calloc(rozmiar, sizeof(double));
double* tab_szumy;
tab_szumy = calloc(rozmiar, sizeof(double));
wartosci_funkcji_od_parametrow(tab_wspolczynnikow, &tablica_wynikowa, &poczatek_dz, &koniec_dz, &rozmiar);
wypisz_wartosci(&tablica_wynikowa, rozmiar);
szumy(&tab_szumy, &poczatek_dz, &koniec_dz);
return 0;
}
void wczytanie_rozmiaru(int* rozmiar)
{
int temprozmiar;
printf("Podaj rozmiar tablicy wynikowej:\n");
scanf("%d", &temprozmiar);
*rozmiar = temprozmiar;
}
void dziedzina(double* poczatek_dz, double* koniec_dz)
{
do
{
printf("Podaj wartosc poczatku dziedziny:\n");
scanf("%lf", poczatek_dz);
printf("Podaj wartosc konca dziedziny:\n");
scanf("%lf", koniec_dz);
if (*poczatek_dz > *koniec_dz)
{
printf("Koniec dziedziny musi byc wiekszy niz poczatek! Sprobuj jeszcze raz!\n");
}
} while (*poczatek_dz > *koniec_dz);
}
void parametry_wejsciowe(double* tab_wspolczynnikow) //parametry funkcji zapisane w tablicy
{
printf("Podaj wartosc amplitudy:\n");
scanf("%lf", &tab_wspolczynnikow[0]);
printf("Podaj wartosc przesunieca fazowego (w osi x):\n");
scanf("%lf", &tab_wspolczynnikow[1]);
printf("Podaj wartosc przesuniecia po osi y (osi wartosci):\n");
scanf("%lf", &tab_wspolczynnikow[2]);
}
void wartosci_funkcji_od_parametrow(double* tab_wspolczynnikow, double* tablica_wynikowa, double* poczatek_dz, double* koniec_dz, int rozmiar) //*tablica_wynikowa - tablica wyników po zastosowaniu parametrow
{
int i;
double zakres_dz;
zakres_dz = fabs(koniec_dz - poczatek_dz); //fabs - dla liczb rzeczywistych
for (i = 0; i < rozmiar; i++)
{
if (tab_wspolczynnikow[0] * (sin(*poczatek_dz + tab_wspolczynnikow[1])) + tab_wspolczynnikow[2] < 0)
{
*tablica_wynikowa++ = 0;
}
else
{
*tablica_wynikowa++ = tab_wspolczynnikow[0] * (sin(*poczatek_dz + tab_wspolczynnikow[1]) + tab_wspolczynnikow[2]);
}
*poczatek_dz = *poczatek_dz + (zakres_dz / rozmiar);
}
}
void wypisz_wartosci(double* tablica_wynikowa, int rozmiar)
{
int i;
for (i = 0; i < rozmiar; i++)
{
printf("%d wartosc z dziedziny wynosi : %lf\n", i, tablica_wynikowa[i]);
}
}
void szumy(double* tab_szumy, double* poczatek_dz, double* koniec_dz)
{
double zaszumic_czy_nie;
int j;
double poczatek_szumu;
double koniec_szumu;
int b = (int)*poczatek_dz;
int c = (int)*koniec_dz;
poczatek_szumu = *poczatek_dz + rand() % (c - b + 1);
do
{
koniec_szumu = *poczatek_dz + rand() % (c - b + 1);
} while (poczatek_szumu >= koniec_szumu);
for (j = poczatek_szumu; j <= koniec_szumu; j++)
{
zaszumic_czy_nie = rand() % 2;
if (zaszumic_czy_nie == 1)
{
tab_szumy[j] = rand() % 100 + 10;
}
printf("Wartosc %d po zaszumieniu - %lf\n", j, tab_szumy[j]);
}
}
Nie bardzo wiem jak sobie w tym poradzić. Będę wdzięczny za każdą, nawet drobną pomoc.
Z góry dzięki!
HypheN