Startfehler



  • Es wird ja besser, muss ich jetzt zugeben... aber die Theorie ist immernoch nicht durchgebraten:
    Schlag mal iwo nach boolscher Algebra

    else if ((menuepunkt == 2) && (zahleingeben > zahleingeben1)) {
        printf("%i ist groesser als %i\n", zahleingeben, zahleingeben1);
    } else if (zahleingeben < zahleingeben1) {
        printf("%i ist kleiner als %i\n", zahleingeben, zahleingeben1);
    } else if(zahleingeben = zahleingeben1) {
        printf("%i hat den selben Wert wie %i", zahleingeben, zahleingeben1);
    }
    

    Ich hab mir mal erlaubt es einzurücken.

    Das du deinen Code geprüft hast, wage ich zu bezweifeln:
    Was passiert, wenn im Menü 3 ausgewählt wird? Auch wenn dies nicht gehen sollte, wird da eine Ausgabe getätigt. Da hast du dich noch nicht allzu sehr mit den UND und ODER Verknüpfungen auseinander gesetzt.

    Wie gesagt, die Boolsche Algebra würde dir hier mit den Äquivalenten der Deutschen Sprache helfen, was es in manchen Situation sehr einfach macht, ausformulierte Bedingungen zu transkribieren.

    Die Variablen für (Unter)Menüpunkt kann man auf eine Variable begrenzen.

    EDIT: im letzten else if hab ich noch vergessen zu erwähnen, dass ein = kein == ist... eine Zuweisung ergibt immer die zugewiesene Zahl zurück.



  • Danke für das Lob 🙂

    Ja, auch wenn ich da eine andere Zahl eingeben würde, würde das da auftauchen. bei switch case kann man ja default angeben und dann dahinter eine Meldung setzen, nur wie das bei if else läuft weiß ich noch nicht. für mich war es erstmal wichtig, dass ich das grobe hinbekommen habe.



  • Hat mit switch garnix zu tun. Das geht auch mit if. Du musst es nur verschachteln:

    //...
    else if(menuepunkt == 2)
    {
        if(zahl1 > zahl2) //Variablennamen gekürzt
        {
            printf("%i ist größer als %i", zahl1, zahl2);
        }
        else if(zahl1 < zahl2)
        {
            printf("%i ist kleiner als %i", zahl1, zahl2);
        }
        else if(zahl1 == zahl2) //Beachte: ==, und nicht =
        {
            printf("%i ist gleich %i", zahl1, zahl2)
        }
    }
    


  • Hab jetzt noch ein wenig rumgebastelt und komme gut vorran, leider finde ich - und mir fallen auch - keine weiteren Übungsaufgaben ein. Vielleicht habt Ihr ja noch was für mich? Was ich bis jetzt gemacht habe: Variablen, mathematische funktionen, verzweigen, if else, break, switch case, default und bin jetzt bei schleifen angekommen. Was könnte ich mit dem Wissen noch so programmieren?

    mit der such funktion hab ich nicht wirklich das rausgefunden, was ich brauche, nur ma so



  • 1. Falls du schon Arrays hattest (könnte man bei Variablen reininterpretieren):
    Schreibe ein Programm, dass vom Benutzer Werte einliest und dann den Mittelwert berechnet!
    Die Anzahl der Werte kann vom Benutzer im Bereich von 1 - 20 ausgesucht werden (Limitierung weil du wahrscheinlich noch kein malloc und Zeiger kennst)

    Bsp. (Benutzereingaben kursiv):

    Geben sie die Anzahl ein: [i]5[/i]
    
    Wert 1: [i]20[/i]
    Wert 2: [i]10[/i]
    Wert 3: [i]20[/i]
    Wert 4: [i]10[/i]
    Wert 5: [i]15[/i]
    
    Der Mittelwert beträgt: 15
    
    Geben sie die Anzahl ein: [i]21[/i]
    Sorry das sind zu viele Werte.
    
    Geben sie die Anzahl ein: [i]0[/i]
    Willst du mich verar... ?
    

    2. Schreibe ein Programm, dass die Quadratzahlen in einem vom Benutzer festgelegtem Bereich ausgibt! Beachte, das der Bereich auch rückwärts gehen kann!

    Bsp.:

    Bereich-Start: [i]5[/i]
    Bereich-Ende: [i]10[/i]
    
    5 ins Quadrat ist: 25
    6 ins Quadrat ist: 36
    [...]
    10 ins Quadeat ist: 100
    
    Bereich-Start: [i]6[/i]
    Bereich-Ende: [i]4[/i]
    
    6 ins Quadrat ist: 36
    5 ins Quadrat ist: 25
    4 ins Quadrat ist: 16
    

    Das fällt mir jetzt mal spontan als Übungsprogramm ein.



  • arrays hatte ich noch nicht. vor arrays kommen erst zeiger und funktionen. Denke ich versuche die Aufgabe dennoch. 🙂



  • Denke ich versuche die Aufgabe dennoch

    Die erste Aufgabe macht nur mit Arrays Sinn (falls du dass mit "dennoch versuchen" meinst)!
    Aber die 2. sollte mit deinem Momentanen Wissensstand möglich sein.



  • mngbd schrieb:

    (Ein int main() ist in C eine Funktion mit beliebigen Argumenten.)

    Nur als explizite Deklaration. Und wer verwendet schon main mit Prototyp.
    Ansonsten ist deine Aussage Unsinn und falsch.



  • mit was löst man die 2. aufgabe? oO break?



  • Mit einer for-Schleife. Die Sache mit dem rückwärts ausgeben kannst du ja erstmal weglassen.

    edit: RS



  • okay danke, das versuch ich mal. wie gesagt, hab ja vorhin erst mit den schleifen angefangen, und das mit dem rückwärts zählen hätte ich auch erstmal so oder so weggelassen 🙂



  • Okay 😃 fertig

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
        int wert, wert2;
    
        printf("Anfangswert: ");
        scanf("%i", &wert);
        printf("Endwert: ");
        scanf("%i", &wert2);
    
        for(int i = wert; i <= wert2; i++)
        printf("\n%i ins Quadrat ist: %i", i, i * i);
    
        system("PAUSE");
        return 0;
    }
    

    Was sagt Ihr?



  • Funktioniert einwandfrei!

    Nun behandle das Problem, wenn der Startwert größer ist, als der Endwert.

    Ein kleiner Hinweis: if()else Konstrukt verwenden.



  • ok, mom

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
        int wert, wert2;
    
        printf("Anfangswert: ");
        scanf("%i", &wert);
        printf("Endwert: ");
        scanf("%i", &wert2);
    
        if (wert < wert2) {    
        for(int i = wert; i <= wert2; i++)
        printf("\n%i ins Quadrat ist: %i\n", i, i * i);
        }
    
        else if (wert > wert2) { 
        for(int i = wert; i <= wert2; i--)
        printf("\n%i ins Quadrat ist: %i\n", i, i * i);
        }
    
        system("PAUSE");
        return 0;
    }
    

    Aber dann wird vom erdwert zum anfangswert gezählt...



  • [quote="Windassel"]
    for(int i = wert; i <= wert2; i++)
    [/cpp]

    was für einen compiler du hast`?



  • Windassel schrieb:

    for(int i = wert; i <= wert2; i++)

    was für einen compiler du hast haben tun?



  • Und da haben wir mal ein Beispiel für unnötige Code-Duplikation. Versuch' doch mal, das letzte Programm mit einer Schleife zu lösen 😉 (kleines Stichwort: kombinierte Zuweisungsoperatoren ala +=)

    Big Brother schrieb:

    Windassel schrieb:

    for(int i = wert; i <= wert2; i++)

    was für einen compiler du hast haben tun?

    Offenbar einen etwas moderneren 😃
    (zur Erklärung: Im ursprünglichen C konnte man Variablen nur am Block-Anfang definieren, C++ (eventuell auch C99) ist etwas flexibler, so daß Definitionen im Schleifenkopf zulässig sind)



  • CStoll schrieb:

    Offenbar einen etwas moderneren 😃

    ja, oder einen c++ compiler. es soll ja leute geben, die sich nach etlichen wochen gewöhnung an manch eine bequemlichkeit der c++ syntax wundern, dass sich plötzlich programme mit c syntax nicht compilieren lassen, wenns z.b. ans thema malloc geht.
    😃



  • #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int main()
    {
        int wert, wert2;
    
        printf("Anfangswert: ");
        scanf("%i", &wert);
        printf("Endwert: ");
        scanf("%i", &wert2);
    
        if (wert < wert2) {    
        for(int i = wert; i <= wert2; i++)
        printf("\n%i ins Quadrat ist: %i", i, i * i);
        }
    
        else if (wert2 < wert) { 
        for(int i = wert; i >= wert2; i--)
        printf("\n%i ins Quadrat ist: %i", i, i * i);
        }
    
        system("PAUSE");
        return 0;
    }
    


  • Und das ganze noch mal besser formatiert:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h> 
    
    int main()
    {
        int wert, wert2;
    
        printf("Anfangswert: ");
        scanf("%i", &wert);
        printf("Endwert: ");
        scanf("%i", &wert2);
    
        if (wert < wert2) {    
          for(int i = wert; i <= wert2; i++)
            printf("\n%i ins Quadrat ist: %i", i, i * i);
        } // jetzt kannst du gleich sehen, dass die Klammer zum if gehoeren soll ...
    
        else if (wert2 < wert) {
          for(int i = wert; i >= wert2; i--)
            printf("\n%i ins Quadrat ist: %i", i, i * i);
        } // ... und nicht zum for
    
        system("PAUSE");
        return 0;
    }
    

Anmelden zum Antworten