easyyu @ 04.07.2008. 18:37
Jednostavno se patim vec par dana nikako ne mogu da skontam gde gresim..jasno mi je da negde "ubijem adrese" u koje stvaljam podatke ali mi nije jasno gde.
Rec je o generickim pokazivacima, koje pri probi pokucavam da konvertujem u pokazivace na int!
Zadatak je DEK (deque) ali u mix-u sa stekom..znaci stvljam element na kraj leve i desne strane deka, citam sa leve i desne (sa vrha) (poslednji koji sam stavio) i isto tako sa leve i desne strane vrsim skidanje sa vrha ("smanjivanje za jedan").
Evo i koda:
To je header datoteka.
Dalje..ide cpp datoteka gde definisem klasu:
I evo i main deo programa koji ne znam gde gresim:
Ono sto primecujem da se negde gube adrese pokazivaca koje stavljam metodom PushL.
Gde gresim?
Ako nije nekom tesko da me ispravi i napise itn main() tacno!
Inace ukoliko je privatni element u klasi Spregdek NE pok za void vec samo obican int tad mi sve lepo radi...sto znaci da je klasa lepo i ispavno definisana.
Stoga problem je samo u inr main()-u
@Moderatorima:Ako je ovo za sekciju ZA POCETNIKE..premestite temu tamo!
Hvala!
Rec je o generickim pokazivacima, koje pri probi pokucavam da konvertujem u pokazivace na int!
Zadatak je DEK (deque) ali u mix-u sa stekom..znaci stvljam element na kraj leve i desne strane deka, citam sa leve i desne (sa vrha) (poslednji koji sam stavio) i isto tako sa leve i desne strane vrsim skidanje sa vrha ("smanjivanje za jedan").
Evo i koda:
Code:
#ifndef SPREGDEK_H
#define SPREGDEK_H
#include<iostream.h>
#include<conio.h>
#define MAX 5
typedef struct Elem{
void *el;
struct Elem *levi,*desni;
}Elem;
class Spregdek{
Elem *lvrh,*dvrh;
public:
Spregdek():lvrh(NULL),dvrh(NULL){}
Spregdek(const Spregdek &);
~Spregdek(){lvrh=dvrh=NULL;}
void PushL(void *);
void PopL();
void *TopL();
void PushD(void *);
void PopD();
void *TopD();
Spregdek &operator=(const Spregdek &r);
int Empty(){
if(lvrh==NULL&&dvrh==NULL){
cout<<"Dek je prazan!!!n";
return 1;
}else return 0;
}
};
#endif;
#ifndef SPREGDEK_H
#define SPREGDEK_H
#include<iostream.h>
#include<conio.h>
#define MAX 5
typedef struct Elem{
void *el;
struct Elem *levi,*desni;
}Elem;
class Spregdek{
Elem *lvrh,*dvrh;
public:
Spregdek():lvrh(NULL),dvrh(NULL){}
Spregdek(const Spregdek &);
~Spregdek(){lvrh=dvrh=NULL;}
void PushL(void *);
void PopL();
void *TopL();
void PushD(void *);
void PopD();
void *TopD();
Spregdek &operator=(const Spregdek &r);
int Empty(){
if(lvrh==NULL&&dvrh==NULL){
cout<<"Dek je prazan!!!n";
return 1;
}else return 0;
}
};
#endif;
To je header datoteka.
Dalje..ide cpp datoteka gde definisem klasu:
Code:
#include"Spregdek.h"
//Spregdek::Spregdek(const Spregdek &r){}
void Spregdek::PushL(void *elem){
Elem *novi=new Elem;
if(Empty()){
novi->el=elem;
lvrh=dvrh=novi;
novi->levi=NULL;
novi->desni=NULL;
return;
}else{
novi->el=elem;
lvrh->levi=novi;
novi->levi=NULL;
novi->desni=lvrh;
lvrh=novi;
return;
}
}
void Spregdek::PopL(){
if(Empty()) return;
Elem *temp=lvrh;
if(temp->desni!=NULL){
lvrh=lvrh->desni;
delete temp;
lvrh->levi=NULL;
}else{
if(lvrh==dvrh){
cout<<"Ispraznio si DEK s leva nadesno!n";
cout<<"Dalje...n";
getche();
return;
}
}
}
void *Spregdek::TopL(){
if(Empty()) return 0;
return lvrh->el;
}
void Spregdek::PushD(void *elem){
Elem *novi=new Elem;
novi->desni=NULL;
novi->el=elem;
if(Empty()){
lvrh=dvrh=novi;
novi->levi=NULL;
}else{
novi->levi=dvrh;
dvrh->desni=novi;
dvrh=novi;
}
}
void Spregdek::PopD(){
Elem *temp=dvrh;
if(temp->levi!=NULL){
dvrh=dvrh->levi;
dvrh->desni=NULL;
delete temp;
}else{
if(lvrh==dvrh){
cout<<"Ispraznio si DEK s desna nalevo!n";
cout<<"Dalje...n";
getche();
return;
}
}
}
void *Spregdek::TopD(){
if(Empty()) return 0;
return dvrh->el;
}
#include"Spregdek.h"
//Spregdek::Spregdek(const Spregdek &r){}
void Spregdek::PushL(void *elem){
Elem *novi=new Elem;
if(Empty()){
novi->el=elem;
lvrh=dvrh=novi;
novi->levi=NULL;
novi->desni=NULL;
return;
}else{
novi->el=elem;
lvrh->levi=novi;
novi->levi=NULL;
novi->desni=lvrh;
lvrh=novi;
return;
}
}
void Spregdek::PopL(){
if(Empty()) return;
Elem *temp=lvrh;
if(temp->desni!=NULL){
lvrh=lvrh->desni;
delete temp;
lvrh->levi=NULL;
}else{
if(lvrh==dvrh){
cout<<"Ispraznio si DEK s leva nadesno!n";
cout<<"Dalje...n";
getche();
return;
}
}
}
void *Spregdek::TopL(){
if(Empty()) return 0;
return lvrh->el;
}
void Spregdek::PushD(void *elem){
Elem *novi=new Elem;
novi->desni=NULL;
novi->el=elem;
if(Empty()){
lvrh=dvrh=novi;
novi->levi=NULL;
}else{
novi->levi=dvrh;
dvrh->desni=novi;
dvrh=novi;
}
}
void Spregdek::PopD(){
Elem *temp=dvrh;
if(temp->levi!=NULL){
dvrh=dvrh->levi;
dvrh->desni=NULL;
delete temp;
}else{
if(lvrh==dvrh){
cout<<"Ispraznio si DEK s desna nalevo!n";
cout<<"Dalje...n";
getche();
return;
}
}
}
void *Spregdek::TopD(){
if(Empty()) return 0;
return dvrh->el;
}
I evo i main deo programa koji ne znam gde gresim:
Code:
#include"Spregdek.cpp"
int main(){
Spregdek A;
int *niz[MAX];
int i,j,k;
cout<<"Stavljam "<<MAX<<" elemenata na levu stranu deka!n";
for(i=j=0;i<MAX;i++,j++){
niz[j]=&i;
A.PushL((void*)niz[j]);//vrsim konverziju pokazivaca na int u pok na void i stavljam u niz pokacivaca niz[j]
cout<<"Stavio sam "<<*niz[j]<<" ili ti adresa "<<(int*)A.TopL()<<endl;//*niz[j] citam elemenat sa adrese
}
cout<<"Dalje...n";
getche();
cout<<"Skidam elemente sa vrha (Top) a zatim ih brisem (Pop)n";
for(k=0;k<MAX;k++){
cout<<"Elelment na vrhu deka je:"<<*(int*)A.TopL()<<endl;getche();//vrsim konverziju pokazivaca na void u pokazivac na int..
//i sa zvezdicom trazim podatak na toj adresi
A.PopL();
}
getche();
}
#include"Spregdek.cpp"
int main(){
Spregdek A;
int *niz[MAX];
int i,j,k;
cout<<"Stavljam "<<MAX<<" elemenata na levu stranu deka!n";
for(i=j=0;i<MAX;i++,j++){
niz[j]=&i;
A.PushL((void*)niz[j]);//vrsim konverziju pokazivaca na int u pok na void i stavljam u niz pokacivaca niz[j]
cout<<"Stavio sam "<<*niz[j]<<" ili ti adresa "<<(int*)A.TopL()<<endl;//*niz[j] citam elemenat sa adrese
}
cout<<"Dalje...n";
getche();
cout<<"Skidam elemente sa vrha (Top) a zatim ih brisem (Pop)n";
for(k=0;k<MAX;k++){
cout<<"Elelment na vrhu deka je:"<<*(int*)A.TopL()<<endl;getche();//vrsim konverziju pokazivaca na void u pokazivac na int..
//i sa zvezdicom trazim podatak na toj adresi
A.PopL();
}
getche();
}
Ono sto primecujem da se negde gube adrese pokazivaca koje stavljam metodom PushL.
Gde gresim?
Ako nije nekom tesko da me ispravi i napise itn main() tacno!
Inace ukoliko je privatni element u klasi Spregdek NE pok za void vec samo obican int tad mi sve lepo radi...sto znaci da je klasa lepo i ispavno definisana.
Stoga problem je samo u inr main()-u
@Moderatorima:Ako je ovo za sekciju ZA POCETNIKE..premestite temu tamo!
Hvala!