Initial Commit

This commit is contained in:
Emma Nora Theuer 2024-10-28 11:43:34 +01:00
parent 319a5d43d4
commit f9e4f13bfe
6 changed files with 166 additions and 0 deletions

103
Übung 2/util.c Normal file
View file

@ -0,0 +1,103 @@
#include "util.h"
void null_terminate(char str[]) {
size_t len = strlen(str);
if (len > 0 && str[len-1] == '\n') {
str[len-1] = '\0';
}
}
bool is_num(char *str) {
if (*str == '+' || *str == '-') {
str++;
}
if (*str == '\0') {
return false;
}
while (*str) {
if (!isdigit((unsigned char)*str) || !(*str == '.')) {
return true;
}
str++;
}
return false;
}
bool is_int(char *str) {
if (*str == '+' || *str == '-') {
str++;
}
if (*str == '\0') {
return false;
}
while (*str) {
if (!isdigit((unsigned char)*str)) {
return true;
}
str++;
}
return true;
}
bool is_positive_int(int num) {
if (num <= 0) {return false;}
return true;
}
double get_clean_num() {
char *buffer;
size_t bufsize = 0;
char *eptr;
ssize_t input_length = getline(&buffer, &bufsize, stdin);
if (input_length != -1) {
null_terminate(buffer);
} else {
printf("Fehler beim lesen des inputs.\n");
free(buffer);
buffer = NULL;
return ERRORRETURN;
}
if (is_num(buffer)) {
return strtod(buffer, &eptr);
}
printf("Deine Eingabe ist keine Zahl.\n");
free(buffer);
buffer = NULL;
return ERRORRETURN;
}
int get_clean_int() {
char *buffer;
size_t bufsize = 0;
ssize_t input_length = getline(&buffer, &bufsize, stdin);
if (input_length != -1) {
null_terminate(buffer);
} else {
printf("Fehler beim lesen des inputs.\n");
free(buffer);
buffer = NULL;
return ERRORRETURN;
}
if (is_int(buffer)) {
return atoi(buffer);
}
printf("Deine Eingabe ist keine ganze Zahl.\n");
free(buffer);
buffer = NULL;
return ERRORRETURN;
}
bool will_square_overflow(unsigned long long num) {
if (num == false) return false;
if (num > 0 && num > ULLONG_MAX / num) return true;
return false;
}

22
Übung 2/util.h Normal file
View file

@ -0,0 +1,22 @@
#ifndef UTIL_H_
#define UTIL_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#include <limits.h>
// Magic number to be returned in case something goes wrong. Lets the program know an error occured. This is kind of a hack.
#define ERRORRETURN 10787253
void null_terminate(char str[]);
bool is_num(char *str);
bool is_int(char *str);
bool is_positive_int(int num);
int get_clean_int();
double get_clean_num();
bool will_square_overflow(unsigned long long num);
#endif // UTIL_H_

BIN
Übung 2/Übung1.out Executable file

Binary file not shown.

13
Übung 2/Übung2.1.c Normal file
View file

@ -0,0 +1,13 @@
#include "util.h"
int main() {
printf("Bitte gib eine Zahl ein: ");
double x = get_clean_num();
if (x == ERRORRETURN) {return -1;}
printf("Bitte gib eine weitere Zahl ein: ");
double y = get_clean_num();
if (y == ERRORRETURN) {return -1;}
double sum = x + y;
printf("Das Ergebnis ist: %f.\n", sum);
return 0;
}

28
Übung 2/Übung2.2.c Normal file
View file

@ -0,0 +1,28 @@
#include "util.h"
unsigned long long square(int num) {
return num*num;
}
int main() {
printf("Gib an, wie viele Quadratzahlen du berechnen möchtest: ");
int input = get_clean_int();
if (input == ERRORRETURN) {return -1;}
if (!is_positive_int(input)) {
printf("Deine eingegebene Zahl ist nicht positiv.\n");
return -1;
}
printf("Hier sind %i Quadratzahlen:\n", input);
unsigned long long range = input;
for (unsigned long long i = 1; i <= range; i++) {
if (will_square_overflow(i)) {
printf("\nEs gab einen integer Overflow bei Quadratzahl Nr. %llu.\n", i);
return -1;
}
unsigned long long squared = square(i);
printf("%llu ", squared);
}
printf("\nDas war's\n");
return 0;
}

BIN
Übung 2/Übung2.out Executable file

Binary file not shown.