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

statyczna lista c++

Ostatnio zmodyfikowano 2014-11-28 17:50
Autor Wiadomość
eklinci
Temat założony przez niniejszego użytkownika
statyczna lista c++
» 2014-11-28 17:00:28
oto zadanie:
Tematem ćwiczenia jest zamodelowanie zaworów (valve) połączonych szeregowo.
Klasę tę należy tak zaimplementować, aby tylko jeden zawór był  otwarty (otwarcie zaworu skutkuje zamknięciem pozostałych).
Utworzenie zaworu z opcją otwarty skutkuje zamknięciem pozostałych a defaultowo zawory tworzone są jako zamknięte.
Napisz program tak by można było dodać dowolnie wiele zaworów (należy stworzyć szablon klasy lista jednokierunkowa o bardzo ograniczonej funkcjonalności potrzebnej dla tego programu).
Main programu wygląda następująco (nie wolno go modyfikować):
*/
C/C++
#include <iostream>
using namespace std;

#include "Valve.h"
#include "Valve.h"

int main() {
   
    Valve v1;
    Valve v2( Valve::Opened );
    Valve v3( Valve::Opened );
   
    cout << "Po stworzeniu: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    v2.open();
    cout << "Po otwarciu v2: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    v3.open();
    cout << "Po otwarciu v3:  Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    v1.open();
    cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    Valve v4( Valve::Opened );
    cout << "Po dodaniu otwartego v4:  Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 )
    << " zawor v4 " << status2symbol( v4 ) << endl;
   
    v1.open();
    cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 )
    << " zawor v4 " << status2symbol( v4 ) << endl;
    Valve::clean();
}

a oto m ó j kod prosz ę o pomoc:

#include <iostream>
#include <string>

using namespace std;


template < class T >
class lista
{
private:
    struct Node
    {
        T item;
        struct Node * next;
    };
    Node * begin;
    Node * end;
public:
    int ilosc;
    lista();
    void add( T item );
    void deleteall();
    void show();
    T & operator []( int n );
};
template < class T >
lista < T >::lista()
{
    begin = end = NULL;
    ilosc = 0;
}
template < class T >
void lista < T >::add( T item )
{
    Node * add = new Node;
    add->item = item;
    add->next = NULL;
   
    if( begin == NULL )
    {
        begin = end = add;
    }
    else
    {
        end->next = add;
        end = add;
    }
    ilosc++;
}
template < class T >
void lista < T >::deleteall()
{
    Node * temp = new Node;
    temp = begin;
    while( temp )
    {
        temp = temp->next;
        delete temp;
    }
    ilosc = 0;
}
template < class T >
T & lista < T >::operator []( int n )
{
    int i = 1;
    Node * temp = new Node;
    temp = begin;
    while( temp && i != n )
    {
        temp = temp->next;
        i++;
    }
    return temp->item;
}


class Valve
{
public:
    enum { Closed, Opened };
    Valve( int s = Closed );
    friend string status2symbol( const Valve & v );
    void open();
private:
    static lista < Valve > list;
    void clean();
    int state;
};



Valve::Valve( int s )
{
    int i = 1;
    while( list.ilosc <= i )
    {
        list.state = Closed;
        i++;
    }
    state = s;
    list.add( * this );
}

void Valve::open()
{
    int i = 1;
    while( list.ilosc <= i )
    {
        list.state = Closed;
        i++;
    }
    ( * this ).state = Opened;
}
void Valve::clean()
{
    list.deleteall();
}
string status2symbol( const Valve & v )
{
    string o = "otwarty";
    string z = "zamknienty";
    if( v.state == 0 )
         return z;
    else
         return o;
   
}

int main() {
   
    Valve v1;
    Valve v2( Valve::Opened );
    Valve v3( Valve::Opened );
   
    cout << "Po stworzeniu: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    v2.open();
    cout << "Po otwarciu v2: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    v3.open();
    cout << "Po otwarciu v3:  Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    v1.open();
    cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 ) << endl;
   
    Valve v4( Valve::Opened );
    cout << "Po dodaniu otwartego v4:  Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 )
    << " zawor v4 " << status2symbol( v4 ) << endl;
   
    v1.open();
    cout << "Po otwarciu v1: Zawor v1 " << status2symbol( v1 )
    << " zawor v2 " << status2symbol( v2 )
    << " zawor v3 " << status2symbol( v3 )
    << " zawor v4 " << status2symbol( v4 ) << endl;
   
}
Jestem otwarty na krytykę, lecz proszę również o pomoc
P-121633
michal11
» 2014-11-28 17:42:33
Po pierwsze wstaw kod w znaczniki?
A po drugie to generalnie jaki masz problem ? Czy tylko szukasz kogoś do code review ?
P-121636
eklinci
Temat założony przez niniejszego użytkownika
» 2014-11-28 17:50:47
problem mam głównie z konstruktorem. Jak na przykład wstawię no niego na sam początek cout<<"A" to tak jakby program wywoływał go w nieskończoność. Mam problem bo chce żeby ten konstruktor dodawał obiekty do listy statycznej 
P-121640
« 1 »
  Strona 1 z 1