Initial Commit
This commit is contained in:
		
							parent
							
								
									319a5d43d4
								
							
						
					
					
						commit
						f9e4f13bfe
					
				
					 6 changed files with 166 additions and 0 deletions
				
			
		
							
								
								
									
										103
									
								
								Übung 2/util.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								Übung 2/util.c
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										22
									
								
								Übung 2/util.h
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Übung 2/Übung1.out
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										13
									
								
								Übung 2/Übung2.1.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Übung 2/Übung2.1.c
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										28
									
								
								Übung 2/Übung2.2.c
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Übung 2/Übung2.out
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in a new issue