C (for schleife) Zahlen ersetzen



  • Angabe:
    In der Folge der Zahlen von 0 bis 299 sollen alle Zahlen, die durch 7 teilbar sind oder deren Ziffernsumme gleich 7 ist, durch Sterne ersetzt werden (und zwar
    gemäß ihrer Stellenzahl durch 1, 2 oder 3 Sterne).

    Ausgabe:
    * 1 2 3 4 5 6 * 8 9 10 11 12 13 ** 15
    ** 17 18 19 20 ** 22 23 24 ** 26 27 ** 29 30 31
    32 33 ** ** 36 37 38 39 40 41 ** ** 44 45 46 47
    48 ** 50 51 ** 53 54 55 ** 57 58 59 60 ** 62 **
    64 65 66 67 68 69 ** 71 72 73 74 75 76 ** 78 79
    80 81 82 83 ** 85 86 87 88 89 90 ** 92 93 94 95
    96 97 ** 99 100 101 102 103 104 *** *** 107 108 109 110 111
    *** 113 114 *** 116 117 118 *** 120 121 122 123 *** 125 *** 127
    128 129 130 131 usw.

    Ich brauche unbedingt bei der Bsp. Hilfe, den ich schaffe es nicht die Zahlen die durch 7 dividiert werden können durch die Sterne zu ersetzen!! 😞

    Mein Quellcode:

    #include<stdio.h>
    int main(void) {
    
      int zahlen;   //die Variable für die Ausgabe von Zahlen 0-299
    
      for(zahlen=0;zahlen<=299;zahlen++){   //Ausgabe der Zahlen von 0 bis 299
        if(zahlen < 10) {
          if(zahlen%7==0 || zahlen==7) {
            printf("*");
          }
        }
        printf("%4d", zahlen);
      }
    
      return 0;
    }
    


  • Abgesehen davon dass Du die Stellen gar nicht beachtest, was soll denn das?

    if (zahlen < 10)
    


  • die ersten 10 Zahlen sollten angeschaut und alle Zahlen die durch 7 dividierbar sind durch Sterne ersetzt werden.



  • Bleib bei zahlen%7 == 0, gegen 7 brauchst du nicht zu testen, die Bedingung ist bei 7 schon erfüllt. Außerdem entferne die erste if-Abfrage komplett.

    Was du benötigst, ist eine Funktion, die die Anzahl der Stellen einer Zahl zählt, bspw. so

    unsigned int CountDigits(unsigned int x)
    {
    	unsigned int count = 1;
    	unsigned int val = 10;
    	while (x>=val)
    	{
    		val*=10;
    		++count;
    	}
    	return count;
    }
    

    Es hätte auch per Division gelöst werden können, die Multiplikaton ist nur um ein Vielfaches schneller.

    Anschließend einfach so viele Sterne statt der Zahl ausgeben.
    Greetz



  • #include<stdio.h>
    
    int istdurch7teilbar(int i)
    {
      return i%7==0;
    }
    
    int istquersumme7(int i)
    {
      /* tja wie macht man das wohl */
    }
    
    int main(void) {
    
      int z;   /*die Variable für die Ausgabe von Zahlen 0-299*/
    
      for(z=0;z<=299;z++){   /*Ausgabe der Zahlen von 0 bis 299*/
        if( z%15==0 ) puts("");
        if( istdurch7teilbar(z) || istquersumme7(z) )
          printf(" *");
        else
          printf(" %d",z);
      }
    
      return 0;
    }
    


  • Das Problem ist das wir noch nicht soweit sind.
    Wir sind erst bei den Schleifen in C.



  • Ohje, Ziffernsumme habe ich überlesen, der Begriff Quersumme wäre mir wahrscheinlich ins Auge gefallen...

    Dann überlege dir einmal, wie du an die einzelnen Ziffern herankommst, Hinweis: %10 gefolgt von einem /10, um die letzte Stelle zu verwerfen.

    Alles klar?

    Greetz



  • #include <stdio.h> 
    
    int Quersumme(int zahl) {
    	int quersumme = 0;
    	while (zahl > 0) {
    		quersumme += zahl % 10;
    		zahl /= 10;
    	}
    	return quersumme;
    }
    
    int Anzahl(int zahl) {
    	int anzahl = 0;
    	while (zahl > 0) {
    		zahl /= 10;
    		++anzahl;
    	}
    	return anzahl;
    }
    
    int main(){ 
    	int zahl, anzahl;
    
    	for(zahl = 0; zahl <= 299; ++zahl{
    		if(zahl %7 == 0 || Quersumme(zahl) == 7) {
    			for(anzahl = 0; anzahl < Anzahl(zahl); ++anzahl)
    				printf("*");
    		}
    		else {printf("%i", zahl);}
    
            printf(" ");
        }
    
    	return 0; 
    }
    


  • Ach sieh mal an, alles mit Schleifen. 😃



  • counter schrieb:

    Ohje, Ziffernsumme habe ich überlesen, der Begriff Quersumme wäre mir wahrscheinlich ins Auge gefallen...

    Dann überlege dir einmal, wie du an die einzelnen Ziffern herankommst, Hinweis: %10 gefolgt von einem /10, um die letzte Stelle zu verwerfen.

    Alles klar?

    Greetz

    ich verstehe es immer noch nicht!! 😞



  • Dann schaue dir mal an, wie das in einem weiter oben geposteten Vorschlag gelöst wurde.



  • Wie schaffe ich die Zahlen die durch 7 teilbar sind oder deren Ziffernsumme 7 ist durch Sterne zu ersetzen?

    #include<stdio.h>
    
    int main(void) {
    
      int zahlen;  //die Variable für die Ausgabe von Zahlen 0-299
      int e;  //Einerstelle
      int z;  //Zehners.
      int h;  //Hunderters.
    
      for(zahlen=0;zahlen<=299;zahlen++){   //Ausgabe der Zahlen von 0 bis 299
        e=zahlen%10;
        z=(zahlen/10)%10;
        h=zahlen/100;
    
        if(zahlen%7==0 || e+z+h==7) {
          printf("*");
        }
    
        printf("%4d", zahlen);
      }
    
      return 0;
    }
    


  • Liest du die Antworten überhaupt durch?

    Oooooo! hat doch die komplette Aufgabe schon gelöst. (vor 45 Minuten)



  • Ja aber ich verstehe es nicht wie er es gemacht hat, weil ich noch in der 1.Klasse bin und wir zwischen #include und int main() noch nie etwas geschrieben haben.



  • #include <stdio.h> 
    
    int main(){ 
        int zahl, tmpzahl, anzahl, i, quersumme; 
    
        for(zahl = 0; zahl <= 299; ++zahl) { 
    		quersumme = 0;
    		anzahl = 0;
    		tmpzahl = zahl;
    
    		while (tmpzahl > 0) { 
    			quersumme += tmpzahl % 10; 
    			tmpzahl /= 10; 
    			++anzahl;
    		} 
    
            if(zahl %7 == 0 || quersumme == 7) {
                for(i = 0; i < anzahl; ++i) 
                    printf("*"); 
            } 
            else {printf("%i", zahl);} 
    
            printf(" "); 
        } 
    
        return 0; 
    }
    


  • Vielen DANK Oooooo! 🙂


Anmelden zum Antworten