added Aufgabenblatt 11
This commit is contained in:
parent
0902417234
commit
d70c95bea9
|
@ -3,6 +3,7 @@
|
|||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/AufgabenBlatt10/AufgabenBlatt10.iml" filepath="$PROJECT_DIR$/AufgabenBlatt10/AufgabenBlatt10.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/AufgabenBlatt11/AufgabenBlatt11.iml" filepath="$PROJECT_DIR$/AufgabenBlatt11/AufgabenBlatt11.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/AufgabenBlatt3/AufgabenBlatt3.iml" filepath="$PROJECT_DIR$/AufgabenBlatt3/AufgabenBlatt3.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/AufgabenBlatt4/AufgabenBlatt4.iml" filepath="$PROJECT_DIR$/AufgabenBlatt4/AufgabenBlatt4.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/AufgabenBlatt6/AufgabenBlatt6.iml" filepath="$PROJECT_DIR$/AufgabenBlatt6/AufgabenBlatt6.iml" />
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
### IntelliJ IDEA ###
|
||||
out/
|
||||
!**/src/main/**/out/
|
||||
!**/src/test/**/out/
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
bin/
|
||||
!**/src/main/**/bin/
|
||||
!**/src/test/**/bin/
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="openjdk-19" jdkType="JavaSDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module-library">
|
||||
<library name="JUnit4">
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.13.1/junit-4.13.1.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</orderEntry>
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,26 @@
|
|||
package aufgabe2;
|
||||
|
||||
/**
|
||||
* Generic test class defining a bee able to fly through Fliegen
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class Biene implements Fliegen {
|
||||
|
||||
@Override
|
||||
public void fliegen() {
|
||||
System.out.println("Summsumm");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package aufgabe2;
|
||||
|
||||
/**
|
||||
* Generic test class defining the ability to fly
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public interface Fliegen {
|
||||
|
||||
/**
|
||||
* fly
|
||||
*/
|
||||
void fliegen();
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package aufgabe2;
|
||||
|
||||
/**
|
||||
* Generic test class for testing the Fliegen interface
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public final class Main {
|
||||
|
||||
/**
|
||||
* Calls fliegen() on the given Object
|
||||
* @param dickerBrummer the object to call fliegen() on
|
||||
*/
|
||||
private static void abflug(Fliegen dickerBrummer) {
|
||||
dickerBrummer.fliegen();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
var maja = new Biene();
|
||||
var gunter = new Taube();
|
||||
|
||||
abflug(maja);
|
||||
abflug(gunter);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package aufgabe2;
|
||||
|
||||
/**
|
||||
* Generic test class defining a pigeon able to fly through Fliegen
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class Taube implements Fliegen {
|
||||
|
||||
@Override
|
||||
public void fliegen() {
|
||||
System.out.println("GuuurrrGuurrr");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package aufgabe2b;
|
||||
|
||||
/**
|
||||
* Generic test class defining a bee able to fly through Fliegen
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class Biene extends Fliegen {
|
||||
|
||||
@Override
|
||||
public void fliegen() {
|
||||
System.out.println("Summsumm");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package aufgabe2b;
|
||||
|
||||
/**
|
||||
* Generic test class defining the ability to fly
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public abstract class Fliegen {
|
||||
|
||||
/**
|
||||
* fly
|
||||
*/
|
||||
public abstract void fliegen();
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package aufgabe2b;
|
||||
|
||||
/**
|
||||
* Generic test class for testing the Fliegen interface
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public final class Main {
|
||||
|
||||
/**
|
||||
* Calls fliegen() on the given Object
|
||||
* @param sehrDickerBrummer the object to call fliegen() on
|
||||
*/
|
||||
private static void abflug(Fliegen sehrDickerBrummer) {
|
||||
sehrDickerBrummer.fliegen();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
var maja = new Biene();
|
||||
var gunter = new Taube();
|
||||
|
||||
abflug(maja);
|
||||
abflug(gunter);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package aufgabe2b;
|
||||
|
||||
/**
|
||||
* Generic test class defining a pigeon able to fly through Fliegen
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class Taube extends Fliegen {
|
||||
|
||||
@Override
|
||||
public void fliegen() {
|
||||
System.out.println("GuuurrrGuurrr");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package aufgabe3;
|
||||
|
||||
public interface Adressierbar {
|
||||
public void setEmfaenger( String adresse);
|
||||
public String getEmfaenger();
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package aufgabe3;
|
||||
|
||||
/**
|
||||
* Generic test class defining metadata for sending a packet
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class PostPacket implements Adressierbar, Versendbar {
|
||||
|
||||
/**
|
||||
* From who the packet was send
|
||||
*/
|
||||
private String from;
|
||||
/**
|
||||
* Who should receive the packet
|
||||
*/
|
||||
private String to;
|
||||
/**
|
||||
* How much the package weighs
|
||||
*/
|
||||
private int weight;
|
||||
|
||||
public PostPacket(String from, String to, int weight) {
|
||||
this.from = from;
|
||||
this.to = to;
|
||||
this.weight = weight;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEmfaenger(String adresse) {
|
||||
this.to = adresse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEmfaenger() {
|
||||
return this.to;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAbsender(String absender) {
|
||||
this.from = absender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAbsender() {
|
||||
return this.from;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGewicht() {
|
||||
return this.weight;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package aufgabe3;
|
||||
|
||||
/**
|
||||
* Generic test class defining a post office ready to send packages
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public final class Postamt {
|
||||
|
||||
/**
|
||||
* Does not try to send a packet send by send with destination to.
|
||||
* But it does print some information to System.out.
|
||||
* @param packet the packet not to send
|
||||
*/
|
||||
public void versende(Versendbar packet) {
|
||||
System.out.println("Sendung wurde entgegengenommen und wird jetzt versandt.");
|
||||
System.out.println("Absender: " + packet.getAbsender());
|
||||
System.out.println("Empfänger: " + packet.getEmfaenger());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package aufgabe3;
|
||||
|
||||
public class Start {
|
||||
public static void main(String[] args) {
|
||||
int gewicht = 10;
|
||||
String an = "Horst Schlammer, 77077 Grevenbroich, Am Acker 8";
|
||||
String von = "Gisela Brandt, 77077 Grevenbroich, Am Acker 10";
|
||||
|
||||
PostPacket packet = new PostPacket(von, an, gewicht);
|
||||
Postamt post = new Postamt();
|
||||
post.versende(packet);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package aufgabe3;
|
||||
|
||||
public interface Versendbar extends Adressierbar {
|
||||
public void setAbsender(String absender);
|
||||
public String getAbsender();
|
||||
public int getGewicht();
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package aufgabe4;
|
||||
|
||||
/**
|
||||
* Generic test class defining the caesar chiffre
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class CaesarChiffre implements Chiffrierung {
|
||||
/**
|
||||
* How much to shift every character
|
||||
*/
|
||||
private final int shiftOffset;
|
||||
|
||||
public CaesarChiffre(int shiftOffset) {
|
||||
this.shiftOffset = shiftOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shift a character by a specified amount away from its UTF-8 representation
|
||||
* Performs a wraparound for lower case letters and return all other characters unchanged
|
||||
* @param ch the character to shift
|
||||
* @param off shift offset
|
||||
* @return the shifted character
|
||||
*/
|
||||
private char shiftCharacter(char ch, int off) {
|
||||
|
||||
if (Character.isLowerCase(ch)) {
|
||||
return (char) wrapAddAround(ch, off, 'a', 'z');
|
||||
}
|
||||
|
||||
return ch;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sums k onto x and wraps the result around the domain of [min, max]
|
||||
* @param x lhs of sum
|
||||
* @param k rhs of sum
|
||||
* @param min minimum value to wrap around
|
||||
* @param max maximum value to wrap around
|
||||
* @return the result
|
||||
*/
|
||||
public static int wrapAddAround(int x, int k, int min, int max) {
|
||||
return Math.floorMod(Math.abs(x - min) + k, max - min + 1) + min;
|
||||
}
|
||||
|
||||
@Override
|
||||
public char chiffrieren(char zeichen) {
|
||||
return shiftCharacter(zeichen, shiftOffset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public char dechiffrieren(char zeichen) {
|
||||
return shiftCharacter(zeichen, -shiftOffset);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package aufgabe4;
|
||||
|
||||
public interface Chiffrierung {
|
||||
char chiffrieren(char zeichen);
|
||||
char dechiffrieren(char zeichen);
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
package aufgabe4;
|
||||
|
||||
/**
|
||||
* Generic test class defining a simple encryption by association
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class GeheimtextalphabetVerschiebung implements Chiffrierung {
|
||||
|
||||
private final char[] map;
|
||||
|
||||
public GeheimtextalphabetVerschiebung(char[] map) {
|
||||
if (map.length != 26)
|
||||
throw new IllegalArgumentException("Character map must be 26 characters long");
|
||||
|
||||
this.map = map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public char chiffrieren(char zeichen) {
|
||||
if (Character.isLowerCase(zeichen)) {
|
||||
return this.map[zeichen - 'a'];
|
||||
}
|
||||
return zeichen;
|
||||
}
|
||||
|
||||
@Override
|
||||
public char dechiffrieren(char zeichen) {
|
||||
if (Character.isLowerCase(zeichen)) {
|
||||
for (int i = 0; i < map.length; i++) {
|
||||
if (map[i] == zeichen) {
|
||||
return (char) ('a' + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return zeichen;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package aufgabe4;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static aufgabe4.Verschluesselung.entschluesseln;
|
||||
import static aufgabe4.Verschluesselung.verschluesseln;
|
||||
|
||||
/**
|
||||
* Generic test class testing the caesar chiffre
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class TestCaesarChiffre {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
var text = "abcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
var chiffre = new CaesarChiffre(1);
|
||||
|
||||
var encrypted = verschluesseln(text, chiffre);
|
||||
System.out.println(encrypted);
|
||||
|
||||
var decrypted = entschluesseln(encrypted, chiffre);
|
||||
System.out.println(decrypted);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package aufgabe4;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static aufgabe4.Verschluesselung.entschluesseln;
|
||||
import static aufgabe4.Verschluesselung.verschluesseln;
|
||||
|
||||
/**
|
||||
* Generic test class testing
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class TestGeheimtextVerschiebung {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
var text = "IchBinEinText";
|
||||
var map = new char[] {'v', 'u', 'b', 'y', 'd', 'f', 'k', 'g', 'h', 'i', 'j', 'c', 'q', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'e', 't', 'a', 'w', 'x', 'z'};
|
||||
|
||||
var chiffre = new GeheimtextalphabetVerschiebung(map);
|
||||
|
||||
var encrypted = verschluesseln(text, chiffre);
|
||||
System.out.println(encrypted);
|
||||
|
||||
var decrypted = entschluesseln(encrypted, chiffre);
|
||||
System.out.println(decrypted);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package aufgabe4;
|
||||
|
||||
public final class Verschluesselung {
|
||||
|
||||
/**
|
||||
* Encrypt all characters in a string with a specified encryption
|
||||
* @param text text to encrypt
|
||||
* @param chiffrierung algorithm to use
|
||||
* @return the encrypted text
|
||||
*/
|
||||
public static String verschluesseln(String text, Chiffrierung chiffrierung) {
|
||||
var builder = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
builder.append(chiffrierung.chiffrieren(text.charAt(i)));
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypt all characters in a string with a specified encryption
|
||||
* @param text text to decrypt
|
||||
* @param chiffrierung algorithm to use
|
||||
* @return the decrypted text
|
||||
*/
|
||||
public static String entschluesseln(String text, Chiffrierung chiffrierung) {
|
||||
var builder = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < text.length(); i++) {
|
||||
builder.append(chiffrierung.dechiffrieren(text.charAt(i)));
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
|
@ -1,112 +0,0 @@
|
|||
import org.junit.Test;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Generic test class for implementing and testing a very basic rational number class
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class Aufgabe3 {
|
||||
|
||||
/**
|
||||
* A 64-bit signed rational number. The nominator and denominator are of fixed size of 32-bit.
|
||||
* Both can be signed. The sign of the number is given by sign(nominator) * sign(denominator)
|
||||
* Zero can be represented as the nominator being zero and the denominator being anything but 0.
|
||||
* Since division by 0 is undefined, all rational numbers with a denominator of zero are to be treated as
|
||||
* invalid numbers.
|
||||
* @param nominator
|
||||
* @param denominator
|
||||
*/
|
||||
private record Rational(int nominator, int denominator) {
|
||||
|
||||
/**
|
||||
* Construct a rational number. Throws a {@link IllegalArgumentException} exception if the denominator is zero.
|
||||
* @param nominator the nominator
|
||||
* @param denominator the denominator (any non-zero value)
|
||||
* @apiNote nominator and denominator are GCD reduced to avoid overflows
|
||||
*/
|
||||
private Rational(int nominator, int denominator) {
|
||||
if (denominator == 0)
|
||||
throw new IllegalArgumentException("denominator must be non-negative");
|
||||
|
||||
// GCD reduction
|
||||
var gcd = gcd(denominator, nominator);
|
||||
|
||||
this.nominator = nominator / gcd;
|
||||
this.denominator = denominator / gcd;
|
||||
}
|
||||
|
||||
/**
|
||||
* compute the greatest common divisor of x and y
|
||||
*
|
||||
* @param x the first number to compute the greatest common divisor of
|
||||
* @param y the second number to compute the greatest common divisor of
|
||||
* @return the greatest common divisor of x and y
|
||||
*/
|
||||
private static int gcd(int x, int y) {
|
||||
if (y == 0)
|
||||
return x;
|
||||
|
||||
return gcd(y, y % x);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply this number by rhs. Yields the result as a new number
|
||||
* @param rhs the right hand side of the multiplication
|
||||
* @return the result of this * rhs
|
||||
* @apiNote nominator and denominator are GCD reduced to avoid overflows
|
||||
*/
|
||||
public Rational multiply(Rational rhs) {
|
||||
return new Rational(this.nominator * rhs.nominator(), this.denominator * rhs.denominator());
|
||||
}
|
||||
|
||||
/**
|
||||
* Add this number to rhs. Yields the result as a new number
|
||||
* @param rhs the right hand side of the sum
|
||||
* @return the result of this + rhs
|
||||
* @apiNote nominator and denominator are GCD reduced to avoid overflows
|
||||
*/
|
||||
public Rational add(Rational rhs) {
|
||||
return new Rational(this.nominator * rhs.denominator() + this.denominator * rhs.nominator(), this.denominator * rhs.denominator());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an approximation of the represented number by converting the fraction to BigDecimals and performing
|
||||
* the conversion to single number by division.
|
||||
* @param scale the number of digits to approximate
|
||||
* @return the approximated value as BigDecimal
|
||||
*/
|
||||
public BigDecimal toBigDecimal(int scale) {
|
||||
var nominator = BigDecimal.valueOf(this.nominator, scale);
|
||||
var denominator = BigDecimal.valueOf(this.denominator, scale);
|
||||
|
||||
return nominator.divide(denominator, RoundingMode.HALF_EVEN);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
var a = new Rational(1, 3);
|
||||
var b = new Rational(7, 6);
|
||||
|
||||
var c = a.add(b).multiply(a);
|
||||
|
||||
assertEquals(c.toBigDecimal(10).compareTo(BigDecimal.valueOf(0.5)), 0);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,80 @@
|
|||
package aufgabe3;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
||||
/**
|
||||
* A 64-bit signed rational number. The nominator and denominator are of fixed size of 32-bit.
|
||||
* Both can be signed. The sign of the number is given by sign(nominator) * sign(denominator)
|
||||
* Zero can be represented as the nominator being zero and the denominator being anything but 0.
|
||||
* Since division by 0 is undefined, all rational numbers with a denominator of zero are to be treated as
|
||||
* invalid numbers.
|
||||
* @param nominator
|
||||
* @param denominator
|
||||
*/
|
||||
public record Rational(int nominator, int denominator) {
|
||||
|
||||
/**
|
||||
* Construct a rational number. Throws a {@link IllegalArgumentException} exception if the denominator is zero.
|
||||
* @param nominator the nominator
|
||||
* @param denominator the denominator (any non-zero value)
|
||||
* @apiNote nominator and denominator are GCD reduced to avoid overflows
|
||||
*/
|
||||
public Rational(int nominator, int denominator) {
|
||||
if (denominator == 0)
|
||||
throw new IllegalArgumentException("denominator must be non-negative");
|
||||
|
||||
// GCD reduction
|
||||
var gcd = gcd(denominator, nominator);
|
||||
|
||||
this.nominator = nominator / gcd;
|
||||
this.denominator = denominator / gcd;
|
||||
}
|
||||
|
||||
/**
|
||||
* compute the greatest common divisor of x and y
|
||||
*
|
||||
* @param x the first number to compute the greatest common divisor of
|
||||
* @param y the second number to compute the greatest common divisor of
|
||||
* @return the greatest common divisor of x and y
|
||||
*/
|
||||
private static int gcd(int x, int y) {
|
||||
if (y == 0)
|
||||
return x;
|
||||
|
||||
return gcd(y, y % x);
|
||||
}
|
||||
|
||||
/**
|
||||
* Multiply this number by rhs. Yields the result as a new number
|
||||
* @param rhs the right hand side of the multiplication
|
||||
* @return the result of this * rhs
|
||||
* @apiNote nominator and denominator are GCD reduced to avoid overflows
|
||||
*/
|
||||
public Rational multiply(Rational rhs) {
|
||||
return new Rational(this.nominator * rhs.nominator(), this.denominator * rhs.denominator());
|
||||
}
|
||||
|
||||
/**
|
||||
* Add this number to rhs. Yields the result as a new number
|
||||
* @param rhs the right hand side of the sum
|
||||
* @return the result of this + rhs
|
||||
* @apiNote nominator and denominator are GCD reduced to avoid overflows
|
||||
*/
|
||||
public Rational add(Rational rhs) {
|
||||
return new Rational(this.nominator * rhs.denominator() + this.denominator * rhs.nominator(), this.denominator * rhs.denominator());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an approximation of the represented number by converting the fraction to BigDecimals and performing
|
||||
* the conversion to single number by division.
|
||||
* @param scale the number of digits to approximate
|
||||
* @return the approximated value as BigDecimal
|
||||
*/
|
||||
public BigDecimal toBigDecimal(int scale) {
|
||||
var nominator = BigDecimal.valueOf(this.nominator, scale);
|
||||
var denominator = BigDecimal.valueOf(this.denominator, scale);
|
||||
|
||||
return nominator.divide(denominator, RoundingMode.HALF_EVEN);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package aufgabe3;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Generic test class for implementing and testing a very basic rational number class
|
||||
* _ _ _ _
|
||||
* __ ___ __(_) |_| |_ ___ _ __ | |__ _ _
|
||||
* \ \ /\ / / '__| | __| __/ _ \ '_ \ | '_ \| | | |
|
||||
* \ V V /| | | | |_| || __/ | | | | |_) | |_| |
|
||||
* \_/\_/ |_| |_|\__|\__\___|_| |_| |_.__/ \__, |
|
||||
* |___/
|
||||
* ____ __ __ _
|
||||
* / ___|_ _____ _ __ \ \ / /__ __ _ ___| |
|
||||
* \___ \ \ / / _ \ '_ \ \ \ / / _ \ / _` |/ _ \ |
|
||||
* ___) \ V / __/ | | | \ V / (_) | (_| | __/ |
|
||||
* |____/ \_/ \___|_| |_| \_/ \___/ \__, |\___|_|
|
||||
* |___/
|
||||
* Licensed under the GPLv2 License, Version 2.0 (the "License");
|
||||
* Copyright (c) Sven Vogel
|
||||
*/
|
||||
public class RationalTest {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
var a = new Rational(1, 3);
|
||||
var b = new Rational(7, 6);
|
||||
|
||||
var c = a.add(b).multiply(a);
|
||||
|
||||
assertEquals(c.toBigDecimal(10).compareTo(BigDecimal.valueOf(0.5)), 0);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue