odczytywanie ciagle tych samych wartosci z pliku

0

Witam!
Koduję algorytm Neh'a dla problemu szeregowania zadań na maszynach. Program ma sobie radzić z przykładami Tailarda. Pliki mają postać:

Ogólnie - w pierwszym wierszu znajduje się liczba zadan i liczba maszyn. Każda kolejna linia opisuje jedno zadanie w postaci: nr_maszyny czas_wykonywania nr_maszyny czas_wykonywania.

Ogólnie algorytm jest prosty i został już zaimplementowany. Po podaniu sciezki do pliku rozwiązuje zadanie. Prowadzący jednak chce zebrane wyniki w jednym pliku wynikowym dla 120 zadań. Plik ma mieć postać:

nazwa przykładu
permutacja
Cmax
czas obliczen
...
Łaczny czas obliczen wszystkich przykladow

Wrzuciłem więc kod w pętlę:

int main(){
    int iMach,iJobs,iTemp,iTemp2;
    string strPath;
    ifstream File;
    
    ostringstream strTemp;
	ofstream OutFile;
    double dTime=0;
    
	OutFile.open("output.txt");
	for(int k=1;k<=120;k++){
        strTemp.str("");
	    strTemp<<"dane/ta";
	    if(k<10) strTemp<<"00";
	    else if(k<100)strTemp<<'0';
		strTemp<<k<<".txt";
		strPath=strTemp.str();
		File.open(strPath.c_str());
		File >> iJobs;
    	File >> iMach;
    	{
    	CNeh Task(iJobs,iMach);
    	for(int i=0;i<iJobs;i++){
  			for(int j=0;j<iMach;j++){
                File >> iTemp;
                File >> Task.Data[i][j];
            }
        }   
        File.close();
        Task.FindSolution();
        dTime=dTime+Task.GetDouration();
        OutFile<<"ta";
   	    if(k<10) OutFile<<"00"; else if(k<100)OutFile<<'0';
   	    OutFile<<k<<" - wyniki:\n";
   	    OutFile<<"Permutacja: "<<Task.GetPermutation()<<'\n';
   	    OutFile<<"Cmax: "<<Task.GetCmax()<<'\n';
   	    OutFile<<"Czas obliczen: "<<Task.GetDouration()<<" sec\n";
		}
   	    OutFile<<"---------------------------------------------------\n";
	}
	OutFile<<"Czas wykonywania wszystkich obliczen: "<<dTime<<'\n';
	OutFile.close();
	system("PAUSE");
    return EXIT_SUCCESS;
}

Idea była taka, że:

  1. Buduję nazwę pliku do otwarcia i otwieram tenże (działa)
  2. Tworzę obiekt klasy CNeh, wykonuję obliczenia, wyniki wrzucam do przez ofstream do pliku.
  3. Niszczę obiekt Task
  4. wracam do 1.

I pojawił się pewien problem. Niezależnie od tego ile zadań ma przykład, to rozmiar obiektu Task klasy CNeh ma zawsze ten sam rozmiar (rozmiar z pierwszego przykładu).

W jaki sposób zapisać to poprawnie? Bo na razie, tak jakby, obiekt nie jest niszczony po przejsciu kazdego przebiegu petli.

Pzdr.,
Kamil

0

jestes pewien ze wszystie odczyty z pliku sie powiodly? nigdzie nie sprawdzasz, czy File::operator>>(&int) sie powiodl! a przeciez iostreamy maja te wredna ceche, ze domyslnie, jesli wystapi blad odczytu/zapisu, to od tego momentu w przod kazda operacja jest po cichu ignorowana.. jesli w petli for File>>iTemp sie wylozy, to program poleci dalej i WSZYSTKIE odczyty od tej pory beda ANULOWANE i nie beda zmieniac wartosci zmiennych! (zachowanie to mozna zmienic nakazujac strumieniowi rzucanie wyjatkow zamiast o'flag'owania sie). sprawdz koniecznie czy nie wystepuja bledy odczytu i popraw kod lub dostosuj plik wejsciowy

jezeli to nie to, to obawiam sie ze musialbys wrzucic przynajmniej czesc klasy CNeh, bo raczej w niej jest problem. poza tym, o jakim rozmiarze obiektu mowisz?

to raczej nie jest problem z destruktorem, chyba ze w CNeh masz pole typu np. nie-dynamiczne int[1024] --- wtedy faktycznie NOWY obiekt moze przypadkiem przejac wartosci poprzednika, ale to nie jest problem z destruktorem! po porstu przypadkiem obiekt zostal stworzony w dokladnie tym samym miejscu pamieci co poprzednik (patrzaj wacpan, przecie to petla jest, a obiekt na stosie utworzon) -- i problem raczej w konstruktorze, ze nie wyzerowal sobie tablicy, a zostawil smieci. NIE jest to blad, nie pisz tego konstruktora. obiekt zaraz bedzie wypelniony danymi z pliku, zerowanie NIE jest potrzebne. Ale, fakt faktem.

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