Strona Główna     FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy


Poprzedni temat :: Następny temat
[C++] Ciąg Fibonacciego
Autor Wiadomość
nebeu 
Moderator



Pomógł: 15 razy
Skąd: Radom
Wysłany: 2006-10-25, 21:22   

anakin_17 napisał/a:
Alien: ten algorytm na liczenie elementów ciagu fibbonaciego jest chyba najgorszy z możliwych, dlatego radze Ci jeszcze poszukac ;)

Jest wiele sposobów na napisanie jakiejś rzeczy. Jedne pomysły są lepsze inne gorsze, ale za to efekt ten sam. Nie każdy od razu programuje super. Trzeba się uczyć na błędach. Jeżeli tak uważasz to napisz tutaj swoją wersję.
 
 
   
anakin_17
Gość
Wysłany: 2006-11-26, 21:06   

sorry ze dopiero teraz ale zapomniałem o Tym poście i teraz dopiero przypadkiem trafiłem tu i coś mi sie ten temat skojrzył :)
Oczywiście nie miałem zamiaru nikogo tamtą wypowiedzia urazić(jeżeli to zrobiłem)
ten kodzik pisałem dość dawno jako rozwiązanie jakiegoś zadania:
Kod:

#include <cstdio>


struct matrix{
    long long M [2][2];
};

void mno( matrix& A, matrix& B)
{
    matrix temp;
    for(int i = 0 ; i < 2 ; ++i ){
        for(int j = 0 ; j < 2 ; ++j ){
            temp.M[i][j] = ( A.M[i][0] * B.M[0][j] + A.M[i][1] * B.M[1][j] ) ;
        }
    }
    A = temp;
}

int pot( int n )
{

matrix d,A;
    A.M[0][0] = A.M[0][1] = A.M[1][0] = 1;
    A.M[1][1] = 0;

    d.M[0][0] = d.M[0][1] = d.M[1][0] =  1;
    d.M[1][1] =  0;

int q;
    while(true){
        if( n == 0 ) break;

      q = n&1;
      n>>=1;
      if( q != 1){
          mno(A,A);
          continue;
      }
      mno(d,A);


      mno(A,A);
    }

    return d.M[0][1];
}


int main()
{
    int n;
    scanf("%u",&n);
    printf("%d",pot(n-1));

    return 0;
}
 
   
anakin_17 

Wysłany: 2006-11-26, 21:47   

mała zmiana zeby było "lepiej"

Kod:

#include <cstdio>


struct matrix{
    long long M [2][2];
};

void mno( matrix& A, matrix& B)
{
    matrix temp;
    for(int i = 0 ; i < 2 ; ++i ){
        for(int j = 0 ; j < 2 ; ++j ){
            temp.M[i][j] = ( A.M[i][0] * B.M[0][j] + A.M[i][1] * B.M[1][j] ) ;
        }
    }
    A = temp;
}

int pot( int n )
{

matrix d,A;
    A.M[0][0] = A.M[0][1] = A.M[1][0] = 1;
    A.M[1][1] = 0;

    d.M[0][0] = d.M[0][1] = d.M[1][0] =  1;
    d.M[1][1] =  0;

int q;
    while(n){
       
      q = n&1;
      n>>=1;
      if( q != 1){
          mno(A,A);
          continue;
      }
      mno(d,A);
      mno(A,A);
    }

    return d.M[0][1];
}


int main()
{
    int n;
    scanf("%u",&n);
    printf("%d",pot(n-1));

    return 0;
}


//juz zarejestrowany, witam wszystkich ;)
 
 
   
jon
Gość
Wysłany: 2007-03-18, 21:21   c++

Obliczanie n-tego wyrazu ciągu Fibonacciego
- użytkownik podaje n-ty wyraz ciągu z klawiatury
- program dokonuje obliczeń i wyświetla wartość dla wskazanego wyrazu ciągu przez użytkownika oraz umożliwienie wykonania powtórnie całej operacji
jak to zrobic?? w c++
 
   
anakin_17 

Wysłany: 2007-03-19, 18:34   

mozesz skorzystac z implementacji algorytmu obliczającej n-ty wyraz ciagu w moim poprzednim poście ... musisz jeszcze tylko w funkcji main dodac jeszcze jedną pętle umozliwiającą userowi wpisanie większej liczby szukanych wyrazów
 
 
   
jon
Gość
  Wysłany: 2007-03-20, 00:21   

a czy mogl bym dostac przepis ?? jak cos z gory jestem wdzieczny .........
 
   
xyz
Gość
Wysłany: 2007-03-20, 14:40   

Kod:

#include <stdio.h>
#include <stdlib.h>
int fibonaci(int fib);
int main(int argc, char *argv[])
{
  int ktora;
  long wynik;
 
  puts("Podaj ktora liczbe fibonacciego chcesz otrzymac");
  scanf("%d",&ktora);
  wynik=fibonaci(ktora);
  printf("Licba %d z ciagu to %d",ktora,wynik);
 
  system("PAUSE");   
  return 0;
}
int fibonaci(int fib){
    long wynik;
    long fiba=1;
    long fibb=1;
    int i=2;
    if(fib==1 || fib==0)
    return 1;
     else
       {
           while(i<fib){
           wynik=fiba+fibb;
           fiba=fibb;
           fibb=wynik;
           i++;
           }
           }
           return wynik;
           }


to bardzo okrutne i niedobre rozwiazanie pod wzgledem optymalizacji:) ale rekurencja ta pokazuje jak wlasnie moze pozerac czas i wszystko lepszy jest iteracyjny algorytm
 
   
jon
Gość
Wysłany: 2007-03-21, 11:10   

xyz wielkie dzieki jestes wporzadku :wink: :)
 
   
Matt
Gość
Wysłany: 2007-06-07, 18:38   

Mam napisać program do obliczania n-tego wyrazu ciągu Fibonacciego. Napisałem taki:

Kod:

#include <iostream>
using namespace std;

int main()
{
    int n, s1=1, s2=1,;
   
    cout <<"Ktory wyraz ciagu Fibonacciego podac: ";
    cin >> n;
    cin.ignore();
    n=n/2;
   
    while (n>0)
    {
      s2=s2+s1;
      s1=s1+s2;
      n--;
      if(n==1)
      cout <<"\nTen wyraz to "<< s1;
    }
   
    getchar();
    return 0;
}


Co o nim sądzicie?
 
   
Ferox
Gość
Wysłany: 2009-03-13, 20:27   Przy użyciu tablicy.

#include <iostream>
using namespace std;

long long F[50];

int main()
{
F[0]=0;
F[1]=1;
int n;
for(n=2;n<50;n++)
{F[n]=F[n-1]+F[n-2];}

for(n=0;n<50;n++)
{cout <<"Pozycja numer: "<<n<<" - "<<F[n]<<endl;}

system("pause");
}
 
   
maniek910


Skąd: Kalisz
Wysłany: 2011-08-21, 10:41   

Kod:
/*Program wyświetla kolejne wyrazy ciągu fibonaciego */

#include <iostream>

using namespace std;

int const n=32;

int main()
{
    int tab[n],p;
    tab[0]=0;
    tab[1]=1;
    cout << "podaj ile wyrazow ciagu Fibonaiego chcesz pokazac" << endl;
    cin >> p;
   
    for(int i=2;i<p;i++){
            tab[i]=tab[i-1]+tab[i-2];
                                     }
    for(int i=0;i<p;i++)cout << tab[i] << " " ;
   
   
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
_________________
 
   
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group - manga
system walidacji dla gości opracował Petermechanic
Forum komputerowe
Strona wygenerowana w 0,1 sekundy. Zapytań do SQL: 9