Hey Leute ich habe ein kleines Problem,
unzwar muss ich ein Programm schreiben, wo man in 5 Textboxen Zahlen reinschreibt.
Dann weise ich diese Zahlen z.B. den Variablen a,b,c,d,e zu.
Jetzt soll ausgegeben werden, welche Zahl am häufigsten eingegeben wurde.
Bsp.: a = 4 | b = 5 | c = 4 | d = 4 | e = 9
Die Zahl 4 kommt am häufigsten vor (3x)
Wenn jetzt z.B. a und b = 5 und c und d = 6 sind müsste natürlich ausgegeben werden, das 5 und 6 am häufigsten vorkommen.
Ich habe mich da länger mit beschäftigt, aber habe nichts sinnvolles rausgefunden und es geht doch bestimmt einfacher als mit 100ten von IF-Abfragen für jede denkbare Kombination der 5 Werte, oder???
Danke schonmal im Vorraus 😃
Verwende ein Array, wo du die Anzahl entsprechend hochzählst. Anschließend das ganze mit Array.Sort sortieren und fertig.
wenn es mal mehr als 5 Elemente werden oder die Anzahl erst zur Laufzeit feststeht, verwende statt Array List<T>.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Ich würde Linq nehmen.
List<int> zahlen = GetZahlen(); //fülle dein Array
var check = from zahl in zahlen
group zahl by zahl into zahlengruppe
select new { Count = zahlengruppe.Count(), Value = zahlengruppe.Key };
int result = check.OrderByDescending(p => p.Count).FirstOrDefault();
Fertig.
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
ich würd anfangen selbst zu denken, oder die mitschüler zu fragen, schließlich kann sichs da nur um eine Übungsaufgabe der Schule handeln
Hallo tkrasinger,
die Formulierung der Frage zeigt doch, dass Pommel sehr wohl selber darüber nachgedacht hat. Davon abgesehen ist es doch seine Entscheidung, ob er seine Mitschüler oder uns fragt.
Du hast zwar recht, dass es nicht darum gehen kann, anderer Leute Hausaufgaben zu machen, aber so wie die Frage gestellt ist, geht es hier nur darum Anhaltspunkt für eine eigene Lösung zu bekommen. Das ist vollkommen ok.
Hallo Pommel,
mit einem Dictionary geht es sicher am einfachsten und gleichzeitig übersichtlichsten. Siehe dazu auch die Worthäufigkeitszählung in [Artikel] Grundlegendes zu Hashtable/Dictionary.
herbivore
... geht es hier nur darum Anhaltspunkt für eine eigene Lösung zu bekommen
ich würde ein dictionary nehmen und als key den wert und als value den count benutzen.
@Herbivore: Naja, wie mans sieht. Und bei der Antwort von Jack ist die Lösung praktisch vorgegeben
nein ^^ bei latino´s lösung ist die antwort vorgegeben 😃
auch wenn es generell nicht erwünscht ist, das hier hausaufgaben gemacht werden, so steht es dennoch den leuten frei, eine geneuere oder auch eine ungenauere lösung zu posten.
zudem ist hier kein konkreter anhaltspunkt für eine hausaufgabe zu finden , sondern nur ein indiz.
Hallo tkrasinger,
erstmal sehe ich das nicht so wie du. Bis zu einer Lösung ist der Weg für einen Anfänger noch weit, zumal ja JAck30lena noch überhaupt nichts dazu gesagt hat, wie man aus den Informationen im Dictionary zur Lösung kommt. Er hat überhaupt nur was zu der Datenstruktur, aber nichts zum Algorithmus gesagt. Aber selbst wenn die Antwort zu konkret wäre, also konkreter als gefragt, kannst du das ja nicht dem Fragesteller vorwerfen, so wie du es getan hast.
herbivore
Ok, ich gebs auf. Eigentlich meinte ich nur, das man für eine so einfache Aufgabe normalerweise keine Hilfe in Anspruch nehmen sollte. Schließlich ist das Ziel einer solchen Aufgabe ja den Lösungsweg zu finden.
Bei verzwickten Problem kann man nachfragen, aber das wär in dem Beispiel wohl nur der Fall, wenn er keine Arrays und den Namespace System.Collection (und darunterliegende) nicht verwenden darf. Dann würde man wohl länger für ne Lösung brauchen.
Und wenn das keine Hausaufgabe ist, möcht ich das reale Programm sehen, in dem man sowas braucht.
Edit: Ich hätte es wenigsten so formuliert: Wie bekomm ich aus einer Reihe von Werten heraus, welcher Wert am häufigsten verwendet wurde?
Dann hätte auch ich eine Lösung angeboten, weil ich nicht davon ausgegangen wäre, dass es sich um eine Aufgabe handelt.
Amazon: Welches Buch wurde am häufigsten verkauft?
Werte dabei sind die Ids der Bücher (ob das Int, Guid, ISBN oder sonst was) ist, spielt für das beispiel keine Rolle.
loop:
btst #6,$bfe001
bne.s loop
rts
Amazon: Welches Buch wurde am häufigsten verkauft?
Werte dabei sind die Ids der Bücher (ob das Int, Guid, ISBN oder sonst was) ist, spielt für das beispiel keine Rolle.){gray}
Naja... dafür würde man in so einem Fall wohl eher SQL benutzen. Bei Amazon werden die Verkaufszahlen sicher nicht in Textboxen gespeichert.^^
Bitte lasst es jetzt mal gut sein.
Ok für alle die hier geschrieben haben, dass ich mich selber damit beschäftigen soll, glaubt mir ich habe mir mehr als genug Gedanken gemacht und gegoogelt und sonst was. Ich komme einfach nicht weiter also bitte ich hier um Hilfe und dumme Kommentare, dass ich selber nachdenken soll, kann man sich wirklich sparen!!!
Außerdem muss ich noch dazu sagen, dass ich noch nicht allzu viel Ahnung von C# habe.
So, vielleicht hilft euch das weiter, meine bisherige Vorgehensweise nachzuvollziehen.
Einer meiner ersten Lösungsansätze war folgender:
int[] zahlen = new int[4];
int[] Werte = new int[4];
Werte[0] = Convert.ToInt32(txtWert1.Text);
Werte[1] = Convert.ToInt32(txtWert2.Text);
Werte[2] = Convert.ToInt32(txtWert3.Text);
Werte[3] = Convert.ToInt32(txtWert4.Text);
for (int i = 0; i <= 3; i++)
{
if (Werte[0] == Werte[i])
{
zahlen[i] = zahlen[i] + 1;
}
if (Werte[1] == Werte[i])
{
zahlen[i] = zahlen[i] + 1;
}
if (Werte[2] == Werte[i])
{
zahlen[i] = zahlen[i] + 1;
}
if (Werte[3] == Werte[i])
{
zahlen[i] = zahlen[i] + 1;
}
Gibt man jetzt z.B. die Zahlen 2,3,3,2 ein, dann bekomme ich ja nur raus:
2: 2x
3: 2x
3: 2x
2: 2x
und das ist der Punkt wo ich eine Denkblockade habe um weiter zu machen.
Wie schaffe ich es jetzt auszugeben, dass der Wert 2 und 3 am häufigsten vorkommt?
Oder sollte ich ganz anders vorgehen?
Achja und nochwas zu dem Code von LaTino (Danke übrigens an dieser Stelle für die schnelle Hilfe) ich komme damit nicht wirklich klar...
List<int> zahlen = GetZahlen(); //fülle dein Array
var check = from zahl in zahlen
group zahl by zahl into zahlengruppe
select new { Count = zahlengruppe.Count(), Value = zahlengruppe.Key };
int result = check.OrderByDescending(p => p.Count).FirstOrDefault();
Wenn ich "List<int> zahlen = GetZahlen();" schreibe bekomme ich nur die fehlermeldung "Der Name "GetZahlen" ist im aktuellen Kontext nicht vorhanden."
Also habe ich da garnicht erst weiter gemacht....
Wenn ich "List<int> zahlen = GetZahlen();" schreibe bekomme ich nur die fehlermeldung "Der Name "GetZahlen" ist im aktuellen Kontext nicht vorhanden."
Also habe ich da garnicht erst weiter gemacht....
das war ja auch nur pseudocode....
dir fehlen noch viele grundlagen.
schau dir doch mal diese 2 onlinbücher an: 🛈 📗
Hallo Pommel
Ich sehe dein Problem nicht ganz...
Wenn du die Eingaben mit dem Text_Changed Event abfängst und dann mit einer If- Abfrage nach den 5 Zahlen durchläufst und den Zähler der eingegeben Zahl dann um eins erhöhst. Das sollte doch kein Problem sein, oder habe ich die Frage falsch verstanden?
Gruss Thomas
Gespräch zweier Informatiker:
"Wie ist denn das Wetter bei euch?"
"Caps Lock."
"Hä?"
"Na ja, Shift ohne Ende!"
Also Pommel um bei einer Lösung zu bleiben, die deinen derzeitigen Wissensstand abdeckt (offensichtlich hast du Listen noch nicht gelernt):
Du könntest diese Arrays die du jetzt hast 2 mal durchgehen:
Zum Schluss hast du immer noch deine Arrays aber nur mehr dort wo nicht -1 drinnen steht hast du dein Ergebnis. Wenn du kein Ergebnis hast, weil alle auf -1 sind, ist das ergebnis der erste Wert und die Anzahl ist die Anzahl der Textboxen.
Hallo Pommel,
Ich komme einfach nicht weiter also bitte ich hier um Hilfe
die hast du bereits weiter oben erhalten.
Außerdem muss ich noch dazu sagen, dass ich noch nicht allzu viel Ahnung von C# habe.
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
Du weißt ja, dass ich oben für dich eingetreten bin. Nun muss ich aber leider auch dich rügen. Die Hilfestellung von oben, war durchaus geeignet, deine Denkblockade zu lösen. Deine Nachfrage zeigt jedoch, dass es nicht die Denkblockade, sondern wohl doch das Fehlen von hier vorausgesetzten Grundlagen ist, das dein Vorankommen behindert. Diese musst du dir bitte jedoch selbst aneignen. Wir können es nicht leisten, dass zu kompensieren.
herbivore
So ich bin nach Stunden auf eine Lösung gekommen! Ich habe 2 Arrays mit 2 FOR Schleifen benutzt:
//Die Variablen werden mit den übergebenen Werten des Hauptprogramms gefüllt
public static int HW(int a, int b, int c, int d, int f)
{
//Es werden 2 Arrays erzeugt
int[] zahlen = new int[5];
int[] Werte = new int[5];
//Die Felder des Arrays "Werte" werden mit den übergebenen Werten des Hauptprogramms gefüllt
Werte[0] = a;
Werte[1] = b;
Werte[2] = c;
Werte[3] = d;
Werte[4] = f;
//Die FOR-Schleife läuft 5 mal durch
for (int i = 0; i <= 4; i++)
{
//Wenn das erste Feld des Arrays = "i"ten Feld des Arrays ist...
if (Werte[0] == Werte[i])
{
//Wird das "i"te Feld des Arrays "zahlen" um 1 erhöht.
zahlen[i] = zahlen[i] + 1;
}
//Wenn das zweite Feld des Arrays = "i"ten Feld des Arrays ist...
if (Werte[1] == Werte[i])
{
//Wird das "i"te Feld des Arrays "zahlen" um 1 erhöht.
zahlen[i] = zahlen[i] + 1;
}
//...
if (Werte[2] == Werte[i])
{
//...
zahlen[i] = zahlen[i] + 1;
}
if (Werte[3] == Werte[i])
{
zahlen[i] = zahlen[i] + 1;
}
if (Werte[4] == Werte[i])
{
zahlen[i] = zahlen[i] + 1;
}
}
//y wird als Variable deklariert,in der immer der aktuell höchste Wert gespeichert wird
int y = 0;
//Die FOR-Schleife läuft 5 mal durch
for (int i = 0; i <= 4; i++)
{
//Wenn das erste Feld des Arrays zahlen größer als das "i"te Feld des selben Arrays ist...
if (zahlen[0] > zahlen[i])
{
//Ist dies der momentan höchste Wert, und somit wird der Wert des ersten Feldes
//aus dem Array "Werte" in "y" gespeichert.
y = Werte[0];
}
//...
if (zahlen[1] > zahlen[i])
{
//...
y = Werte[1];
}
if (zahlen[2] > zahlen[i])
{
y = Werte[2];
}
if (zahlen[3] > zahlen[i])
{
y = Werte[3];
}
if (zahlen[4] > zahlen[i])
{
y = Werte[4];
}
//Wenn alle Werte die gleich häufige Anzahl haben...
if (zahlen[0] == zahlen[1] && zahlen[1] == zahlen[2] && zahlen[2] == zahlen[3] && zahlen[3] == zahlen[4])
{
//...und alle nur einmal vorkommen...
if (zahlen[0] == 1 && zahlen[1] == 1 && zahlen[2] == 1 && zahlen[3] == 1)
{
//...kommt keine der Zahlen mehrfach vor.
//(Die Zahl 912378347 signalisiert dann im Hauptprogramm, dass alle Zahlen unterschiedlich sind)
y = 912378347;
}
//...und alle mehr als einmal vorkommen...
else
{
//...ist Wert[0-4] der Häufigste Wert (alle gleich)
y = Werte[1];
}
}
Gäbe es jetzt noch eine elegantere Methode die Aufgabe zu Lösen? Weil ich meine ein bisschen umständlich ist es ja schon.
Hallo Pommel,
Gäbe es jetzt noch eine elegantere Methode die Aufgabe zu Lösen?
ja, mit einem Dictionary, aber das wurde ja schon oben gesagt.
herbivore