Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

"Obsadzenie" co drugiej pozycji na liście

Ostatnio zmodyfikowano 2014-03-10 20:15
Autor Wiadomość
Adamoss
Temat założony przez niniejszego użytkownika
"Obsadzenie" co drugiej pozycji na liście
» 2014-03-06 23:16:48
Witam,
mam problem z listą w C++. Mam do zaimplementowania algorytm szeregowania zadań na dwóch maszynach, gdzie tylko na pierwszej występują dziury(wyłączenie maszyny na konserwację) o stałej długości. Przerwy pomiędzy dziurami mogą mieć dowolną wartość. Algorytm ma zwrócić rozwiązanie z najmniejszym opóźnieniem - stąd jedna ze zmiennych to deadline. Wpadłem na taki pomysł aby maszyny były reprezentowane przez listy obiektów. Obiektów będą dwa typy - dziury i zadania. Na poniższym kodzie znajduje się moja próba umiejscowienia dziur na pierwszej maszynie. Chciałbym aby dziury zajmowały co drugi indeks czyli 0,2,4,6... itd. Niech pozostałe "wolne" indeksy będą dla zadań. Oczywiście może być tak że zadanie nie zmieści się w którąś z przerw pomiędzy dziurami - tutaj chciałem dać ifa, o błędnej instancji.
Reasumując:
Czy jest możliwe wstawienie obiektów na co drugie miejsca na liście, a potem wstawienie kolejnych w przerwy?
Drugie pytanie, czy będzie możliwe przeprowadzenie wszystkich możliwych permutacji obiektów-zdań bez "dotykania" dziur? Zastosuję algorytm brue force, ale zoptymalizuję go poprzez dodanie ograniczenia górnego i dolnego.
Program kompiluje ale wyrzuca śmieci z pamięci, nie wiem gdzie leży przyczyna, proszę o pomoc ;>
C/C++
#include <iostream>
#include <string>
#include <list>
#include <fstream>
#include <cstddef>
using namespace std;
class Zadanie
{
public:
    int index, czas_wyk, deadline, okres;
    bool czy_zadanie;
    Zadanie( int czas_wyk, int okres ) { }
    Zadanie( int index, int okres, int czas_wyk, int deadline, bool czy_zadanie ) { }
};

int main()
{
    int index, czas_wyk, deadline, okres;
    bool czy_zadanie;
    list < Zadanie >::iterator i;
    list < Zadanie > M1;
    list < Zadanie > M2;
    int q = 0;
    i = M1.begin();
    while( q != 3 )
    {
        cin >> czas_wyk >> okres;
        czy_zadanie = false;
        Zadanie * dziura = new Zadanie( czas_wyk, okres );
        //M1.push_back(*dziura);
        M1.insert( i, * dziura );
        i++;
        i++;
        q++;
    }
    for( list < Zadanie >::iterator iter = M1.begin(); iter != M1.end(); ++iter )
    {
        cout << iter->czas_wyk << " " << iter->okres << endl;
    }
    cout << M1.size();
   
   
    return 0;
}
P-105787
pekfos
» 2014-03-07 08:42:11
Czy jest możliwe wstawienie obiektów na co drugie miejsca na liście, a potem wstawienie kolejnych w przerwy?
Tak.

Program kompiluje ale wyrzuca śmieci z pamięci, nie wiem gdzie leży przyczyna
Nie nadajesz wartości składowym klasy Zadanie.

C/C++
Zadanie * dziura = new Zadanie( czas_wyk, okres );
//M1.push_back(*dziura);
M1.insert( i, * dziura );
Pamięć tak tu cieknie, że zaraz zalejesz sąsiadów na dole.
P-105790
Monika90
» 2014-03-07 10:05:48
Oprócz tego co Ci napisał pekfos, to wstawianie do listy też jest błędne. Ponieważ lista jest pusta, to i jest równe end(), wstawianie do listy nie unieważnia iteratorów, więc po insert i nadal jest równe end(), a ty wtedy inkrementujesz i - to jest niezdefiniowane zachowanie.
P-105792
Adamoss
Temat założony przez niniejszego użytkownika
» 2014-03-10 20:15:03
Czuję się jak Polska we wrześniu 1939 ;>
http://i1.memy.pl/obrazki/8186868893_.jpg
P-106046
« 1 »
  Strona 1 z 1