23 Commits
Author SHA1 Message Date
Max-R 96a97c07c9 Merge remote-tracking branch 'origin/tobi_experimental' into RMax 2025-12-05 12:05:01 +01:00
kachelto100370 74fdcf500f stack.c test laufen alle 2025-12-05 11:54:23 +01:00
Max-R 0575eac07e immer noch ohne clearstak 2025-12-05 11:47:36 +01:00
kachelto100370 382c36b1b4 Merge remote-tracking branch 'origin/RMax' into tobi_experimental 2025-12-05 11:16:21 +01:00
kachelto100370 81de4b3d36 arbeiten an stack.c 2025-12-05 11:13:27 +01:00
Max-R 09426ae40a tests bis auf clearstack laufen 2025-12-05 11:10:20 +01:00
Max-R 9443171664 create node 2025-12-05 11:04:09 +01:00
Max-R b28deeaafb mhm 2025-12-05 10:53:03 +01:00
Max-R 4bb0d7516e stak.c 2025-12-05 10:48:10 +01:00
Max-R ddd4132e1f erste tests stack.c 2025-12-05 10:41:30 +01:00
kachelto100370 624a7d8b41 slight changes to stackNode struct, void func, etc 2025-12-05 10:41:08 +01:00
kachelto100370 73ebc36c05 Merge branch 'KrispTobi' into tobi_experimental 2025-12-05 10:31:47 +01:00
Max-R e7423f0a20 stack.c 2025-12-05 10:26:10 +01:00
Kristin 8b44089f23 Remove object files 2025-12-05 10:25:10 +01:00
Kristin 654fb615a2 Remove object files 2025-12-05 10:24:32 +01:00
Kristin 422ac38d54 gitignore 2025-12-05 10:21:33 +01:00
Max-R 7051134256 stack.h 2025-12-05 10:21:00 +01:00
Kristin 90612e4d04 stack.c 2025-12-05 10:20:17 +01:00
Kristin 17f4155891 stack.c 2025-12-05 10:08:55 +01:00
Max-R 735195460c mein Branch 2025-12-02 10:44:15 +01:00
Kristin a002901e2f highscore.txt zu gitignore 2025-12-02 10:40:28 +01:00
kachelto100370 ecb5f360e3 add highscore to gitignore 2025-12-02 10:35:34 +01:00
Kristin 55b25a227b makefile 2025-12-02 10:32:52 +01:00
13 changed files with 264 additions and 20 deletions
+3
View File
@@ -0,0 +1,3 @@
doble_initial.exe
*.o
*.exe
+18
View File
@@ -0,0 +1,18 @@
{
"configurations": [
{
"name": "windows-gcc-x64",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "C:/ProgramData/mingw64/mingw64/bin/gcc.exe",
"cStandard": "${default}",
"cppStandard": "${default}",
"intelliSenseMode": "windows-gcc-x64",
"compilerArgs": [
""
]
}
],
"version": 4
}
+24
View File
@@ -0,0 +1,24 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++ Runner: Debug Session",
"type": "cppdbg",
"request": "launch",
"args": [],
"stopAtEntry": false,
"externalConsole": true,
"cwd": "c:/Users/Max-R/I2Pr/info2Praktikum-DobleSpiel",
"program": "c:/Users/Max-R/I2Pr/info2Praktikum-DobleSpiel/build/Debug/outDebug",
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
+59
View File
@@ -0,0 +1,59 @@
{
"C_Cpp_Runner.cCompilerPath": "gcc",
"C_Cpp_Runner.cppCompilerPath": "g++",
"C_Cpp_Runner.debuggerPath": "gdb",
"C_Cpp_Runner.cStandard": "",
"C_Cpp_Runner.cppStandard": "",
"C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat",
"C_Cpp_Runner.useMsvc": false,
"C_Cpp_Runner.warnings": [
"-Wall",
"-Wextra",
"-Wpedantic",
"-Wshadow",
"-Wformat=2",
"-Wcast-align",
"-Wconversion",
"-Wsign-conversion",
"-Wnull-dereference"
],
"C_Cpp_Runner.msvcWarnings": [
"/W4",
"/permissive-",
"/w14242",
"/w14287",
"/w14296",
"/w14311",
"/w14826",
"/w44062",
"/w44242",
"/w14905",
"/w14906",
"/w14263",
"/w44265",
"/w14928"
],
"C_Cpp_Runner.enableWarnings": true,
"C_Cpp_Runner.warningsAsError": false,
"C_Cpp_Runner.compilerArgs": [],
"C_Cpp_Runner.linkerArgs": [],
"C_Cpp_Runner.includePaths": [],
"C_Cpp_Runner.includeSearch": [
"*",
"**/*"
],
"C_Cpp_Runner.excludeSearch": [
"**/build",
"**/build/**",
"**/.*",
"**/.*/**",
"**/.vscode",
"**/.vscode/**"
],
"C_Cpp_Runner.useAddressSanitizer": false,
"C_Cpp_Runner.useUndefinedSanitizer": false,
"C_Cpp_Runner.useLeakSanitizer": false,
"C_Cpp_Runner.showCompilationTime": false,
"C_Cpp_Runner.useLinkTimeOptimization": false,
"C_Cpp_Runner.msvcSecureNoWarnings": false
}
BIN
View File
Binary file not shown.
+1
View File
@@ -1 +1,2 @@
krisp;4986
player1;3999 player1;3999
+10 -3
View File
@@ -1,5 +1,6 @@
CC = gcc CC = gcc
FLAGS = -g -Wall -lm FLAGS = -g -Wall -lm
ASAN_FLAGS = -fsanitize=address
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
include makefile_windows.variables include makefile_windows.variables
@@ -29,21 +30,27 @@ program_obj_files = stack.o bintree.o numbers.o timer.o highscore.o
doble : main.o $(program_obj_files) doble : main.o $(program_obj_files)
$(CC) $(FLAGS) $^ -o doble $(CC) $(FLAGS) $^ -o doble
$(program_obj_filesobj_files): %.o: %.c $(program_obj_files): %.o: %.c
$(CC) -c $(FLAGS) $^ -o $@ $(CC) -c $(FLAGS) $^ -o $@
# -------------------------- # --------------------------
# Unit Tests # Unit Tests
# -------------------------- # --------------------------
unitTests: unitTests:
echo "needs to be implemented" TEST_BIN = runTests
unitTests: stack.o test_stack.o
$(CC) $(FLAGS) $(ASAN_FLAGS) -I$(unityfolder) -o $(TEST_BIN) stack.o test_stack.o $(unityfolder)/unity.c
test_stack.o: test_stack.c
$(CC) $(FLAGS) -I$(unityfolder) -c test_stack.c -o test_stack.o
# -------------------------- # --------------------------
# Clean # Clean
# -------------------------- # --------------------------
clean: clean:
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
del /f *.o doble rm -f *.o doble
else else
rm -f *.o doble rm -f *.o doble
endif endif
BIN
View File
Binary file not shown.
+58 -6
View File
@@ -1,5 +1,13 @@
#include <stdlib.h>
#include "stack.h" #include "stack.h"
#include <stdio.h>
#include <stdlib.h>
/*typedef struct {
void *data;
struct StackNode *next;
} StackNode;*/
// TODO: grundlegende Stackfunktionen implementieren: // TODO: grundlegende Stackfunktionen implementieren:
/* * `push`: legt ein Element oben auf den Stack, /* * `push`: legt ein Element oben auf den Stack,
@@ -7,27 +15,71 @@
* `top`: liefert das oberste Element zurück, * `top`: liefert das oberste Element zurück,
* `clearStack`: gibt den gesamten Speicher frei. */ * `clearStack`: gibt den gesamten Speicher frei. */
StackNode *createNode(void *data)
{
StackNode *node =
malloc(sizeof(StackNode)); // Speicher reservieren, Speicherplatz für das
// struct StackNode
if (node == NULL)
return NULL; // Speicher konnte nicht reserviert werden
node->data = data; // Zeiger auf data neuer node
node->next = NULL; // nächster Zeiger ist NULL, Ende der Liste
return node; // pointer auf den neuen Knoten zurückgeben
}
// Pushes data as pointer onto the stack. // Pushes data as pointer onto the stack.
StackNode *push(StackNode *stack, void *data) StackNode *push(StackNode *stack, void *data)
{ {
StackNode *newNode = createNode(data); // Speicher für neuen Knoten
// reservieren
if (newNode == NULL)
{ // wenn Speicher nicht reserviert werden konnte, wird
// stack unverändert zurückgegeben
return stack;
}
newNode->next = stack; // pointer verschieben
return newNode; // Zeiger auf neuen Speicherbereich zurückgeben
} }
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be // Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be
// freed by caller.) // freed by caller.)
StackNode *pop(StackNode *stack) StackNode *pop(StackNode *stack)
{ {
if (stack == NULL)
return NULL;
StackNode *nextNode = stack->next;
free(stack);
stack = NULL;
return nextNode;
} }
// Returns the data of the top element. // Returns the data of the top element.
void *top(StackNode *stack) void *top(StackNode *stack) { return stack != NULL ? stack->data : NULL; }
{
}
// Clears stack and releases all memory. // Clears stack and releases all memory.
void clearStack(StackNode *stack) void clearStack(StackNode **stack)
{
while (*stack != NULL)
{ {
StackNode *next = (*stack)->next;
free(*stack);
(*stack)->data = NULL;
(*stack)->next = NULL;
(*stack)->prev = NULL;
(*stack) = next;
}
} }
+26 -6
View File
@@ -1,25 +1,45 @@
#ifndef STACK_H #ifndef STACK_H
#define STACK_H #define STACK_H
/* A stack is a special type of queue which uses the LIFO (last in, first out) principle. /* A stack is a special type of queue which uses the LIFO (last in, first out)
This means that with each new element all other elements are pushed deeper into the stack. principle. This means that with each new element all other elements are pushed
The latest element is taken from the stack. */ deeper into the stack. The latest element is taken from the stack. */
#include <stdlib.h> #include <stdlib.h>
// TODO: passenden Datentyp als struct anlegen // TODO: passenden Datentyp als struct anlegen
typedef struct StackNode {
void *data;
struct StackNode *next;
struct StackNode *prev;
} StackNode;
StackNode *createNode(void *data);
typedef struct StackNode {
void *data;
struct StackNode *next;
struct StackNode *prev;
} StackNode;
StackNode *createNode(void *data);
// Pushes data as pointer onto the stack. // Pushes data as pointer onto the stack.
StackNode *push(StackNode *stack, void *data); StackNode *push(StackNode *stack, void *data);
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be // Deletes the top element of the stack (latest added element) and releases its
// freed by caller.) // memory. (Pointer to data has to be freed by caller.)
StackNode *pop(StackNode *stack); StackNode *pop(StackNode *stack);
// Returns the data of the top element. // Returns the data of the top element.
void *top(StackNode *stack); void *top(StackNode *stack);
// Clears stack and releases all memory. // Clears stack and releases all memory.
void clearStack(StackNode *stack); void clearStack(StackNode **stack);
#endif #endif
BIN
View File
Binary file not shown.
+60
View File
@@ -0,0 +1,60 @@
#include "unity.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stack.h"
void test_createNode(void) {
int testInt = 26;
StackNode *testNode = createNode(&testInt);
TEST_ASSERT_NOT_NULL(testNode);
TEST_ASSERT_EQUAL_PTR(&testInt, testNode->data);
TEST_ASSERT_NULL(testNode->next);
free(testNode);
}
void test_pushDataToStack(void) {}
void test_deleteTopElement(void) {}
void test_returnData(void) {}
void test_clearStack(void) {
int testInts[] = {1, 2, 3, 4, 5};
StackNode *testStack = NULL;
for (int i = 0; i < 5; i++) {
testStack = push(testStack, &testInts[i]);
}
//printf("testints: %d,%d,%d,%d,%d",testInts[0],testInts[1],testInts[2],testInts[3],testInts[4]);
clearStack(&testStack);
TEST_ASSERT_NULL(testStack);
}
void setUp(void) {}
void tearDown(void) {}
int main(void) {
UNITY_BEGIN();
printf("------------------------stack test------------------------\n");
RUN_TEST(test_createNode);
RUN_TEST(test_pushDataToStack);
RUN_TEST(test_deleteTopElement);
RUN_TEST(test_returnData);
RUN_TEST(test_clearStack);
RUN_TEST(test_clearStack);
return UNITY_END();
}
BIN
View File
Binary file not shown.