Niepotrzebna funkcja rozmiar?

2011-04-24 22:10

Rejestracja: 9 lat temu

Ostatnio: 21 godzin temu

0

Witam! Na wstępie chciałbym wszystkim życzyć Wesołych świąt!
Wracając do tematu. W znalezionym w internecie programie (baza danych w c++) natknąłem się na funkcję:

 int rozmiar(char *in)
{
    string model , marka;
    int rok , numer;
    double cena;

    ifstream plik;
    plik.open(in);
    int rozm = 0;

    while(!plik.eof())
    {
        plik>>numer;
        plik>>marka;
        plik>>model;
        plik>>rok;
        plik>>cena;

        rozm += 1;
    }

    plik.close();
    return rozm;
}

O ile dobrze widzę ma ona za zadanie obliczyć ilość struktur w bazie?

Jej zastosowanie:

 case 2:
        {

            int ile;
            cout<<"Ile samochodow chcesz dopisac do bazy ?\n";
            cin>>ile;   

            int roz = rozmiar(argv[1])+ile-1;
            int rozm = rozmiar(argv[1])-1;

            Samochod *s = new Samochod [roz];
            zpliku(argv[1],s,rozm);

            for(int i=rozm;i<roz;++i)
            {
                s[i].numer = i+1;
                cout<<"Podaj marke :\n";
                cin>>s[i].marka;
                cout<<"Podaj model :\n";
                cin>>s[i].model;
                cout<<"Podaj rok produkcji :\n";
                cin>>s[i].rok;
                cout<<"Podaj cene :\n";
                cin>>s[i].cena;
            }

            ofstream plik;
            plik.open(argv[1]);
            for(int i=0;i<roz;++i)
            {
                plik<<s[i].numer<<endl;
                plik<<s[i].marka<<endl;
                plik<<s[i].model<<endl;
                plik<<s[i].rok<<endl;
                plik<<s[i].cena<<endl;
                plik<<"\n\n";
            }
            plik.close();
            delete [] s;
            break;
        }

Czy można pozbyć się tej funkcji i jakoś inaczej rozwiązać ten problem? Jak widać w case baza jest ponownie odczytywana, chce się tego pozbyć w celu optymalizacji programu. Jakieś pomysły? Jeśli nie istnieje taka możliwość to proszę o wytłumaczenie dlaczego w funkcji ponownie zdefiniowano poszczegolne typy i jak to działa.

edytowany 1x, ostatnio: Langol, 2011-04-24 22:52

Pozostało 580 znaków

2011-04-24 23:05

Rejestracja: 9 lat temu

Ostatnio: 6 lat temu

0

Po pierwsze, rozmiar wołane jest raz, a potem drugi raz w kolejnej linijce, co już jest idiotyczne. Po drugie, nie musisz znać rozmiaru, tablicę wystarczy zastąpić jakimś vectorem, czy co tam jest w cpp i dokładać do niego, aż plik się skończy. Po trzecie, rozmiar można zapisać na początku pliku, jeśli do czegoś ma się przydać.

edytowany 1x, ostatnio: iooi, 2011-04-24 23:06

Pozostało 580 znaków

2011-04-25 00:38

Rejestracja: 9 lat temu

Ostatnio: 21 godzin temu

0

Pozbyłem się drugiego wywołania funkcji rozmiar i wygląda to tak:

int rozm = rozmiar(argv[1])-1;
int roz = rozm +ile ;

Resztę zostawię chyba tak jak jest :) Bo nie chcę się zbytnio zagłębiać w vectory.

edytowany 1x, ostatnio: Langol, 2011-04-25 00:44

Pozostało 580 znaków

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