staging.inyokaproject.org

[CodeGala] Zeigt her eure Codes

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Sieht schon etwas besser aus. Allerdings sind Fibonacci-Zahlen alle positiv, also sollte man einen unsigned-Typ verwenden und wenn Du Dir vom Compiler Warnungen ausgeben lässt (-Wall), wäre Dir aufgefallen, dass der Datentyp von erg2 nicht mit dem Format %i zusammen passt.

Ghaldez

Avatar von Ghaldez

Anmeldungsdatum:
14. April 2007

Beiträge: 796

Ahh ok danke!

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Ach nee, manchmal kann die Lösung so einfach sein. Zumindest, wenn der C-Compiler bei long double genug Bits verwendet. ☺

int main(void)
{
    long double a, b, tmp;
    int i;

    a = 0;
    b = 1;

    for (i = 0; i < 100; i++) {
        tmp = b;
        b += a;
        a = tmp;
        printf("%21.0Lf %.53Lf\n", a, b / a);
    }
    return 0;
} 

lorb

Anmeldungsdatum:
6. September 2006

Beiträge: 31

++++++ Anzahl der Plus in dieser Zeile = die wievielte Fibanocci Zahl man haben moechte
->++>+<<[->[->+>+<<]>[-<+>]>[-<+>]<<<]>>.
[-]++++++++++.

und das ganze gibt dann das Zeichen mit dem ASCII-code der entsprechenden Zahl aus.
Und bei Brainfuck hoert sichs leider schon bei 256 auf und dann is ueberlauf : (
Aber scheint mit zumindest kuerzer zu sein als alles andere hier gepostete 😛

edit: wers nicht kennt, das ist Brainfuck
edit2: die letzte zeile hat nur kosmetische zwecke

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Mal abgesehen davon, dass das etwas weit von der Aufgabenstellung entfernt ist, funktioniert's nicht. Das gibt die Bytewerte 13 und 10 aus.

lorb

Anmeldungsdatum:
6. September 2006

Beiträge: 31

Na es rechnet Fibanocci Zahlen aus .. und wenn man bei der zweiten 1 ( die 0 und 1 davor lass ich mal weg ) beginnt zu zaehlen dann ist 13 die sechste zahl .. mach ein + mehr in der ersten zeile und du bekommst 21
und 10 ist wie schone rwaent nur kosmetisch .. das is naemlich ein linefeed weils sonst in der konsole nicht so toll aussieht
.. ja ich geb zu es erfuellt nicht ganz die gestellte aufgabe .. ist aber auch ned ganz leicht zu erfuellen in BF

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

Scherzkeks, man sieht auf der Konsole gar nichts, das wird auch durch den Zeilenvorschub nicht schöner. Wenn Du's in BF nicht hinbekommst die Aufgabe zu lösen, oder zumindest Die Fibonacci-Zahlen bis zur 100. lesbar aus zu geben, dann nimm besser eine andere Sprache. 🙄

Stefan_Schmitz

Avatar von Stefan_Schmitz

Anmeldungsdatum:
7. November 2007

Beiträge: 433

Gerade beim Fernsehen zusammengepuzzelt (Die Glorreichen Sieben an einem Neujahrsnachmittag ... IDEAL!) und mit Rücksicht auf die Lesbarkeit der Ausgabe. Ich habe aber nicht nach i (bei mir der Zähler) sortiert, sondern nach einer Zahlenhöchstgrenze.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#! /usr/bin/python
#-*- coding: utf-8 -*-

oben=int(raw_input(" \n \n Obergrenze :"))
weiter=True
lo=0
hi=1
ad=lo+hi
i=1

print " \n \n ", lo, hi, ad,

while weiter:
    
    if ad >= oben:
        weiter=False
    else:
        lo=hi
        hi=ad
        ad=lo+hi
        i=i+1
    print ad,

else:

    print " \n \n Die Reihe endet nach ",i," Zahlen  bei ", ad," \n \n "

e1bart0 Team-Icon

Avatar von e1bart0

Anmeldungsdatum:
12. Mai 2007

Beiträge: 927

@Stefan Schmitz: Man sollte auch noch die Annäherung an den goldenen Schnitt berechen...

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@Stefan Schmitz: Der else-Zweig wird immer ausgeführt, also kann man das else auch weglassen und das print auch einfach nach der while-Schleife ausführen. Statt weiter hätte man die Bedingung zum Abbruch doch auch direkt in die while-Schleife schreiben können!?

Und es könnte in Python etwas kürzer ausgedrückt werden. Ohne weiter, ad, und das manuelle erhöhen von i.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import itertools

def main():
    obergrenze = int(raw_input('Obergrenze: '))
    a, b = 0, 1
    for i in itertools.count(1):
        if b >= obergrenze:
            break
        a, b = b, a + b
        print b,
    
    print 'Die Reihe endet nach %d Zahlen bei %d.' % (i, b)

Stefan_Schmitz

Avatar von Stefan_Schmitz

Anmeldungsdatum:
7. November 2007

Beiträge: 433

Ah, danke. Das Programm bringe ich keinesfalls an's Laufen: ich musste folgende Änderungen vornehmen:

#! /usr/bin/python
#-*- coding: utf-8 -*-

# Fibonacci Folge nach uu.de

import itertools as itt

anz=int(raw_input('\n \n \n Anzahl Fibonacci Zahlen: '))
a, b= 0, 1

for i in itt.count(1):
    if i >= anz:
        break
    a, b= b, a+b
    print b,

print '\n \n \n Die Reihe endet nach %d Zahlen bei %d' %(i, b)

Abgesehen von den kosmetischen Änderungen, machte def main (): Probleme; nicht nur, dass ich nicht weis, was das tun oder helfen soll, es sorgt auch dafür, dass der darauf folgende Teil nicht gelesen/bearbeitet wird. Um darauf zu kommen, musste ich erstmal die Zeile mit der Abfrage nach der Anzahl der Zahlen (iter-cycles) VOR def main (): ziehen. Erst DANACH kam die Input Abfrage auf den Schirm...

Ansonsten: Besten Dank! Wieder was gelernt.

BadBoy

Avatar von BadBoy

Anmeldungsdatum:
25. Oktober 2007

Beiträge: 479

Stefan Schmitz schrieb:

Abgesehen von den kosmetischen Änderungen, machte def main (): Probleme; nicht nur, dass ich nicht weis, was das tun oder helfen soll, es sorgt auch dafür, dass der darauf folgende Teil nicht gelesen/bearbeitet wird. Um darauf zu kommen, musste ich erstmal die Zeile mit der Abfrage nach der Anzahl der Zahlen (iter-cycles) VOR def main (): ziehen. Erst DANACH kam die Input Abfrage auf den Schirm...

und wenn du jetzt noch Python könntest, wüsstest du das 'def' eine Funktion definiert. Da diese aber nirgends aufgerufen wird, passiert auch nichts.

Ein einfaches "main()" am Ende der Datei hätte da Abhilfe geschaffen. 😉

Stefan_Schmitz

Avatar von Stefan_Schmitz

Anmeldungsdatum:
7. November 2007

Beiträge: 433

naja, dass def für define steht, habe ich mir schon zusammenpopeln können - es war nur hier falsch gesetzt (kein Ende) und/oder unnötig, oder?

Ansonsten bin ich ganz zufrieden, wenn ich Korrekturen bekomme, die ich nachvollziehen kann. So lerne ich ja dazu ☺

BadBoy

Avatar von BadBoy

Anmeldungsdatum:
25. Oktober 2007

Beiträge: 479

Stefan Schmitz schrieb:

naja, dass def für define steht, habe ich mir schon zusammenpopeln können - es war nur hier falsch gesetzt (kein Ende) und/oder unnötig, oder?

😉 Python interpretiert den Code anhand der Einrückung, deshalb ist ein Keyword, um das Funktionsende anzuzeigen, unnötig.

gkuhl

Avatar von gkuhl

Anmeldungsdatum:
1. Dezember 2007

Beiträge: 99

Übrigens: Die Fibonacci Folge ist auch das erste Beispiel für eine Funktion in den offiziellen Python Tutorials (2.6.1, 3.0).

Das Beispiel für Python 2.6.1:

1
2
3
4
5
6
7
>>> def fib(n):    # write Fibonacci series up to n
...     """Print a Fibonacci series up to n."""
...     a, b = 0, 1
...     while b < n:
...         print b,
...         a, b = b, a+b
...

Und für Python 3000:

1
2
3
4
5
6
7
8
>>> def fib(n):    # write Fibonacci series up to n
...     """Print a Fibonacci series up to n."""
...     a, b = 0, 1
...     while b < n:
...         print(b, end=' ')
...         a, b = b, a+b
...     print()
...

Da lohnt es sicherlich auch mal reinzuschauen. 😉
gkuhl