Forum:  Programmieren
Thema: Problemfälle bei Fibonacci-Funktion behandeln
Themen-Übersicht
JamesNguyen
Aktiv
Dabei seit: 08.11.2020
Mitteilungen: 187
Themenstart: 2021-02-26 22:06

Hallo,

in der Aufgabe steht:

Eine Funktion isFibonacci untersucht einen übergebenen Wert, ob er eine Fibonacci-Zahl ist
und gibt einen entsprechenden logischen Wert zurück.

ich habe folgendes implementiert:

_Bool isFibonacci ( long long value )
{
auto long long fNminus2 = 0LL , fNminus1 = 1LL , fN = fNminus1 + fNminus2 ;

auto unsigned char i ;

if (  )

if ( fNminus2 == value )
{
return 1 ;
}
else if ( fNminus1 == value )
{
return 1 ;
}
else if ( fN == value )
{
return 1 ;
}
{
for ( i = 3 ; i < 93 ; i ++ )
{
fNminus2 = fNminus1 ;
fNminus1 = fN ;
fN = fNminus1 + fNminus2;

if ( fN == value ) return 1 ;
}
}

return 0 ;
}

jetzt bin ich bei der Aufgabenstellung

Welche Probleme können bei unsachgemäßer Nutzung der jeweiligen Funktion
auftauchen? Sehen Sie eine Kontrolle dieser Problemfälle vor, indem Sie bspw. eine
entsprechende Rückgabe machen. Das muss natürlich auch dokumentiert und getestet
werden.

In der Vorlesung hatten wir dazu auch folgends Beispiel

// funktionsdeklaration
int macheLinie ( int zeichen , int laenge ) ;

int main ( void )
{

macheLinie ( 340 , -77 ) ;
macheLinie ( '~' , 1111 ) ;
return 0 ;
}


// funktionsdefinition:
int macheLinie ( int zeichen , int laenge )
{
int i = 0 ;
if ( zeichen > 255 )
zeichen = zeichen % 256 ;
if ( laenge < 0 )
laenge = abs ( laenge ) ;
if ( laenge > 80 )
laenge = 80 ;

for ( i = 0 ; i < laenge ; i ++ )
{
printf ( "%c" , zeichen ) ;
}
printf ( "\n" ) ;
return i ;
}

da hat er also mit if Abfragen einiges behandelt.


Mir fehlt etwas das Wissen wie ich meine obige Funktion behandeln soll

bzw. was unsachgemäße Benutzung darstellen würde.

ich hatte meine funktion vorher auch mit unsigned long long mal geschrieben

theoretisch kann ich ja in die main der funktion


aufrufen

isFibonacci ( < alles von ]-unendlich, +unendlich[
dass dann mit sämtlichen präfixen ull, LL  usw.

ich bin mehr einfach sehr unsicher

was davon alles überhaupt behandelt werden kann.

weil das was inder main funktion aufgerufen wird.

geht mir tatsächlich u.U verloren in der is Fibonacci Funkion.

Bspw. wenn ich -5 isFibonnacci (unsigned long long number)

aufrufe dann bekomme 42949672911.

es würde hier also wenig sinn machen inder FUnktion

if ( number < 0 )

zu schreiben, weil -5 so gar nicht angekommen ist.


viertel
Senior
Dabei seit: 04.03.2003
Mitteilungen: 27783
Wohnort: Hessen
Beitrag No.1, eingetragen 2021-02-27 00:35

Mal im Ernst, Sportsfreund, wer soll sich denn durch diesen unleserlichen linksbündigen Codesalat durchwühlen?
2021-02-26 22:06 - JamesNguyen im Themenstart schreibt:
[…]

_Bool isFibonacci ( long long value )
{
auto long long fNminus2 = 0LL , fNminus1 = 1LL , fN = fNminus1 + fNminus2 ;

auto unsigned char i ;

if (  )

if ( fNminus2 == value )
{
return 1 ;
}
else if ( fNminus1 == value )
{
return 1 ;
}
else if ( fN == value )
{
return 1 ;
}
{
for ( i = 3 ; i < 93 ; i ++ )
{
fNminus2 = fNminus1 ;
fNminus1 = fN ;
fN = fNminus1 + fNminus2;

if ( fN == value ) return 1 ;
}
}

return 0 ;
}

[…]

// funktionsdeklaration
int macheLinie ( int zeichen , int laenge ) ;

int main ( void )
{

macheLinie ( 340 , -77 ) ;
macheLinie ( '~' , 1111 ) ;
return 0 ;
}


// funktionsdefinition:
int macheLinie ( int zeichen , int laenge )
{
int i = 0 ;
if ( zeichen > 255 )
zeichen = zeichen % 256 ;
if ( laenge < 0 )
laenge = abs ( laenge ) ;
if ( laenge > 80 )
laenge = 80 ;

for ( i = 0 ; i < laenge ; i ++ )
{
printf ( "%c" , zeichen ) ;
}
printf ( "\n" ) ;
return i ;
}

[…]

Benutze bitte in Zukunft den [Quelltext]-Bereich (findest du unter dem Eingabefenster), bei mehr als 3 oder 4 Zeilen Code auch mit Zeilennummern, also [num.], dann sieht das vernünftig so aus:
C
  1. _Bool isFibonacci ( long long value )
  2. {
  3. auto long long fNminus2 = 0LL , fNminus1 = 1LL , fN = fNminus1 + fNminus2 ;
  4.  
  5. auto unsigned char i ;
  6.  
  7. if ( )
  8.  
  9. if ( fNminus2 == value )
  10. {
  11. return 1 ;
  12. }
  13. else if ( fNminus1 == value )
  14. {
  15. return 1 ;
  16. }
  17. else if ( fN == value )
  18. {
  19. return 1 ;
  20. }
  21. {
  22. for ( i = 3 ; i < 93 ; i ++ )
  23. {
  24. fNminus2 = fNminus1 ;
  25. fNminus1 = fN ;
  26. fN = fNminus1 + fNminus2;
  27.  
  28. if ( fN == value ) return 1 ;
  29. }
  30. }
  31.  
  32. return 0 ;
  33. }

Dann können wir über den Code reden😉




Dieses Forumbeitrag kommt von Matroids Matheplanet
https://https://matheplanet.de

Die URL für dieses Forum-Thema ist:
https://https://matheplanet.de/default3.html?topic=252578=5101
Druckdatum: 2021-05-12 10:42