Hi,
dein Problem ist ja, dass du klein und groß initialisieren musst bzw. der Compiler es automatisch machst. Der Kompiler würde ein int mit 0 initialisieren, was für dein Vorhaben schlecht wäre

Wenn du es selber machst musst du eine Zahl größer als die im Feld wählen (aber das weißt du ja noch nicht). Folgende drei Möglichkeiten hast du nun:
1) Initialisier dein int mit der Größten bzw. Kleinsten Zahl der Datentyps:
C#-Quelltext
1: 2:
| int kleinster = int.MaxValue; int groeßter = int.MinValue; |
So kannst du dir sicher sein, dass dein Algo Richtig läuft. Ist aber nicht umbedingt schön.
2) Du verwendest einen "höheren" Datentyp, der auch Werte kennt, die keine Zahl sind. Hat zum Nachteil, dass er mehr Speicher benötig, aber dies heutzutage bei 95% der Anwendungen keine Rolle mehr spielt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| float kleinster = float.NaN; float groeßter = float.Nan;
foreach(int number in numbers) { if (kleinster == float.NaN || kleinster < number) { kleinster = number; } .... } |
3) Verwende die Funktion Min und Max - Da ist der Lerneffekt natürlich gleich Null
C#-Quelltext
1:
| Console.WriteLine("Größte={0} ttKleinste={1}", numbers.Max(), numbers.Min()); |
Zu Aufgabe 3)
Bei Aufgabe 3 geht es darum zu zählen, wie oft ein Element in dem Feld vorkommt. Dafür musst du dir jeweils merken wie oft eine Zahl bereits vorkam. Brauchst also einen Speicher. Hier gibt es "natürlich" wieder mehrere Möglichkeiten und es heißt die Richtige auszuwählen. Vom Titel würde ich sagen dein Lehrer will/schlägt vor Arrays zu nehmen. Dies wäre aber sehr umständlich (zwei Dimensionales array oder ein array mit Max Zahl als Elemente). Deshalb schlag ich vor du verwendest ein Dictionary. Ein Dictionary hinterlegt zu einem Key (Schlüssel) einen bestimmten Wert (Value).
Deklarieren tut man ein Dictionary indem man die Typ des Keys und der Values angibt:
C#-Quelltext
1:
| Dictionary<int, int> counts = new Dictionary<int, int>(); |
Wenn du nun über das Feld von Zahlen interrierst/"gehst" hinterlegst du jede Zahl als Schlüssel und als Wert schreibst du 1 rein bzw. inkrementierst (hochzählen/+1) den vorhanden Wert.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| foreach (int item in numbers) { if (!counts.ContainsKey(item)) { counts.Add(item, 1); } else { counts[item]++; } } |
Man kann den Wert (else-Zweig) nicht einfach hochzählen (Zeile 9), sondern muss beim ersten Mal (Zeile 3) den Wert anlegen (Zeile 5).
Bei der Ausgabe iterierst du über dein Wertpaare und gibst solche aus die öfters als einmal vorkommen (Anahl größer 1 ist).
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| foreach (KeyValuePair<int, int> pair in counts) { if (pair.Value > 1) { Console.WriteLine("Zahl {0} kam {1} vor.", pair.Key, pair.Value); } } |
Gruß Daniel