lista tablic - tablica nieskończona

Odpowiedz Nowy wątek
2011-12-27 16:23

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

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;

}
edytowany 1x, ostatnio: madmike, 2011-12-27 17:25
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej." - Albert Einstein - Sarrus 2011-12-28 08:03

Pozostało 580 znaków

2011-12-27 18:03

Rejestracja: 11 lat temu

Ostatnio: 6 lat temu

1

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


Potrzebujesz programy do szkoły/na zaliczenie? Pomocy podczas kolosa lub egzaminu?
Zamów go!

http://proogramy.c0.pl

Pozostało 580 znaków

2011-12-27 18:09

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

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

Pozostało 580 znaków

2011-12-27 23:58
Moderator

Rejestracja: 16 lat temu

Ostatnio: 6 godzin temu

0

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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2011-12-28 08:43

Rejestracja: 8 lat temu

Ostatnio: 10 godzin temu

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

edytowany 3x, ostatnio: Sarrus, 2011-12-28 09:34

Pozostało 580 znaków

2011-12-28 11:55

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

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 pierdoly 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;/

Pozostało 580 znaków

2011-12-28 13:15

Rejestracja: 8 lat temu

Ostatnio: 10 godzin temu

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.

Pozostało 580 znaków

2011-12-28 15:47

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

Dzięki serdeczne. Wykonane :)

Pozostało 580 znaków

Odpowiedz

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