ChatGPT schreibt einen kleinen Taschenrechner



  • Einfaches TicTacToe mit zwei menschlichen Spielern:

    #include <iostream>
    using namespace std;
    
    const int ROWS = 3;
    const int COLS = 3;
    
    // Funktion zum Ausgeben des Spielbretts
    void printBoard(char board[][COLS]) {
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                cout << board[i][j] << " ";
            }
            cout << endl;
        }
    }
    
    // Funktion zum Überprüfen, ob das Spielbrett voll ist
    bool isBoardFull(char board[][COLS]) {
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                if (board[i][j] == ' ') {
                    return false;
                }
            }
        }
        return true;
    }
    
    // Funktion zum Überprüfen, ob ein Spieler gewonnen hat
    bool checkForWin(char board[][COLS], char player) {
        // Überprüfen der Zeilen
        for (int i = 0; i < ROWS; i++) {
            if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
                return true;
            }
        }
        // Überprüfen der Spalten
        for (int j = 0; j < COLS; j++) {
            if (board[0][j] == player && board[1][j] == player && board[2][j] == player) {
                return true;
            }
        }
        // Überprüfen der Diagonalen
        if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
            return true;
        }
        if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
            return true;
        }
        return false;
    }
    
    int main() {
        char board[ROWS][COLS];
        char currentPlayer = 'X';
    
        // Initialisieren des Spielbretts
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLS; j++) {
                board[i][j] = ' ';
            }
        }
    
        // Schleife für das Spiel
        while (true) {
            // Ausgeben des Spielbretts
            printBoard(board);
    
            // Eingabe des Spielzugs
            int row, col;
            cout << "Spieler " << currentPlayer << ", bitte geben Sie die Zeile (0-2) ein: ";
            cin >> row;
            cout << "Spieler " << currentPlayer << ", bitte geben Sie die Spalte (0-2) ein: ";
            cin >> col;
    
            // Überprüfen, ob das Feld bereits belegt ist
            if (board[row][col] != ' ') {
                cout << "Dieses Feld ist bereits belegt! Bitte wählen Sie ein anderes Feld." << endl;
                continue;
            }
    
            // Setzen des Spielzugs
            board[row][col] = currentPlayer;
    
            // Überprüfen, ob ein Spieler gewonnen hat oder das Spielbrett voll ist
            if (checkForWin(board, currentPlayer)) {
                cout << "Spieler "
            << currentPlayer << " hat gewonnen! Herzlichen Glückwunsch!" << endl;
            break;
        } else if (isBoardFull(board)) {
            cout << "Das Spielbrett ist voll! Das Spiel endet unentschieden." << endl;
            break;
        }
    
        // Wechsel des Spielers
        if (currentPlayer == 'X') {
            currentPlayer = 'O';
        } else {
            currentPlayer = 'X';
        }
    }
    
    // Ausgeben des finalen Spielbretts
    printBoard(board);
    
    return 0;
    }
    

    Der komische Zeilenumbruch in Zeile 87-88 kommt deshalb, weil die Antwort sehr lang war und ich "weiter" sagen musste ...

    "Es" schreibt natürlich auch eine TicTacToe-KI ... 🙂

    Hier hab ich "ihm" mal gesagt, er soll eine Linie mit Pixel-für-Pixel-Operationen zeichnen (Bresenham):

    void drawLine(int x1, int y1, int x2, int y2, int color) {
        int dx = abs(x2 - x1);
        int dy = abs(y2 - y1);
    
        int sx = x1 < x2 ? 1 : -1;
        int sy = y1 < y2 ? 1 : -1;
    
        int err = dx - dy;
    
        while (x1 != x2 || y1 != y2) {
            // Setze den Pixel an der aktuellen Position
            setPixel(x1, y1, color);
    
            int err2 = 2 * err;
    
            if (err2 > -dy) {
                err -= dy;
                x1 += sx;
            }
    
            if (err2 < dx) {
                err += dx;
                y1 += sy;
            }
        }
    }
    

    (Man könnte "ihm" natürlich auch sagen, verwende bitte uint statt int)

    "Es" leitet zum Beispiel auch die Mitternachtsformel her und erklärt diese. 🙂

    Und hier hab ich mal nach einem Vergleich Erde <-> Mond gefragt:

    Das Verhältnis der Erde im Vergleich zum Mond kann auf verschiedene Weise betrachtet werden, zum Beispiel:

    Größe: Die Erde ist etwa 3,67-mal größer als der Mond. Die Erde hat einen Durchmesser von etwa 12.742 km, während der Mond einen Durchmesser von etwa 3.474 km hat.
    
    Masse: Die Erde ist etwa 81,3-mal massereicher als der Mond. Die Erde hat eine Masse von etwa 5,97 × 10^24 kg, während der Mond eine Masse von etwa 7,35 × 10^22 kg hat.
    
    Abstand: Der Abstand zwischen der Erde und dem Mond variiert im Laufe des Monats, da der Mond in einer elliptischen Umlaufbahn um die Erde kreist. Im Durchschnitt beträgt der Abstand etwa 384.400 km.
    

    Insgesamt ist die Erde deutlich größer und massereicher als der Mond, aber im Vergleich zur Entfernung zwischen ihnen ist der Unterschied relativ gering. Die beiden Himmelskörper sind eng miteinander verbunden, da der Mond die Erde in ihrer Rotation und in Gezeitenkräften beeinflusst.



  • Ich verwende KI mittlerweile auch recht regelmäßig. Gestern habe ich ein ein kleineres Datenbankschema der KI geschickt (in Form eines SQL Skriptes) und darum gebeten ein Skript zu bekommen, um Sample Daten zu bekommen.

    Klar hätte ich das auch selber machen können, aber sowas finde ich einfach eine sehr undankbare Aufgabe und ich bin froh, dass die KI mir da mittlerweile Arbeit abnehmen kann 😁



  • @Fragender: Das erzeugte TicTacToe-Programm benutzt zwar fast überall die Konstanten ROWS und COLS, aber nicht bei der Eingabe (da fehlt außerdem noch die Neueingabe bei Fehleingabe) sowie der Überprüfung der Diagonalen (und auch bei den Spalten und Zeilen wird nur jeweils eine der beiden Konstanten benutzt)...
    Vllt. sollte die KI dann auch gleich Unit-Tests dazu erzeugen und den eigenen Code damit überprüfen?!

    Man sieht daran aber eigentlich nur, wie unausgereift die meisten Lösungen im Internet sind bzw. daß immer ein erfahrener Software-Entwickler darüber schauen sollte (bzw. passende Unit-Tests erzeugen).
    So wird dann noch schneller, ohne selber nachzudenken, schludriger Code in Produktion eingesetzt...



  • @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Das erzeugte TicTacToe-Programm benutzt zwar fast überall die Konstanten ROWS und COLS, aber nicht bei der Eingabe

    stimmt

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    da fehlt außerdem noch die Neueingabe bei Fehleingabe

    stimmt, aber das ist eine Frage der Anforderungdefinition

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    sowie der Überprüfung der Diagonalen

    stimmt nicht, ist dabei

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Vllt. sollte die KI dann auch gleich Unit-Tests dazu erzeugen und den eigenen Code damit überprüfen?

    danach habe ich nicht gefragt

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Man sieht daran aber eigentlich nur, wie unausgereift die meisten Lösungen im Internet sind

    was hat das eine mit dem anderen zu tun ... "ChatGPT" ist nicht das Internet

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    So wird dann noch schneller, ohne selber nachzudenken, schludriger Code in Produktion eingesetzt

    dafür trage ich aber nicht die Verantwortlichkeit, außerdem gibt es nur wenige, die fehlerfrei programmieren können ...



  • Habe auch schon mal eine schnelle Hilfe von ChatGPT bekommen:

    https://www.c-plusplus.net/forum/topic/353936/c-hilfe-von-chatgpt-hier-regulare-expression

    Ich glaube, dass wir in naher Zukunft u.a. in der Software-Entwicklung um KI nicht mehr herumkommen; die Entwicklung geht halt weiter.



  • @Fragender sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    was hat das eine mit dem anderen zu tun ... "ChatGPT" ist nicht das Internet

    Was denkst du wie ChatGPT trainiert wurde? Garbage In, Garbage out.



  • @Fragender sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    da fehlt außerdem noch die Neueingabe bei Fehleingabe

    stimmt, aber das ist eine Frage der Anforderungdefinition

    LOL - Eingaben sollten immer überprüft werden und nicht das Programm zum Absturz bringen.

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    sowie der Überprüfung der Diagonalen

    stimmt nicht, ist dabei

    Ich meinte bei der Überprüfung der Diagonalen (so wie bei den Zeilen und Spalten) wird nicht ROWS bzw. COLS verwendet, sondern fix [0] bis [2].

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Vllt. sollte die KI dann auch gleich Unit-Tests dazu erzeugen und den eigenen Code damit überprüfen?

    danach habe ich nicht gefragt

    Ich meinte, bevor ChatGPT (logisch) fehlerhaften Code erzeugt, sollte es selber Unit-Tests verwenden (bzw. erzeugen, so daß der Anwender den Code gleich auch auf Fehler überprüfen kann).

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Man sieht daran aber eigentlich nur, wie unausgereift die meisten Lösungen im Internet sind

    was hat das eine mit dem anderen zu tun ... "ChatGPT" ist nicht das Internet

    Doch die Infos, mit denen es gefüttert wurde, stammen aus dem Internet (Stackoverflow, Github etc.).

    @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    So wird dann noch schneller, ohne selber nachzudenken, schludriger Code in Produktion eingesetzt

    dafür trage ich aber nicht die Verantwortlichkeit, außerdem gibt es nur wenige, die fehlerfrei programmieren können ...

    Noch mehr ein Grund, das Anfänger nicht einfach blind KI-erzeugten Code verwenden sollten.



  • @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    LOL - Eingaben sollten immer überprüft werden und nicht das Programm zum Absturz bringen.

    nur "überprüfen" ist aber etwas anderes, als die Eingabe zu wiederholen, was du vorgeschlagen hattest - das Spiel könnte auch geordnet beendet werden



  • Wenn du selber ein Spiel spielst, möchtest du, das es bei einer falschen Eingabe sofort beendet wird? Das mit dem Wiederholen war ja auch nur ein Vorschlag (für ein gängiges Umsetzen bei Fehleingaben).



  • @Leon0402 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Was denkst du wie ChatGPT trainiert wurde?

    Wodurch es aber immernoch nur ein Teil des "Internets" darstellt ...

    Mir ist klar, dass ChatGPT einerseits Wissen erlernt hat, andererseits "neues" Wissen durch geschicktes Kombinieren erschaffen kann ...



  • @Th69 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Wenn du selber ein Spiel spielst, möchtest du, das es bei einer falschen Eingabe sofort beendet wird? Das mit dem Wiederholen war ja auch nur ein Vorschlag (für ein gängiges Umsetzen bei Fehleingaben).

    Es lässt sich (im Sinne der Usability) darüber diskutieren, was gängig wäre ... zum Beispiel könnte der Spieler müde sein bzw. werden, und sollte mal eine Pause machen


  • Mod

    @Leon0402 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    @Fragender sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    was hat das eine mit dem anderen zu tun ... "ChatGPT" ist nicht das Internet

    Was denkst du wie ChatGPT trainiert wurde? Garbage In, Garbage out.

    Das ist pauschal falsch. GPT ist auf allem trainiert worden, und es gibt gerade in fachlichen Bereichen auch viel Sinnvolles und Korrektes im Internet. Es haengt letztlich massgeblich vom Prompt ab, wie qualitativ die Ergebnisse sind. GPT-4 ist in der Lage ziemlich akkurate Antworten zu generieren, wenn der Kontext nicht falsch impliziert wird (d.h. Fachforum statt Youtube Kommentare)

    Andererseits wird ein Sprachmodell den Code nicht analytisch produzieren, wenn man es nicht explizit so fordert (step by step thinking). GPT ist bei einigen Fragen deutlich akkurater wenn man ausdruecklich nach einer langsamen Herleitung und keiner direkten Antwort verlangt. Alles Aspekte die wir von Menschen gewohnt sein sollten!

    Doch die Infos, mit denen es gefüttert wurde, stammen aus dem Internet (Stackoverflow, Github etc.).

    Ok? Und woher wurdest Du gefuettert? 😅



  • @Fragender sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Wodurch es aber immernoch nur ein Teil des "Internets" darstellt ...

    Wodurch aber eben die ursprüngliche Aussage wahr ist. Es ging darum, dass wenn es viel schlechten Code im Internet gibt und das KI Modell diesen - und sei es nur teilweise - zum lernen nutzt, tendenziell schlechtere Antworten gibt.

    @Columbo sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Das ist pauschal falsch. GPT ist auf allem trainiert worden, und es gibt gerade in fachlichen Bereichen auch viel Sinnvolles und Korrektes im Internet. Es haengt letztlich massgeblich vom Prompt ab, wie qualitativ die Ergebnisse sind. GPT-4 ist in der Lage ziemlich akkurate Antworten zu generieren, wenn der Kontext nicht falsch impliziert wird (d.h. Fachforum statt Youtube Kommentare)

    Ich weiß nicht, was du mir genau sagen willst. Selbstverständlich ist das Modell schlechter, wenn die Trainingsdaten schlechter sind. Da ist nichts pauschal dran falsch.
    Das das Modell in der Lage ist trotz falscher Daten im Training richtige Daten zu produzieren ist natürlich korrekt, stand aber hier nicht zur Debatte.

    Falls es um meine Gesamtaussage "Garbarge In, Garbage Out" ging. Das bezieht sich lediglich darauf, dass es eine Kausalität zwischen schlechtem Input und schlechtem Output gibt. Daher wenn das KI Modell eine schlechte Ausgabe gibt ist es nahliegend und realistisch, dass die Trainingsdaten nicht so toll waren. Das war die aussage Von Th69. Und in diesem Kontext sollte meine Antwort dann auch betrachtet werden.

    @Columbo sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Ok? Und woher wurdest Du gefuettert?

    Falls du darauf hinaus willst, dass auch wir mit Daten aus dem Internet etc. gefüttert wurden. Völlig richtig. Und du kannst dir auch sicher sein, dass wenn wir mit den falschen Daten gefüttert werden, ein Risiko besteht, dass wir es auch falsch lernen. Mit der KI ist es nicht anderes. Die ist schlau genug, um nicht alles exakt 1:1 aus ihren Trainingsdaten zu übernehmen, sonst müsste man auch drüber diskutieren, wie viel KI in dieser KI wirklich drin steckt, wenn das so wäre. Die Kausalität besteht natürlich trotzdem.


  • Mod

    @Leon0402 sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    @Fragender sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Wodurch es aber immernoch nur ein Teil des "Internets" darstellt ...

    Wodurch aber eben die ursprüngliche Aussage wahr ist. Es ging darum, dass wenn es viel schlechten Code im Internet gibt und das KI Modell diesen - und sei es nur teilweise - zum lernen nutzt, tendenziell schlechtere Antworten gibt.

    Das ist ein Trugschluss. Ein LLM ist ein statistisches Modell dass semiotische Priors hat, welche kontextabhaengig sind. Wenn wir dem Modell explizit sagen, es soll RAII o.ae. konformen Code schreiben, dann wird das auch meistens passieren.

    Jetzt kann ein Anfaenger natuerlich nicht wissen, dass er dem Modell derartige Details diktieren muss, womit wir bei dem klassischen Teufelskreis waeren: Man kann Expertise nicht bootstrappen. Ein Experte weiss sowieso wie guter Code aussieht, und kann daher die KI problemlos anleiten. Ein Anfaenger fragt schon so daemlich, dass der semiotische prior zugunsten eines Anfaengerforums gekippt wird, was die Qualitaet der Antworten daempfen muesste.

    @Columbo sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Das ist pauschal falsch. GPT ist auf allem trainiert worden, und es gibt gerade in fachlichen Bereichen auch viel Sinnvolles und Korrektes im Internet. Es haengt letztlich massgeblich vom Prompt ab, wie qualitativ die Ergebnisse sind. GPT-4 ist in der Lage ziemlich akkurate Antworten zu generieren, wenn der Kontext nicht falsch impliziert wird (d.h. Fachforum statt Youtube Kommentare)

    Ich weiß nicht, was du mir genau sagen willst. Selbstverständlich ist das Modell schlechter, wenn die Trainingsdaten schlechter sind. Da ist nichts pauschal dran falsch.
    Das das Modell in der Lage ist trotz falscher Daten im Training richtige Daten zu produzieren ist natürlich korrekt, stand aber hier nicht zur Debatte.

    Deine Aussage "garbage in, garbage out" impliziert, dass die Mehrheit des Internets, welches ja aus ziemlich viel Garbage besteht, daher viel Garbage im Output der LLMs zu erwarten waere. Das ist Quatsch.

    Falls es um meine Gesamtaussage "Garbarge In, Garbage Out" ging. Das bezieht sich lediglich darauf, dass es eine Kausalität zwischen schlechtem Input und schlechtem Output gibt. Daher wenn das KI Modell eine schlechte Ausgabe gibt ist es nahliegend und realistisch, dass die Trainingsdaten nicht so toll waren.

    Nein, das ist ueberhaupt nicht naheliegend. Es ist naheliegend, dass der Prompt einen schlechten semiotischen prior erwischt hat. Es ist naheliegend, dass die Aufgabe iteratives Analysieren erfordert, zu welchem ein LLM nicht eo ipso in der Lage ist (ausser man setzt bestimmte prompt Techniken ein etc).

    @Columbo sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    Ok? Und woher wurdest Du gefuettert?

    Falls du darauf hinaus willst, dass auch wir mit Daten aus dem Internet etc. gefüttert wurden.

    Ne. 🤣


  • Mod

    Hab es mal nach einem Taschenrechner in modernem, idiomatischem C++ gefragt. Das Ergebnis war identisch zu dem von Erhard Henkes oben, außer dass die Rechenoperationen in (einzeilige) Funktionen ausgelagert wurden, und ein völlig unbenutztes cmath eingebunden wurde. Nun, vielleicht gibt die Aufgabe auch einfach nicht mehr her. Bei vier Rechenoperationen würde ich es selber ja auch nicht anders machen. Erst wenn da Erweiterbarkeit geplant ist, würde ich da anfangen, die Eingabe in syntaktische Elemente zu zerlegen, die dann (anders als mit einer if-Kaskade) auf die Implementierung gemappt werden.

    Das hat natürlich zu dem Prompt geführt, dass es den Taschenrechner doch bitte erweiterbar machen sollte, wo dann dies rauskam:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <cmath>
    
    using namespace std;
    
    double add(double a, double b) { return a + b; }
    double subtract(double a, double b) { return a - b; }
    double multiply(double a, double b) { return a * b; }
    double divide(double a, double b) { return a / b; }
    double power(double a, double b) { return pow(a, b); }
    double square_root(double a) { return sqrt(a); }
    
    struct operation {
        string symbol;
        double (*function)(double, double);
    };
    
    vector<operation> operations = {
        {"+", add},
        {"-", subtract},
        {"*", multiply},
        {"/", divide},
        {"^", power},
        {"sqrt", square_root}
    };
    
    int main() {
        double a, b;
        string op;
    
        cout << "Enter an expression (e.g. 2 + 3): ";
        cin >> a >> op >> b;
    
        for (auto& oper : operations) {
            if (oper.symbol == op) {
                cout << oper.function(a, b) << endl;
                return 0;
            }
        }
    
        cout << "Invalid operator" << endl;
        return 
    

    und dann ist der Stream abgebrochen, weil es zu lange zum generieren der Antwort gebraucht hat. Aber man sieht schon, da sind Logikfehler (und Compilierfehler!) im Aufbau, die sich nicht beheben lassen, selbst wenn es da noch mit irgendetwas anderem weiter ginge als 1;}. Das merke ich auch immer wieder bei Tests, wo ich es spaßeshalber auf echte Probleme loslasse. Sobald die Anforderung ein bisschen interessanter wird, kommt häufig diese Art von nicht-funktionaler Mischung aus professionellem Ansatz mit Anfängercode drumherum heraus. Das liegt wahrscheinlich daran, dass die vollständig ausprogrammierten Beispiele, die man im Internet findet, halt die Anfängercodes sind, wohingegen bei Expertenfragen nur Fragmente für den richtigen Ansatz gezeigt werden, weil man (zurecht) erwarten kann, dass ein Könner das Drumherum von alleine hinbekommt.

    PS: In Python (was es gefühlt besser kann als C++) macht es die gleiche Art Fehler. Es nimmt zwar mehr als zweiseitige Operatoren in seine Operationsliste auf, aber der Parser geht naiv von "Zahl->Whitespace->Operator->Whitespace->Zahl" aus.
    PPS: Und so interessant ist dieser Prompt eigentlich nicht. Ich bin ziemlich enttäuscht, dass es so krasse Fehler produziert, und nicht einmal einen brauchbaren Ansatz für das Parsing hat. Bisher war ich eigentlich immer positiv überrascht, wie weit man eine Anforderung treiben kann, bevor es anfängt zu spinnen. Vielleicht sind hier die Lerndaten bei dem "Taschenrechner"-Prompt zu sehr verseucht mit der hunderttausendfach gestellten Hausaufgabe, so dass bessere Ansätze völlig untergehen?


  • Mod

    @SeppJ Was ist "es"? Codex? GPT-3? GPT-4? Mit welchem fine tuning?

    Mit Copilot (d.h. Codex?) bekomme ich

    // Write a calculator app in modern C++ using RAII and the STL. It can do all basic calculator instructions (plus, minus, divide, multiply) and is extensible.
    #include <iostream>
    
    #include <functional>
    #include <memory>
    #include <string>
    #include <vector>
    
    #include <boost/algorithm/string.hpp>
    
    int main()
    {
        std::vector<std::string> instructions;
        std::string instruction;
        while (std::getline(std::cin, instruction))
        {
            instructions.push_back(instruction);
        }
    
        std::vector<std::function<void()>> actions;
        actions.reserve(instructions.size());
    
        for (auto const& instruction : instructions)
        {
            std::vector<std::string> tokens;
            boost::split(tokens, instruction, boost::is_any_of(" "));
    
            if (tokens.size() != 3)
            {
                std::cerr << "Invalid instruction: " << instruction << std::endl;
                return 1;
            }
    
            auto const& op = tokens[0];
            auto const& lhs = tokens[1];
            auto const& rhs = tokens[2];
    
            if (op == "add")
            {
                actions.push_back([lhs, rhs] {
                    std::cout << lhs << " + " << rhs << " = " << std::stoi(lhs) + std::stoi(rhs) << std::endl;
                });
            }
            else if (op == "sub")
            {
                actions.push_back([lhs, rhs] {
                    std::cout << lhs << " - " << rhs << " = " << std::stoi(lhs) - std::stoi(rhs) << std::endl;
                });
            }
            else if (op == "mul")
            {
                actions.push_back([lhs, rhs] {
                    std::cout << lhs << " * " << rhs << " = " << std::stoi(lhs) * std::stoi(rhs) << std::endl;
                });
            }
            else if (op == "div")
            {
                actions.push_back([lhs, rhs] {
                    std::cout << lhs << " / " << rhs << " = " << std::stoi(lhs) / std::stoi(rhs) << std::endl;
                });
            }
            else
            {
                std::cerr << "Invalid operation: " << op << std::endl;
                return 1;
            }
        }
    
        for (auto const& action : actions)
        {
            action();
        }
    
        return 0;
    }
    

    Was will man darueber sagen... die Syntax des Rechners ist zwar Prefix statt Infix, aber es funktioniert und setzt moderne Features mehr oder weniger korrekt ein (sieht schon affig aus mit dem action delay haha).



  • Hat jemand Ahnung aus welchem Elementen / Classifiern OpenAI besteht?

    Ist dies ein riesiges MLP, oder ein MLP in Kombination mit Case Based Reasoning?


  • Mod

    @Columbo sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    @SeppJ Was ist "es"? Codex? GPT-3? GPT-4? Mit welchem fine tuning?

    Chat-GPT,, worum es hier im Thread schließlich geht, also eine GPT-3 Variante, die nicht speziell auf Programmierung getuned ist. Mit dem Prompt, modernes, idiomatisches C++ zu schreiben. Ich habe danach nicht versucht, es auf die Fehler aufmerksam zu machen um eine bessere Version zu bekommen. Denn wenn ich schon weiß, wie ein korrektes und besseres Programm aussieht, kann ich mir die KI-Unterstützung auch sparen; dann ist sie nicht mehr als ein schlechter Junior-Programmierer, den ich mit Gewalt zur "richtigen" Lösung leiten muss.


  • Mod

    Die Antwort von Sydney, welches auf GPT-4 basiert:

    #include <iostream>
    #include <string>
    #include <functional>
    #include <map>
    #include <boost/lexical_cast.hpp>
    
    class Calculator {
    public:
        Calculator() {
            // Initialize the operations map with some basic operations
            operations_["add"] = std::plus<double>();
            operations_["subtract"] = std::minus<double>();
            operations_["multiply"] = std::multiplies<double>();
            operations_["divide"] = std::divides<double>();
        }
    
        // Add a new operation to the calculator
        void add_operation(const std::string& name, const std::function<double(double,double)>& op) {
            operations_[name] = op;
        }
    
        // Perform a calculation using the specified operation
        double calculate(const std::string& operation, double x, double y) {
            auto it = operations_.find(operation);
            if (it != operations_.end()) {
                return it->second(x,y);
            } else {
                throw std::invalid_argument("Invalid operation: " + operation);
            }
        }
    
    private:
        // Map of available operations
        std::map<std::string,std::function<double(double,double)>> operations_;
    };
    
    int main(int argc,char* argv[]) {
      if(argc<4){
          std::cout<<"Usage: "<<argv[0]<<" [operation] [operand1] [operand2]"<<std::endl;
          return 1;
      }
      Calculator calc;
      try{
          double x=boost::lexical_cast<double>(argv[2]);
          double y=boost::lexical_cast<double>(argv[3]);
          double result=calc.calculate(argv[1],x,y);
          std::cout<<result<<std::endl;
      }catch(std::exception& e){
          std::cerr<<e.what()<<std::endl;
          return 1;
      }
    }
    

    Darauf hin habe ich gebeten, den Rechner mit Infix Notation und einer stdin Eingabe umzuschreiben, was prompt erfolgt ist, aber ein sehr komplexes Program mit einem Syntaxfehler und einem Segfault ergeben hat. Weiter habe ich nicht geschaut.

    @SeppJ sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    @Columbo sagte in ChatGPT schreibt einen kleinen Taschenrechner:

    @SeppJ Was ist "es"? Codex? GPT-3? GPT-4? Mit welchem fine tuning?

    Chat-GPT,, worum es hier im Thread schließlich geht, also eine GPT-3 Variante, die nicht speziell auf Programmierung getuned ist. Mit dem Prompt, modernes, idiomatisches C++ zu schreiben. Ich habe danach nicht versucht, es auf die Fehler aufmerksam zu machen um eine bessere Version zu bekommen. Denn wenn ich schon weiß, wie ein korrektes und besseres Programm aussieht, kann ich mir die KI-Unterstützung auch sparen; dann ist sie nicht mehr als ein schlechter Junior-Programmierer, den ich mit Gewalt zur "richtigen" Lösung leiten muss.

    Schon klar. Der Punkt ist, dass der Progress in den letzten Jahren so enorm war, dass man davon ausgehen darf, in den naechsten LLM Generationen an einen Punkt zu kommen, an dem die Assistenz besser ist als ein schlechter (aber sehr schneller) Junior Programmierer.


  • Mod

    @SeppJ Ich wollte noch erwaehnen, dass wir natuerlich auch davon ausgehen muessen, dass die Daseinsberechtigung dieses Forums sich damit erledigt, dass KI sehr schnell und akkurat auf Anfaengerfragen antworten kann. 😉


Anmelden zum Antworten