kleines prob damit



  • Eine if Abfrage wird hier mehrfach gebraucht. Das ist korrekt.



  • [] ist in der Aufgabenstellung anders gebraucht. In C wird dies für Arrays verwendet.

    Siehe Aufgabenstellung:
    [ ]: mathematisches Symbol für ganzzahligen Anteil (z.B. [6,98] ergibt 6).



  • pitchy schrieb:

    hätte das mit if else gemacht? :I oder wäre der ansatz komplett falsch?

    Der Ansatz ist richtig. An zwei Stellen brauchst du wohl "if", nämlich dort, wo auch "falls" steht... Ob du einen else-Block brauchst, mußt du aber nochmal überlegen.



  • wie mache ich das c klar? das er das ganze nicht als array deklariert ?



  • Tipp: Deklarieren Sie alle Variablen als int, dann erhalten Sie automatisch ganzzahlige
    Ergebnisse. Die eckigen Klammern dürfen in C nicht programmiert werden.



  • if(g==25) && (b>11) || if(g==24)
    g++;

    so ähnlich die syntax für das erste falls? :I



  • Am besten keine [] verwenden. (geht auch nicht anders)

    Wenn Du wie in der Aufgebenstellung nur integer verwendest löst sich das Problem fast von selbst.

    z.B.

    int x,y,z;

    x=7;
    y=2;

    z=x/y; // Das ist 7/2 also 3,5. Es wird aber beim integer immer abgerundet also kommt 3 raus



  • Warum machst du denn einen neuen Thread auf?! Wie ich im anderen Thread mit gleichem Titel schon geschrieben hab:

    Machine schrieb:

    pitchy schrieb:

    und wie sieht, dass dann aus? :I

    Wenn du willst, dass jemand hier deine Hausaufgaben macht, dann poste im "Projekte"-Unterforum und bezahl jemanden dafür.

    Ansonsten zeige den Code, den du schon hast und es werden dir eventuell deine Fehler erklärt.

    Gruß,
    Machine



  • Machine schrieb:

    Warum machst du denn einen neuen Thread auf?! Wie ich im anderen Thread mit gleichem Titel schon geschrieben hab:

    Machine schrieb:

    pitchy schrieb:

    und wie sieht, dass dann aus? :I

    Wenn du willst, dass jemand hier deine Hausaufgaben macht, dann poste im "Projekte"-Unterforum und bezahl jemanden dafür.

    Ansonsten zeige den Code, den du schon hast und es werden dir eventuell deine Fehler erklärt.

    Gruß,
    Machine

    ich habe doch nicht darum gebeten, dass für mich zu lösen oder? :I

    es geht mir vielmehr darum, dass mir bißchen auf die sprunge geholfen wird. ein teil der if schleife, habe ich ja mal gepostet.



  • pitchy schrieb:

    if(g==25) && (b>11) || if(g==24)
    g++;

    so ähnlich die syntax für das erste falls? :I

    her:

    if (((g == 25) && (b > 11)) || (g == 24))
        g++;
    

    Das gesamte if-Statement muß in Klammern stehen. "|| if" ist so ebenfalls nicht richtig. Sieh das ganze als eine einzelne Funktion.



  • @Machine
    Also ich kanns nachvollziehen. Wenn ich damals ne so gigantische Möglichkeit wie das Internet gehabt hätte, dann hätte ich mir alle Aufgaben machen lassen.

    pitchy schrieb:

    .....
    es geht mir vielmehr darum, dass mir bißchen auf die sprunge geholfen wird. ein teil der if schleife, habe ich ja mal gepostet.

    Bitte schreibe das 1000 mal:
    **************** ES GIBT KEINE IF SCHLEIFE ****************
    **************** ES GIBT KEINE IF SCHLEIFE ****************
    **************** ES GIBT KEINE IF SCHLEIFE ****************
    **************** ES GIBT KEINE IF SCHLEIFE ****************



  • Habe das mal soweit geschrieben, das letzte verstehe ich nicht ganz, hab den satz mal als kommentar gekennzeichnet. danke schonmal, für die ersten hilfen von euch!

    int main()
    {
        int a,b,c,d,e,f,g,h;
    
        printf("Geben sie gewuenschte Jahreszahl ein:\t");
        scanf("i%",&a);
    
        b=(a %19)+1;
        c=(a/100)+1;
        d=(3*c/4)-12;
        e=((8*c+5)/25)-5;
        f=(5*a/1)-d-10;
        g=(11*b+20+e-d)&30;
    
        if (((g == 25) && (b > 11)) || (g == 24))
        g++;
    
        h=44-g;
    
        if(h<21);
        h=h+30;
    
        h=h+7-((f+h)%7);
    
        printf("TAGE %i",h);  
    
        // für h>31 fällt der Ostersonntag auf den (h-31), April sonsst auf den h. März
    
        return 0;
    }
    


  • if(h<21);
    h=h+30;
    

    Das Semikolon hinter dem if wegnehmen. "h=h+30" für die Übersichtlichkeit einrücken. Etwa so:

    if (h < 21)
        h = h + 30;    /* oder: "h += 30;" */
    
    g=(11*b+20+e-d)&30;
    

    der Modulo-Operator ist "%", wie weiter oben schon benutzt, nicht "&".

    für h>31 fällt der Ostersonntag auf den (h-31), April sonsst auf den h. März

    Wenn h größer ist als 31 (z.B. 35), ist der gesuchte Tag der "(h - 31).April" (z.B. 35 - 31 = 4 -> 4.April).
    Wenn h kleiner oder gleich 31 (sonst -> else) ist, z.B. 25, dann ist es der "h.März" (z.B. h = 25 -> 25.März).

    printf("TAGE %i",h);
    

    Zur Ausgabe von integern als Dezimalzahl wird "%d" benutzt, nicht "%i", wie bei der Eingabe.



  • vielen dank! das mit dem modulo war einfach ein tippfehler 😞

    also baue ich einfach noch eine if else, ans ende?

    werde ich gleich mal probieren und dann nochmal posten 🙂



  • if(h>31)
        {
            printf("April %d", h-31);
        }
        else{
            if(h<=31){
    
            printf("Maerz%d",h);
        }
    
        }
    

    scheint aber irgendwie nicht richtig zu funktionieren 😕



  • else{
            if(h<=31){
    

    Das "if(h<=31){" kannst du rausnehmen (und dann natürlich auch noch die letzte schließende geschweifte Klammer im Text).

    Du hast ja im Klartext schon
    "Wenn h > 31: Schreibe "(h-31).April"
    "Sonst: Schreibe "(h).Maerz" (Hier braucht keine weitere if-Abfrage rein. Die Bedingung ist mit "sonst" festgelegt.)

    Wenn die erste Bedingung nicht erfüllt ist, also h größer als 31 ist, dann ist h auf jeden Fall kleiner oder gleich 31. Deshalb brauchst du außer dem "else" (sonst) keine weitere Abfrage. Der Compiler erkennt automatisch, daß die beiden zusammengehören.

    Das "else if" aus z.B. Pascal wird in c "elif" geschrieben.

    Ansonsten dürfte der Compiler noch bei allen scanf/printf-Aufrufen meckern. Die findet er in der stdio.h:

    #include <stdio.h>
    

    Du kannst deinem Lehrer (ich gehe mal davon aus, daß das ein Informatikkurs in der Schule ist) auch mal vorschlagen, erst mit Struktogrammen und Pseudocode zu arbeiten, bevor ihr euch gleichzeitig mit grundlegenden Strukturen UND der Syntax von c rumschlagen müßt...



  • hey danke, dass du dir soviel mühe gibst! sehr nett!

    also ich hatte, es auch erst so

    if(h>31)
        {
            printf("April %d", h-31);
        }
        else{
    
            printf("Maerz%d",h);
        }
    

    aber es scheint, nicht das richtige rauszukommen. mit printf und scanf gibt es keine probleme. hast du das ganze mal compiliert?



  • #include <stdio.h>
    #include <stdlib.h>
    

    die beiden bibliotheken habe ich drin.



  • Habs mal kompiliert.

    scanf("i%",&a);
    

    ist noch falsch, aber das hast du anscheinend schon korrigiert.

    Das Ergebnis ist bei mir auch falsch: 25. März für 2008.
    stdlib.h brauchst du für das Programm nicht.

    Bis kurz vor Anpfiff habe ich noch Zeit, ich kann ja mal gucken. Ist ja auch immer eine gute Übung.



  • #include <stdio.h>
    
    int main()
    {
        int a,b,c,d,e,f,g,h;
    
        printf("Geben sie gewuenschte Jahreszahl ein:\t");
        scanf("d%",&a);
    
        b=(a %19)+1;
        c=(a/100)+1;
        d=(3*c/4)-12;
        e=((8*c+5)/25)-5;
        f=(5*a/1)-d-10;
        g=(11*b+20+e-d)%30;
    
        if (((g == 25) && (b > 11)) || (g == 24))
        g++;
    
        h=44-g;
    
        if(h<21)
        h=h+30;
    
        h=h+7-((f+h)%7);
    
        if(h>31)
        {
            printf("April %d", h-31);
        }
        else{
    
            printf("Maerz%d",h);
        }
    
        return 0;
    }
    

    so sieht mein komplettes programm aus. das komische ist, dass die werte sich immer unterschieden, obwohl die gleiche eingabe erfolgt, bin grad auch am testen.

    ist ja gut noch eine stunde ! 🙂 was ist denn dein tipp ? 😉


Anmelden zum Antworten