Форум

Data.BG Форуми: Две задачи на C++ - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Две задачи на C++

#1
Потребителят е неактивен   Matrix4767 

  • Група: Потребители
  • Мнения: 2
  • Регистриран: 22-May 17
  • Репутация: 0
  • Пол:Мъж
  • Град:Добрич
Здравейте, тук са две задачи на C++. Моля за техните решения. Благодаря предварително.

1. Да се състави клас шаблон реализиращ стек чрез масив. Класът да притежава конструктор, деструктор, функция за вмъкване на елемент в стека и функция за извеждане на елемент в стека. Чрез този шаблон да се създадат два стека един от символи с размерност 20 елемента и един стек от реални числа тип double с размерност 10 елемента.

2. Да се състави програма, която реализира стек чрез масив от реални числа тип double. Програмата да представя основните операции със структурата включване и изключване на елемент.
0

#2
Потребителят е неактивен   i4i4oBo 

  • Група: Потребители
  • Мнения: 260
  • Регистриран: 14-May 12
  • Репутация: 123
  • Пол:Мъж
К'во рече !?
А бе, момчета и момичета, нали ще ставате IT-та !?
Що не си ги решавахе сами тия задачи !?
1

#3
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 5330
  • Регистриран: 26-May 03
  • Репутация: 61
  • Пол:Мъж
  • Град:Велико Търново

Преглед на мнениеi4i4oBo, на 22.05.17 - 20:43, каза:

К'во рече !?
А бе, момчета и момичета, нали ще ставате IT-та !?
Що не си ги решавахе сами тия задачи !?

Ми щото не могат :sadsad: Да помагаме ли :unsure: или даже да :!:
То аз поемам #define, typedef, ама от template направо ми се повръща :sadsad:

Мнението беше редактирано от georgedimov: 22.05.17 - 23:58

0

#4
Потребителят е неактивен   Matrix4767 

  • Група: Потребители
  • Мнения: 2
  • Регистриран: 22-May 17
  • Репутация: 0
  • Пол:Мъж
  • Град:Добрич
Втората задача е решена. Това е на Dev-C++.

#include<iostream.h>
int main()
{ 
    const int maxlength=10;
    double   A[maxlength];
    double x=0;
    int n=0;
    cout<<"Type in elements \n";
    while(n<maxlength&&(cin>>x))
    {
        A[n++]=x;
    }
   while(n>0)
   {
       cout<<A[--n]<<"\t";
   }
   cout<<"\n";
   cin>>x;
   return 0;
}


Имам повечето от кода за първата, само че резултатът от второто извеждане винаги показва 0, а би трябвало да изведе реалните числа.

//stack1.h
#include<iostream.h>
template<class T, int max>
class stack1
{int n; T*a;
public:
       stack1(){a=new T[max];n=0;}
       ~stack1(){delete[]a;}
       void push (T&x)
       {if(n<max)a[n++]=x;
       else throw 1;}
       int pop(T&x)
       {if(n>0){x=a[--n];return 1;}
       else return 0;}};


#include<iostream.h>
       #include"stack1.cpp"
       #include<conio.h>
       int main()
       {
        char k; double x;
        stack1<char,20>ist;
        stack1<double,10>fst;
        cout<<"Въведете елементи\n";
        try
        { while(cin>>k)ist.push(k);}
          catch (int i)
           {  cout<<"stack 1 е пълен\n";}
               fst.push(x);
               cout<<"стек от символи\n";
               while(ist.pop(k))cout<<k<<"\t";
               cout<<"стек от реални числа\n";
               while(fst.pop(x))cout<<x<<"\t";
               cout<<'\n';
               getch();
               return 0;
           }

Мнението беше редактирано от Matrix4767: 24.05.17 - 17:44

0

#5
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 5330
  • Регистриран: 26-May 03
  • Репутация: 61
  • Пол:Мъж
  • Град:Велико Търново
Това поне за double върши рабата, за char просто трябва да се преработи int частта :chuckle:
Заповядай :chuckle:
//An example of using templated class to create stack depends on underlying array.
#include<iostream>
#include<cstdlib>
#define default_value 10
using namespace std;
 
template< class T > class Stack
{
    public:
    Stack(int = default_value);//default constructor
    ~Stack()//destructor
    {delete [] values;}
    bool push( T );
    T pop();
    bool isEmpty();
    bool isFull();
    private:
    int size;
    T *values;
    int index;
 
};
 
template< class T > Stack<T>::Stack(int x):
    size(x),//ctor
    values(new T[size]),
    index(-1)
{ /*empty*/  }
 
template< class T > bool Stack<T>::isFull()
{
    if((index + 1) == size )
    return 1;
    else
    return 0;
}
 
template< class T > bool Stack<T>::push(T x)
{
    bool b = 0;
    if(!Stack<T>::isFull())
    {
    index += 1;
    values[index] = x;
    b = 1;
    }
    return b;
}
 
template< class T > bool Stack<T>::isEmpty()
{
    if( index  == -1 )//is empty
    return 1;
    else
    return 0; //is not empty
}
 
template< class T > T Stack<T>::pop()
{
    T val = -1;
    if(!Stack<T>::isEmpty())
    {
    val = values[index];
    index -=  1;
    }
    else
    {
    cerr << "\nStack is Empty : ";
    }
    return val;
 
}
 
int main()
{
    Stack <double> stack1;
    Stack <char> stack2(20); // while not
    int y = 1;
    double x = 1.1;
    int i, j; 
    cout << " pushed double values into stack1:\n";
 
    for( i = 1  ; i <= 10 ; i++) //start enter 10 elements into stack
    {
    if(stack1.push(i*x))
        cout << i*x << "\t";
    else
        cout << "\n Stack1 is full: ";
    }
 
    cout << "\n\n poped double values from stack1:\n";
    for( j = 1 ; j <= 10 ; j++)
    	cout << stack1.pop() << "\t";
    cout << endl;
  
    cout << "\n pushed char values into stack2:\n";
	for( i = 1  ; i <= 20 ; i++) //start enter 20 elements into stack
    {
	if(stack2.push('@' + i)) // '@' + 1 == 'A' !!!
        cout << (char)('@' + i);
    else
        cout << "\n Stack2 is full: ";
    }
 
    cout << "\n\n poped char values from stack2:\n";
    for( j = 1 ; j <= 20 ; j++)
    	cout << stack2.pop();
    cout << endl << endl;

    return 0;
}

Мнението беше редактирано от georgedimov: 01.06.17 - 23:43

0

#6
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 5330
  • Регистриран: 26-May 03
  • Репутация: 61
  • Пол:Мъж
  • Град:Велико Търново
Проблемът е, че реализираш масив от реални елементи, а не class използващ такъв :sadsad:
Ето как хората използват два стека с един масив :chuckle:
С леко напудряне се получава това:

// oneStack.cpp
// target compiler -- Dev-C++ 5.11 (Orwell) 32-bit
// target OS -- Windows 7 + SP1 32-bit BG
#include <iostream>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
class oneStack // was class twoStacks
{
// private: // by default
    double *arr; // was int *arr;
    int size;
    int top1/*, top2 */;
public:
   oneStack(int n)  // constructor
   {
       size = n;
       arr = new /* int */ double[n];
       top1 = -1;
//       top2 = size;
   }
 
   // Method to push an element x to stack1
	void push1(/* int */ double x)
    {
       // There is at least one empty space for new element
       if (top1 < /* top2 */ size - 1)
       {
           top1++;
           arr[top1] = x;
       }
       else
       {
           cout << "Stack Overflow";
           exit(1);
       }
   }
 /*
   // Method to push an element x to stack2
   void push2(int x)
   {
       // There is at least one empty space for new element
       if (top1 < top2 - 1)
       {
           top2--;
           arr[top2] = x;
       }
       else
       {
           cout << "Stack Overflow";
           exit(1);
       }
   }
 */
   // Method to pop an element from first stack
   /* int */ double pop1()
   {
       if (top1 >= 0 )
       {
          double /* int */ x = arr[top1];
          top1--;
          return x;
       }
       else
       {
           cout << "Stack UnderFlow";
           exit(1);
       }
   }
 /*
   // Method to pop an element from second stack
   int pop2()
   {
       if (top2 < size)
       {
          int x = arr[top2];
          top2++;
          return x;
       }
       else
       {
           cout << "Stack UnderFlow";
           exit(1);
       }
   }
 */
}; // end of class oneStack
 
/* Driver program to test oneStack class */
int main()
{
    oneStack ts(5);
    ts.push1(5);
	ts.push1(10); // was ts.push2(10);
	ts.push1(15); // was ts.push2(15);
    ts.push1(7 + M_PI); // was ts.push2(7);

    cout << "Popped element from stack1 is " << ts.pop1();
    ts.push1(40 + M_E); // was ts.push2(40);

    cout << "\nPopped element from stack1 is " << ts.pop1();
	// was    cout << "\nPopped element from stack2 is " << ts.pop2();

    return 0;

}

Мнението беше редактирано от georgedimov: 06.06.17 - 12:23

0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login