lista tablic - tablica nieskończona

0

Witam, mam za zadanie skonstruować tablice nieskończoną. Do tego celu używam klasy lista i klasy tablica.
Prosze o wskazanie mi błędu, domyslam się ze jest on gdzieś w wskaznikach z klasy lista do klasy tablica. Z góry dzięki.

oto kod :

#include <iostream>
#include <cstdlib>

using namespace std;

class tablica{
      public:
             tablica(int rozmiar);
             ~tablica();
             void dodaj_element();
             void wypisz_tablice();
             void wypisz_element(int index);
             private:
                     int* head;
                     int rozmiar;
                     };
                     
tablica::tablica(int roz){
                     roz=rozmiar;
                     head=new int[rozmiar];
                     for(int i=0;i<rozmiar;i++){
                                            head[i]=0;
                                            }
                                            }
                                            
tablica::~tablica(){
                    delete []head;
                    }
                    
void tablica::dodaj_element(){   
     int index, wartosc;
     head[index]=wartosc;
     do{
             int i=0;
             cout<<"podaj wartosc, jesli chcesz przerwac wcisnij '9'"<<endl;
             cin>>wartosc;
             head[i]=head[i+1];
             }      while(wartosc==9);
     }
  
void tablica::wypisz_tablice(){
     for(int i=0;i<rozmiar;i++){
                                        cout << " " << head[i];
                                        }
                                        cout << endl;
                                        cout << endl;
                                        }
     
void tablica::wypisz_element(int index){
     if(index<0 || index >=rozmiar){
     cout << "nie ma takeigo elementu" << endl;
     }
     else{
          cout << head[index]<< endl;
          }
          }


              
class element{
      public:
             friend class lista;
             element(int a);
             ~element();
      private:
              int wartosc;
              element *next;
              };
              
class lista{
      public:
             lista();
             ~lista();
             void dodaj_tablice(int a);
             void odczyt_tablicy();
      private:
              tablica *head;
              };
              
element::element(int a){
                     wartosc=a;
                     next=NULL;
                     }

element::~element(){
                    }
   
lista::lista(){
               head=NULL;
               }
                    
lista::~lista(){
                int i;
               tablica *tmp=head;
               tablica *tmp2=head; 
               while(tmp2!=NULL){
                                 head[i]=head[i+1];
                                 delete []head;
                                 head[i+1]=head[i];
                                 }
                                 }

void lista::dodaj_tablice(int a){
     int i;
     tablica *nowy=new tablica(a);
     nowy[i+1]=head[i];
     nowy[i]=head[i];
     }
     
     
     
void lista::odczyt_tablicy(){
     int i;
     tablica *tmp=head;
     while(tmp!=NULL){
                      cout<< tmp << " ";
                      tmp[i]=tmp[i+1];
                      }
     cout << endl; 
     }

     
int main(int argc, char *argv[]){
    lista list;
    tablica t(7);
    int c;
              while(c!=9){
                          cout << "wybierz polecenie:\n";
                          cout << "1 - dodaj element tablicy\n";
                          cout << "2 - wypisz elementy tablicy\n";
                          cin >> c;
                          
           switch(c){
                     case 1:   
                          t.dodaj_element();
                          break;
                     case 2:
                          t.wypisz_tablice();
                          break;
                     default:
                          break;
                          }
}
    system("PAUSE");
    return 0;
    
}
1

Jakiego błędu? Coś się nie kompiluje, wysypuje w trakcie działania?

0

kompiluje się, ale nie gdy chce wypisac tablice wysypuje się

0

No to debuger w dłoń! Nikt tego za ciebie nie zrobi. Nie pisz "nie umiem" tylko się naucz.

0

Chyba debuggera jeszcze nie odpaliłeś co? :P masz w konstruktorze:

tablica::tablica(int roz){
                     roz=rozmiar;

Przyjrzyj się dokładnie :P

tablica::dodaj_element - tu masz jakieś bzdury, napisz co chciałeś osiągnąć.

Klasa lista też ma błędy, ale skupmy się na tą chwilę na klasie tablica.
Klasa element ma do czegoś służyć, czy jest to ozdoba w kodzie? :P

0

niektóre rzeczy w kodzie to pozostałości z innych programów, które mieliśmy na zaliczenie (nie chcialo mi sie klepac kodu). Zdefiniowalem sobie stala rozmiar tablicy, wywalilem niepotrzebne [CIACH!] i wszystko z tablicą chodzi: dodaje, wypisuje elementy tablicy. I teraz rozumiem ze wypadaloby zbudowac klase lista, ktora ma za zadanie wskazywac wskaznikiem na kolejna tablice (jesli tej tablicy rozmiar sie skonczyl). Czyli np. jesli mam tablice 5-elementowa to: wskazuje na nia, jesli chcialbym dodac nastepny element tablicy, w ktorej mam juz 5 elementow to teraz musze jakos tak to zapisac zeby wskaznik next wskazywal na nastepna tablice, w ktorej mozna dopisac nastepnych 5 elementow i tak w kolko... Dobrze rozumuje, czy nie bardzo?;/ Jesli tak to prosilbym o podpowiedz jak to zapisac bo nie bardzo wiem;/

0

Jeżeli potrzebujesz dynamiczną tablicę to nie potrzebujesz klasy lista. Możesz (chociaż nie zawsze jest to wydajne) zarezerwować pamięć dla tablicy z zapasem. Jeżeli miejsce się skończy, to tworzysz nową tablicę większą powiedzmy 2x, kopiujesz do niej wszystkie dane, usuwasz starą i ustawiasz wskaźnik tej starej na nowy obszar.

0

Dzięki serdeczne. Wykonane :)

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