Die letzten 2 Beiträge |
eulerscheZahl |
Die Aufgabe kenne ich doch
zum Programm:
- printf ("Zahl eingeben: "); macht keinen Sinn, wenn du danach keine Zahl einlesen möchtest.
- Du schreibst #define MAXPRIME 871, ohne das danach zu verwenden.
- Du zählst nicht, wie viele Schritte es dauert, bis die Folge bei 1 ankommt
- n=n/2.0; n /= 2 (2 als int, nicht double) tut es auch.
- printf ("%d\n", n); steht bei if und bei else, das könnte man auch aus dem if-else Konstrukt herausnehmen und danach setzen
return 0; ist die Rückgabe der main-Funktion. Das heißt etwa: das Programm ist abgelaufen, es ist kein Fehler aufgetreten.
Was meinst du mit Befehlen am Anfang?
#include <stdio.h> sorgt dafür, dass du Funktionen wie printf verwenden kannst.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
|
n=871;
while (n!=1) { //solange n nicht 1 ist:
if (n%2==0) { //wenn n ohne Rest durch 2 teilbar ist
n=n/2.0; //dann halbiere n
printf ("%d\n", n); //und gib n aus
}
else { //sonst - also n ist nicht ohne Rest durch 1 teilbar
n=3*n+1; // erhöhe n
printf ("%d\n", n); //und gib n aus
}
} |
|
|
Lau ra |
C Collatzfolge
Meine Frage:
Hallo. Ich bin absolute "Programmiernooberin" und muss jetzt an der Uni C machen. Ich verstehe einzelne Befehle nicht bzw. das Verständnis ist einfach nicht da wieso das Programm so funktioniert und wie man es auch anders machen könnte. Also die Aufgabenstellung ist:
a) Die Collatz-Folge ist folgendermaßen definiert:
Man wähle eine beliebige natürliche Zahl a(0) und bilde damit die
Zahlenfolge
a(n + 1) = a(n)/2, falls a(n) gerade
a(n + 1) = 3a(n) + 1, falls a(n) ungerade
Die Folge endet, wenn a(n+1) den Wert 1 erreicht. Den Wert n+1 nennt
man dann die Länge der Collatz-Folge zum Startwert a(1).
Schreiben Sie ein Programm in C, welches die Collatzfolge (n und a(n))
für a(0) = 871 ausgibt.
b) Implementieren Sie eine Routine collatz_length(n), die für das übergebene
n die Länge der Collatz-Folge berechnet. Schreiben Sie ein Programm,
welches collatz_length() benutzt, um danach zu suchen, für welchen
Startwert im Bereich 1 ... 1000000 die Länge der Collatz-Folge maximal
wird.
Meine Ideen:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
/* Collatz-Folge */
#include <stdio.h>
#define MAXPRIME 871
int main (void) {
int n ;
printf ("Zahl eingeben: ");
n=871;
while (n!=1) {
if (n%2==0) {
n=n/2.0;
printf ("%d\n", n);
}
else {
n=3*n+1;
printf ("%d\n", n);
}
}
return 0;
}
|
|
Das wäre soweit zur a) Könnte mir vielleicht jemand wieso return 0 am Ende macht und am Anfang diese ganzen Befehle sind mir auch nicht klar.
Bedanke mich schon mal für die Aufmerksamkeit und Hilfe.
Liebe Grüße Laura |
|
|