Wert einer Zahl bestimmen
-
@Fab_ian sagte in Wert einer Zahl bestimmen:
@Swordfish Hallo, ich lerne im Moment C in einer anderen "natürlichen" Sprache, als der deutschen und diese Bezeichnungen stehen im Skript. Ich bin ganz am Anfang und kenne mich nicht sehr gut im Programmieren aus, hatte lediglich etwas Java Erfahrung davor. Ich möchte das die Zahl kleiner als n und durch 7 teilbar ist.
Dann ist dein Skript Unsinn. Das
for
ist schlicht falsch und sollte nicht einmal compilieren. Das muss doch offensichtlich sein, dass dein Skript da falsch ist. Und dasgoto
Gift ist, wurde dir auch mehrmals gesagt, kannst du aber auch offiziell haben: https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf
Also ist dein Skript auf einem Stand von vor 1968. Damit wirst du nicht glücklich werden. Wenn du falsch lernst, ist schlimmer, als gar nicht zu lernen. Und auf jeden Fall wäre die Alternative, mit einem guten Buch zu lernen (z.B. K&R: The C Programming Language), viel einfacher und bringt Erfolg.
-
@SeppJ Für eine gute Lektüreempfehlung wollte ich mich auch extra noch in einem Literaturforum anmelden, aber danke dafür, ich werde es mir mal anschauen.
-
@Fab_ian sagte in Wert einer Zahl bestimmen:
ich möchte eine Zahl z die kleiner als eine Variable n ist, und die durch 7 aber nicht durch 3 geteilt werden kann
if (n > 7) puts("z = 7"); else puts("z gibt's nicht.");
-
@Fab_ian
Nimm n.
Ziehe 1 ab.
Teile durch 7 (Ganzzahldivision).
Multipliziere wieder mit 7.
Prüfe ob die Zahl die du jetzt hast durch 3 teilbar ist.
Wenn ja: ziehe 7 ab.
Fertig.Übersetze das nach C und du hast dein Programm.
-
Ok, hat mir schon ein bisschen was gebracht.
Danke und schönen Abend!
-
@hustbaer also eine while-Schleife in dem Fall?
-
@Fab_ian sagte in Wert einer Zahl bestimmen:
@hustbaer also eine while-Schleife in dem Fall?
Welches der Worte "Nimm", "Ziehe", "Teile", "Multipliziere", "Prüfe", "Fertig" verbindest du mit einer wiederkehrenden Schleife?
-
@SeppJ gut das war Schmarrn. Ein wenig stehe ich dennoch auf dem Schlauch..
-
Nimm n = 215
Zieh 1 ab = 214
Teile durch 7 = 30 (Rest wird ignoriert)
Multipliziere wieder mit 7 = 210
Prüfe ob die Zahl die du jetzt hast durch 3 teilbar ist: ja, ist sie.
Wenn ja: ziehe 7 ab = 203
Tadaa.
-
Die Aufgabe wird wohl auch erfüllt mit:
puts("n eingeben"); int n; scanf("%d", &n); int z = INT_MIN / 7 * 7; if (z % 3 == 0) z += 7; if (n < z) puts("Eine solche Zahl kann in int nicht mehr dargestellt werden"); else printf("%d ist kleiner als %d und durch 7, aber nicht durch 3 teilbar.\n", z, n);
Ungenaue Aufgabenstellung => korrekte, aber nutzlose Antwort
-
Ja. Und je nachdem wie man "Zahl" auslegt kann die Aufgabe auch so einfach wie
puts("0");
sein.
-
Gut. Danke euch!
-
@hustbaer sagte in Wert einer Zahl bestimmen:
puts("0");
Naja, 0 ist zwar durch 7 teilbar, aber eben auch durch 3 - und letzteres sollte sie ja gerade nicht sein. Daher passt 0 nicht.
(ich wollte eigentlich nur darauf hinaus, dass in der Aufgabenstellung fehlt, dass die größte Zahl gesucht ist, die die genannten Bedingungen erfüllt)
-
@wob sagte in Wert einer Zahl bestimmen:
@hustbaer sagte in Wert einer Zahl bestimmen:
puts("0");
Naja, 0 ist zwar durch 7 teilbar, aber eben auch durch 3 - und letzteres sollte sie ja gerade nicht sein. Daher passt 0 nicht.
Ja
Dann halt
if (n <= 7) puts("meh"); else puts("7");
Weil in der Aufgabenstellung auch nichts davon steht wie "Zahl" zu verstehen ist. Also ob negative Zahlen als Eingabe oder Ergebnis erlaubt sind.
(ich wollte eigentlich nur darauf hinaus, dass in der Aufgabenstellung fehlt, dass die größte Zahl gesucht ist, die die genannten Bedingungen erfüllt)
Naja, theoretisch ist die Aufgabe auch so wie sie formuliert ist interessant, nämlich wenn man annimmt dass man mit beliebig grossen/kleinen Zahlen zu tun hat. Also kein Limit vonwegen 32/64/128 Bit.
-
@hustbaer sagte in Wert einer Zahl bestimmen:
Dann halt
https://www.c-plusplus.net/forum/topic/351716/wert-einer-zahl-bestimmen/11
-
@Swordfish Übersehen
-
@Fab_ian
Ich bin mal lieb:#include <stdio.h> // Idee: Wenn eine Zahl durch 7 teilbar sein soll, dann muss diese Zahl // ein vielfaches von 7 sein d.h. 0, 1*7, 2*7, 3*7,... int main() { int n = 200; int cn = 0; // Vielfaches von 7, immer durch 7 teilbar while (cn < n) { if (cn % 3 != 0) printf("Neue Zahl: %i\n", cn); cn += 7; } return 0; }