[C++] ciag fibbonaiego oraz sortowanie

iksigrek123
Użytkownik
Użytkownik
Posty: 12
Rejestracja: 30 sie 2011, o 19:08
Płeć: Mężczyzna
Lokalizacja: ŁDZ

[C++] ciag fibbonaiego oraz sortowanie

Post autor: iksigrek123 »

Witam ponownie!

Napisałem kod, który oblicza liczby dla ciągu Fibbonaciego i przypisuje je indeksom w tabeli jednowymiarowej. Chciałem następnie aby wartości te były posortowane przy pomocy prostego sortowania przez wstawianie. Niestety to się nie udało. Program w którym piszę poprostu wywala . Dla kodu Fibbonaciego użyłem odwołania do funkcji. Oto on:

Kod: Zaznacz cały

---------------------------------------------------------------------------------------
#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;

int fib(int n)
{
     if(n==0 || n==1){
             cout << "Liczba n musi byc liczba calkowita wieksza od 1!";
             return 1;}
             else{int a=0;
                  int b=0;
                  int c=1;
                      while (--n){
                            a = b;
                            b = c;
                            c = a+b;
                      }
                      return c;
                      }
                      
}


int main(int argc, char *argv[])
{
    
    int a,b,c,f,i,n,N;
    int tab[N];
    cout << "Podaj N jako rozmiar tablicy: N=";
    cin >> N;
    for (i=0; i<N; i++){
        cout << "Podaj n (calkowita i wieksza od 1) dla ciagu Fibbonacciego: n=";
        cin >> n;
        cout << endl;
        f=fib(n); //Wywołanie funkcji z ciągiem Fibbonaciego
        tab[i]=f;
        cout << "Tablica o indeksie "<<i<<" ma wartosc: "<<f<<" z ciagu Fibbonaciego""

";}
    cout << endl;
    cout << "Wartosci nieposortowane tablicy dla indeksu [i]: ""
";
    for(i = 0; i < N; i++){
         cout << setw(4) << "["<<i<<"]" << setw(4) << tab[i];}
         cout << endl;
         
    system("PAUSE");
    return EXIT_SUCCESS;
}
--------------------------------------------------------------------------------------------------
Ten program działa dobrze.

Poniższy program (z sortowaniem) niestety nie działa.
-------------------------------------------------------------------------------------------------
#include <cstdlib>
#include <iostream>
#include <iomanip>

using namespace std;

int fib(int n)
{
     if(n==0 || n==1){
             cout << "Liczba n musi byc liczba calkowita wieksza od 1!";
             return 1;}
             else{int a=0;
                  int b=0;
                  int c=1;
                      while (--n){
                            a = b;
                            b = c;
                            c = a+b;
                      }
                      return c;
                      }
                      
}


int main(int argc, char *argv[])
{
    
    int a,b,c,f,i,j,n,N,x;
    int tab[N];
    cout << "Podaj N jako rozmiar tablicy: N=";
    cin >> N;
    for (i=0; i<N; i++){
        cout << "Podaj n (calkowita i wieksza od 1) dla ciagu Fibbonacciego: n=";
        cin >> n;
        cout << endl;
        f=fib(n); //Wywołanie funkcji z ciągiem Fibbonaciego
        tab[i]=f;
        cout << "Tablica o indeksie "<<i<<" ma wartosc: "<<f<<" z ciagu Fibbonaciego""

";}
    cout << endl;
    cout << "Wartosci nieposortowane tablicy dla indeksu [i]: ""
";
    for(i = 0; i < N; i++){
         cout << setw(4) << "["<<i<<"]" << setw(4) << tab[i];}
         cout << endl;

    //Algorytm sortowania przez wstawianie
    
    for(j = N - 2; j >= 0; j--){
      x = tab[j];
      i = j + 1;
        while((i < N) && (x > tab[i])){
            tab[i - 1] = tab[i]; 
            i=i+1;
        }
        tab[i - 1] = x;}

      cout << "Posortowane wartosci tablicy: 
";
      for(i = 0; i < N; i++){
            cout << setw(4) << tab[i];
            cout << endl;}
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
--------------------------------------------------------------------------------------------
Podałem oba dla porównania. Prosiłbym o jakiekolwiek podpowiedzi, ponieważ faktycznym celem było napisanie kodu z odwołaniem do funkcji sort(argumenty), a nie wypisanie kodu sortowania w funkcji głównej main().

Pozdrawiam serdecznie i z góry dziękuję za pomoc.
Ostatnio zmieniony 26 lis 2011, o 11:30 przez ares41, łącznie zmieniany 1 raz.
Powód: Stosuj tagi [code][/code]. Taguj tematy - zapoznaj się z http://www.matematyka.pl/273220.htm
lukasz93a
Użytkownik
Użytkownik
Posty: 118
Rejestracja: 31 sty 2010, o 18:30
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 14 razy
Pomógł: 16 razy

[C++] ciag fibbonaiego oraz sortowanie

Post autor: lukasz93a »

Twoja funkcja powinna wyglądać następująco:

Kod: Zaznacz cały

int sort(int *tab, int N)
{
    for(int i=1; i<N; i++)
    {
        int j=i;
        int t=tab[j];
        while((j>0)&&(tab[j-1]>t))
        {
            tab[j]=tab[j-1];
            j--;
        }
        tab[j]=t;
    }
}
Napisałem kod, który oblicza liczby dla ciągu Fibbonaciego i przypisuje je indeksom w tabeli jednowymiarowej.
Nie przypisujesz liczb indeksom, tylko polom tablicy o danym indeksie. Czytając to za pierwszym razem zrozumiałem, że Twoja tablica jest postaci tab[fib(n)].
ODPOWIEDZ