Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
печатай!!11!1.doc
Скачиваний:
5
Добавлен:
23.11.2019
Размер:
97.79 Кб
Скачать

Ifstream in("input.Txt");

while (in.peek()!=EOF)

{

in>>i;

switch (i)

{

case '(': t.push(i); break;// если считанный символ (, то записываем его

//в стек

case ')': // если считанный символ ), то в стеке

//должна находиться соответствующая ему (

if (!t.empty()) // если стек не пуст, то выбираем из него одну

t.pop(); // открывающуюся скобку, иначе возвращаем

else return -1; // код –1 – лишняя закрывающая скобка

}

}

In.Close();

/* Если после того, как весь текст обработан, стек пустой, то баланс скобок в тексте соблюден – возвращаем код 0. В противном случае, в стеке находятся открывающиеся скобки, которым не соответствуют закрывающиеся – возвращаем код 1. */

if (t.empty()) return 0; else return 1;

}

Int main()

{

ofstream out("output.txt");

int i=balans(); // вызываемфункцию balans

// обрабатываемзначение, возвращенноефункцией balans

if (!i) out<<"ok"; else if (i==1) out<<"error: (";

else out<<"error: )";

out.close();

return 0;

}

_____input1.txt__________________ ______ input2.txt____________________

(5-x*(4/x-(x+3)/(y-2)-y)-9 (5-x)*(4/x-(x+3)/(y-2)-y)-9

_____output1.txt_________________ ______ output2.txt___________________

error: ( ok

_____input3.txt__________________ ______ input4.txt____________________

(5-x)*(4/x-(x+3)/(y-2)-y))-9 7+9-x/2+4-b*3

_____output3.txt_________________ ______ output4.txt___________________

error: ) ok

Решение практических задач с использованием очереди

1. Даны файлы data1.txt и data2.txt, компонентами которых являются натуральные числа. Переписать содержимое файла data1.txt в файл data2.txt и наоборот без использования вспомогательного файла.

Поскольку по условию вспомогательный файл использовать нельзя, будем использовать вспомогательную очередь. Тогда сначала перепишем содержимое первого файла в очередь, потом – содержимое второго файла в первый, и наконец, содержимое очереди во второй файл.

Замечание. Во всех задачах этого раздела будем использовать класс tQueue, описание класса tQueue в примерах повторять не будем.

#include "exception"

#include "iostream"

#include "fstream"

#include "string"

using namespace std;

class queueException: public exception

{

public:

queueException(const string & message="")

: exception(message.c_str())

{}

};

template <class Item>

class tQueue

{

struct elem

{Item inf; // информационное поле целого типа

elem *next;

elem (Item x):inf(x),next(0)

{}

};

public:

elem *head,*tail;

tQueue():head(0),tail(0){}

bool empty()

{return head==0;}

Item get()

{

if (empty())

throw queueException("StackException: get — queue empty");

else

{

elem *r=head;

Item i=r->inf;

head=r->next;

delete r;

return i;

}

}

void put(Item data)

{elem *t=tail;

tail=new elem(data);

if (!head) head=tail;

else t->next=tail;

}

};