Frage zu Aufgabe



  • 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!");
    
                                    }
    


  • schon probiert, geht auch nicht



  • vfbf4n1893 schrieb:

    schon probiert, geht auch nicht

    habs grade mal kompiliert und laufen lassen.
    also, das tu das selbe. bei mir läufts, die zahlen werden rückwärts in textform angezeigt, wieso nicht bei dir? 😕



  • auch die letzte 0??? kopier mal was du bei dir compiled hast



  • vfbf4n1893 schrieb:

    auch die letzte 0??? kopier mal was du bei dir compiled hast

    ja, die letzte auch.

    int main()
    {
    	unsigned a = 1020304050, b;
    	while (a!=0)
    	{
    		b = a % 10;
    		a = a / 10;
    		switch (b)  {
    			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;
    		}
    	}
    	return 0;
    }
    test>test.txt
    

    Null-Fuenf-Null-Vier-Null-Drei-Null-Zwei-Null-Eins-



  • ja gut sorum gehts bei mir auch. ich gebe es ja einmal vorwärts aus und einmal rückwärts. vorwärts gehts, rückwärts nicht. es geht auch, wenn die 0 irgendwo zwischendrin steht, nur nicht, wenn die 0, die letzte ziffer ist



  • vfbf4n1893 schrieb:

    ja gut sorum gehts bei mir auch. ich gebe es ja einmal vorwärts aus und einmal rückwärts. vorwärts gehts, rückwärts nicht. es geht auch, wenn die 0 irgendwo zwischendrin steht, nur nicht, wenn die 0, die letzte ziffer ist

    mein post war also die vorwärtsversion oda watt 🤡



  • wenn man z.b. 1250 eingibt. dann müsste eig in der mitte 2mal null stehen. da einmal von vorwärts und einmal von rückwärts. es steht aber nur 1 mal ne null in der mitte.

    an was leigt das?



  • irgendwie kann ich deinen sinn für humor nicht teilen 👎



  • vfbf4n1893 schrieb:

    also ich habs nun so gelöst:

    ...
                do {
                teiler = teiler*10;
                h=h+1;
                } while(h<i);
    
                while (eingabezahl!=0)
                {
                zahl1 = eingabezahl / teiler;
                eingabezahl = eingabezahl % teiler;
    ...
    

    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???

    Die Null wird bei Vorwärtsschleife nicht ausgegeben, da die letzte "eingabezahl" 0 ist und die Abbruchbedingung damit erfüllt ist:

    1. Durchlauf: eingabezahl==220 -> zahl1=2 -> eingabezahl=20 -> weiter
    2. Durchlauf: eingabezahl==20 -> zahl1=2 -> eingabezahl=0
    3. Durchlauf: eingabezahl==0 -> Abbruch

    Du kannst stattdessen den Teiler auf 0 prüfen:

    28 while (teiler>0) // statt: while (eingabezahl!=0)
    

    viele grüße
    ralph



  • danke geht 😉


Anmelden zum Antworten