Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] stack, palindrom

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] stack, palindrom

[ Pregleda: 2788 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ivanzj

Član broj: 150597
Poruke: 76
*.ynet.sk.



+2 Profil

icon [Zadatak] stack, palindrom05.04.2009. u 03:16 - pre 183 meseci
treba da napravim program, koji ce prepoznati da li je uneseni izraz(recenica) palindrom ili ne. Treba da se sastoji od stack.h, stack.cpp i palindrome,cpp

Code:

//stack.h
#ifndef stackh 
#define Stackh
class Stack

{
public:
    stack();
    void create();
    void push(char &ch, POKC &vrh):
    char pop(char &ch, POKC &vrh);
    int vrh();
    bool isEmpty;
    void brisi();
private:
    enum { capacity = 21 };
    char data[capacity];
    int current;
};
#endif


Code:

//stack.cpp
#include <iostream>
#include "Stack.h"
using namespace std;
typedef struct cvor
{
    char inf;
    struct cvor *sledeci;
}CVOR;
typedef CVOR* POKC;
void push (char &ch, POKC &vrh)
{
    POKC novi;
    novi=new cvor;
    novi ->inf=ch;
    novi->sledeci=vrh;
    vrh=novi;
}
void pop(char &ch, POKC &vrh)
{
    POKC pomocni;
    ch=vrh->inf;
    pomocni=vrh;
    vrh=vrh->sledeci;
    delete pomocni;
}
void pisi (POKC vrh)
{
    char ch;
    while(vrh!=NULL)
    {
        pop(ch, vrh);
        putchar(ch);
    }
}
bool isEmpty()
{
    int i;
    for(i=0;i<capacity;i++)
    {
        if (data[i]=='/0')
            continue;
        else
            return false;
    }
    return true;
}
void brisi()
{
    
    for (int i=0; i<capacity;i++)
        data[i]='\0';
}





ovo sam za sada uradio i ispisuje mi dosta gresaka tipa
Code:

error C2065: 'capacity' : undeclared identifier
error C2065: 'data' : undeclared identifier
error C2062: type 'void' unexpected - u stack.h

kako bi trebao da povezem ova dva fajla?
 
Odgovor na temu

ivanzj

Član broj: 150597
Poruke: 76
*.ynet.sk.



+2 Profil

icon Re: [Zadatak] stack, palindrom06.04.2009. u 21:09 - pre 183 meseci
Code:

#include <iostream.h>
#include <string.h>
#include <ctype.h>  
const int MAXSTACK = 21;
class stack {
  private:
    int  stop;  // for stack top
    char stk[MAXSTACK];
  public:
    stack();
    ~stack();
    stack(const stack& s);
    void push(const char c);
    void pop(void);
    char top(void);
    int  emptystack(void);
    int  fullstack(void);
  };
stack::stack()
{
        stop = 0;
}
stack::~stack() { }  
stack::stack(const stack& s)
{
        stop = s.stop;
        strcpy(stk,s.stk);
}
void stack::push(const char c)
{
        stk[stop++] = c;
}
void stack::pop(void)
{
        stop--;
}
char stack::top(void)
{
        return stk[stop - 1];
}
int  stack::emptystack(void)
{
        return !stop; //stop == 0
}
int  stack::fullstack(void)
{
        return stop == MAXSTACK;
}
int main() {
  char  palindrome[MAXSTACK]; 
  stack original,reversed;
  int   stackitems = 0;

  cin.getline(palindrome,MAXSTACK);
  for(int i = 0; i < strlen(palindrome); i++)
    if (isalpha(palindrome[i]))
          {
                original.push(tolower(palindrome[i]));
                stackitems++;                     
      }
 
  for( i = 0; i < stackitems / 2; i++) {
    reversed.push(original.top());
    original.pop();
    }
  
  if (stackitems % 2)
          original.pop();
  
  while (!original.emptystack()) {
    if (original.top() != reversed.top()) break;
    original.pop(); reversed.pop();
    }
  if (original.emptystack())
    cout << "palindrom\n";
  else
    cout << "nije palindrom\n";
  return 0;
  }



imam ovo. Da li je moguc, s obzirom da je pop void, ispis sadrzaja steka?
 
Odgovor na temu

Wajda.W
Vladimir Vajda
Zrenjanin

Član broj: 127039
Poruke: 323
93.86.76.*



+101 Profil

icon Re: [Zadatak] stack, palindrom06.04.2009. u 21:45 - pre 183 meseci
e ovako, imao si dosta gresaka.
postoje dva nacina da namestis stack. ili spregnuto (preko pokazivaca i cvorova i sa new i delete itd...) ili sekvencijalno (preko niza)
ali tesko da mozes ta dva da mesas, to ne ide, znaci ili jedno ili drugo....
Ja sam prepravio ovo tvoje, meni lepo radi, evo ti oba resenja pa vidi koje ti vise odgovara.
Prvo resenje (spregnuto):

Code:

//stack.h
#ifndef stackh
#define Stackh
typedef struct cvor
{
    char inf;
    struct cvor *sledeci;
}CVOR;

typedef CVOR* POKC;

class Stack

{
public:
    Stack();
    void push(char ch);
    char pop();
    bool isEmpty();
    void pisi ();
    void brisi();
private:
    POKC vrh;
};
#endif




Code:


//stack.cpp
#include <iostream>
#include "Stack.h"
using namespace std;

Stack::Stack()
{
    vrh=NULL;

}

void Stack::push (char ch)
{
    POKC novi;
    novi=new cvor;
    novi ->inf=ch;
    novi->sledeci=vrh;
    vrh=novi;
}
char Stack::pop()
{
    char pom;
    POKC pomocni;
    pom=vrh->inf;
    pomocni=vrh;
    vrh=vrh->sledeci;
    delete pomocni;
    return pom;
}
void Stack::pisi ()
{
    while(vrh!=NULL)
    {
        putchar(pop());
    }
}
bool Stack::isEmpty()
{
    return vrh==NULL;
}
void Stack::brisi()
{
    POKC pomocni;

    while(vrh!=NULL)
    {
        pomocni=vrh;
        vrh=vrh->sledeci;
        delete pomocni;
    }
}



i drugo resenje (sekvencijalno)


Code:


//stack.h
#ifndef stackh
#define Stackh
class Stack

{
public:
    Stack();
    void push(char ch);
    char pop();
    void pisi();
    bool isEmpty();
    bool isFull();
    void brisi();
private:
    enum { capacity = 21 };
    char data[capacity];
    int vrh;
};
#endif




Code:


//stack.cpp
#include <iostream>
#include "Stack.h"
using namespace std;
typedef struct cvor
{
    char inf;
    struct cvor *sledeci;
}CVOR;

Stack::Stack()
{
    vrh=-1;
}

void Stack::push (char ch)
{
    if(!isFull())
    {
        vrh++;
        data[vrh]=ch;
    }

}
char Stack::pop()
{
    char pom;
    if(!isEmpty())
    {
        pom=data[vrh];
        vrh--;
        return pom;
    }
     else return 0;
}
void Stack::pisi ()
{
    while(vrh > -1)
    {
        putchar(pop());
    }
}
bool Stack::isEmpty()
{
    return vrh==-1;
}

bool Stack::isFull()
{
    return vrh==capacity-1;
}
void Stack::brisi()
{
    vrh=-1;
}




Moguce je da ima gresaka, posto sam ja to na brzaka..
Pozdrav Vajda
 
Odgovor na temu

ivanzj

Član broj: 150597
Poruke: 76
*.ynet.sk.



+2 Profil

icon Re: [Zadatak] stack, palindrom06.04.2009. u 23:54 - pre 183 meseci
hvala na odgovoru, ali kasno sam video. Sad imam jos jedan problem, program je pri kraju, ali nisam razmisljao o tome da se iz stacka brise posle izvrsene funkcije.
ceo kod:
Code:

#include <iostream>
#include <string.h>
#include <ctype.h>  
using namespace std;
const int MAXSTACK = 21;
class stack {
private:
    int  stop;  
    char stk[MAXSTACK];
public:
    stack();
    ~stack();
    stack(const stack& s);
    void push(const char c);
    char pop();
    char top(void);
    int  emptystack(void);
    int  fullstack(void);
    void stack_print(void);
    int stack::create(void);
};

stack::stack()
{
    stop = 0;
}
stack::~stack() { }  
stack::stack(const stack& s)
{
    stop = s.stop;
    strcpy(stk,s.stk);
}
void stack::push(const char c)
{
    stk[stop++] = c;
}
char stack::pop()
{
    return stop--;
}
char stack::top(void)
{
    return stk[stop - 1];
}
int  stack::emptystack(void)
{
    return !stop; 
}
int  stack::fullstack(void)
{
    return stop == MAXSTACK;
}
void stack::stack_print(void)
{
    for (int i=0; i<stop; i++)
        cout<<stk[i];
    cout<<endl;
}
int  stack::create(void)
{
    return !stop; 
}


char menu()
{

    char volba;

    cout<<"\n";
    cout<<" menu:\n";
    cout<<"\n";
    cout<<" a ... napravi nove kontejnere\n";
    cout<<" b ... izbrisi sadrzaj\n";
    cout<<" c ... upisi sadrzaj kontejnera\n";
    cout<<" d ... ispisi sadrzaj prvog kontejnera\n";
    cout<<" e ... ispisi drugog kontejnera\n";
    cout<<" f ... da li je palindrom\n";
    cout<<" x ... izlaz\n";
    cout<<"\n vas izbor : ";
   
    cin >>  volba;
    return volba;
}
int main() {
    char  palindrome[MAXSTACK]; 
    char volba;
    stack original,reversed;
    int   stackitems = 0,i;
    //cin.getline(palindrome,MAXSTACK);
    do{
        volba = menu();
        switch (volba)
        {
        case'a':
            {
                original.create();
                reversed.create();
                cout<<"kontejneri 'napravljeni'";
                break;
            }
        case'b':
            {
            original.emptystack();
            reversed.emptystack();
            cout<<"kontejneri prazni";
            break;
            }
        case'c':
            {
                cout<<"naplnte kontejner"<<endl;
            cin.get();
            //cin.get();
            cin.getline(palindrome,MAXSTACK);
    for(int o = 0; o < strlen(palindrome); o++)
        
        if (isalpha(palindrome[o]))
        {
            original.push(tolower(palindrome[o]));
            stackitems++;                           
        }
            original.stack_print();
        
        break;
            }
        case'd':
            {
                cout<<"u kontejneru original se nalazi: ";
        original.stack_print();
                break;
            }
        case'e':
            {
            cout<<"u kontejneru reversed se nalazi"<<endl;
            for( i = 0; i < stackitems; i++) {
            reversed.push(original.top());
            original.pop();
        }
        reversed.stack_print();
            }
            break;
            
        case'f':
            {
            for( i = 0; i < stackitems / 2; i++) {
            reversed.push(original.top());
            original.pop();
        }


        if (stackitems % 2)
            original.pop();

        while (!original.emptystack()) {
            if (original.top() != reversed.top()) break;
            original.pop(); reversed.pop();
        }
        if (original.emptystack())
            cout << "palindrom\n";
        else
            cout << "nije palindrom\n";
            
        break;
            
            }
        default:cout<<"!??!";

            
        }
    } while(volba!='x');
}



postoji li neki bezbolan nacin, kako ovo resiti?
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] stack, palindrom

[ Pregleda: 2788 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.