Autor Beitrag
alfiii3
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 07.01.14 16:55 
Hallo liebe Community,

ich habe ein kleines Problem ich muss für mein Studium eine Hausaufgabe abgeben die wie folgt lautet:

Sie haben eine Sortierte Folge von Zahlen.
Einzelne Zahlen dürfen mehrfach vorkommen.
Schreiben Sie eine Funktion dieHaeufigste, die bestimmt, welche Zahl am häufigsten vorkommt und wie oft diese Zahl vorkommt.
Das Feld soll natürlich Parameter der Funktion sein. Ergebnis ist vom Typ einer Struktur:
ausblenden C#-Quelltext
1:
struct zahlWieOft { int zahl; int wieOft; };					

Schreiben Sie ein Testprogramm, das Ihre Funktion prüft.
Wäre die Aufgabe viel komplizierter, wenn die Folge nicht sortiert wäre?

Ich habe daran mit einem Kommilitonen gefeilt aber zu einem richtigen Ergebnis sind wir nicht gekommen.
Würde mich über Hilfe freuen.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
namespace Hausaufgabe
{
  public struct zahlWieOft
  {
    public int zahl;
    public int wieOft;

    public zahlWieOft(int wert)
    {
      zahl = wert;
      wieOft = 0;
    }

    public override string ToString()
    {
      return "Häufigste: " + this.zahl + "\nAnzahl: " + this.wieOft;
    }

    public zahlWieOft dieHaufigste(List<zahlWieOft> Liste)
    {
      for (int i = 0; i < Liste.Count; ++i)
      {
        zahlWieOft x = Liste[i];
        x.wieOft++;
        Liste[i] = x;
      }

      int max = 0;
      foreach (zahlWieOft z in Liste)
      {
        if (z.wieOft > max) max = z.wieOft;
      }

      foreach (zahlWieOft z in Liste)
      {
        if (z.wieOft == max) return z;
      }
      return Liste[0];
    }
  }

  public class program
  {
    

    public static void Main()
    {
      zahlWieOft _1 = new zahlWieOft(1);
      zahlWieOft _2 = new zahlWieOft(2);
      zahlWieOft _3 = new zahlWieOft(3);
      zahlWieOft _4 = new zahlWieOft(4);
      zahlWieOft _5 = new zahlWieOft(5);

      List<zahlWieOft> Liste = new List<zahlWieOft>();
      Liste.Add(_1);
      Liste.Add(_2);
      Liste.Add(_1);
      Liste.Add(_3);
      Liste.Add(_4);
      
      Console.WriteLine();
      
    }
  }
}

Gruß
alfiii3

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 07.01.14 17:16 
Hallo und :welcome:

so wie ich die Aufgabe verstehe, ist die sortierte Liste einfach eine List<int> und nur der Rückgabewert der Methode dieHaeufigste vom Typ zahlWieOft.
Ändere also ersteinmal dies ab (und dementsprechend auch die Main-Methode anpassen) und rufe in der Main-Methode dann auch die obige Methode auf (diese sollte am besten als static deklariert sein, damit man diese Methode ohne eine Objekt und direkt mit dem Klassennamen aufrufen kann).

Und dann überlegen, wie man die häufigste Zahl erkennen kann. Tipp: die Liste durchgehen und sich den häufigsten Wert merken und sobald eine andere (größere) Zahl kommt, die Häufigkeit zählen und mit der bisherigen häufigsten Zahl vergleichen (und gegebenfalls ersetzen).

Je nachdem wie das implementiert wird, kannst du dann auch sagen, ob man dafür eine sortierte Liste braucht oder nicht.