Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Problemfälle bei Fibonacci-Funktion behandeln
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Problemfälle bei Fibonacci-Funktion behandeln
JamesNguyen
Aktiv Letzter Besuch: im letzten Quartal
Dabei seit: 08.11.2020
Mitteilungen: 187
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2021-02-26


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.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
viertel
Senior Letzter Besuch: im letzten Quartal
Dabei seit: 04.03.2003
Mitteilungen: 27783
Wohnort: Hessen
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2021-02-27


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😉


-----------------
Bild



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
JamesNguyen hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]