diff --git a/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2 b/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2 index d8c7c88068a42e3eedc0abf8d41fb4e839e4da6d..900a19fea236e2dfc217b5fa5c02fb44ff3f685f 100644 Binary files a/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2 and b/.vs/prog2-ss2020-wienkop/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/prog2-ss2020-wienkop/v16/.suo b/.vs/prog2-ss2020-wienkop/v16/.suo index 3d6b5bc4363f4fd7c162f872adfc1c6c4f02b0a9..7cd551f2906dc682cd77f4938f33a274506d2f83 100644 Binary files a/.vs/prog2-ss2020-wienkop/v16/.suo and b/.vs/prog2-ss2020-wienkop/v16/.suo differ diff --git a/02VerketteteListe-2/Program.cs b/02VerketteteListe-2/Program.cs index 6dbaa4fe5c465c28f2dd61e58c8b8fa7eb2856d5..b734d9d128c44f802770a5c83881664dac7352ee 100644 --- a/02VerketteteListe-2/Program.cs +++ b/02VerketteteListe-2/Program.cs @@ -125,12 +125,12 @@ namespace _02VerketteteListe_2 // an der gespeicherten Pos. weitergemacht. } } - public IEnumerable Iterate(int offset=0) + public IEnumerable Iterate(int offset = 0) { Element item = anf; for (int i = 0; i < offset; i++) item = item.next; - while( item != null) + while (item != null) { yield return item.name; item = item.next; @@ -193,7 +193,7 @@ namespace _02VerketteteListe_2 else { Element vorletzter = anf; - for (int i = 0; i < index-1; i++) // Liste bis zum n-1-ten Element durchlaufen + for (int i = 0; i < index - 1; i++) // Liste bis zum n-1-ten Element durchlaufen vorletzter = vorletzter.next; vorletzter.next = vorletzter.next.next; anz--; @@ -246,6 +246,13 @@ namespace _02VerketteteListe_2 get => NthElem(index).name; set { NthElem(index).name = value; } } + public StringListe Reverse() // DIES IST NICHT DIE LÖSUNG FÜR DIE PRAKTIKUMSAUFGABE!!! + { + StringListe neueListe = new StringListe(); + for (Element item = anf; item != null; item = item.next) + neueListe.AddFront(item.name); + return neueListe; + } } class Program { @@ -260,6 +267,11 @@ namespace _02VerketteteListe_2 l1.AddSorted("Claudia"); l1.AddSorted("Dieter"); l1.Print(); + l1 = l1.Reverse(); + Console.WriteLine("=================="); + l1.Print(); + Console.WriteLine("=================="); + Console.WriteLine(l1[3]); Console.WriteLine("=================="); //l1.DeleteFirst(); diff --git a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll index f82246a4263adcdb6554af4cfc6f4b20b3597a4b..bf3b90464188fdb37231ccae871fdf7900be8722 100644 Binary files a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll and b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.dll differ diff --git a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb index d44804dc685170134f1f5c67cd5d428081473ed4..293fc5255bcee75596e514008d4f3e1658626ae1 100644 Binary files a/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb and b/02VerketteteListe-2/bin/Debug/netcoreapp3.1/02VerketteteListe-2.pdb differ diff --git a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache index 308f84f1bd32b1f7e1467356eb1ac40d7da08d5e..4824caf0c92344f68eac696e04da28b425072d2c 100644 Binary files a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache and b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.csprojAssemblyReference.cache differ diff --git a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll index f82246a4263adcdb6554af4cfc6f4b20b3597a4b..bf3b90464188fdb37231ccae871fdf7900be8722 100644 Binary files a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll and b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.dll differ diff --git a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb index d44804dc685170134f1f5c67cd5d428081473ed4..293fc5255bcee75596e514008d4f3e1658626ae1 100644 Binary files a/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb and b/02VerketteteListe-2/obj/Debug/netcoreapp3.1/02VerketteteListe-2.pdb differ diff --git a/03VererbungKfzIntro/Program.cs b/03VererbungKfzIntro/Program.cs index 0a92bbe72ca22a51096fb512fa6c572cbc3945ce..397ce6a884d94ac37a4e12b465fd94d431f7e0b8 100644 --- a/03VererbungKfzIntro/Program.cs +++ b/03VererbungKfzIntro/Program.cs @@ -33,51 +33,123 @@ namespace _03VererbungKfzIntro //Der Höchstsatz für die günstigste Lkw-Steuerklasse beträgt 556,00 Euro class Kfz { - + string kennzeichen; + public Kfz(string kennzeichen) { this.kennzeichen = kennzeichen; } + public virtual void Ausgeben() { Console.Write($"{kennzeichen}: "); } + public virtual double SteuernBerechnen() { return -999; } + // virtual ~ + // 1. Methodenauswahl auf Basis des DYNAMISCHEN Objekttyps (z.B. Pkw.SteuernBerechnen() ) + // 2. Diese Methode KANN in der abgeleiteten Klasse überschrieben werden; muss aber nicht! + // Beispiel für virtual: public virtual string ToString() { return "namespacename.klassenname"; } + // abstract ~ + // 1. wie oben + // 2. Diese Methode MUSS in der abgeleiteten Klasse überschrieben werden + // 3. Von einer abstrakten Klasse können keine Objekte angelegt werden } class Pkw : Kfz // Vererbung, Spezialisierung, ist-ein Beziehung { int hubraum, CO2; public enum BenzinDiesel { Benzin, Diesel }; BenzinDiesel typ; + public Pkw(string kennzeichen, int hubraum, int CO2, BenzinDiesel typ) : base(kennzeichen) + { + this.hubraum = hubraum; + this.CO2 = CO2; + this.typ = typ; + } + public override double SteuernBerechnen() + { + if (typ == BenzinDiesel.Benzin) + return 2.0 * (hubraum + 99) / 100; + else + return 9.5 * (hubraum + 99) / 100; + } + public override void Ausgeben() + { + base.Ausgeben(); + Console.WriteLine($"{typ}, Hubraum: {hubraum}"); + } } class Motorrad : Kfz { int hubraum; + public Motorrad(string kennzeichen, int hubraum) : base(kennzeichen) + { + this.hubraum = hubraum; + } + public override double SteuernBerechnen() => 1.84 * (hubraum + 24) / 25; } - class LKW : Kfz { } - class Elektroroller : Kfz { } + class LKW : Kfz + { + int hubraum, gewicht; + public LKW(string kennzeichen, int hubraum, int gewicht) : base(kennzeichen) + { + this.hubraum = hubraum; + this.gewicht = gewicht; + } + public override double SteuernBerechnen() => 1000; + } + //class Elektroroller : Kfz { } class Program { static void Main(string[] args) { + #region Alte Vorgehensweise //Pkw[] autos = new Pkw[1000]; //Motorrad[] motorraeder = new Motorrad[1000]; //LKW[] lastwagen = new LKW[1000]; //Elektroroller[] - Kfz[] fahrzeuge = new Kfz[1000]; - int menueauswahl = 1, FzAnzahl = 0; + #endregion + Kfz[] fahrzeuge = new Kfz[4]; + // Statischer Typ ~ Der angegebene Datentyp; hier Kfz + // Der dynamische Typ ist der beim new() angegebene Typ + + #region Alte Vorgehensweise + //int menueauswahl = 1, FzAnzahl = 0; //if (menueauswahl == 1) // autos[autoanzahl] = new Pkw(); //else if (menueauswahl == 2) // motorraeder[motorradanzahl] = new Motorrad(); //else if (menueauswahl == 3) // lastwagen[lkwanzahl] = new LKW(); - if (menueauswahl == 1) - fahrzeuge[FzAnzahl] = new Pkw(); - else if (menueauswahl == 2) - fahrzeuge[FzAnzahl] = new Motorrad(); - else if (menueauswahl == 3) - fahrzeuge[FzAnzahl] = new LKW(); + #endregion - for (int i = 0; i < autoanzahl; i++) - { - autos[i].SteuernBerechnen(); - } - for (int i = 0; i < motorradanzahl; i++) + fahrzeuge[0] = new Pkw("N-XY 567", 1598, 148, Pkw.BenzinDiesel.Diesel); + fahrzeuge[1] = new Motorrad("ER-KW 123", 250); + fahrzeuge[2] = new LKW("FÜ-KL 987", 4598, 3500); + fahrzeuge[3] = new Kfz("N-AB 123"); + + #region Gemeinsames Feld, aber mit lästiger Typprüfung und Verzweigung + // Der statische Typ zwingt zu einer Überprüfung des Typs, einem cast zum + // spezifischen Typ (z.B. PKW) und erst dann kann die spezifische Steuern-Methode aufgerufen werden + //for (int i = 0; i < fahrzeuge.Length; i++) + //{ + // if (fahrzeuge[i] is Pkw) + // Console.WriteLine(((Pkw)fahrzeuge[i]).SteuernBerechnen()); + // else if (fahrzeuge[i] is Motorrad) + // Console.WriteLine(((Motorrad)fahrzeuge[i]).SteuernBerechnen()); + // + #endregion + + for (int i = 0; i < fahrzeuge.Length; i++) { - motorraeder[i].SteuernBerechnen(); + Console.WriteLine(fahrzeuge[i].SteuernBerechnen()); + // Methodenauswahl findet "normalerweise" auf Basis des STATISCHEN TYPS statt! + // virtual und abstract ermöglichen, die gemäß des DYNAMISCHEN TYPS gespeicherte Methode + // automatisch aufzurufen - ohne dass eine Typüberprüfung, ein cast oder eine if-Auswahl + // erfolgen muss. Weitere/spätere Klassen werden einfach in dieses Verfahren durch + // Erben von Kfz "eingeklinkt"! } + #region Alte Vorgehensweise + //for (int i = 0; i < autoanzahl; i++) + //{ + // autos[i].SteuernBerechnen(); + //} + //for (int i = 0; i < motorradanzahl; i++) + //{ + // motorraeder[i].SteuernBerechnen(); + //} + #endregion } } } diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.deps.json b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.deps.json new file mode 100644 index 0000000000000000000000000000000000000000..3c01f9d328a6f84ff105b3f53d9fd876c28de74e --- /dev/null +++ b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v3.1", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v3.1": { + "03VererbungKfzIntro/1.0.0": { + "runtime": { + "03VererbungKfzIntro.dll": {} + } + } + } + }, + "libraries": { + "03VererbungKfzIntro/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.dll b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.dll new file mode 100644 index 0000000000000000000000000000000000000000..28f19e74f4bd1f0eccbcd528755c0fe297ac5991 Binary files /dev/null and b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.dll differ diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.exe b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.exe new file mode 100644 index 0000000000000000000000000000000000000000..3b4e4e57a0a5c83c30722eb721c99b68437c5b32 Binary files /dev/null and b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.exe differ diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a202b4aa223780bd6bc1510855455469802ba2cf Binary files /dev/null and b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb differ diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.dev.json b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.dev.json new file mode 100644 index 0000000000000000000000000000000000000000..3becea41545888f98131d88ad51766e8ddde3bce --- /dev/null +++ b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.dev.json @@ -0,0 +1,8 @@ +{ + "runtimeOptions": { + "additionalProbingPaths": [ + "C:\\Users\\wienkop\\.dotnet\\store\\|arch|\\|tfm|", + "C:\\Users\\wienkop\\.nuget\\packages" + ] + } +} \ No newline at end of file diff --git a/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.json b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..bc456d7868bb54ec1809da30e339cd43f0a8a09c --- /dev/null +++ b/03VererbungKfzIntro/bin/Debug/netcoreapp3.1/03VererbungKfzIntro.runtimeconfig.json @@ -0,0 +1,9 @@ +{ + "runtimeOptions": { + "tfm": "netcoreapp3.1", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "3.1.0" + } + } +} \ No newline at end of file diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.CoreCompileInputs.cache b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..866b744e18d17bd43f4fc4b66cbb3dbc817b1992 --- /dev/null +++ b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +c0523642d3f3714f80c0cf31b3f8720f51a0bc09 diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.FileListAbsolute.txt b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.FileListAbsolute.txt new file mode 100644 index 0000000000000000000000000000000000000000..51b27d5196f60bccb7c3dc98a4eb8d4b989671cd --- /dev/null +++ b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csproj.FileListAbsolute.txt @@ -0,0 +1,13 @@ +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.exe +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.deps.json +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.runtimeconfig.json +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.runtimeconfig.dev.json +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.dll +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\bin\Debug\netcoreapp3.1\03VererbungKfzIntro.pdb +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.csprojAssemblyReference.cache +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.csproj.CoreCompileInputs.cache +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.AssemblyInfoInputs.cache +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.AssemblyInfo.cs +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.dll +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.pdb +C:\Users\wienkop\source\repos\prog2-ss2020-wienkop\03VererbungKfzIntro\obj\Debug\netcoreapp3.1\03VererbungKfzIntro.genruntimeconfig.cache diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csprojAssemblyReference.cache b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..d7dd684443de8ada82f92a8e0cf14a64b9096fd6 Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.csprojAssemblyReference.cache differ diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.dll b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.dll new file mode 100644 index 0000000000000000000000000000000000000000..28f19e74f4bd1f0eccbcd528755c0fe297ac5991 Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.dll differ diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.exe b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.exe new file mode 100644 index 0000000000000000000000000000000000000000..3b4e4e57a0a5c83c30722eb721c99b68437c5b32 Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.exe differ diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.genruntimeconfig.cache b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.genruntimeconfig.cache new file mode 100644 index 0000000000000000000000000000000000000000..34bedab819ef1631d37d6e87ef9a716c545a105e --- /dev/null +++ b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.genruntimeconfig.cache @@ -0,0 +1 @@ +86c8e15dd33445635927cfaf398408205fd11473 diff --git a/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a202b4aa223780bd6bc1510855455469802ba2cf Binary files /dev/null and b/03VererbungKfzIntro/obj/Debug/netcoreapp3.1/03VererbungKfzIntro.pdb differ diff --git a/04 UebgDi Vererbung/Program.cs b/04 UebgDi Vererbung/Program.cs index 5fa24c1301d7b65d44d7d1696eb816c0a6156f6c..b2c94005845c742b18d2a6f6412c04b6553d417d 100644 --- a/04 UebgDi Vererbung/Program.cs +++ b/04 UebgDi Vererbung/Program.cs @@ -6,22 +6,44 @@ namespace _04_UebgDi_Vererbung // Dreieck (int p1x, int p1y, int p2x, int p2y, int p3x, int p3y) // Rechteck(int topX, int topY, int width, int height) // Circle(int x, int y, int r) - // Erstellen Sie in Main() ein Feld in dem Sie diese Objekte miteinander speichern können - - // hierfür ist die Erstellung einer gemeinsamen Basisklasse erforderlich - + // Erstellen Sie in Main() EIN Feld in dem Sie diese Objekte miteinander speichern können - + // hierfür ist die Erstellung einer gemeinsamen Basisklasse GrafischesObjekt erforderlich - // und schreiben Sie eine for/foreach-Schleife, die für die jeweiligen Feldeinträge // die entsprechende Ausgabe()-Methode aufruft. Hier reicht es aus, z.B. einfach Kreis(x,y,r) // auszugeben. - class Dreieck - { } - class Rechteck + class GrafischesObjekt + { + public virtual void Print() { } + // virtual ~ Diese Methode kann/darf in den abgeleiteten Klassen überschrieben werden + } + class Dreieck : GrafischesObjekt { } - class Kreis + class Rechteck : GrafischesObjekt { } + class Kreis : GrafischesObjekt + { + int x, y, r; + public Kreis(int x, int y, int r) + { + this.x = x; + this.y = y; + this.r = r; + } + public override void Print() + { + // base.Print(); // Evtl. Nutzen der Funktionalität der Basisklasse + Console.WriteLine($"Kreis: {x},{y}, radius: {r}"); + } + + } class Program { static void Main(string[] args) { - Console.WriteLine("Hello World!"); + GrafischesObjekt[] grObjekte = new GrafischesObjekt[5]; + grObjekte[0] = new Kreis(10,20, 5); + //((Kreis) grObjekte[0]).Print(); + grObjekte[0].Print(); } } }