Wie mach ich das denn z.b.? Unser Lehrer hat uns das nicht wirklich erklärt und im inet habe ich keine Erklärung gefunden die ich verstanden habe.
Blutiger Anfänger in C#
-
- [C#]
- libiza
-
-
-
bool IstZahl(char Zeichen)
{
return Zeichen > 48 && Zeichen < 57;
}so als pseudocode. chars sollten ihrem ascii wert entsprechen. also wenn du char 48 hast, sollte es eine 0 sein. ich bin aber auf c++ gepolt, laut threadtitel gehts um c#. aber soviel anders kann das nicht sein.
-
Ich lerne auch c++ wollte nur keinen neuen thread auf machen
Aber danke wenn ich zuhause bin probierte ich es aus -
-
bool IstZahl(char Zeichen)
{
return Zeichen > 48 && Zeichen < 57;
}
so als pseudocode. chars sollten ihrem ascii wert entsprechen. also wenn du char 48 hast, sollte es eine 0 sein. ich bin aber auf c++ gepolt, laut threadtitel gehts um c#. aber soviel anders kann das nicht sein.Bin im ersten Semester Wirtschaftsinformatik und unser Professor in Programmieren I meinte, dass wir uns NIE die ASCII Werte merken sollen sondern anstatt 65 für A einfach 'A' schreiben sollen. Es verbessere die Lesbarkeit des Codes ungemein
-
klar, hast du bestimmt recht. das war jetzt so ausm kopf. es gibt viel schlimmere designsünden als nen ascii code hinzuschreiben statt dem char. aber das wird dir auch noch begegnen.
-
Ich bräuchte mal wieder eure Hilfe
Hab hier ne Liste und muss die in umgekehrter Reihenfolge ausgeben. Nun gut, das ausgeben wäre kein Problem, aber nun soll die Revertfunktion welche ich schreiben soll nicht den umgekehrten string zurückgeben sondern eine neue Liste.
Kurz gesagt: Ich hab eine Liste mit aufsteigend sortierten Zahlen und muss diese Liste absteigend sortieren.Aufgabenstellung: Bei der Implementierung können Sie eine neue Listeninstanz erzeugen, in
die dann - basierend auf den Daten der ursprünglichen Liste - sukzessiv
neue Elemente in umgekehrter Reihenfolge eingefügt werden. Die o. g.
Methode Revert gibt dann eine Referenz auf die neu erstellte Liste zurück (siehe Testcode unten).ZitatCode- IntList sortedList = new IntList();
- sortedList.InsertSorted(5);
- sortedList.InsertSorted(2);
- sortedList.InsertSorted(5);
- sortedList.InsertSorted(7);
- sortedList.InsertSorted(3);
- Console.WriteLine("Sorted list: {0}", (string)sortedList);
- Console.WriteLine("Reverted sorted list: {0}", (string)sortedList.Revert());
Mein Ansatz bisher:
Code- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Praktikum4DoppeltverketteteListe
- {
- class LElement
- {
- int zahl;
- LElement next;
- LElement prev;
- public LElement(int _zahl)
- {
- zahl = _zahl;
- next = null;
- }
- public int Zahl
- {
- get { return zahl; }
- }
- public LElement Next
- {
- get { return next; }
- set { next = value; }
- }
- public LElement Prev
- {
- get { return prev; }
- set { prev = value; }
- }
- }
- class IntList
- {
- // Variablen müssen static sein um im explicit operator aufgerufen werden zu können
- static LElement root;
- static LElement last;
- public IntList()
- {
- root = null;
- last = null;
- }
- public void InsertSorted(int zahl)
- {
- LElement neu = new LElement(zahl);
- // Leere Liste
- if (root == null)
- {
- root = neu;
- }
- else
- {
- // Vor dem ersten Element
- if (neu.Zahl < root.Zahl)
- {
- neu.Next = root;
- root = neu;
- }
- else
- {
- // Mittendrin einfügen
- LElement lfd = root;
- while (lfd.Next != null && lfd.Next.Zahl < neu.Zahl)
- {
- lfd = lfd.Next;
- }
- neu.Next = lfd.Next;
- lfd.Next = neu;
- }
- }
- }
- // (string) kann durch diese Funktion für IntListen verwendet werden
- public static explicit operator string(IntList Liste)
- {
- string sorted = "";
- LElement lfd = root;
- while (lfd != null)
- {
- sorted = sorted + lfd.Zahl + " ";
- lfd = lfd.Next;
- }
- return sorted;
- }
- //public string Revert()
- //{
- // string inverted = "";
- // LElement lfd = root;
- // // Fügt die lfd.Zahl vorne an
- // while (lfd != null)
- // {
- // inverted = lfd.Zahl + " " + inverted;
- // lfd = lfd.Next;
- // }
- // return inverted;
- //
- //}
- }
- class Program
- {
- static void Main(string[] args)
- {
- IntList sortedList = new IntList();
- sortedList.InsertSorted(5);
- sortedList.InsertSorted(2);
- sortedList.InsertSorted(5);
- sortedList.InsertSorted(7);
- sortedList.InsertSorted(3);
- Console.WriteLine("Sorted list: {0}", (string)sortedList);
- Console.WriteLine("Reverted sorted list: {0}", (string)sortedList.Revert());
- }
- }
- }
-
-
du willst nur die liste von hinten durchgehen und in eine neue speichern? gibts in c# keine reverse iteratoren?
-
du willst nur die liste von hinten durchgehen und in eine neue speichern? gibts in c# keine reverse iteratoren?
Genau das möchte ich... Jedoch selber schreiben
-
also sowas?
pseudocode:list meineListe //gegeben
list meineListeVonHinten //gesucht
for(list::reverse_iterator it = meineListe.rbegin(); it != meineListe.rend(); ++it)
{
meineListeVonHinten.insert(it);
} -
-
In etwa so ausgedrückt:
Ich bekomme meineListe übergeben und möchte diese Liste umdrehen und wieder zurückgeben.
Ich weiß wie ich meine Liste durchgehe ( auch von hinten) aber nicht wie ich diese in der gewünschten Reihenfolge in einer neuen speichern bzw. meine alte Liste so verändern kann. Das ist der Knackpunkt -
na einfach von hinten durchgehen und in eine neue liste der reihe nach einfügen, siehe mein pseudocode oben. verstehe grad das problem nicht.
-
Das Problem beim "Pseudocode" war, das ich das ja wieder sortiert einfüge.
Aber ich muss ja die Zeiger ändern.
also
root = last
root. next = last.prev
etc etcHab das jetzt so gelöst:
Code- public IntList Revert()
- {
- IntList inverted = new IntList();
- LElement lfd = last;
- LElement hilfe;
- //Tauscht alle Elemente zwischen root und last
- while (lfd != null)
- {
- hilfe = lfd.Prev;
- lfd.Prev = lfd.Next;
- lfd.Next = hilfe;
- lfd = lfd.Next;
- }
- // Tauscht die ersten und letzten Elemente
- inverted.root = last;
- inverted.last = root;
- return inverted;
- }
-
-
Warum lässt du nicht die Länger der Liste abfragen und tauscht dann Index 0 mit Liste.length -1 aus?