0 / 0 / 0
Регистрация: 24.12.2017
Сообщений: 39
1

Как доработать правильно программу, чтобы корректно отрабатывала во всех случаях?

17.10.2018, 16:35. Показов 232. Ответов 0
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#include <string.h>
#include <fstream>
#include <conio.h>
#include <stdlib.h>
#include "Stack.h"
 
using namespace std;
 
Stack::Stack(int valid_stack_size) // конструктор
{
    if (valid_stack_size < 1) { cout << "ОШИБКА. СТЕК НЕ МОЖЕТ БЫТЬ СОЗДАН!"; exit(0); }
    else {
        this->size = valid_stack_size; //  размер стака
        this->ptr = 0; //  номер текущего элемента стака
        this->data = new char[valid_stack_size]; // и собственно значения, которые хранятся в каком то массиве
    }
 
}
 
Stack::~Stack() // деструктор
{
    delete[] this->data;
}
 
///////////////////////////////////////
 
void Stack::popallstart() // функция вывода стека
{
    cout << "Стек: ";
    for (int i = 0; i < size; i++) // выводим как обычный массив
        cout << this->data[i] << " ";
}
 
void Stack::push(char &value) // функция ввода значений в стак
{
    if (this->ptr >= this->size) // \ проверяем размер стека
        cout << "Стек уже заполнен!\n"; // даём ошибку
    else this->data[this->ptr++] = value; // вносим начение в стек
 
}
 
void Stack::pushkeybysymb() // функция ввода с клавиатуры посимвольно
{
    char temp = ' '; // вводим временную переменную, через которую и будем заносить все данные
    for (int i = 0; i < size; i++)
    {
        cout << i + 1 << " член = ";
        cin >> temp; // вводим....
        push(temp); // заносим
    }
}
 
void Stack::pushkey() // функция ввода с клавиатуры всей строки
{
    char *temp = new char[size];
    //char temp[size]; // вводим симвльный массив
    cout << "Введите строку - ";
    cin >> temp;
    for (int i = 0; i < size; i++)
    {
        push(temp[i]); // и заносим посимвольно
    }
}
 
void Stack::pushfile() // функция ввода из файла
{
    ifstream mas("file.txt", ios_base::in); // открываем файл
    if (!mas)
        cout << endl << "Файла не существует. Попробуйте ещё раз" << endl;
    else
    {
        char temp; // вводим временную переменную, через которую и будем заносить все данные
        for (int i = 0; i < size; i++)
        {
            mas >> temp; // достаём из файла
            push(temp); // и заносим
        }
        cout << endl << "Стак заполнен данными из файла" << endl << endl;
    }
    mas.close(); // закрываем файл
}
 
void Stack::pushall() // общая функция получения данных для стека
{
    cout << "Ввод cтека" << endl;
    char key; // переменная, через которую и будем вызывать меню
    bool menu = true; // переменная, отвечающая за раоту меню
    while (menu) // пока меню true, оно будет работать постоянно без остановки и перезапускаться
    {
        cout << "1 - Ввод с клавиатуры посимвольно" << endl;
        cout << "2 - Ввод из файла" << endl;
        cout << "3 - Ввод целой строки" << endl;
        switch ((key = _getch())) // ждём нажатия кнопки
        {
        case '1':
            pushkeybysymb();
            menu = false;
            break; // вызываем функцию, меняем меню на false, чтобы показать, что работа меню завершена
        case '2':
            pushfile();
            menu = false;
            break;
        case '3':
            pushkey();
            menu = false;
            break;
        default:
            cout << "Такого меню не существует. Попробуйте ещё раз.\n";
            break; // показываем ошибку и вновь запускаем меню
        }
    }
}
 
///////////////////////////////////////
 
bool Stack::bracketscheck()
{
    int c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0, c6 = 0;
 
    for (int i = 0; i < size; i++)
    {
        if (this->data[i] == '(') c1++; 
        else if (this->data[i] == '[') c2++; 
        else if (this->data[i] == '{') c3++;
        else if (this->data[i] == ')') { c4++; if (c4 > c1) break; } 
        else if (this->data[i] == ']') { c5++; if (c5 > c2) break; } 
        else if (this->data[i] == '}') { c6++; if (c6 > c3) break; } }
 
    if (c1 == c4 && c2 == c5 && c3 == c6)   return true;
    return false; 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef STACK_H
#define STACK_H
 
class Stack
{
private:
    char *data;                      // указатель на стек
    int size;                           // максимальное количество элементов в стеке
    int ptr; // номер текущего элемента стека
 
public:
    Stack(int); // конструктор
    ~Stack();                         // деструктор
 
    void popallstart(); // функция вывода стека
 
    void pushall(); // общая функция получения данных для стека
    void push(char&); // функция ввода значений в стак 1 симвода
    void pushkeybysymb(); // функция ввода с клавиатуры посимвольно
    void pushkey(); // функция ввода с клавиатуры всей строки
    void pushfile(); // функция ввода из файла
    bool bracketscheck(); // функция проверки скобок
    bool check(char&v);
    bool fff();
 
 
};
 
 
#endif // STACK_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include "Stack.h"
using namespace std;
 
/* 4. Создать класс для работы со стеком. Элемент стека – символ.
Использовать стек для проверки правильности расстановки скобок трех типов (круглых, квадратных и фигурных) в выражении.
*/
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int sizest; // переменная с размером стека
    cout << "Введите объём стека - "; cin >> sizest;
    Stack* f = new Stack(sizest); // создаём стек
    f->pushall(); // заполняем его
    f->popallstart(); // выводим
    cout << endl;
    if (f->fff()) cout << "Скобки расставлены верно"<<endl;
    else cout << "ОШИБКА. Скобки расставлены неверно!"<<endl;
    system("Pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2018, 16:35
Ответы с готовыми решениями:

Как правильно расставить скобки, чтобы программа работала корректно ?
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main(void) { float pi =...

Как правильно записать выражение для того, чтобы оно корректно отображалось на графике
Здравствуйте, подскажите пожалуйста, как нужно правильно записать это выражение для того чтобы оно...

Как корректно письмо (вложенное) перенести в папку "Входящие", чтобы оно там корректно отображалось
Добрый день! Пожалуйста нужна помощь - есть задачка: в почтовый ящик падает письмо, в attachments...

Как правильно распараллелить программу чтобы она не тормозила
С потоками никогда особо не работал, просто не было каких то тяжеловесных задач. Сейчас такая...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2018, 16:35

Как правильно вводить данные в программу, чтобы она не закрывалась
Program funktion4; uses crt; Var x,y,z:real; n:integer; Begin clrscr; writeln...

Доработать программу так, чтобы она работала со строками вместо чисел...
Программа работает, если ввести одно число, и оно потом выводит это число через процедуру. Помогите...

Как откомпилировать программу в VC+ 2010 чтобы работало на всех других компьютерах
Во-первых в настройках проекта невозможно сменить версию Framework 4.0 на более низкую. Так и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.