Уважаемыe программисты!!!Мне осталось 2 задачи решить по С++.....Я никак не догоню как их делать!!!(((
Можете хотя бы направить в нужное русло решения этих задач???
задача 1.
Создать очередь для символов. Максимальный размер очереди вво-дится с экрана. Создать функции для ввода и вывода элементов очере-ди. Добавлять символы с экрана в очередь. В случае совпадения вво-димого символа с последним элементом очереди удалять и выводить на экран все элементы очереди.
задача 2.
Создать два стека для символов. Максимальный размер стеков вво-дится с экрана. Создать функции для ввода и вывода элементов стека. Вводить символы с экрана в стеки поочередно. Задачу решить с ис-пользованием механизма указателей.
заранее большое спасибо!!!
Погибаю.... С++
в чем именно проблема?
Приглашаю на свой блог о программировании: pro-prof.com
Проблема вот в чём:
Задание 2
#include <iostream>
#include <stdlib.h>
#include <locale.h>
using namespace std;
class queue{
char *p;
int n,head,tail;
int next(int i){if(i==n)return 0;else return i+1;}
public:
queue():n(100),head(0),tail(0){p=new char[n];}
queue(int N):n(N),head(0),tail(0){p=new char[n];}
~queue(){delete[]p;}
void add(char x);
int dubl(char x);
char sub();
void show();
int empty(){return tail==head;}
};
int queue::dubl(char x)
{
if(p[tail-1]==p[tail-2])
{
cout<<"Sovpali simvoli\n";
return 0;
}
else return 1;
}
void queue::add(char x)
{
if (next(tail)==head)cout<<"Ochered zapolnena\a\n";
else {p[tail]=x;tail=next(tail);}
}
char queue::sub()
{
if (tail==head){cout<<"Ochered pusta\a\n";return -1;}
else{int h=head;
head=next(head);
return p[h];}
}
void queue::show()
{
int i=head;
if (head!=tail)
do{
cout<<p<<" ";
i=next(i);
}while(i!=tail);
cout<<endl;
}
void main()
{
int exit;
int n,i;
char x;
cout<<"Razmer: ";
cin>>n;
queue q(n+1);
for (i=0;i<n;i++)
{
cin>>x;
q.add(x);
cout<<"Dobavili "<<x<<"\n";
if(!q.dubl(x))
{
cout<<" Vzyali "<<q.sub()<<": ";
n=i;
}
}
q.show();
cin>>exit;
}
Но почему то при совпадении последнего символа с первым ничего не происходит....
Задание 2
#include <iostream>
#include <stdlib.h>
#include <locale.h>
using namespace std;
class queue{
char *p;
int n,head,tail;
int next(int i){if(i==n)return 0;else return i+1;}
public:
queue():n(100),head(0),tail(0){p=new char[n];}
queue(int N):n(N),head(0),tail(0){p=new char[n];}
~queue(){delete[]p;}
void add(char x);
int dubl(char x);
char sub();
void show();
int empty(){return tail==head;}
};
int queue::dubl(char x)
{
if(p[tail-1]==p[tail-2])
{
cout<<"Sovpali simvoli\n";
return 0;
}
else return 1;
}
void queue::add(char x)
{
if (next(tail)==head)cout<<"Ochered zapolnena\a\n";
else {p[tail]=x;tail=next(tail);}
}
char queue::sub()
{
if (tail==head){cout<<"Ochered pusta\a\n";return -1;}
else{int h=head;
head=next(head);
return p[h];}
}
void queue::show()
{
int i=head;
if (head!=tail)
do{
cout<<p<<" ";
i=next(i);
}while(i!=tail);
cout<<endl;
}
void main()
{
int exit;
int n,i;
char x;
cout<<"Razmer: ";
cin>>n;
queue q(n+1);
for (i=0;i<n;i++)
{
cin>>x;
q.add(x);
cout<<"Dobavili "<<x<<"\n";
if(!q.dubl(x))
{
cout<<" Vzyali "<<q.sub()<<": ";
n=i;
}
}
q.show();
cin>>exit;
}
Но почему то при совпадении последнего символа с первым ничего не происходит....
что должно выводится?
Приглашаю на свой блог о программировании: pro-prof.com
В случае совпадения вводимого символа с последним элементом очереди удалять и выводить на экран все элементы очереди.
Ma666oT писал(а):В случае совпадения вводимого символа с последним элементом очереди удалять и выводить на экран все элементы очереди.
с первым или последним? У вас в программе функция dubl вызывается для проверки совпадения введенного символа с последним узлом очереди,если они совпали - выполняетсяMa666oT писал(а):Но почему то при совпадении последнего символа с первым ничего не происходит....
Код: Выделить всё
cout<<" Vzyali "<<q.sub()<<": ";
n=i;
Приглашаю на свой блог о программировании: pro-prof.com