From 85953609631c2001aefe78a6b5177e137bbcc00b Mon Sep 17 00:00:00 2001 From: Frederik Beimgraben Date: Sat, 11 Jan 2025 19:31:20 +0100 Subject: [PATCH] Add add all remaining MMS-Functions; Questions remain open; Add Region markers --- MMS24-25.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/MMS24-25.c b/MMS24-25.c index 3ebcef8..c924e69 100644 --- a/MMS24-25.c +++ b/MMS24-25.c @@ -19,6 +19,7 @@ #include #include +// #region Error Handling and Debugging void _error(char *fmt, ...) { fprintf(stderr, "<\x1B[31;1m ERROR \x1B[0m: \x1B[34m'"); @@ -55,7 +56,9 @@ void _warn(char *fmt, ...) { fprintf(stderr, "'\x1B[0m\n"); } +// #endregion +// #region Aufgabe 1 double interpolateLine( double dX1, double dY1, @@ -256,3 +259,75 @@ MMSignal *createSignalFromSignal(MMSignal *pmmsIn) { return signal; } + +MMSignal *createSignalWithDefault(int iArrayLen, double dDefaultValue) { + MMSignal *signal = createSignal(); + + signal->pdValues = (double*) malloc(sizeof(double) *iArrayLen); + if (signal->pdValues == NULL) + _error("createSignalWithDefault: Failed to allocate memory for signal->pdValues\n"); + + for (int i = 0; i < iArrayLen; i++) { + signal->pdValues[i] = dDefaultValue; + } + + signal->iNumValues = iArrayLen; + + return signal; +} + +MMSignal *createSignalFromDoubleArray(int iArrayLen, double *pdIn) { + MMSignal *signal = createSignal(); + + signal->pdValues = (double*) malloc(sizeof(double) *iArrayLen); + if (signal->pdValues == NULL) + _error("createSignalFromDoubleArray: Failed to allocate memory for signal->pdValues\n"); + + for (int i = 0; i < iArrayLen; i++) { + signal->pdValues[i] = pdIn[i]; + } + + signal->iNumValues = iArrayLen; + + return signal; +} + +MMSignal *createSignalFromFile(char *pcInName) { + double *pdIn = NULL; + int iArrayLen = readDoubleArray(pcInName, &pdIn); + + MMSignal *signal = createSignal(); + + signal->pdValues = (double*) malloc(sizeof(double) *iArrayLen); + if (signal->pdValues == NULL) + _error("createSignalFromFile: Failed to allocate memory for signal->pdValues\n"); + + for (int i = 0; i < iArrayLen; i++) { + signal->pdValues[i] = pdIn[i]; + } + + signal->iNumValues = iArrayLen; + + return signal; +} + +void writeMMSignal(char *pcInName, MMSignal *pmmsIn) { + writeDoubleArray( + pmmsIn->pdValues, + pmmsIn->iNumValues, + pcInName + ); +} + +void deleteSignal(MMSignal *pmmsIn) { + free(pmmsIn->pdValues); + free(pmmsIn->pexExtrema->pexLocalMax->piLocalExtremaPos); + free(pmmsIn->pexExtrema->pexLocalMax); + free(pmmsIn->pexExtrema->pexLocalMin->piLocalExtremaPos); + free(pmmsIn->pexExtrema->pexLocalMin); + free(pmmsIn->pexExtrema); + free(pmmsIn); +} +// #endregion + +// #region Aufgabe 2