none
Array zu kompliziert RRS feed

  • Frage

  • Hey Leute,

    ich habe das Internet durchforstet und versucht was ging, ich verstehe Array trotzdem nicht. Ich weiß, wozu Array da ist, wie man es erstellt/deklariert und Werte in den einzelnen Abschnitten zuweißt, hoffe ich zumindest. Ich weiß aber nicht, wie ich damit z.B. rechne. Also im 5. Abschnitt ist der Wert 6 und im 2. Abschnitt der Wert 3. Ist mein Ansatz zur Subtraktion richtig und kommt so auch (wie gewollt) eine 3 raus wenn ich es ausgebe? Oder habe ich Array komplett falsch verstanden?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Mittelwert
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Deklaration
                int[] arrayName = new int[6];
    
                //Wertzuweisung
                arrayName[5] = 6;
                arrayName[2] = 3;
    
                //Berechnung
                arrayName[4] = arrayName[5] - arrayName[2];
    
                //Ausgabe
                Console.WriteLine(arrayName[4]);
    
                Console.ReadKey();
            }
        }
    }

    Donnerstag, 7. April 2016 18:16

Antworten

  • Hallo Sandro,

    die Frage ist erstmal wie "dynamisches Array" gemeint ist. Vergleicht mn mal die ganz einfachen Arrays von C++ mit denen von C# könnte man schon sagen, dass C# dynamische Arrays hat da deren Größe erst zur Laufzeit zugewiesen wird. Bei C++ musste das schon zur Compiletime geschehen.

    Wirklich dynamisch ist das aber auch nicht, das sind dann wirklich erst Listen usw. Diese verwenden intern auch Arrays, müssen aber die Daten bei einer Größenänderung stets in ein neues Array kopiert werden.

    Und das sagt dir ein ehemaliger C#, dann .NET und jetzt Visual Studio/Development Microsoft MVP. Erfahrungsgemäß ist das Problem nicht das Wissen sondern die Frage wie man die Fachbegriffe einsetzt. Was in C# Attribute sind, sind anderswo Eigenschaften.

    Dein Code aus der Frage sieht für mich richtig aus. Es sollte 3 heraus kommen.

    Bei dem konkreten Problem würde ich auch zu einer List<T> o.ä. greifen. Alles andere würde nur den Mechanismus dieser Klasse nachbauen.

    PS: Denke daran das in der Informatik i.d.R. von 0 an gezählt wird. Bei einem Array mit 6 Elementen ist das erste also am Index 0 und das letzte bei 6. Gleiches gilt auch für Listen etc.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Freitag, 8. April 2016 22:49
    Moderator

Alle Antworten

  • Hallo Sandro,

    ich hoffe deine Frage beantworten zu können. Also:

    Wenn du das Programm laufen lässt, wird dir ein Ergebnis angezeigt. Was dir dann angezeigt wird, beantwortet deine Frage, ob die Aufgabe 6-3 eine 3 ergibt. Die Subtraktion scheint also korrekt.

    Du weißt, wozu Array da ist, wie man es erstellt/deklariert und Werte in den einzelnen Abschnitten zuweist.

    Nun mal Ernst bei Seite, was hast du denn nicht verstanden?

    Gruß

    Donnerstag, 7. April 2016 21:26
  • Als Beispiel wäre da das Dynamische Array. Dieses braucht man ja, um Array eine erst bei der Eingabe bekannte Anzahl an Abschnitten zu erstellen, habe ich Recht? Hier ein Beispiel:

    Es soll aus den Eingaben (beliebig viele zweistellige Ganzzahlen) die Differenz zu 100 berechnet werden. Sollte der User keine zweistellige Ganzzahl eingeben (ich glaube das wäre dann if (x <= 99 && x >= 10)), soll 'Keine Zweistellige Zahl vorhanden' ausgegeben werden. Beispiel:

    Eingabe: 69, 32, 36, 72, 87, 274

    Ausgabe: 31, 68, 64, 28, 13

    Dann soll auch noch die kleinste Zahl und die kleinste Differenz aus allen eingegebenen Zahlen ausgegeben werden, da wird es mir aber zu kompliziert.


    Freitag, 8. April 2016 05:06
  • Hallo Sandro,

    Arrays in c# sind nicht dynamisch, d.h. du musst die Anzahl angeben. Die Länge eines Arrays lässt sich nicht direkt ändern, siehe auch...

    Vielleicht sollte du hier eine List<T> verwenden. T kann eine Klasse, Struktur, Tuple<int,int> oder sonst irgenwas geeignetes sein. Hier mal zwei Beispiele:

    // Variante 1 int eingabe = 0; // Eingabevariable

    List<Tuple<int, int>> liste1 = new List<Tuple<int, int>>(); eingabe = 17; liste1.Add(Tuple.Create(eingabe, 100 - eingabe)); eingabe = 95; liste1.Add(Tuple.Create(eingabe, 100 - eingabe)); eingabe = 45; liste1.Add(Tuple.Create(eingabe, 100 - eingabe)); int min1 = liste1.Min(t => t.Item1); // 17 int max1 = liste1.Max(t => t.Item1); // 95 int min2 = liste1.Min(t => t.Item2); // 5 int max2 = liste1.Max(t => t.Item2); // 83

    // Variante 2, Definition der Struktur weiter unten... List<eingaben> liste2 = new List<eingaben>(); eingabe = 17; liste2.Add(new eingaben(eingabe)); eingabe = 95; liste2.Add(new eingaben(eingabe)); eingabe = 45; liste2.Add(new eingaben(eingabe)); int min3 = liste2.Min(t => t.Value); // 17 int max3 = liste2.Max(t => t.Value); // 95 int min4 = liste2.Min(t => t.Differenz); // 5 int max4 = liste2.Max(t => t.Differenz); // 83

    // Eine mögliche struct:

    public struct eingaben {
    public readonly int Value;
      public readonly int Differenz;
      public eingaben(int value) {
        Value = value;
        Differenz = 100 - value;
     }
    }

    Ich würde wenn möglich immer generische Listen oder Dictionarys verwenden.

    Gruß

    Freitag, 8. April 2016 08:36
  • Also unser Programmierlehrer hat mehrere Titel und ein eigenes 400 Seiten langes digitales Skriptum über C# geschrieben und er meint es gibt dynamische Arrays und so ein Beispiel wie ich es genannt habe (Eingaben zählen und dann Array so viele erstellen lassen) mussten wir beim Test lösen.
    Freitag, 8. April 2016 21:04
  • Hallo Sandro,

    die Frage ist erstmal wie "dynamisches Array" gemeint ist. Vergleicht mn mal die ganz einfachen Arrays von C++ mit denen von C# könnte man schon sagen, dass C# dynamische Arrays hat da deren Größe erst zur Laufzeit zugewiesen wird. Bei C++ musste das schon zur Compiletime geschehen.

    Wirklich dynamisch ist das aber auch nicht, das sind dann wirklich erst Listen usw. Diese verwenden intern auch Arrays, müssen aber die Daten bei einer Größenänderung stets in ein neues Array kopiert werden.

    Und das sagt dir ein ehemaliger C#, dann .NET und jetzt Visual Studio/Development Microsoft MVP. Erfahrungsgemäß ist das Problem nicht das Wissen sondern die Frage wie man die Fachbegriffe einsetzt. Was in C# Attribute sind, sind anderswo Eigenschaften.

    Dein Code aus der Frage sieht für mich richtig aus. Es sollte 3 heraus kommen.

    Bei dem konkreten Problem würde ich auch zu einer List<T> o.ä. greifen. Alles andere würde nur den Mechanismus dieser Klasse nachbauen.

    PS: Denke daran das in der Informatik i.d.R. von 0 an gezählt wird. Bei einem Array mit 6 Elementen ist das erste also am Index 0 und das letzte bei 6. Gleiches gilt auch für Listen etc.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Freitag, 8. April 2016 22:49
    Moderator
  • Hallo Sandro,

    irgendwie ist mir mittlerweile ziemlich unklar, was eigentlich deine Frage ist.

    Du eröffnest deine Anfrage mit

    Ich weiß aber nicht, wie ich damit z.B. rechne. Also im 5. Abschnitt ist der Wert 6 und im 2. Abschnitt der Wert 3. Ist mein Ansatz zur Subtraktion richtig und kommt so auch (wie gewollt) eine 3 raus wenn ich es ausgebe?

    Dann kommt

    Es soll aus den Eingaben (beliebig viele zweistellige Ganzzahlen) die Differenz zu 100 berechnet werden. Sollte der User keine zweistellige Ganzzahl eingeben (ich glaube das wäre dann if (x <= 99 && x >= 10)), soll 'Keine Zweistellige Zahl vorhanden' ausgegeben werden. Beispiel:

    Eingabe: 69, 32, 36, 72, 87, 274

    Ausgabe: 31, 68, 64, 28, 13

    Dann soll auch noch die kleinste Zahl und die kleinste Differenz aus allen eingegebenen Zahlen ausgegeben werden, da wird es mir aber zu kompliziert.

    und schließlich

    (Eingaben zählen und dann Array so viele erstellen lassen)

    Ob nun für Hausaufgaben, Facharbeit oder sonstige Problemlösung, es ist meiner Meinung nach sinnvoll, die gestellte Aufgabe erst mal richtig zu verstehen und dann problemorientierte Fragen zu stellen.

    Was ich dem bisherigen Verlauf entnehmen würde:

    • In einer Eingabeschleife sollen (zweistellige) Zahlen abgefragt werden, Anzahl Eingaben unbekannt.
    • Es muss ein Array verwendet werden, welches "dynamisch" zu erweitern ist.
    • Dann sollen bestimmte Berechnungen und Auswertungen über den erhobenen Daten ausgeführt werden.

    Wenn es also ein Array sein soll, kannst du bei jeder Eingabe einer neuen Zahl ein neues Array passender Größe anlegen und jeweils die vorhandenen Werte aus dem "alten" Array übernehmen. Das letzte (hinzugefügte) Element wird dann mit der neuen Eingabe belegt.

    Ansonsten gäbe es da noch die bereits erwähnte Array.Resize Methode.

    Ansonsten fällt mir momentan nichts weiteres ein...

    Gruß

    Samstag, 9. April 2016 12:30