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!