Compare commits

..

No commits in common. "KTobi2" and "main" have entirely different histories.
KTobi2 ... main

8 changed files with 31 additions and 145 deletions

8
.gitignore vendored
View File

@ -1,10 +1,4 @@
mnist
runTests
*.o
*.exe
.vscode/settings.json
.vscode/launch.json
.vscode/settings.json
.vscode/settings.json
runImageInputTests
testFile.info2
*.exe

View File

@ -1,3 +0,0 @@
{
"makefile.configureOnOpen": false
}

View File

@ -1,2 +0,0 @@
# Projekt 2 für Informatik 2 Praktikum

View File

@ -7,49 +7,16 @@
#define FILE_HEADER_STRING "__info2_image_file_format__"
// TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei
GrayScaleImage readImage()
{
}
// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen
GrayScaleImageSeries *readImages(const char *path)
{
unsigned short * numImages;
unsigned short * breiteBilder;
unsigned short * laengeBilder;
GrayScaleImageSeries *series = NULL;
FILE *file = fopen(*path,"rb");
char * headOfFile;
fread(headOfFile, sizeof(FILE_HEADER_STRING),1, file); //liest den header ein und überprüft ob korrekte datei
if(strcmp(headOfFile, FILE_HEADER_STRING) != 0)
return NULL;
// liest numIMages, breite und länge der Bilder ein
fseek(file, sizeof(FILE_HEADER_STRING), SEEK_SET);
fread(numImages, sizeof(short), 1, file);
fseek(file, sizeof(short), SEEK_CUR);
fread(breiteBilder, sizeof(short), 1, file);
fseek(file, sizeof(short), SEEK_CUR);
fread(laengeBilder, sizeof(short), 1, file);
series = malloc(*numImages * *breiteBilder * *laengeBilder * sizeof(short));
for(int i = 0; i < numImages; i++)
{
}
return series;
}
// TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt
void clearSeries(GrayScaleImageSeries *series)
{
}

View File

@ -63,6 +63,4 @@ ifeq ($(OS),Windows_NT)
else
rm -f *.o mnist runMatrixTests runNeuralNetworkTests runImageInputTests
endif
clean für windows
clean:
rm -f *.o *.exe

View File

@ -1,68 +1,35 @@
#include "matrix.h"
#include <stdlib.h>
#include <string.h>
#include "matrix.h"
// TODO Matrix-Funktionen implementieren
/*typedef struct {
unsigned int rows; //Zeilen
unsigned int cols; //Spalten
MatrixType *buffer; //Zeiger auf Speicherbereich Reihen*Spalten
} Matrix;*/
Matrix createMatrix(unsigned int rows, unsigned int cols) {
MatrixType *buffer =
malloc(rows * cols * sizeof(MatrixType)); // Speicher reservieren, malloc
// liefert Zeiger auf Speicher
Matrix newMatrix = {rows, cols, buffer}; // neue Matrix nach struct
return newMatrix;
}
void clearMatrix(Matrix *matrix) {
matrix->buffer = UNDEFINED_MATRIX_VALUE;
matrix->rows = UNDEFINED_MATRIX_VALUE;
matrix->cols = UNDEFINED_MATRIX_VALUE;
free((*matrix).buffer); // Speicher freigeben
}
void setMatrixAt(const MatrixType value, Matrix matrix,
const unsigned int rowIdx, // Kopie der Matrix wird übergeben
const unsigned int colIdx) {
matrix.buffer[rowIdx * matrix.cols + colIdx] =
value; // rowIdx * matrix.cols -> Beginn der Zeile colIdx ->Spalte
// innerhalb der Zeile
Matrix createMatrix(unsigned int rows, unsigned int cols)
{
}
MatrixType getMatrixAt(const Matrix matrix,
unsigned int rowIdx, // Kopie der Matrix wird übergeben
unsigned int colIdx) {
if (rowIdx >= matrix.rows ||
colIdx >= matrix.cols) { // Speichergröße nicht überschreiten
return 0;
}
MatrixType value = matrix.buffer[rowIdx * matrix.cols + colIdx];
return value;
void clearMatrix(Matrix *matrix)
{
}
Matrix add(const Matrix matrix1, const Matrix matrix2) {
Matrix result;
const int cols1 = matrix1.cols;
const int rows1 = matrix1.rows;
const int cols2 = matrix2.cols;
const int rows2 = matrix2.rows;
const int colsEqu = (matrix1.cols == matrix2.cols) ? 1 : 0;
const int rowsEqu = (matrix1.rows == matrix2.rows) ? 1 : 0;
if(colsEqu && rowsEqu)
{
Matrix result = createMatrix(matrix1.rows, matrix1.cols);
for(int i = 0; i < rows1; i++)
{
for (int j = 0; j < cols1; j++)
{
int valueM1 = getMatrixAt(matrix1, i, j);
int valueM2 =getMatrixAt(matrix2, i, j);
int sum = valueM1 + valueM2;
setMatrixAt(sum, result,i,j);
}
}
return result;
}
void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx)
{
}
Matrix multiply(const Matrix matrix1, const Matrix matrix2) { return matrix1; }
MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx)
{
}
Matrix add(const Matrix matrix1, const Matrix matrix2)
{
}
Matrix multiply(const Matrix matrix1, const Matrix matrix2)
{
}

View File

@ -6,20 +6,14 @@
typedef float MatrixType;
// TODO Matrixtyp definieren
typedef struct {
unsigned int rows;
unsigned int cols;
MatrixType *buffer;
} Matrix;
Matrix createMatrix(unsigned int rows, unsigned int cols);
void clearMatrix(Matrix *matrix);
void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx,
unsigned int colIdx);
MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx,
unsigned int colIdx);
void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx);
MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx);
Matrix add(const Matrix matrix1, const Matrix matrix2);
Matrix multiply(const Matrix matrix1, const Matrix matrix2);
#endif

View File

@ -1,29 +0,0 @@
Inhalte: Dynamische Speicherverwaltung, Strukturen, Dateien lesen.
Ziel: Die Bilder aus mnist_test.info 2 auslesen
Struktur für einlesen des Strings am Anfang der Datei:
int AnzahlBilder
int breiteBilder
int LaengeBilder
Struktur für Bilder:
unsinged int array Breite * Höhe
unsigned int Klasse (Label 0 - 9)
Speicher für Bilder dynamisch allokieren
GrayScaleImageSeries:
datei einlesen
header String aus der Datei lesen
mit header String den benötigten Speicher freigeben
in den Speicher die Datei einschreiben (mit Hilfsfunktion)
Hilfsfunktion (saveFile)
gehe zum Anfang des Strings
speicher alles der Reihe nach ein
clearSeries:
pointer der be malloc kommt nehemen
free()