ďťż

Ładny brzuch

format danych wejściowych:
N K
{
i p[i] pmin[i] k[i] n[i] {prec[i]}
}
gdzie:N -liczba zadań, K -dostepne środki, i -numer zadania, p[i] -czas wykonywania zadania, pmin[i] - min czas wykonania zadania, k[i] -koszt przyspieszenia o 1, n[i] -liczba poprzedników zadania, {prec[i]} -nmery poprzedników zadania.
np:
3 5
1 105 100 1 0
2 205 200 2 1 1
3 305 302 5 2 1 2

póki co chciałem tylko wczytać dane do struktur Zadanie, i stworzyć vector tych zadań, problem w tym że program się wyłącza, gdy ze struktury Zadanie usune pole "vector <Zadanie> pop"(chce by każde zadanie miało vector swoich poprzedników co ułatwi późniejsze obliczenia), program działa poprawnie. Podejrzewam że coś z pamięcią jest nie tak.
#include <cstdlib> #include <iostream> #include <queue> #include <fstream> #include <vector> #include<string> using namespace std; //definicja zadania: struct Zadanie { int nr; int czas; int czas_min; int koszt; int l_pop; int tab[]; vector <Zadanie> pop; }; void wypelnij_kolejke(Zadanie zad); //funkcja uzupełnia vector poprzedników int size=0; int kwota=0; //size-liczba zadań, kwota-środki na modernizacje vector <Zadanie> tab_zadan; int main() { char nazwa[50]; cout<<"podaj nazwe pliku: "; cin.getline(nazwa,50); ifstream Odczyt; ofstream Zapis; Zapis.open("wynik.txt"); Odczyt.open(nazwa); if(!Odczyt.is_open()) { cout<<"otwarcie pliku "<<nazwa<<" nie powiodlo sie.\n"; exit(EXIT_FAILURE); } Odczyt>>size>>kwota; Zadanie tmp; for(int i=0;i<size;i++) { Odczyt>>tmp.nr>> tmp.czas>> tmp.czas_min>> tmp.koszt>> tmp.l_pop; for(int j=0;j<tmp.l_pop;j++) //wczytujemy poprzedników do tablicy { tmp.tab[tmp.l_pop]; Odczyt>>tmp.tab[j]; cout<<tmp.tab[j]<<" "<<endl; } wypelnij_kolejke(tmp); tab_zadan.push_back(tmp); //dodajemy wczytane zadanie do vectora } Odczyt.close(); // for(int i=0;i<tab_zadan.size();i++) // cout<<tab_zadan[i].nr<<endl; system("PAUSE"); return(0); } void wypelnij_kolejke(Zadanie zad) { vector <Zadanie>::iterator indeks=tab_zadan.begin(); for(int j=0;j<zad.l_pop;j++) //wczytujemy poprzedników do tablicy { int nr_pop=zad.tab[j]; //numer poprzednika indeks+=nr_pop-1; // wskazuje na n-1 zadanie o numerze n zad.pop.push_back(*indeks); } }



struct Zadanie { int nr; int czas; int czas_min; int koszt; int l_pop; int tab[]; vector <Zadanie> pop; };
Jeżeli chciałbyś mieć dostęp do poprzednich zadań, to zamiast tego vectora, którego próbowałeś zadeklarować w strukturze, lepiej użyj wskaźników - utworzysz wtedy listę (którą będziesz musiał sam zaimplementować, ew. możesz w mainie utworzyć list<Zadania> lista - kolejne zadanie dodajesz na końcu lub początku listy, a po takiej liście poruszasz się iteratorami). Bo mi się wydaje, że kontenery mogą obsługiwać już zdefiniowane, gotowe typy.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •