Informatik Testat in C Programmierung --ich brauch eure Hilfe--



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Projekte verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Nenne einen Geldpreis, dann werden sich Leute schaarenweise bei dir melden. Für Dank allein macht das niemand.

    Dein Programm ist relativ trivial, der Hauptarbeitsaufwand dürfte darin bestehen, sich mit dir abzusprechen. Insgesamt 1-2 Stunden Arbeit, den Preis darfste dir dann selber ausmalen.



  • 1-2 Stunden? In der Zeit würde das der TE ja fast hinbekommen, wenn er anfängt, sich mit den Grundlagen zu beschäftigen.


  • Mod

    yahendrik schrieb:

    1-2 Stunden?

    Hauptsächlich hin- und hergeschreibe von Emails, Bezahlungsformalitäten und - nicht zu vergessen - die geforderte ausführliche Codekommentierung (sowas dauert lange!). Und beim Schreiben so tun, als wäre man Anfänger ohne Plan (gar nicht so einfach). Das Programm selber ist ein 15-Zeiler, aber probier mal aus, wie lange so etwas dauert, wenn man es wirklich ordentlich macht.

    In der Zeit würde das der TE ja fast hinbekommen, wenn er anfängt, sich mit den Grundlagen zu beschäftigen.

    Tja, mag er aber nicht.



  • Darf man fragen, welches Fach du studierst, damit ich mich von diesem dann entsprechend fernhalten kann? (Rufen Sie den Taschenrechner mit system() auf, das tut ja schon beim Lesen weh. Die Programmierer sollten Schmerzensgeld erhalten.)



  • #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    // Definieren der Konstanten (Passwörter und Dateipfade)
    #define FIRST_PASSWORD "Schnitzel"
    #define SECOND_PASSWORD "Kartoffel"
    #define CALCULATOR "C:\\Windows\\System32\\calc.exe"
    #define NOTEPAD "C:\\Windows\\System32\\notepad.exe"
    
    // Prüft und gibt zurück, wie viele der beiden eingegebenen Passwörter richtig sind
    unsigned char check_passwords(char pass1[20], char pass2[20])
    {
        unsigned char correct_input;
        // Die temporäre Zählvariable wird initialisiert
        correct_input = 0;
        // Prüfe, ob Passwort 1 korrekt ist...
        if (!strcmp(pass1, FIRST_PASSWORD))
            // ... und erhöhe gegebenenfalls die Zählvariable um 1
            correct_input++;
        // Prüfe, ob Passwort 2 korrekt ist...
        if (!strcmp(pass2, SECOND_PASSWORD))
            // ... und erhöhe gegebenenfalls die Zählvariable um 1
            correct_input++;
        // Wert zurückgeben
        return correct_input;
    }
    
    // Führt die passende Reaktion auf die Eingabe aus
    void evaluate_input(unsigned char correct_input)
    {
        // Switch-Anweisung für die verschiedene Anzahl der richtigen Eingaben:
        switch (correct_input)
        {
            case 0:
                // Kein richtiges Passwort: Nur Ausgabe einer Nachricht
                printf("Sie haben kein Passwort richtig eingegeben. Das Programm wird beendet.\n");
                break;
            case 1:
                // Ein richtiges Passwort: Ausgabe einer Nachricht und Starten von Notepad
                printf("Sie haben ein Passwort richtig eingegeben. Notepad wird gestartet.\n");
                system(NOTEPAD);
                break;
            case 2:
                // Zwei richtige Passwörter: Ausgabe einer Nachricht und Starten vom Taschenrechner
                printf("Sie haben beide Passwörter richtig eingegeben. Taschenrechner wird gestartet.\n");
                system(CALCULATOR);
                break;
        }
        // Verhindern, dass sich das Programm sofort schließt (Warten auf einen Tastendruck)
        getchar();
    }
    
    int main()
    {
        char pass1[20];
        char pass2[20];
        // Einlesen der beiden Passwörter durch scanf (maximale Länge von 20)
        printf("Geben Sie das erste Passwort ein: ");
        scanf("%20s", pass1);
        printf("Geben Sie das zweite Passwort ein: ");
        scanf("%20s", pass2);
        // Passende Reaktion auf die Eingabe ausführen
        // Parameter ist die Anzahl der richtig eingegebenen Passwörter
        evaluate_input(check_passwords(pass1, pass2));
        return 0;
    }
    

    Funktioniert bei mir, ich hoffe ich hab die Aufgabe auch richtig verstanden 😕



  • Zeile 60 und 62: Soll wohl lauten %19s.
    Es ist keine Reihenfolge definiert, du kannst also nicht einfach nur Eingabe 1 mit Passwort 1 überprüfen.
    Zeile 12: Besser: const char*.
    Zeile 51: Meinst du nicht, dass scanf() noch ein '\n' im Puffer lässt? 🙂



  • Ehrlich gesagt programmiere ich immer nur in C++, deswegen hatte ich schon gedacht, dass solche Fehler da sind 🙂

    Verbessert:

    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    // Definieren der Konstanten (Passwörter und Dateipfade)
    #define FIRST_PASSWORD "Schnitzel"
    #define SECOND_PASSWORD "Kartoffel"
    #define CALCULATOR "C:\\Windows\\System32\\calc.exe"
    #define NOTEPAD "C:\\Windows\\System32\\notepad.exe"
    
    // Prüft und gibt zurück, wie viele der beiden eingegebenen Passwörter richtig sind
    unsigned char check_passwords(const char pass1[20], const char pass2[20])
    {
        unsigned char correct_input;
        // Die temporäre Zählvariable wird initialisiert
        correct_input = 0;
        // Prüfe alle möglichen Passwort-Eingabe-Kombinationen und erhöhe die Zählvariable bei einer richtigen Eingabe um 1
        if (!strcmp(pass1, FIRST_PASSWORD))
        {
            correct_input++;
            if (!strcmp(pass2, SECOND_PASSWORD))
                correct_input++;
        } else if (!strcmp(pass1, SECOND_PASSWORD)) {
            correct_input++;
            if (!strcmp(pass2, FIRST_PASSWORD))
                correct_input++;
        } else if (!strcmp(pass2, FIRST_PASSWORD)) {
            correct_input++;
        } else if (!strcmp(pass2, SECOND_PASSWORD)) {
            correct_input++;
        }
        // Wert zurückgeben
        return correct_input;
    }
    
    // Führt die passende Reaktion auf die Eingabe aus
    void evaluate_input(unsigned char correct_input)
    {
        // Switch-Anweisung für die verschiedene Anzahl der richtigen Eingaben:
        switch (correct_input)
        {
            case 0:
                // Kein richtiges Passwort: Nur Ausgabe einer Nachricht
                printf("Sie haben kein Passwort richtig eingegeben. Das Programm wird beendet.\n");
                break;
            case 1:
                // Ein richtiges Passwort: Ausgabe einer Nachricht und Starten von Notepad
                printf("Sie haben ein Passwort richtig eingegeben. Notepad wird gestartet.\n");
                system(NOTEPAD);
                break;
            case 2:
                // Zwei richtige Passwörter: Ausgabe einer Nachricht und Starten vom Taschenrechner
                printf("Sie haben beide Passwörter richtig eingegeben. Taschenrechner wird gestartet.\n");
                system(CALCULATOR);
                break;
        }
        // Verhindern, dass sich das Programm sofort schließt (Warten auf einen Tastendruck)
        getchar();
    }
    
    int main()
    {
        char pass1[20];
        char pass2[20];
        // Einlesen der beiden Passwörter durch scanf (maximale Länge von 20)
        printf("Geben Sie das erste Passwort ein: ");
        scanf("%19s", pass1);
        printf("Geben Sie das zweite Passwort ein: ");
        scanf("%19s", pass2);
        // Passende Reaktion auf die Eingabe ausführen
        // Parameter ist die Anzahl der richtig eingegebenen Passwörter
        evaluate_input(check_passwords(pass1, pass2));
        return 0;
    }
    

  • Mod

    "C:\\Windows\\System32\\calc.exe"

    Funktioniert nicht auf dem Rechner des Profs, der sein Windowsverzeichnis Win95 genannt hat.

    Durchgefallen. Du darfst dich im nächsten Semester noch einmal zur Prüfung anmelden.



  • "C:\\Windows\\System32\\calc.exe"

    Funktioniert nicht auf dem Rechner des Profs, der sein Windowsverzeichnis Win95 genannt hat.

    Durchgefallen. Du darfst dich im nächsten Semester noch einmal zur Prüfung anmelden.

    Ist doch so in der Aufgabe vorgegeben :p



  • if ()
    {
      system("calc"); // Wenn in %PATH% kein system32 steht, 
    }
    else
    {
      system("notepad"); // haben wir vermutlich ein UNIX-System. oO
    }
    


  • Racoon schrieb:

    Hallo zusammen, ... stehe vor einem Problem... muss in Informatik ein Programm in C schreiben, habe aber von der ganzen Materie keinen blassen Schimmer! ... Meine Frage ist nun ob mir jemand das Programm welches ich in den Anhang kopiert habe schreiben könnte... Würde mich auch entschädigen. Vielen Dank!

    Willst du nach deiner Ausbildung als Informatiker etwa Software-Designer oder IT-Berater werden? 😕



  • berniebutt schrieb:

    Racoon schrieb:

    Hallo zusammen, ... stehe vor einem Problem... muss in Informatik ein Programm in C schreiben, habe aber von der ganzen Materie keinen blassen Schimmer! ... Meine Frage ist nun ob mir jemand das Programm welches ich in den Anhang kopiert habe schreiben könnte... Würde mich auch entschädigen. Vielen Dank!

    Willst du nach deiner Ausbildung als Informatiker etwa Software-Designer oder IT-Berater werden? 😕

    Nein Ich mache ein Ba-Studium Studienrichtung Maschinenbau über der Dekra. Bin jetzt Ende 2. Semester und das Thema Info ist somit für mich abgehakt. Nach dem Studium mache ich intern den Prüfingenieur incl. amtlich anerkannten Sachverständiger. Ich komme aus der KFZ Schwarte, sprich KFZ Mechatronic gelernt und anschließend den KFZ Techniker Meister. Mit Informatik geschweige Programmieren hatte ich noch nie was zu tun. Und innerhalb 6 Vorlesungen erlernt man das auch nicht so nebenher.

    Ich bedanke mich viel mals bei euch fürs schreiben!!!
    Wo kann ich mir "Scincilla" downloaden??

    Mfg Michel



  • Ich glaube du meinst eher Scintilla, welches du einfach bei Google finden kannst 🙂



  • Hallo Racoon! Ist schon ok - ich hatte dich in eine andere Ecke pepackt. Dann ziehst du eben morgen unsere Fahrzeuge aus dem Verkehr, weil diese den Prüfansprüchen nicht genügen wollen? So ein Abgasprüfgerät zeigt idiotensicher grün oder rot, da musst du nicht mehr programmieren können! 🕶



  • Ja genau so in der Art... Bin eben dann Prüfer und Gutachter... da muss ich das mit dem programmieren nicht zwingend beherschen! Vielen vielen Dank nochmal.

    Hab mir das Scintilla gerade gezogen nun stehe ich wieder vor dem Problem wie starte ich das Programm?

    Habe es ins verzeichnis "C:/Info/Testat.c" kopiert

    Wenn ich im DOS in das Verzeichnis "Info" wechsele und das Programm mit "gcc testat.c" öffnen möchte kommt folgendes...

    http://imageshack.us/photo/my-images/215/bildtestat.png/



  • 1. Installiere http://sourceforge.net/projects/mingw/files/
    2. Öffne die "MinGW Shell" (Alle Programme)
    3. Gehe in das Verzeichnis in dem die Datei "programm.c" oder wie du die auch immer genannt hast liegt.
    4. Eingabe:
    gcc -o programm.exe programm.c
    5. programm.exe starten. (Doppelklick)



  • Gut dann probier ich das mal... warum kann ich eigentlich das nicht mit Scintilla als Programm.c abspeichern und anschließend per "gcc proramm.c" starten?

    In den Vorlesungen haben wir das immer so getätigt..?!



  • Scintilla ist doch nur ein Texteditor oder wie sehe ich das? Ein Computer kann dein C nicht verstehen, du musst es erst durch einen Compiler übersetzen lassen. - gcc ist ein möglicher Compiler, der wird dann mit MinGW installiert.



  • berniebutt schrieb:

    Hallo Racoon! Ist schon ok - ich hatte dich in eine andere Ecke pepackt. Dann ziehst du eben morgen unsere Fahrzeuge aus dem Verkehr, weil diese den Prüfansprüchen nicht genügen wollen? So ein Abgasprüfgerät zeigt idiotensicher grün oder rot, da musst du nicht mehr programmieren können! 🕶

    Lass mich raten, ein typisches Vorurteil...du dachtest er studiert etwas was mit W anfängt und mit tik endet 😉 😕

    Lg freeG


Anmelden zum Antworten