Commit 659548d9 authored by Uwe Wienkop's avatar Uwe Wienkop
Browse files

2020-05-12 Di

parent 1f689a54
......@@ -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();
......
......@@ -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
}
}
}
{
"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
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\wienkop\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\wienkop\\.nuget\\packages"
]
}
}
\ No newline at end of file
{
"runtimeOptions": {
"tfm": "netcoreapp3.1",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "3.1.0"
}
}
}
\ No newline at end of file
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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment