added ws202425 courses

This commit is contained in:
2024-11-14 13:11:04 +01:00
parent 800282c2e8
commit beb31897b1
461 changed files with 20368 additions and 0 deletions
@@ -0,0 +1,3 @@
git branch joaquin
git switch joaquin
git push --set-upstream origin joaquin
@@ -0,0 +1,19 @@
Node* createNode(int data){
}
void insertAtBeginning(LinkedList* head, int data){
}
void insertAtEnd(LinkedList* head, int data){
}
void deleteNode(LinkedList* head, int key){
}
void printList(LinkedList head){
}
@@ -0,0 +1,21 @@
#ifndef LINKEDLIST_H
#define LINKEDLIST_H
typedef struct node{
int data;
struct node* next;
} Node;
typedef Node* Linkedlist;
Node* createNode(int data);
void insertAtBeginning(LinkedList* head, int data);
void insertAtEnd(LinkedList* head, int data);
void deleteNode(LinkedList* head, int key);
void printList(LinkedList head);
#endif
@@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.29)
project(uebung_0_stack C)
set(CMAKE_C_STANDARD 11)
include_directories(.)
add_executable(uebung_0_stack
stack.c
stack.h)
@@ -0,0 +1,30 @@
# Compiler
CC = gcc
# Compiler flags
CFLAGS = -Wall -g
# Target executable
TARGET = prog
# Object files
OBJS = stack.o prog.o
# Default rule to build the target executable
all: $(TARGET)
# Rule to build the target executable from object files
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS)
# Rule to compile stack.c to object file
stack.o: stack.c stack.h
$(CC) $(CFLAGS) -c stack.c
# Rule to compile prog.c to object file
prog.o: prog.c stack.h
$(CC) $(CFLAGS) -c prog.c
# Clean up object files and the executable
clean:
rm -f $(OBJS) $(TARGET)
@@ -0,0 +1,12 @@
# Übung 0 Stack
Dies ist die Vorlage für die Live Aufgabe "Stack".
Bitte forken Sie diese Vorlage über den Button Fork und wählen Sie ihre Gruppe als URL aus.
Anschließend können Sie in Ihrer Version des Projektes arbeiten :)
Forderns Sie kein Zugriff auf dieses Projekt an!
1. Implementieren Sie den Datentyp stack_t.
2. Implementieren Sie die auskommentierten Methoden in stack.c.
3. Implementieren Sie ein Programm, welches Ihren Stack nutzt in prog.c
4. Erstellen Sie ein Makefile, welches die Executable prog erstellt.
@@ -0,0 +1,55 @@
#include <stdio.h>
#include "stack.h"
int main() {
stack_t* stack = stack_create(5);
if(stack == NULL){
printf("Failed to create stack\n");
return 1;
}
if (stack_push(stack, 'A') != 0) {
printf("Error: failed to push onto stack\n");
stack_delete(stack);
return 1;
}
if (stack_push(stack, 'B') != 0) {
printf("Error: failed to push onto stack\n");
stack_delete(stack);
return 1;
}
if (stack_push(stack, 'C') != 0) {
printf("Error: failed to push onto stack\n");
stack_delete(stack);
return 1;
}
printf("Stack length is %zu\n", stack_length(stack));
char popped;
if (stack_pop(stack, &popped) != 0){
printf("Error: failed to pop from stack\n");
stack_delete(stack);
return 1;
}
printf("Popped element: %c\n", popped);
if (stack_pop(stack, &popped) != 0){
printf("Error: failed to pop from stack\n");
stack_delete(stack);
return 1;
}
printf("Popped element: %c\n", popped);
printf("Stack length is %zu\n", stack_length(stack));
stack_delete(stack);
return 0;
}
@@ -0,0 +1,46 @@
#include "stack.h"
#include <stdlib.h>
stack_t *stack_create(size_t size) {
stack_t* stack = (stack_t*) malloc(sizeof(stack_t));
if (stack == NULL) {
return NULL;
}
stack->array = (char*) malloc(size * sizeof(char));
if (stack->array == NULL) {
free(stack);
return NULL;
}
stack->size = size;
stack->length = 0;
return stack;
}
void stack_delete(stack_t *stack) {
if (stack != NULL) {
free(stack->array);
free(stack);
}
}
size_t stack_length(stack_t *stack) {
return stack->length;
}
int stack_push(stack_t *stack, char c) {
if (stack->length >= stack->size) {
return -1;
}
stack->array[stack->length] = c;
stack->length++;
return 0;
}
int stack_pop(stack_t *stack, char *dest) {
if (stack->length == 0) {
return -1;
}
*dest = stack->array[stack->length - 1];
stack->length--;
return 0;
}
@@ -0,0 +1,22 @@
#ifndef STACK_H
#define STACK_H
#include <stddef.h>
typedef struct stack{
int size;
char* array;
int length;
} stack_t;
stack_t* stack_create(size_t size);
void stack_delete(stack_t* stack);
size_t stack_length(stack_t* stack);
int stack_push(stack_t* stack,char c);
int stack_pop(stack_t* stack, char* dest);
#endif
@@ -0,0 +1,8 @@
CC = gcc
all: workdir.c print_file.c
${CC} -o workdir workdir.c
${CC} -o print_file print_file.c
clean:
rm -f workdir print_file
@@ -0,0 +1,38 @@
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#define SIZE 512
int main() {
int fd = open("./test.txt", O_RDWR);
if (fd == -1){
perror("could not open file");
return EXIT_FAILURE;
}
char * buffer = (char *) calloc(SIZE, sizeof(char));
if (buffer == NULL) {
perror("could not allocate buffer");
close(fd);
return EXIT_FAILURE;
}
ssize_t r = read(fd, buffer, SIZE-1);
if (r == -1) {
perror("could not read file");
free(buffer);
close(fd);
return EXIT_FAILURE;
}
return 0;
printf("%.*s", SIZE-1, buffer);
free(buffer);
close(fd);
return EXIT_SUCCESS;
}
@@ -0,0 +1,31 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char *mywdfunc(unsigned int bufsize) {
if (bufsize < 100) {
return NULL;
}
char *buf = (char *)calloc(bufsize,sizeof(char));
if (buf == NULL){
return NULL;
}
if (getcwd(buf,bufsize-1) == NULL) {
free(buf);
return NULL;
}
return buf;
}
int main() {
char *ret = mywdfunc(512);
printf("%s", ret);
free(ret);
return EXIT_SUCCESS;
}
@@ -0,0 +1,6 @@
# Übung 2 Prozessliste
Dies ist die Vorlage für die Hausaufgabe "Prozesstabelle".
Bitte forken Sie diese Vorlage über den Button Fork und wählen Sie ihre Gruppe als URL aus.
Anschließend können Sie in Ihrer Version des Projektes arbeiten :)
@@ -0,0 +1,34 @@
// zum Erstellen der Liste, wobei die Liste zu Beginn einen Prozess mit PID = 1 und PPID = 0 enthalten soll
dl_proc_list* dl_proc_list_create() {
dl_proc_list* proc_list = (dl_proc_list*) malloc(sizeof(dl_proc_list));
if (proc_list == NULL) {
return NULL;
}
proc_list->PID = 1;
proc_list->PPID = 0;
}
// zum Einfügen eines Prozesses mit PID pid in die Liste, unter den folgenden Bedingungen:
// – Die Liste ist stets aufsteigend sortiert,
// – jede Prozess-ID kommt höchstens einmal vor und
// – als neuer Elternprozess wird der Prozess mit der bisher höchsten Prozess-ID festgelegt.
int dl_proc_list_insert(dl_proc_list *list, int pid){
}
// zum Abfragen der PID und PPID des Prozesses an der gegebenen Position in der Liste und Abspeichern der erhaltenen Werte in den Parametern pid und ppid,
int dl_proc_list_get(dl_proc_list *list, int position, int* pid, int* ppid){
}
// zum Entfernen des Prozesses p mit der PID pid aus der Liste, unter den folgenden Bedingungen:
// – Das Löschen des Prozesses mit PID = 1 soll verhindert werden und
// – die Kindprozesse des zu löschenden Prozesses p erhalten den Elternprozess von p als neuen Elternprozess.
int dl_proc_list_remove(dl_proc_list *list, int pid){
}
// zum Freigeben des allokierten Speichers.
void dl_proc_list_free(dl_proc_list *list){
}
@@ -0,0 +1,32 @@
Implementieren Sie eine Prozesstabelle mithilfe einer doppelt verketteten Liste.
Die Elemente der Liste entsprechen den vereinfachten Prozessleitblöcken. Für jeden Pro-
zess umfasst der zugehörige Leitblock die Prozess-ID (PID) und die ID des Elternprozesses
(parent PID, PPID).
Beachten Sie dabei:
• Geben Sie für die Funktionen der doppelt verketteten Liste im Fehlerfall negative
Werte und im Erfolgsfall 0 zurück. Falls der Rückgabetyp ein Pointer ist, soll die
Funktion im Fehlerfall NULL zurückgeben.
#ifndef dl_proc_list
#define dl_proc_list
#include <stddef.h>
typedef struct dl_proc_list {
int PID;
int PPID;
} dl_proc_list;
dl_proc_list* dl_proc_list_create()
int dl_proc_list_insert(dl_proc_list *list, int pid)
int dl_proc_list_get(dl_proc_list *list, int position, int* pid, int* ppid)
int dl_proc_list_remove(dl_proc_list *list, int pid)
void dl_proc_list_free(dl_proc_list *list)
#endif
@@ -0,0 +1,16 @@
#include <stdio.h>
int main() {
int a[8];
int i;
printf("Size of A: %lu\n", sizeof(a));
printf("Array A:");
for (i = 0; i < (sizeof (a)/4); i ++) {
a[i] = 1;
printf("%i",a[i]);
}
printf("\n");
}
@@ -0,0 +1,9 @@
#include <stdio.h>
unsigned long size (int* a){
return sizeof (a);
}
int main (int argc , char ** argv ){
int a[8];
printf ("%lu",size (a));
}
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>com.apple.xcode.dsym.c</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>dSYM</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>
@@ -0,0 +1,5 @@
---
triple: 'arm64-apple-darwin'
binary-path: c
relocations: []
...