Statische Berechnungen mit Mathcad als Engineering Desktop Tool


Diplomarbeit, 2000

88 Seiten, Note: 1,0


Leseprobe


Inhaltsverzeichnis

1. Mathcad

2. Erstellen eigener Funktionen

3. Übersicht über die erstellten Funktionen
3.1 Funktionen der allgemeinen Statik
3.2 Funktionen zu Berechnungen im Stahlbetonbau
3.3 Funktionen zu Berechnungen im Stahlbau
3.4 Funktionen zu Berechnungen im Holzbau

4. Erläuterungen der Funktionen und Anwendungsbeispiele
4.1 Funktionen der allgemeinen Statik
4.1.1 Schnittgrößenermittlung für Durchlaufträger mit Gleichlast
4.1.2 Schnittgrößenermittlung für Durchlaufträger mit Einzellast
4.1.3 Bestimmung der Randspannungen eines Rechteckquerschnittes
4.1.4 Berechnung von Flächenkennwerten
4.2 Funktionen zu Berechnungen im Stahlbetonbau
4.2.1 Ermittlung der Bewehrungsmenge bei mittig angreifender Normalkraft
4.2.2 Ermittlung der Bewehrungsmenge für ein Biegemoment mit und ohne Normalkraft
4.2.3 Ermittlung der Schubbewehrung für Querkraftbelastung
4.2.4 Ermittlung von Beiwerten zur Bestimmung der maßgebenden Schnittgrößen bei zweiachsig gespannten Platten nach Pieper/Martens
4.3 Funktionen zu Berechnungen im Stahlbau
4.3.1 Profilkennwerte bestimmen
4.3.2 Nach Profilkennwerten suchen
4.3.3 Biegebemessungen im Stahlbau
4.3.4 Schubbemessung im Stahlbau
4.3.5 Ermittlung von Abminderungsfaktoren für Biegeknicken
4.3.6 Ermittlung von Abminderungsfaktoren für Biegedrillknicken
4.4 Funktionen zu Berechnungen im Holzbau
4.4.1 Ermittlung der erforderlichen Höhe bei Biegung ohne Normalkraft für ein Rechteckquerschnitt
4.4.2 Ermittlung der erforderlichen Höhe bei Biegung mit Normalkraft für ein Rechteckquerschnitt
4.4.3 Bestimmung der Abminderungsfaktoren für Knicken im Holzbau

5. Verwendung der Funktionen in Mathcad

6. Quellenverzeichnisse

7. Verwendete Software

ANLAGEN

A1 Statisches System für Durchlaufträger mit Gleichlast

A2 Statisches System für Durchlaufträger mit Einzelkraft

Vorwort

Computer dringen immer weiter in das Leben der Menschen hinein und sind nicht mehr wegzudenken. Sie ermöglichen das effizientere Arbeiten in allen Bereichen, die Bewältigung immenser Aufgaben in kürzerer Zeit.

Mein Interesse an dem Thema dieser Diplomarbeit liegt in der Verbindung meines Studiums mit dem PC. Im Rahmen meiner Diplomarbeit ist eine Softwarebibliothek für statische Standardaufgaben erstellt worden. Sie befindet sich auf der mitgelieferten CD – ROM.

Computeralgebrasysteme (CA – Systeme) erleichtern das Arbeiten mit mathematischen Gleichungen und sind auch für ingenieurmäßige Berechnungen geeignet. Zur Lösung statischer Aufgaben gibt es viele Programme auf dem Markt. Sie sind jedoch unflexibel in der Handhabung und der Gestaltung des Berechnungsweges und der Darstellung. Mit meiner Ausarbeitung lassen sich individuell gestaltete Lösungen zu Problemen im Bauingenieurwesen, im speziellen meiner Vertiefungsrichtung: dem konstruktiven Ingenieurbau, erarbeiten.

Ich danke Professor Dr. Ing. Horst Werkle für seine Unterstützung und Betreuung in den vergangenen Monaten.

Desweiteren gilt mein Dank Herrn Stefan Schablowski und Herrn Till Schenk, die mir bei Problemen mit dem PC und der Software beistanden.

1. MathCAD 7

MATHCAD ist ein Computer – Algebra - System. Genauso wie Textverarbeitungssysteme für das Schreiben und CAD - Systeme für das Zeichnen mit dem Computer entwickelt wurden, stehen Computer – Algebra - Systeme für den Umgang mit der Mathematik. Sie vereinfachen den praktischen Umgang mit der Mathematik ganz entscheidend und können Papier, Bleistift und Taschenrechner ersetzen, auch für sämtliche Berechnungen in Ingenieurbüros.

Im folgenden werden Leistungsmerkmale von MATHCAD aufgelistet, aus denen die Vorteile des Produktes von MathSoft ersichtlich werden [1]:

- In MATHCAD können Gleichungen und Formeln in bekannter Notation eingegeben werden. Auf einem sogenannten Arbeitsblatt, der Arbeitsoberfläche, erfolgt die Auswertung von oben nach unten und von links nach rechts. Dies erinnert an den Umgang mit gewohnten Hilfsmitteln in der Mathematik.

- Symbolisches Rechnen

Bei symbolischen Berechnungen erhält man allgemeine Formeln als Ergebnisse, im Unterschied zu numerischen Berechnungen, wo die Ergebnisse Zahlenwerte sind. So lassen sich beispielweise unbestimmte Integrale berechnen oder Gleichungen nach Unbekannten umstellen.

- MATHCAD verarbeitet u.a. SI - Einheiten

Sind einmal die entsprechenden Definitionen eingegeben worden, führt das Programm automatisch alle Umrechnungen durch und markiert inkonsistente Dimensionsberechnungen.

Maßeinheiten und Messgrößen sind zwar für Berechnungen nicht unbedingt erforderlich, sie können jedoch bei der Fehlersuche nützlich sein und ergänzen die Darstellung der berechneten Resultate, insbesondere bei Berechnungen in Ingenieurbüros.

- Textverarbeitung mit MATHCAD

Textbereiche dienen in einem Arbeitsblatt als Kommentare, die Berechnungen und Diagramme erläutern. MATHCAD unterstützt viele gebräuchliche Bearbeitungs- und Formatierungsfunktionen von Textverarbeitungsprogrammen.

- Die OLE - Technologie

OLE – Object Linking and Embedding, Verknüpfen und Einbetten von Objekten. Diese Technologie lässt eine schönere Gestaltung von Arbeitsblättern zu. Elemente, die mit anderen Anwendungen erstellt wurden, lassen sich einfügen. Umgekehrt kann man MATHCAD - Arbeitsblätter in andere Anwendungen einfügen.

- Diagramme

Berechnungsergebnisse lassen sich in Diagrammen graphisch darstellen. Zur Auswahl steht eine Vielzahl von Möglichkeiten, z.B. zweidimensionale kartesische und Kreisdiagramme, Umriss- und Flächendiagramme, usw.

- Programmierung

In MATHCAD PRO stehen zur Steuerung von Berechnungsvorschriften spezielle Programmieroperationen zur Verfügung. Mit Anweisungen wie if, while, for, usw. lassen sich kompliziertere Berechnungen auf kurzem Wege bewältigen.

- Erstellen von benutzerdefinierten Funktion (DLLs)

Eigene Funktionen lassen sich in C/C++ programmieren und in MATHCAD einbinden, so dass man sie wie die in MATHCAD integrierten Funktionen benutzen kann. Diese Möglichkeit stellt den Kern meiner Diplomarbeit dar und die Erstellung von eigenen DLLs wird in Kapitel 2 näher betrachtet.

- Online-Ressourcen

Mit MathCAD kann man auf mathematische und technische Inhalte im World Wide Web zugreifen. Es stehen Foren zur Verfügung, die den Benutzer mit anderen MATHCAD - Anwendern verbinden. In diesem Nachrichtensystem findet man die Merkmale eines Computer – Bulletin – Board oder einer Online – Newsgroup. Hier kann man Dateien beisteuern oder herunterladen und Nachrichten austauschen. Diese WWW – Foren stehen kostenlos zur Verfügung.

Mit den oben beschriebenen Möglichkeiten, welche nur einen Auszug darstellen, lassen sich in MATHCAD Arbeitsblätter zu speziellen Problemstellungen erstellen und immer wieder verwenden, falls dasselbe Problem noch einmal auftauchen sollte. Wird eine Änderung im Arbeitsblatt vorgenommen, berechnet das Programm alle Formeln und Gleichungen neu, aktualisiert Ergebnisse und zeichnet Diagramme neu.

2. Erstellen eigener Funktionen

2.1 Die Definition von DLL

DLL – Dynamically Linked Library oder Dynamic Link Library.

Eine Software – Bibliothek für Module, die während des Ablaufs von Programmen dynamisch geladen werden können [2]. MATHCAD jedoch ruft die DLLs nicht dynamisch auf, sondern lädt sie bei Programmstart aus dem Verzeichnis \userefi.

2.2 Programmierung einer DLL

Um eine DLL zu erstellen, muss zunächst eine Funktion in C/C++ geschrieben werden. MathSoft schlägt hierzu folgende 32 – Bit – Compiler vor:

- Microsoft C/C++ Compiler
- Borland C/C++ 4.0 und 5.0
- Symantec C/C++ 6.0 und 7.0
- Watcom C/C++ 9.5 und 10.0

Compiler sind Systemprogramme, die den Quellcode eines Programms in Maschinencode umsetzen, der von einem Computer verstanden und ausgeführt werden kann [2]. Oben genannte Compiler wurden von MathSoft getestet. Bei Gebrauch anderer Compiler ist nicht garantiert, dass die Funktionen fehlerfrei geladen werden können.

Im folgenden wird das Erstellen einer DLL mit Microsoft Visual C++ 5.0 anhand eines einfachen Beispiels beschrieben. Die groben Schritte zur Erstellung einer DLL sind folgende Schritte [1]:

- Deklarierung der Benutzerfunktion
- FUNCTIONINFO – Struktur
- Fehlermeldungstabelle (optional)
- Definition der Benutzerfunktion, der ausführbare Quelltext
- DLL – Eintrittspunkt

Die Farbgebung im Quelltext ist vom Compiler zur besseren Übersicht eingerichtet. Grün geschrieben sind die Kommentare, blau steht für reservierte Befehle in C/C++!

//*******************************************************************

// Diese Funktion übernimmt von MATHCAD zwei Argumente b und c, berechnet

// die Division b/c und übergibt das Ergebnis der Rückgabevariable a. Aufgerufen

// wird sie über den Funktionsnamen DIV(b, c).

//*******************************************************************

// mcadincl.h ist eine von MathSoft bereitgestellte sogenannte Header –

// Datei. Sie enthält die Protoypen für folgende Funktionen:

// CreateUserFunction, CreateUserMessageTable, MathcadAllocate, MathcadFree,

// MathcadArrayAllocate, MathcadArrayFree, MyCFunction und isUserInterrupted.

// Dies sind alles Funktionen für die Erstellung einer DLL.

// Weiterhin enthält die Datei die Typendefinitionen für die Strukturen

// COMPLEXSCALAR, COMPLEXARRAY und FUNCTIONINFO.

// Diese Einbindung ist immer notwendig!

#include "mcadincl.h"

//*******************************************************************

// Zu jedem C – Compiler gehört eine Bibliothek, in der sich bereits übersetzte

// Funktionen befinden. In math.h befinden sich zahlreiche mathematische

// Funktionen, wie cos(x), sqrt(x), usw. [3].

#include "math.h"

//*******************************************************************

// Deklaration der Funktion DIV(b, c)

// LPCOMPLEXSCALAR a bedeutet, dass der Rückgabewert a (= Ergebnis)

// ein Skalarwert mit imaginärem Teil ist. Der imaginäre Teil ist immer dabei!

// Falls der Rückgabewert ein Feld ist, muss an dieser Stelle LPCOMPLEXARRAY

// a stehen. Das gleiche gilt für die Argumente b und c der Funktion DIV(b, c).

LRESULT DIVFunction(LPCOMPLEXARRAY a,

LPCOMPLEXSCALAR b, LPCOMPLEXSCALAR c);

// Bei Registrierung mehrerer Funktionen in einer DLL folgen hier weitere

// Deklarationen.

//*******************************************************************

// Die FUNCTIONINFO – Struktur DIV wird für die Registrierung der

// Benutzerfunktion in MATHCAD verwendet. Sie enthält die Informationen über

// den Namen der Funktion, eine Beschreibung der Argumente, sowie den Zeiger

// auf den für die Ausführung der Berechnungen zuständigen Quelltext. Es muss für

// jede Funktion in der Bibliotheksdatei eine FUNCTIONINFO – Struktur angelegt

// werden.

// Die Informationen über die Funktion erscheinen im Dialogfeld Funktion einfügen.

FUNCTIONINFO DIV =

{

// Name, über welche die Funktion in MATHCAD aufgerufen wird

"DIV",

// Beschreibung der benötigten Funktionsparameter

"a, b",

// Beschreibung der Funktion, was liefert sie

"Die Funktion DIV(a, b) liefert als "

"Ergebnis die Division a durch b. ",

// Zeiger auf den ausführbaren Quelltext, wenn der Benutzer den

// Namen der Funktion eingibt

(LPCFUNCTION)DIVFunction,

// Rückgabewert ist ein komplexer Skalarwert. Falls der Rückgabewert ein

// komplexes Feld ist, muss hier COMPLEX_ARRAY stehen!

COMPLEX_SCALAR,

// die Funktion benötigt/verwendet 2 Argumente

2,

// beide Argumente sind komplexe Skalare

{ COMPLEX_SCALAR, COMPLEX_SCALAR }

};

//*******************************************************************

// Rot umrandete Fehlermeldung in MATHCAD.

// Falls die Funktion niemals Fehler produziert, muss diese Tabelle nicht angelegt

// werden. In der eckigen Klammer steht die Anzahl der verschiedenen möglichen

// Fehlermeldungen.

// Pro DLL kann nur eine Fehlermeldungstabelle, aber mehrere Funktionen registriert

// werden. Alle Funktionen einer DLL greifen auf diese Tabelle zu.

// Die untere Fehlermeldungstabelle ist eigentlich überflüssig! MATHCAD erkennt

// folgende Ausnahmefehler: Überlauf, Division durch 0 und ungültige Operation und

// zeigt unter der jeweiligen Funktion die entsprechende Fehlermeldung an.

char *myErrorMessageTable[1] =

{

"Division durch Null ist nicht erlaubt!"

};

//*******************************************************************

// Der ausführbare Quelltext der Funktion DIV(a, b). Die Definition der Funktion.

LRESULT DIVFunction(LPCOMPLEXSCALAR a, LPCOMPLEXSCALAR b,

LPCOMPLEXSCALAR c)

{ // Die Daten zwischen MATHCAD und der Benutzerfunktion werden in

// doppelter Genauigkeit ausgetauscht. Bei Verwendung unterschiedlicher

// Datentypen sind entsprechende Konvertierungen zu beachten.

double DIVISION;

double ARG1;

double ARG2;

// Übernahme der realen Teile der Argumente, falls die imaginären Teile

// nicht benötigt werden, bzw. gesondert behandelt werden (müssen).

ARG1 = b -> real;

ARG2 = c -> real;

// Wenn ARG2 = 0 ist, erscheint eine Fehlermeldung.

// Im Fehlerfall setzt sich der Rückgabewert aus 2 Komponenten

// zusammen: der Fehlercode und die Stelle (Argument) , an der die

// Fehlermeldung erscheinen soll.

// MAKELRESULT(1, 2) bedeutet Fehlercode 1 aus der Fehlermeldungs-

// tabelle am 2. Argument.

// Wenn die ganze Funktion rot markiert werden soll, weil z.B. ein

// allgemeiner Fehler vorliegt, der keinem Argument zugeordnet werden

// kann, lautet der Befehl: return 1.

if ( ARG2 == 0 )

return MAKELRESULT (1, 2);

// Berechnungen

DIVISION = ARG1 / ARG2;

// Rückgabe des Realteiles des Ergebnisses.

// Wenn der Rückgabewert ein Feld ist, muss mit der Struktur

// MathcadArrayAllocate Speicherplatz reserviert werden. Bei Rückgabe

// einer Fehlermeldung muss dieser Speicherplatz mit MathcadArrayFree

// wieder freigegeben werden. Daher empfiehlt es sich erst „kurz“ vor

// Rückgabe des Ergebnisses, nach Überprüfung sämtlicher Fehlerquellen,

// Speicherplatz zu reservieren! Zur Verwendung entsprechender Befehle

// siehe Quelltext auf Seite 30.

a -> real = DIVISION;

// kein Fehler aufgetreten, normale Rückgabe

return 0;

}

//*******************************************************************

// Alle MATHCAD – DLLs benötigen einen DLL – Eintrittspunkt.

// Der DLL – Eintrittspunkt wird durch das Betriebssystem beim Laden der DLL

// aufgerufen. Folgende Zeilen sind Microsoft spezifisch!

BOOL WINAPI _CRT_INIT(HINSTANCE hinstDLL, DWORD

dwReason, LPVOID lpReserved);

BOOL WINAPI DllEntryPoint (HINSTANCE hDLL, DWORD dwReason,

LPVOID lpReserved)

// Statt “DllEntryPoint” kann jeder beliebige Begriff eingesetzt werden. Dies muss

// bei den Einstellungen des Linkers berücksichtigt werden!

{

switch (dwReason)

{

case DLL_PROCESS_ATTACH:

if (!_CRT_INIT(hDLL, dwReason, lpReserved))

return FALSE;

// folgende 2 Zeilen sind wegzulassen, wenn keine

// Fehlermeldungstabelle angelegt wurde, die Funktion

// also keine Fehler produziert.

// Die Ziffer gibt die Anzahl der angelegten Fehlercodes

// an.

if (CreateUserErrorMessageTable(hDLL, 1,

myErrorMessageTable))

// Registrierung der Benutzerfunktion(en)

CreateUserFunction( hDLL, &DIV );

break;

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

if (!_CRT_INIT(hDLL, dwReason, lpReserved))

return FALSE;

break;

}

return TRUE;

}

//*******************************************************************

// Ende des Quelltextes in C/C++.

Dieser Quelltext für die Erstellung einer DLL stellt das Grundgerüst dar. Durch Änderungen des ausführbaren Quelltextes, der Definition der Funktion und Anpassungen der notwendigen Strukturen, insbesondere den Zeigern auf den ausführbaren Quelltext, kann Kapitel 2 als Leitfaden zur Erstellung eigener DLLs benutzt werden.

2.3 Änderungen für C++

Die obige Beschreibung und die von MathSoft mitgelieferte Datei mcadincl.h lassen Quelltexte nur in C zu. Um C++ verwenden zu können sind einige Änderungen notwendig!

Im Abschnitt des DLL – Eintrittpunktes muss die Zeile

BOOL WINAPI _CRT_INIT(HINSTANCE hinstDLL, DWORD dwReason,

LPVOID lpReserved);

geändert werden in

extern "C" BOOL WINAPI _CRT_INIT(HINSTANCE hinstDLL, DWORD

dwReason, LPVOID lpReserved);

Für ein fehlerfreies Linken (s. Kapitel 2.4) sind noch Änderungen in der Datei mcadincl.h vorzunehmen. Den fünf aufgelisteten Zeilen wurde jeweils

extern "C"

vorangestellt.

extern "C" const void * CreateUserFunction( HINSTANCE, FUNCTIONINFO * );

extern "C" BOOL CreateUserErrorMessageTable( HINSTANCE, …

extern "C" BOOL MathcadArrayAllocate( COMPLEXARRAY * const, …

extern "C" void MathcadArrayFree( COMPLEXARRAY * const );

extern "C" BOOL isUserInterrupted( void );

Das Linken erfolgt danach fehlerfrei, auch mit C++ Befehlen im Quelltext.

2.4 Einstellungen des Compilers

Mit dem nach Kapitel 2.2 erstellten Quellcode und den nach Kapitel 2.3 durchgeführten Änderungen kann nun eine DLL erstellt werden. Die DLL wird vom Compiler erstellt. Hierfür müssen folgende Einstellungen des Compilers vorgenommen werden [4]:

1. Schritt: In der Menüleiste von Microsoft Developer Studio unter dem Menüpunkt Datei Neu... wählen. Es erscheint:

Abbildung in dieser Leseprobe nicht enthalten

Im Register Projekte „Win32 Dynamic – Link Library“ wählen.

Unter Projektname und Pfad Entsprechendes eingeben!

2. Schritt: Nach Bestätigung erscheint :

Abbildung in dieser Leseprobe nicht enthalten

Mit Hilfe des Kontextmenüs (rechte Maustaste) zu DIV Dateien im

Register File View folgende Dateien hinzufügen:

- Quelltext DIV.cpp
- Header – Datei mcadincl.h

Die Datei befindet sich bei Verwendung des Microsoft Visual C++ Compilers im Verzeichnis Mathcad\userefi\Microsft\Include

- Bibliotheksdatei mcaduser.lib im Verzeichnis \Mathcad\userefi\Microsft\Lib

Bemerkungen: Die Header – Datei math.h ist nur hinzuzufügen, wenn sie im Quelltext eingebunden wurde.

„Microsft“ ist kein Schreibfehler, wurde vom Setup so ausgeführt!

3. Schritt: Im Kontextmenü zu DIV Dateien erscheint unter Einstellungen das

Dialogfenster Projekteinstellungen:

Abbildung in dieser Leseprobe nicht enthalten

Register C/C++ wählen.

Kategorie Präprozessor einstellen.

Die Header – Datei mcadincl.h ist nicht in der Bibliothek des

Compilers enthalten ( sie wird von MathSoft geliefert! ). Der

zugehörige Pfad ist unter Zusätzliche Include – Verzeichnisse

einzugeben.

4. Schritt: Im Register Linker ist der DLL – Eintrittspunkt einzugeben.

Abbildung in dieser Leseprobe nicht enthalten

Kategorie Ausgabe wählen.

Bei Symbol für Einstiegspunkt ist der im Quelltext gewählte Begriff

einzutragen, hier: DllEntryPoint.

5. Schritt: In der Menüleiste von Microsoft Developer Studio unter dem

Menüpunkt Erstellen ist DIV.dll zu wählen.

Der Compiler erstellt nun die DLL im angegebenem Pfad.

2.5 Einbindung der Benutzerfunktionen in MATHCAD

Beim Programmstart sucht MATHCAD als erstes im Verzeichnis \userefi nach Dateien mit einer .dll – Erweiterung. Danach versucht das Programm alle Dateien mit dieser Endung zu laden.

Nach Erstellung der DLL muss diese in das Verzeichnis \userefi kopiert werden. Die Benutzerfunktion erscheint wie die integrierten Funktionen im Dialogfenster Funktion einfügen.

Abbildung in dieser Leseprobe nicht enthalten

Beim Erstellen und Testen der DLLs stellte ich fest, dass die Obergrenze der Dateien mit .dll – Erweiterungen bei 50 liegt. Sind mehr als 50 DLLs im Verzeichnis \userefi vorhanden, lässt sich MATHCAD nicht mehr starten. Statt dessen erscheint eine Fehlermeldung.

In dem Begriff „Dynamically Linked Library“ steckt schon das Wort „Bibliothek“ drin und daher ist es sinnvoll mehrere Funktionen der gleichen Kategorie in einer DLL zusammenzufassen. Dabei ist zu beachten, dass nur eine Fehlermeldungstabelle angelegt werden kann. Zu jeder Funktion in einer DLL muss eine Deklarierung, eine FUNCTIONINFO – Struktur und der ausführbare Quelltext vorhanden sein.

[...]

Ende der Leseprobe aus 88 Seiten

Details

Titel
Statische Berechnungen mit Mathcad als Engineering Desktop Tool
Hochschule
Hochschule für Technik, Wirtschaft und Gestaltung Konstanz
Note
1,0
Autor
Jahr
2000
Seiten
88
Katalognummer
V184
ISBN (eBook)
9783638101363
Dateigröße
2101 KB
Sprache
Deutsch
Anmerkungen
Erstellung eigener Funktionen in C/C++ für Mathcad von MathSoft in Form von Dlls zur Durchführung von statischen Berechnungen. Anleitung ebenfalls verwendbar für andere Fachgebiete.
Schlagworte
Statische, Berechnungen, Mathcad, Engineering, Desktop, Tool
Arbeit zitieren
Serkan Karadag (Autor:in), 2000, Statische Berechnungen mit Mathcad als Engineering Desktop Tool, München, GRIN Verlag, https://www.grin.com/document/184

Kommentare

  • Noch keine Kommentare.
Blick ins Buch
Titel: Statische Berechnungen mit Mathcad als Engineering Desktop Tool



Ihre Arbeit hochladen

Ihre Hausarbeit / Abschlussarbeit:

- Publikation als eBook und Buch
- Hohes Honorar auf die Verkäufe
- Für Sie komplett kostenlos – mit ISBN
- Es dauert nur 5 Minuten
- Jede Arbeit findet Leser

Kostenlos Autor werden