...



  • Deutsch? Die Grundlagen solltest du finden, aber auf Dauer kommst du ohne Englisch nicht weit.

    Zu Beginn hilft es oft, wenn man die Fehler einen nach dem anderen angeht und wieder kompiliert. Auch nicht erschrecken, wenn nach einer Korrektur viele weitere Fehler angezeigt werden. Nerven behalten und weiter.

    Zeile 27 ist dein nächstes Problem - Zeile 25 sieht ähnlich aus und scheint okay ...

    Zeile 17 gefällt mir nicht - schau mal auf die nächsten beiden Zeile, 18 + 19, und dir sollte was auffallen.



  • ...



  • In Zeile 27 hast du noch was übersehen 😉
    Der Compiler nörgelt zwar nicht sofort, aber ...

    Kommt mir das nur so vor oder unterdrückst du bei deinem Compiler die Warnungen teilweise?

    Zeilennummern der Fehlermeldungen passen nicht zum Quelltext, ich hoffe für dich, das ist beabsichtigt 😉



  • Versuchs mal mit diesen Korrekturen, musst aber Zeilennummer von dem Anfangs-Programm jeweils um 10 verringern 😉

    Zeile Fehler/Berichtigung

    1 und 9 -"/" fehlt,schliesst Kommentarblock
    11 -"#" fehlt, Header Dateien muessen mit #include inkludiert werden
    13 -"(void)" fehlt, da sonst main function nicht klar definiert
    15 -Semikolons statt Kommas, dadurch wird nur "Jahr" deklariert
    22 -Anführungszeichen muessen doppelt sein, also "\n" statt '\n'
    26 -"fortfahren||1" ist immer wahr, statt "||" muss "==" benutzt werden
    30 -Schliessende Anfuehrungszeichen nach "%d fehlen
    32 -M ist vom Typ int und nicht char, also "%d" statt "%c" verwenden
    -Semikolon statt Komma vor dem Adressoperator
    34 -Adressoperator & fehlt
    35 -Dem Formatsring werden nur 2 von 3 Werten zugeordnet, letzer Wert "Jahr" fehlt
    37 -M muss <=2 sein, da Januar UND Februar in das vorherige Kalenderjahr fallen
    38 -falsche oeffnende Klammer bei if-Block
    39 -das Gleichheitszeichen muss links statt rechts von der Operation stehen
    -da M<=2 ist, muss M um 12 erhoeht und nicht erniedrigt werden
    43/44 -J und Jh müssen vertauscht werden, da J fuer die letzten beiden Ziffern
    im 4er Block steht und Jh fuer die ersten beiden
    46 -fuer die Wertzuweisung ist ein normales "=" noetig, und nicht ein ":="
    46/48 -"operand" muss hier gross geschrieben werden, oder bereits bei der
    Initialisierung(Zeile 17) klein geschrieben werden
    49 -weist Wt den Wert +7 zu, wenn Wt=0. Die ist ueberfluessig und falsch
    51/68 -switch Block muss mit {} geklammert werden
    53-63 -"break;" nach printf fehlt bei allen case Faellen
    60/62 -"case '5'" tritt zwei mal ein,in Zeile 62 muss '5' durch '6' ersetzt werden
    71 -"getchar();" ist ueberfluessig, da scanf char einliest
    72 -ein Leerzeichen vor %c verhindert einlesen des Rueckgabewertes von Return-Taste
    wodurch Programm nicht mehr vorzeitig beended
    73 -UND Verknuepfung ist falsch, da nur "J" ODER "j" stimmen muss
    -da wir den Wert abfragen und nicht zuweisen wollen,
    muss beide Male ein zusaetzliches "=" hinzugefuegt werde



  • ...



  • Wie schön das ihr ihm seine Hausaufgaben vorkaut.



  • kanaryam090 schrieb:

    bist du zufällig mein Lehrer ^^

    nö,musste die Aufgabe selber machen,also Programm-Fehler finden,dokumentieren und korrigieren.
    Den Code poste ich nicht,da musste die schon selber ein "paar" Gedanken machen...



  • ...



  • Ewiger Kalender = Optimist 😉
    Sagen wir gregorianischer Kalender, der zwar 1500 und paar Zerquetschte eingeführt wurde, aber nicht europaweit, ist allein eine lange Geschichte 😃

    So nun noch zum Quelltext das war wahrscheinlich eine Hausaufgabe - deshalb von mir in kleinen Häppchen 🤡

    Die Komplettlösung hat noch ein paar kleine Fehlerchen 😃

    Ausgiebig testen kann nicht schaden 🕶



  • ...



  • Idee ja 😉
    Aber das ist dir ja vom ewigen ... schon geschrieben worden.

    Was zeigt dir denn dein Kalender an, wenn du 1.6.2010 eingibst 😕

    Ist aber kein Fehler auf den dich der Compiler hinweist.



  • Zur Abfrage, du hast nur die Hälfte gelesen 😉



  • Wie soll man diese Art der interaktiven Programmierung nennen? Scheint mir eine neue Methode zur Softwareentwicklung zu sein - ich haue völlig ahnungslos irgendwelchen Schrott ins Forum und bekomme etwas brauchbares geliefert!

    @Fragesteller: Ab jetzt solltest du versuchen, die Grundlagen der Programmierung selbst zu lernen. Bei Unklarheiten kannst du dann immer noch fragen. 🕶



  • kanaryam090 schrieb:

    printf( "Wollen Sie fortfahren und einen weiteren Wochentag berechnen ? " );
    getchar();
    scanf("%c", &Antwort);
    if ( Antwort='j' && Antwort='J' ) fortfahren = 1;
    else fortfahren = 0;

    diesen oberen Abschnitt habe ich in das umgewandelt:

    printf( "Wollen Sie fortfahren und einen weiteren Wochentag berechnen ? " );

    scanf("%c", &Antwort);
    if ( Antwort=='j' && Antwort=='J' ) fortfahren = 1;
    else fortfahren = 0;

    Ich sollte ja das machen: "UND Verknüpfung ist falsch, da nur "J" ODER "j" stimmen muss, - da wir den Wert abfragen und nicht zuweisen wollen, muss beide Male ein zusätzliches "=" hinzugefügt werden".

    So habe ich, denke mal gemacht. Nur Leider bricht er ab, wenn ich "j" eintippe. ?

    Idee??

    Wer lesen kann ist klar im Vorteil 😃
    Wenn ich doch schreibe,dass UND Verknüpfung falsch ist,wieso benutzt du sie trotzdem?

    Falls es dich noch interessiert, hier nun mein vollständig korrigierter Code:

    #include <stdio.h>
    
    int main (void)
    {
      int Jahr, Jh, J, Wt, T, M;
      int fortfahren;
      int Operand;
    
      char Antwort;
      fortfahren = 1;
    
      printf( "\n" );
      printf( "Ewiger Kalender zur Berechnung des Wochentages\n" );
      printf( "==============================================\n" );
    
      while ( fortfahren==1 )
      {
        printf( "\n" );
        printf( "Bitte geben Sie den Tag ein : " );
        scanf( "%d", &T );
        printf( "Bitte geben Sie den Monat ein : " );
        scanf( "%d", &M );
        printf( "Bitte geben Sie das Jahr ein (4-stellig): " );
        scanf( "%d", &Jahr );
        printf( "Der %i. %i. %i ist ein ", T, M ,Jahr);
    
        if ( M<=2 )
        {
          M = M+12;
          Jahr = Jahr-1;
        }
    
        Jh = Jahr/100;
        J = Jahr%100;
    
        Operand = T + ((M+1)*26)/10 + J + J/4 + Jh/4 - 2*Jh;
        /*printf("%d",Operand); nur zur Ueberpruefung*/
        Wt = (Operand) % 7;
    
        switch ( Wt )
        {
          case 1: 
    	printf( "Sonntag \n\n" );break;
          case 2:
            printf( "Montag \n\n" );break;
          case 3:
            printf( "Dienstag \n\n" );break;
          case 4:
            printf( "Mittwoch \n\n" );break;
          case 5:
            printf( "Donnerstag \n\n" );break;
          case 6:
            printf( "Freitag \n\n" );break;
          case 0:
            printf( "Samstag \n\n" );break;
          default:
            printf( "Wenn alles normal laeuft, darf dieser Fall nicht auftreten !" );
        }
    
        printf( "Wollen Sie fortfahren und einen weiteren Wochentag berechnen ? " );
        /*getchar();*/
        scanf(" %c", &Antwort);
        if ( Antwort=='j' || Antwort=='J' ) fortfahren = 1;
        else fortfahren = 0;
      }
    
      return 0;
    }
    

    f.-th. schrieb:

    Die Komplettlösung hat noch ein paar kleine Fehlerchen 😃

    Ausgiebig testen kann nicht schaden 🕶

    Mit meinen Tests hat es MEIST funtioniert. Hab deswegen mal "operand" ausgeben lassen, dieser war bei manchen Tagen (fast ganzen März Jahr 2000) negativ.
    Meine Idee wäre, "operand" oder "wt" als unsigned int zu deklarieren,aber war nicht nötig und evtll. würde die Formel nicht mehr stimmen.
    Glücklicherweise sollte das Programm nur für ein paar wenige Beispiele funtionieren, darauf sollten wir davon ausgehen,dass das Programm einwandfrei funtioniert. 😃



  • ...



  • ...



  • omg090 schrieb:

    ...

    kann jemand diesen Thread löschen?



  • ...


Anmelden zum Antworten