Saving/loading data from file for calculations to calculate big number factorial

Michał Source

This is my homework. I'm working on calculating factorial using arrays, and homework is to save/load data to file(for calculations) if array size is exceeded(array size is given by user). I'm having problem with this implementation because output in my file is always some spaces and 0, does anyone spot what is wrong with it?

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;

void zapis(int* tab, int i,  int wielkosc, int wrzut){ 
    if(i<wielkosc){                                     
    tab[i]=wrzut;   
    }else{
        unsigned long lokalizacja=0;
        ifstream odczyt;
        odczyt.open("silnia.txt");
        if(odczyt.is_open()){   

            for(int z=0;z<i-wielkosc;z++){
                string pass;
                getline(odczyt,pass);
                cout<<"z to : "<<z<<endl;           
            }

            lokalizacja = odczyt.tellg();
            cout<<"lokalizacja to "<<lokalizacja<<endl;;
            odczyt.close();
            }
        ofstream zapis;
        zapis.open("silnia.txt");
        long pozycja = zapis.tellp();
        cout<<"pozycja to "<<pozycja<<endl;
        zapis.seekp(pozycja+lokalizacja);
        zapis << wrzut << "\n";
        zapis.close();
    };

};

int odczyt(int * tab, int i, int wielkosc){
    int wyjscie = 0;
    if(i<wielkosc){                                     //wielkosc to wielkosc tablicy a wrzut to to co wrzucamy
    wyjscie = tab[i];   
    }else{
        ifstream odczyt;
        odczyt.open("silnia.txt");
        string kopia;
        int x = 0;
        while(x<=wielkosc-i){

        getline(odczyt,kopia);
        istringstream Converter(kopia);
        Converter >> wyjscie;
        x++;
        }
        odczyt.close();

    }
    return wyjscie;
};


void silnia_z_tablicy(int n, int wielkosc) {

    int *tab;
    if (n == 0) cout << "1";

    else {

        tab = new int[wielkosc];
        int wynik_mnozenia = 0;
        tab[0] = 1;
        int reszta = 0;
        int indeks = 1;
        for (int i=1; i<=n; i++) {
            for (int j = 0; j < indeks; j++) {
                int z=0;
                wynik_mnozenia = i*odczyt(tab,j,wielkosc) + reszta;
                cout<<wynik_mnozenia<<" test \n";
                zapis(tab,j,wielkosc,wynik_mnozenia % 10);
                reszta = wynik_mnozenia / 10;
                }
            while (reszta > 0) {
                zapis(tab,indeks,wielkosc,reszta % 10);
                reszta = reszta / 10;
                indeks++;
                }
            }
        for (int i = indeks - 1; i >= 0; i--) {
            cout << odczyt(tab,i,wielkosc);
            cout << tab[i];
            }
            cout<<"Tablica to:"<<endl;
            for (int i = indeks - 1; i >= 0; i--) {
            cout << tab[i];
            }
    }
}

int main() {
    int n,wielkoscTab;
    while (true) {
        cout << "Podaj liczbe dla ktorej policzyc silnie, wpisz -1 by wyjsc z programu:" << endl;
        cin >> n;
        if (n >= 0) {

            cout << "Silnia z " << n << " to: ";
            silnia_z_tablicy(n, 3);
            cout << endl;
        }
        else {
            cout << "Program zostal zakonczony.";
            break;
        }
    }
    return 0;
}
carraysalgorithmfilefactorial

Answers

comments powered by Disqus