Frage zu Aufgabe



  • vfbf4n1893 schrieb:

    ja die / und % die einzelnen zahlen rausrechnen?

    was verstehst du unter rausrechnen?



  • 124mod10= 4
    124 / 10 = 12

    12mod10=2
    12/10=1 usw



  • vfbf4n1893 schrieb:

    124mod10= 4
    124 / 10 = 12

    12mod10=2
    12/10=1 usw

    ja, kann man so machen.
    oder so, wie es wutz gezeigt hat.



  • vfbf4n1893 schrieb:

    ja die / und % die einzelnen zahlen rausrechnen?

    Das würdest du mit einer Zuweisung viel besser hinbekommen.
    = ist eine Zuweisung. Da steht das Ziel auch auf der linken Seite vom =
    == ist ein Vergleich auf Gleichheit.

    Die beiden Zeilen waren Müll und haben keinen Einfluss auf das Programm da das Ergebnis verworfen wird.



  • nächster versuch: Eingabe 124: Ergebnis = 4.
    Ich will zunächst mal hinbekommen, das es mir die zahlen aufsplittet. also 1 2 4

    {
    
        int eingabezahl, zahl1;
        printf("Bitte geben Sie eine natürliche Zahl ein: ");
        scanf("%d", &eingabezahl);
    
           while (eingabezahl/10==0); {
                    zahl1 = eingabezahl % 10;
                    printf("%d", zahl1);
                    eingabezahl == zahl1;
                                }
    
        return 0;
    }
    

    wieso sprint er mir nicht mehr in die schleife? Kapier net wie ich das printf gestalten soll bzw wie ich die neue eingabezahl nach 1. schleife oben reinbekomme in whilde (...)



  • Das while heißt übersetzt solange
    Dann steht da "solange (eingabezahl/10) gleich Null ist, mache.

    124/10 sind aber 12. Das ist ungleich Null, also ist die Bedingung beim while falsch und die Schleife wird nicht ausgeführt.

    Ein while(eingabezahl != 0) wäre da besser.

    Das % 10 berechnet nur die Einerstelle der Zahl.
    Wenn du aber eingabezahl == zahl1; machst, bekommt deine eingabezahl nur die Einerstelle. Aber eigentlich willst du ja die anderen Stellen berechnen.

    Jetzt brauchst du einer Rechenvorschrift, die Die Zehnerstelle zur Einerstelle macht. Die eingabezahl muss also nur noch ein Zehntel sein.



  • while (eingabezahl/10!=0); {
                    zahl1 = eingabezahl % 10;
                    printf("%d", zahl1);
                    eingabezahl= eingabezahl / 10;
                                }
    

    oh man nun hab ich das.... jetz spuckt er wieder gar nichts mehr aus...
    muss dazu sage ich programmiere seit ca. 2 wochen 😉



  • das semikolon hinter der while bedingung muss weg



  • ok für eingabe 124 spuckt er nun 42 aus... d.h. wo ist die 1? :p



  • vfbf4n1893 schrieb:

    ok für eingabe 124 spuckt er nun 42 aus... d.h. wo ist die 1? :p

    Das

    while (eingabezahl/10!=0)
    

    ist falsch. Wenn eingabezahl=1, dann ist eingabezahl/10=0 und die Schleife wird verlassen.

    Richtig ist:

    while (eingabezahl!=0)
    

    Besser ist:

    do
    {
    	...
    }
    while (eingabezahl != 0);
    

    Dann wird die Schleife wenigstens einmal durchlaufen, also auch bei Eingabe von Null.

    viele grüße
    ralph



  • jop klar, muss so sein... das mit dem while.. logisch...

    nun kommt bei 124 folgendes raus: 421.. jetzt soll das noch rauskommen als 124 und in Buchstaben also: eins-zwei-vier und vier-zwei-eins.

    Tipps? 😉



  • vfbf4n1893 schrieb:

    Tipps? 😉

    Das Übliche: Versuch erst einmal selbst, etwas daherzuwurschteln, dann wird Dir hier auch geholfen.

    viele grüße
    ralph



  • Du kannst dir einen Teiler für die höchste Stelle berechnen.

    int teiler = 1;
      int eingabezahl = eingabe;
      while (eingabezahl!=0) {
     //               zahl1 = eingabezahl % 10;
     //               printf("%d", zahl1);
                    eingabezahl= eingabezahl / 10;
                    teiler = teiler * 10;
                                }
    

    Und dann kannst du die Zahl andersherum ausgeben

    int zahl2;
      while (teiler > 0) {
        zahl2 = eingabe ....  // Wenn eingabe = 124 und teiler = 100. wie kommst du an die erste Stelle
        printf("_%d", zahl2);
        teiler = ....         // Was musst du mit teiler machen, damit du die zweite Stelle berechnen kannst? 
                              // Der teiler muss kleiner werden, damit er die 0 erreicht. 
     }
    


  • int eingabezahl, eingabezahl2, zahl1, zahl2, teiler = 1;
    
        printf("Bitte geben Sie eine natürliche Zahl ein: ");
        scanf("%d", &eingabezahl);
        eingabezahl == eingabezahl2;
    
            do  {   zahl1 = eingabezahl % 10;
                    printf("%d-", zahl1);
                    eingabezahl = eingabezahl / 10;
                    teiler = teiler*10;
                }
            while (eingabezahl!=0);
    
            do  {
                teiler=teiler/10;
                zahl2 = eingabezahl2 / teiler;
                printf("_%d-", zahl2);
                zahl2 = eingabezahl2%teiler;
                }
    
            while (teiler=0);
    

    hab ich nun. jedoch kommt bei der 2. while schleife bei eingabe 124 folgendes raus: "_42003-". Komm net drauf wieso. den teiler muss ich ja zuerst durch 10 machen, da er durch die 1. while schleife ja auf 1000 steht, oder? Und er darf ja nur auf 100 stehen. das ist richtig, oder?



  • Welchen Wert hat denn eingabezahl und eingabezahl2 vor den Schleifen?
    Ganz sicher?
    Sonst mach mal in Zeile 8 und 15 ein

    printf("%d %d\n", eingabezahl, eingabezahl2);
    

    Dann überleg mal, ob die Zeile 20 irgendeinen Einfluss auf die Ausgabe in Zeile 19 hat.
    Du brauchst ein % in der Berechnung, das ist richtig.

    vfbf4n1893 schrieb:

    den teiler muss ich ja zuerst durch 10 machen, da er durch die 1. while schleife ja auf 1000 steht, oder? Und er darf ja nur auf 100 stehen. das ist richtig, oder?

    In diesem Fall ja. Darum habe ich auch ein while-Schleife vorgegeben. (Das gibt nur Probleme wenn du an die Grenzen von des ZAhlenbereichs von int kommst)
    Viel wichtiger ist erstmal das du die selber eine Lösung für das Problem gefunden hast. 👍

    Alle Zeilennummern beziehen sich auf deinen geposteten Code.



  • Und schau dir mal die Meldungen vom Compiler nach dem Compilieren an.
    Da sollte etwas von Warnungen und Fehlern stehen.

    Schau dir auch mal die Warnungen an. Die werden nicht ohne Grund angezeigt.
    Wenn du sie nicht verstehst, kannst du gerne fragen.



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
        int eingabezahl, eingabezahl2, zahl1, zahl2, teiler = 1;
        printf("Bitte geben Sie eine natürliche Zahl ein: ");
        scanf("%d", &eingabezahl);
        eingabezahl2 = eingabezahl;
    
           while (eingabezahl!=0)
                {
                    zahl1 = eingabezahl % 10;
                    printf("%d-", zahl1);
                    eingabezahl = eingabezahl / 10;
                    teiler = teiler*10;
                }
    
            while (teiler!=0)
                {
                teiler = teiler/10;
                zahl2 = eingabezahl2 / teiler;
                printf("%d-", zahl2);
                eingabezahl2=eingabezahl2 % teiler;
                }
    
        return 0;
    }
    

    also es spuckt mir nun die zahlen einmal rückwärts und dann vorwärts aus.
    in der z23 soll aber irgendwas faul sein, was? weil er bringt mir da warnings und das programm stürzt auch nach dem berechnen ab.

    jedoch wie mache ich nun aus den ziffern wörter? muss ich dazu in den "printf" zeilen was ändern, oder?



  • Wenn in der zweiten Schleife der teiler 1 wird, kommt Zeile 22. Dadurch wird der Teiler 0 und in Zeile 24 teilst du demnach durch 0.

    Zur Ausgabe:
    Du kannst dir mal http://www.c-plusplus.net/forum/p2262118#2262118 ansehen.
    Das ist ein Array von Strings. Wenn du da das Wort "eins" ausgeben willst, kannst du das mit

    printf("%s", zahlen[1]);
    

    machen



  • also ich habs nun so gelöst:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    
        int eingabezahl, eingabezahl2, zahl1, zahl2=0, teiler=1, i=0, eingabezahl3, h=1;
        printf("Bitte geben Sie eine natürliche Zahl ein: ");
        scanf("%d", &eingabezahl);
        eingabezahl2 = eingabezahl;
        eingabezahl3 = eingabezahl;
    
            while (eingabezahl3!=0)
                {
                eingabezahl3 = eingabezahl3 / 10;
                i=i+1;
                }
    
                do {
                teiler = teiler*10;
                h=h+1;
                } while(h<i);
    
                while (eingabezahl!=0)
                {
                zahl1 = eingabezahl / teiler;
                eingabezahl = eingabezahl % teiler;
                teiler = teiler / 10;
                switch (zahl1)      {
                            case 1: printf("Eins-");break;
                            case 2: printf("Zwei-");break;
                            case 3: printf("Drei-");break;
                            case 4: printf("Vier-");break;
                            case 5: printf("Fuenf-");break;
                            case 6: printf("Sechs-");break;
                            case 7: printf("Sieben-");break;
                            case 8: printf("Acht-");break;
                            case 9: printf("Neun-");break;
                            default: printf("Null");
                                    }
                }
                while (eingabezahl2!=0)
                {
                    zahl2 = eingabezahl2 % 10;
                    eingabezahl2 = eingabezahl2 / 10;
    
                    switch (zahl2)  {
                            case 1: printf("Eins-");break;
                            case 2: printf("Zwei-");break;
                            case 3: printf("Drei-");break;
                            case 4: printf("Vier-");break;
                            case 5: printf("Fuenf-");break;
                            case 6: printf("Sechs-");break;
                            case 7: printf("Sieben-");break;
                            case 8: printf("Acht-");break;
                            case 9: printf("Neun-");break;
                            default: printf("Null-");
    
                                    }
    
                }
    
        return 0;
    }
    

    was ich nun nicht ganz versteht, wenn ich eine zahl mit "0" eingebe, also z.b. 220. dann gibt es mir bei der letzten while schleife die "Null-" nicht aus. Also das was in default drin steht, wird nicht ausgegebn. aber nur bei der leztten while schleife. bei der 3. while schleife wird die 0 ausgegeben. Wieso???



  • wieso packste die null nicht mit in die case bedingung?

    switch (zahl2)  {
    						case 0: printf("Null-");break;
                            case 1: printf("Eins-");break;
                            case 2: printf("Zwei-");break;
                            case 3: printf("Drei-");break;
                            case 4: printf("Vier-");break;
                            case 5: printf("Fuenf-");break;
                            case 6: printf("Sechs-");break;
                            case 7: printf("Sieben-");break;
                            case 8: printf("Acht-");break;
                            case 9: printf("Neun-");break;
                            default: printf("IMPOSSIBLE STATE!(hamwa nich!");
    
                                    }
    

Anmelden zum Antworten