PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C-Aufgabe


Modmaker
2010-11-17, 18:08:34
Hallo,
Wie könnte man diese C Aufgabe lösen?

http://www.abload.de/img/prog212212xht8.png

Für Hilfe wäre ich sehr dankbar!

Monger
2010-11-17, 18:22:41
Sorry, aber das ist kein Hausaufgabenforum.

Zeig wenigstens mal, wie weit du in der Aufgabe gekommen bist, und wo es konkret klemmt.
Wenn du eine konkrete Verständnisfrage hast, dann stell sie, aber wir werden nicht pauschal die Hausaufgaben für dich machen.

Marscel
2010-11-17, 18:25:13
Du hast drei Variablen, z.B. summe, k1, k2. summe := k1 + k2, dann k1 := summe, k2 := k1, summe := k1 + k2,... dieses Prozedere halt n-mal, die Variablen natürlich sinnvoll initialisiert.

Mehr Hilfe wäre schon fast fremdgelöst.

Berni
2010-11-17, 19:10:07
Wenn in der Angabe explizit von einer "Rekursionsformel" die Rede ist, dann denke ich fast, dass erwartet wird, eine kleine rekusrive Funktion zu schreiben, die die "Berechnung" und Ausgabe übernimmt.
Viel zu helfen gibts aber wirklich nicht, da es eine einfache Aufgabenstellung und nur ein sehr kurzes Programm ist. Zudem ist die Fragestellung auch nicht sehr präzise gestellt so dass davon auszugehen ist, dass der Threadersteller sich mit der Aufgabe nicht wirklich befasst hat.

Misda
2010-11-17, 20:03:37
Wie man das lösen kann? Steht doch auf dem Blatt!

Ein wenig mehr Eigeninitiative würde manchmal echt gut tun!

{655321}-Hades
2010-11-17, 20:21:44
Das kannst du googlen, dafür musst du nicht einmal hier fragen. Rekursive Programmierung ist am Anfang nicht unbedingt einfach. Um dir mal auf die Sprünge zu helfen (und die CPU zu schonen, das ist nämlich gelegentlich noch so ein Problem mit rekursiven Methodenaufrufen) das Ganze in Java, jedoch nicht rekursiv:


public class Fibonacci
{

public int[] getFibs(int n){

int[] fib=new int[n];

fib[0]=1;
fib[1]=1;

for (int i=2;i<n;i++){



fib[i]=fib[i-1]+fib[i-2];

}

for (int i=0;i<n;i++){
System.out.println(fib[i]);
}

return fib;

}
}


Aufpassen, sprengt recht schnell den Rahmen von int.

.edit: UND denk auf jeden Fall dran, dass die Funktion, wenn du sie rekursiv schreibst, irgendwann an einem Punkt ankommen MUSS, an dem ein Return-Statement zurück kommt. Sonst ist Asche, wenn der Compiler nicht schon rumbockt. Tut er aber AFAIK nicht, ist dann Laufzeitfehler, zumindest in Java. Keine Ahnung, wie das in C ist.

Gast
2010-11-17, 22:17:28
#include <stdio.h>
#include <stdlib.h>

int getfib(int index, int* fibs){
if(index > 1){
fibs[index] = getfib(index-1,fibs) + getfib(index-2,fibs);
return(fibs[index]);
}else{
return(fibs[index]);
}
}

int main(){
int fibindex = -1;
int i = -1;
int* fibs = malloc(2*sizeof(*fibs));
if(!fibs) return(1);
printf("Erste beide Werte:\n");
scanf("%d", fibs);
scanf("%d", fibs+1);
printf("Fauler Sack!\n");
return(1);
if(fibs[0] < 1 || fibs[1] < 1){
printf("Falsch\n");
return(1);
}
printf("Index:\n");
scanf("%d", &fibindex);
fibindex--;
if(fibindex < 0){
printf("Falsch\n");
return(1);
}
if(!realloc(fibs, fibindex*sizeof(*fibs))){
return(1);
}
getfib(fibindex, fibs);
printf("Erst lesen, dann kompilieren!\n");
return(1);
printf("Ausgabe: ");
for(i = 0; i <= fibindex; i++){
printf("%d ", fibs[i]);
}
printf("\n");
return(0);
}

Gast
2010-11-17, 22:25:01
Der Beispielcode ist übrigens extrem ineffizient, da er die meisten Zahlen zig mal ausrechnet. Da sollte also noch ein Check rein ob eine benötigte Zahl schon bekannt ist.