toString, compute, print ()...

Odpowiedz Nowy wątek
studentttt
2007-11-03 00:46
studentttt
0

Witam,

Musze zrobic program :) - czy ktos moze mi pomoc dostosowac to co napisalem do tresci zadania? Z gory dziekuje.

Zadanie:
W I kolumnie wypisuje element ciągu Fibonacciego an . W II kolumnie wypisuje ”true” gdy an jest parzyste, ”false” gdy nieparzyste. Prosze użyć niejawnie metody toString dla typu Boolean. W III kolumnie wypisuje a_(n+1) / an. Proszę wypisać pierwsze 50 elementów ciągu (linii). Proszę najpierw obliczyć elementy ciągu i zapisać je w tablicy - własna metoda compute, a następnie wypisać odpowiednie informacje na ekran - własna metoda print. Proszę użyć pola length dla tablicy. Proszę skorzystać tylko raz z funkcji System.out.println().
Uwagi:
Użyć typu long zamiast int.
Iloraz dwóch liczb całkowitych (typu long lub int) jest liczbą całkowitą.
Wykorzystać przeciążenie operatora ”+” dla String.

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Fibonacci 
{

    public static void main(String[] args) throws IOException 
    {
        int a = 0;
        float b = (float) 1.;
        long t[] = new long[50];
        t[0]=1;

        PrintWriter file = new PrintWriter(new FileWriter("Fibonacci.txt"));

        while(t[a]<t.length) 
        {
            System.out.println(t[a] + "\t" + (t[a]%2==0) + "\t" + b); 
            file.println(t[a] + "\t" + (t[a]%2==0) + "\t" + b); 

            //Fibonacci
            t[a] = t[1] + t[a]; 
            t[1] = t[a] - t[1];
            //a_(n+1)/a_n
            b = t[a+1]/t[a];
        }

        file.close();
    }
}

Pozostało 580 znaków

2007-11-03 10:11

Rejestracja: 13 lat temu

Ostatnio: 8 lat temu

0

proszę:

public class Fibonacci {
    String napis="0 true\n";

    void print(String arg){
        System.out.println(arg);
    }
    void compute(){
        long buf1=0;
        long buf2=1;
        long wynik;
        Boolean flaga;
        try{
        for(int i=0;i<50;i++){

            wynik=buf1+buf2;
            //System.out.println(buf1+" + "+buf2+" = "+wynik);
            buf1=buf2;
            buf2=wynik;
            if(wynik%2==0){
                flaga=true;
            }else{
                flaga=false;
            }
            napis+=wynik+" "+flaga+"\n";
        }
        }catch(Exception x){
            x.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Fibonacci f1=new Fibonacci();
        f1.compute();
        f1.print(f1.napis);
    }
}

...trafiłem do źródła wiedzy bez drogowskazu...

Pozostało 580 znaków

studenttt
2007-11-03 15:20
studenttt
0

Witam ponownie,

Dzieki za zainteresowanie Shimmi !! :)

Troche zmienilem kod - w sumie to niepotrzebnie uzylismy flag gdyz mniej wiecej to samo daje poprostu podzielenie modulo i przyrownie do zera.

Teraz mam problem jak wynik zapisac do tablicy ? Bo tylko tak moge uzyskac wartosci ktore sa mi potrzebne w trzeciej kolumnie czyli wyrazy ciagu a_(n+1)/a_n (czyli za pomoca tablic chyba bylo by to 'tablica[a+1]/tablica[a]') ??

public class Fibonacci 
{
    String napis="1\tfalse\t1\n";

    void print(String arg)
    {
        System.out.println(arg);
    }

    void compute()
    {
        long a = 0;
        long b = 1;
        long wynik;

        for(int i=0;i<8;i++)        
        {
            wynik = a + b;
            //System.out.println(a+" + "+b+" = "+wynik);
            a = b ;
            b = wynik;
            napis += wynik + "\t" + (wynik%2==0)+ "\t" + c + "\n"; 
            //System.out.println(wynik + "\t" + (wynik%2==0)+ "\t" + c + "\n");
        }
    }

    public static void main(String[] args) 
    {
        Fibonacci f1=new Fibonacci();
        f1.compute();
        f1.print(f1.napis);
    }
}

Pozostało 580 znaków

studentttt
2007-11-03 16:45
studentttt
0

Zrobilem cos takiego (kod ponizej). Niestety wyskakuje blad :(

To co wykomentowalem dziala -> System.out.println(wynik[i]/wynik[i]+ "\n"); wynik[1]/wynik[0] + "\t" + wynik[2]/wynik[1] +"\t" + wynik[3]/wynik[2] + "\n");

-> czyli dzieli kolejna wartosc w tablicy przez poprzednia.

Natomiast juz to wyrazenie:
wynik[i]/wynik[i-1] (lub tez probowalem wynik[i+1]/wynik[i])
powoduje blad :(

Jak to poprawic ? :>

public class Fibonacci 
{
    String napis="1\tfalse\t1\n";

    void print(String arg)
    {
        System.out.println(arg);
    }

    void compute()
    {
        double a = 0;
        double b = 1;
        double wynik[] = new double[10];

        for(int i=0;i<wynik.length;i++)     
        {
            wynik[i] = a + b;
            //System.out.println(a+" + "+b+" = "+wynik);
            a = b ;
            b = wynik[i];
            napis += wynik[i] + "\t" + (wynik[i]%2==0)+ "\t" + wynik[i]/wynik[i-1]+ "\n"; 
            //System.out.println(wynik[i]/wynik[i]+ "\n"); //wynik[1]/wynik[0] + "\t" + wynik[2]/wynik[1] +"\t" + wynik[3]/wynik[2] + "\n");
        }
    }

    public static void main(String[] args) 
    {
        Fibonacci f1=new Fibonacci();
        f1.compute();
        f1.print(f1.napis);
    }
}

Pozostało 580 znaków

bogdans
2007-11-03 19:23
bogdans
0

błąd jest w wyrażeniu

wynik[i]/wynik[i-1]

dla i=0
nie wiem co masz zamiar wtedy wyświetlać, zatem nie wiem co ci poradzić
pozdrawiam

Pozostało 580 znaków

studentttt
2007-11-04 15:37
studentttt
0

Witam

bogdans napisał(a)

błąd jest w wyrażeniu

wynik[i]/wynik[i-1]

dla i=0
nie wiem co masz zamiar wtedy wyświetlać, zatem nie wiem co ci poradzić
pozdrawiam

Chodzi mi o podzielenie nastepnego elementu w tablicy przez poprzedni -
powinno sie to wykonac przez:
wynik[i+1] / wynik [i].
Niestety wyskakuje blad:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at Fibonacci.compute(Fibonacci.java:32)
at Fibonacci.main(Fibonacci.java:40)

Wiec problem jest z 'wynik[i+1]' :(

Jezeli dobrze rozumiem to wyrazenie wynik[i+1] powinno wypisac kolejne elementy w tablicy oprocz poczatkowego (zerowego?) czyli (jezeli petla jest od 0) 1 element, 2 element itd.
Natomiast wyraznie wynik[i] powinno wypisac 0 element, 1 element itd. - to jest wporzadku.

Zastanawia mnie tez wynik komendy:
System.out.println(wynik[i+1] + " " +wynik[i]+ " " + wynik[i-1]+ "\n");

jezeli petla for jest od 0 to wyskakuje blad:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Fibonacci.compute(Fibonacci.java:32)
at Fibonacci.main(Fibonacci.java:40)

jezeli petla for jest od 1 to wynik pokazuje dobry (oprocz pierwszej kolumny):

0.0 1.0 0.0

0.0 2.0 1.0

0.0 3.0 2.0

0.0 5.0 3.0

0.0 8.0 5.0

0.0 13.0 8.0

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
at Fibonacci.compute(Fibonacci.java:32)
at Fibonacci.main(Fibonacci.java:40)

Pozostało 580 znaków

studentttt
2007-11-04 15:45
studentttt
0

W nawiazaniu do poprzedniego mojego postu:

W sumie to samo co przez

'wynik[i+1]/wynik[i]'

moge osiagnac przez

'wynik[i]/wynik[i-1]'

ale tylko wtedy gdy petla jest od 1, dlaczego nie od 0?:>

Pozostało 580 znaków

studenttt
2007-11-04 15:54
studenttt
0

Chociaz nie!
Nie moge zastapic 'wynik[i+1]/wynik[i]' przez 'wynik[i]/wynik[i-1]'
gdyz pierwsza wartosc w III kolumnie to "Infinity" czyli dzielenie przez 0:

1.0 false Infinity
2.0 true 2.0
3.0 false 1.5
5.0 false 1.6666666666666667
8.0 true 1.6
13.0 false 1.625
21.0 false 1.6153846153846154
34.0 true 1.619047619047619

a powinien juz tam byc wynik dzielenia 2.0/1.0 czyli 2.0
i to chce osiagniac:> ->

1.0 false 2.0
2.0 true 1.5
3.0 false 1.6666666666666667
5.0 false 1.6
8.0 true 1.625
13.0 false 1.6153846153846154
21.0 false 1.619047619047619
34.0 true ..

Pozostało 580 znaków

bogdans
2007-11-04 17:33
bogdans
0

Przeczytaj dokładniej moją odpowiedź, co chcesz dostać gdy wykonujesz dzielenie wynik[0]/wynik[-1] ?

Pozostało 580 znaków

studentttt
2007-11-04 17:41
studentttt
0
bogdans napisał(a)

Przeczytaj dokładniej moją odpowiedź, co chcesz dostać gdy wykonujesz dzielenie wynik[0]/wynik[-1] ?

nic...
chce wykonac wynik[1]/wynik[0] pozniej wynik[2]/wynik[1] itd... czyli (wynik[i+1]/wynik[i]).

Pozostało 580 znaków

bogdans
2007-11-04 17:48
bogdans
0

To jest fragment twojego kodu

        for(int i=0;i<wynik.length;i++)               
        {
            ...........
            napis += wynik[i] + "\t" + (wynik[i]%2==0)+ "\t" + wynik[i]/wynik[i-1]+ "\n"; 

Dla i=0 dzielisz wynik[0]/wynik[-1]

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0