C# Syntax Ähnliche Native Programmiersprache



  • Zwergli schrieb:

    Damit mein ich nicht die Ausführung, sondern wie schnell lös ich eine Problemstellung mit mir zur Verfügung stehender Funktionalität und da bietet eine große Klassenbibliothek natürlich Vorteile.

    Aufgabe: Erstelle einen std::vector/eine ArrayList mit 10 000 Zufallszahlen. Ziehe 2 weitere Zufallszahlen im Bereich [0, 10 000), ab der ersten bis (exklusive) der zweiten nimmst du alle Zufallszahlen und sortierst sie in absteigender Reihenfolge. Danach schreibst du alle Primzahlen aus der Sequenz in umgekehrter Reihenfolge in die Datei "foobar".

    Sagen wir, um den Primzahlentest zu vereinfachen, dürfen die Zufallszahlen nur im Bereich [2, 100) liegen.

    Löse die Aufgabe in C++ und in entweder Java oder C#. Viel Spaß in letzteren Sprachen.



  • Wie soll deine Aufgabe ein Argumentation darstellen. Bei der Lösung ist es sehr Abhängigkeit wie stark er seine Programmiersprache kennt. Also ich würde sie in Scala lösen und Spaß haben, dazu kommt noch der Aspekt, dass die Lösung hochstwahrscheinlich noch multithreaded sein würde. 😃



  • Meine Aufgabe stellt einen Gegenbeweis zu der Aussage über die einfacher verwendbare und praktischere Library von Java/C# dar. Ich hab die Lösung in C++ im Kopf, das wären ein paar Zeilen. über das Managed-Code-pendant möchte ich gar nicht nachdenken.



  • 314159265358979 schrieb:

    Zwergli schrieb:

    Damit mein ich nicht die Ausführung, sondern wie schnell lös ich eine Problemstellung mit mir zur Verfügung stehender Funktionalität und da bietet eine große Klassenbibliothek natürlich Vorteile.

    Aufgabe: Erstelle einen std::vector/eine ArrayList mit 10 000 Zufallszahlen...

    In der Regel setzt sich ein Projekt nicht aus Kleinstaufgaben zusammen, sondern ist eine Kombination aus vielen Bereichen (z.B. UI, Datenbankzugriffe, Berechnungen...).

    Wenn ich meine "üblichen" Projektumfelder betrachte, wäre C# was den Code- und Zeitaufwand (bezogen auf die Implementierung, nicht Laufzeit) betrifft immer C++ überlegen gewesen. Einzelne Teilaufgaben hätten sicherlich in C++ weniger Aufwand bedeutet, aber bezogen auf das Ganze hätte ich Schätzungsweise die Hälfte des Aufwandes in C# gespart.

    Das soll jetzt keine Wertung von C# versus C++ sein, beide haben ihre Vor- und Nachteile je nach Aufgabenfeld. Aber gerade was Implementierungsaufwand und Toolunterstützung (Refactoringwerkzeuge etc.) angeht sehe ich Vorteile in C#.



  • Das streite ich gar nicht ab. Aber Datenstrukturen und Algorithmen gehören zu den grundlegensten Dingen überhaupt, und da gibts massive Mängel sowohl in Java als auch in C#. Wenn ich möchte, finde ich immer einen Fall, in dem eine Sprache besser als eine andere ist. Mir kam die Aussage nur so rüber, als würde er meinen, dass das allgemein so wäre.



  • 314159265358979 schrieb:

    Löse die Aufgabe in C++ und in entweder Java oder C#. Viel Spaß in letzteren Sprachen.

    Ich löse sie dir in C# wenn du mir deine C++ Implementation zeigst. Da kann ich problemlos zugeben dass ich keine optimale Lösung in C++ hinbekommen werde.

    Wobei ich aber betonen möchte, dass die Aufgabe ja die reine Abbildung eines Algorithmus ist. Damit bildet man ja nicht den Umfang einer Klassenbibliothek ab. Abgesehen davon kann man so ne Aufgabe ja beliebig stellen. Würde sie lauten "Filtere den Inhalt einer Textdatei anhand eines regulären Ausdrucks xyz" dann hast du in C++ schon verloren weil die Standardbibliothek in der aktuellen Version keine regulären Ausdrücke kann. Oder wo ist das Pendant zur WCF in C++? Da gibts nichts vergleichbar umfangreiches, einheitliches.



  • Regex gibts sehr wohl, nämlich im TR1.
    Eine C++ Lösung bekommst du gleich.



  • Challenge accepted, let's fight 🤡



  • in ein paar minuten hingerotzt ohne viel nachzudenken.

    class Program
        {
            static void Main(string[] args)
            {
                string filepath = @"C:\test.txt";
    
                const int count = 10000;
                const int maxNumber = 100;
    
                Random rand = new Random(Environment.TickCount);
    
                var rands = Enumerable.Range(0, count).Select(r => rand.Next(maxNumber));
    
                int low = rand.Next(count);
                int high = rand.Next(count - low);
    
                var result = rands
                                .Skip(low)
                                .Take(high)
                                .Reverse()
                                .Where(i => i == 2 || i > 2 && Enumerable.Range(2, (int)Math.Sqrt(i))
                                .All(c => i % c != 0))
                                .Select(i => i.ToString());
    
                File.WriteAllLines(filepath, result.ToArray());
    
                Console.ReadKey(true);
            }
    
        }
    


  • Ideone will gerade nicht so richtig, dauert noch etwas.



  • 314159265358979 schrieb:

    Ideone will gerade nicht so richtig, dauert noch etwas.

    Hahahahaha 😃 👍



  • So, bitteschön: http://ideone.com/tV9w2

    #include <vector>
    #include <algorithm>
    #include <iterator>
    #include <iostream>
    
    #include <cstdlib> // rand(), srand()
    
    int main()
    {
            std::srand(42);
    
            const int n = 100; // Etwas weniger, damit die Konsole nicht ganz so voll wird.
    
            std::vector<int> v;
            std::generate_n(std::back_inserter(v), n, [](){ return rand() % 98 + 2; });
    
            // Hier wäre noch eine Zeile "std::ostream os("foobar");", da ich hier nur auf die Konsole ausgebe
            std::copy_if(v.rbegin(), v.rend(), std::ostream_iterator<int>(std::cout, "\n"), // Statt der Datei in die Konsole
                    [](int n)
                    {
                            return n == 2 || (n % 2 != 0 && n % 3 != 0 && n % 5 != 0 && n % 7 != 0 && n % 11 != 0); // Quick & Dirty
                    }
            ); 
    }
    

    Kürzer und flotter, wobei man da noch jede Menge optimieren könnte.



  • Fehlt bei Dir:

    "Ziehe 2 weitere Zufallszahlen im Bereich [0, 10 000), ab der ersten bis (exklusive) der zweiten nimmst du alle Zufallszahlen"

    Keine Dateiausgabe.

    Nur Zahlen bis 100.

    Deine Aufgabe war sowieso verbuggt. Das umgekehrte Sortieren am Ende macht das Sortieren der Teilfolge überflüssig, deswegen habe ich nur das erstmalige absteigende Sortieren drin.

    Dein Code ist scheiße-hässlich. Nichts für ungut. Ist ja nur Spaß 😉



  • Ich habe dir die Kommentare hingeschrieben, Klugscheißer. Damit man sieht, dass die Ergebnisse auch wirklich stimmen.

    Das Sortieren hab ich vergessen, denk dir eine Zeile dazu.

    Außerdem ist das kein zweites sortieren. Was, wenn ich die Sequenz weiterverwenden möchte und nur umgedreht ausgeben möchte?

    Zu deinem Code: Ebenfalls scheiße hässlich.



  • Bleib mal locker. Es gibt noch eine Welt außerhalb von C++. Deine Besessenheit fällt mir nicht zum ersten mal auf.

    "Meine Aufgabe stellt einen Gegenbeweis zu der Aussage über die einfacher verwendbare und praktischere Library von Java/C# dar"
    Hast Du schon mal an echten Projekten gearbeitet?



  • Verdammt meine Scala-IDE ist am upgraden 😡



  • µ schrieb:

    Bleib mal locker. Es gibt noch eine Welt außerhalb von C++. Deine Besessenheit fällt mir nicht zum ersten mal auf.

    Ich mag C#, wirklich. Aber deine Argumentationen sind hirnrissig.

    µ schrieb:

    "Meine Aufgabe stellt einen Gegenbeweis zu der Aussage über die einfacher verwendbare und praktischere Library von Java/C# dar"
    Hast Du schon mal an echten Projekten gearbeitet?

    Sogar an mehreren. Cool, was?



  • Ich habe doch gar nicht argumentiert.
    Und mit Dir streiten werde ich mich jetzt auch nicht, Fanboy 😉

    Bin raus.



  • 🙄


  • Administrator

    Und jetzt ist schluss.

    @314159265358979,
    Ich muss dich hier verwarnen. Wenn dir C# nicht passt, dann ist das dein Problem, hat aber hier nichts zu suchen. Das ist nun schon das zweite Mal innert kürzester Zeit, dass du mir negativ auffällst, indem du probierst hier gegen C# zu wettern und die Leute anzustacheln. Das kannst du gerne woanders tun.

    Grüssli


Anmelden zum Antworten