Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
08.12.12, 17:07
|
#1
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 17
Bedankt: 0
|
Fibonacci-Zahlen
Abend!
Ich bin gerade dabei ein Programm zur Ausgabe der Fibnoacci-Zahlen für die Uni zu schreiben und komme nicht weiter. Es soll möglich sein, die Anzahld er auszugebenden Elemente anzuzeigen sowie eine Wiederholen funktion geben.
Zu ersteres habe ich mir schon einiges angeguckt da ich es Anfangs nicht ganz verstanden hatte, nun stehe ich aber vor dem Problem, dass mein Programm sich nicht mit CodeBlocks ausführen lässt.
Code:
#include <stdio.h>
#include <stdlib.h>
long fibo(long n) {
if(n)
return (n <= 2) ? n : fibo(n-2) + fibo(n-1);
return 0;
}
int main(void) {
long f;
long i=0;
printf("Wie viele Fibonacci-Zahlen wollen Sie ausgeben:");
scanf("%ld",&f);
while(i++ < f)
printf("F(%ld) = %ld\n", i, fibo(i));
return EXIT_SUCCESS;
}
Desweiter habe ich noch Probleme mit der While-Schleife.
Ich hatte mir schon zuvor eine Vorlage aus dem Internet gezogen um einfach an diesem Beispiel auch zu lernen und dort die While Schleife anzuwenden. Dazu habe ich mir auch Youtube zuhilfe genommen ([ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]).
Allerdings ist da irgendwie ein Fehler unterlaufen hier mal der Code der ansich funktionieren müsste nur nach meinem hinzufügen der While-Schleife funktioniert es nicht mehr.
Code:
#include <stdio.h>
int main(void)
{
char auswahl;
int ende = 0;
do
{
/* Zaehlvariable und Endvariable */
unsigned int i,ende;
/* Endvariable einlesen */
printf("Bitte Anzahl der zu berechnenden Zahlen eingeben: ");
scanf("%u",&ende);
fflush(stdin); // Eingabepuffer leeren, da sonst Gefahr besteht, dass nächste Eingabe übersprungen wird */
/* Dynamisches array */
unsigned long folge[ende];
/* Werte werden laut Definition vorgegeben */
folge[0]=0;
folge[1]=1;
/* Bei 0 oder 1, entsprechende Meldung ausgeben */
if (ende < 2)
{
printf("Die vorgegebenen Werte sind %d und %d\n",0,1);
}
else
{
printf("%d, %d",0,1);
}
/* Array mit Fibonacci folge fuellen und ausgeben */
for ( i=2; i <= ende ;i++)
folge[i]=folge[i-1]+folge[i-2];
if (i==ende)
{
printf(", %lu.\n",folge[i]);
}
else
{
printf(", %lu",folge[i]);
}
printf ("\nWollen Sie eine weitere Zahl eingeben? (J/N)");
scanf ("%c", &auswahl);
auswahl=toupper(auswahl); // Wert von "auswahl" auf groß damit der Benutzer j oder J eingeben kann
}
while (auswahl=='J'); // Bei "J" beginn von vorne
return 0;
}
Ich hoffe ihr könnt mir helfen und schonmal vielen Dank an euch
|
|
|
08.12.12, 18:32
|
#2
|
Mitglied
Registriert seit: Oct 2010
Beiträge: 296
Bedankt: 151
|
füt "toupper()" musst du noch <ctype.h> inkludieren
und du solltest deinen code noch üpberarbeiten. wenn ich 3 werte ausgeben will, ist die letzte zahl murks
|
|
|
08.12.12, 20:27
|
#3
|
Anfänger
Registriert seit: Aug 2009
Beiträge: 30
Bedankt: 4
|
Hatte ähnliche Probleme mit der "Wiederholen funktion" auch schon. Lösung: aus Char mach int und dann kannst du das toupper weglassen, oder du flusht vorher den input/output stream (das waren zumindest meine größten Fehler immer^^):
Code:
do
{
printf(", %lu",folge[i]); fflush (stdout);
printf ("\nFür eine weitere Zahl 1 eingeben:");
fflush(stdin);
scanf ("%i", &auswahl);
}while(auswahl == 1);
Wäre auch hilfreich, was genau nichtmehr funktioniert. Sehe hier auch einiges, was sich verbessern liese.
PM mich mal wenn es nicht klappen sollte
LG
|
|
|
09.12.12, 21:35
|
#4
|
Mitglied
Registriert seit: Mar 2009
Beiträge: 314
Bedankt: 21
|
versuchs mal so
Code:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
unsigned int ende,i;
char auswahl;
do {
/* Endvariable einlesen */
printf("Bitte Anzahl der zu berechnenden Zahlen eingeben: ");
scanf("%u",&ende);
fflush(stdin);
/* Dynamisches array */
unsigned long *folge = (unsigned long *)malloc(ende * sizeof(long));
/* Werte werden laut Definition vorgegeben */
folge[0]=0;
folge[1]=1;
/* Bei 0 oder 1, entsprechende Meldung ausgeben */
if (ende < 2)
printf("Die vorgegebenen Werte sind %d und %d\n",0,1);
else
printf("%d, %d",0,1);
/* Array mit Fibonacci folge fuellen und ausgeben */
for ( i=2; i < ende ;i++) {
folge[i]=folge[i-1]+folge[i-2];
printf(", %d",folge[i]);
}
printf ("\nWollen Sie eine weitere Zahl eingeben? (J/N)");
scanf ("%c", &auswahl);
}
while(auswahl == 'j' || auswahl == 'J');
}
|
|
|
09.12.12, 21:37
|
#5
|
Mitglied
Registriert seit: Mar 2009
Beiträge: 314
Bedankt: 21
|
versuchs ma so
PHP-Code:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
unsigned int ende,i;
char auswahl;
do {
/* Endvariable einlesen */
printf("Bitte Anzahl der zu berechnenden Zahlen eingeben: ");
scanf("%u",&ende);
fflush(stdin);
/* Dynamisches array */
unsigned long *folge = (unsigned long *)malloc(ende * sizeof(long));
/* Werte werden laut Definition vorgegeben */
folge[0]=0;
folge[1]=1;
/* Bei 0 oder 1, entsprechende Meldung ausgeben */
if (ende < 2)
printf("Die vorgegebenen Werte sind %d und %d\n",0,1);
else
printf("%d, %d",0,1);
/* Array mit Fibonacci folge fuellen und ausgeben */
for ( i=2; i < ende ;i++) {
folge[i]=folge[i-1]+folge[i-2];
printf(", %d",folge[i]);
}
printf ("\nWollen Sie eine weitere Zahl eingeben? (J/N)");
scanf ("%c", &auswahl);
}
while(auswahl == 'j' || auswahl == 'J');
return EXIT_SUCCESS;
}
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr.
().
|