Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.03.2020
Сообщений: 22

Структура данных типа стек

09.03.2020, 21:30. Показов 5583. Ответов 22

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я начал изучать С++, в учебном заведении дали задачу, я написал код, но не могу понять в чем именно ошибка.
Задача такова:
Гаражная стоянка имеет одну стояночную полосу, причем единственный въезд и единственный выезд находится в одном конце полосы. Если владелец автомашины приходит забрать свой автомобиль, который не является ближайшим к выходу, то все машины, загораживающие проезд, удаляются, машина данного владельца выводится со стоянки, а другие машины возвращаются на стоянку в исходном порядке.
Написать программу, которая моделирует процесс прибытия и отъезда машин. Прибытие или отъезд автомашины задается командной строкой, которая содержит признак прибытия или отъезда и номер машины. Программа должна выводить сообщение при прибытии или выезде любой машины. При выезде автомашины со стоянки сообщение должно содержать число случаев, когда машина удалялась со стоянки для облегчения выезда других автомобилей.

Обратиться мне не к кому, поэтому решил написать сюда. Ошибка в том, что после показа стека, когда я пытаюсь удалить автомобиль из стека компилятор выдает ошибку: "Expression: back () called on empty deque"..
Приблизительно понимаю, где может быть проблема, но не могу понять в чем она и исправить ее. Надеюсь, что хотя бы вы натолкнете меня на мысль
Может я вообще неправильно все делаю
Вот мой код:
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
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <stack>
using namespace std;
// Меню
void menu()
{
    setlocale(LC_ALL, "Russian");
    cout << "0: Показать стек" << endl;
    cout << "1: Добавить машину в стек" << endl;
    cout << "2: Удалить машину из стека" << endl;
    cout << "3: Выйти из программы" << endl;
    cout << "Пожалуйста, сделайте Ваш выбор: ";
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n = 0, i, k, kol;
    string num, numdel;
    stack<string> nomer;// Номер автомобиля
    stack<string> dopstack;// Дополнительный стек (выгружаем номера машин)
    stack<int> udalyalac;// Количество раз, которое машины удалялась со стоянки
    stack<int> dopstack2;// Дополнительный стек (выгружаем количество раз)
    while (n <= 0)
    {
        cout << "Введите количество автомобилей на стоянке: "; cin >> n;
    }
    for (i = 0; i < n; i++)
    {
      cout << "Номер " << i + 1 << "-го автомобиля:";
      cin >> num; nomer.push(num);
      kol = 0; udalyalac.push(kol);
    }
step_menu:
      cout << "*************************************" << endl;
      menu();
      cin >> k;
      cout << "*************************************" << endl;
      switch (k)
      {
      case 0: {while (!nomer.empty())
      {
          num = nomer.top();
          nomer.pop();
          kol = udalyalac.top();
          udalyalac.pop();
          cout << num << "\t" << kol << endl;
      }
            goto step_menu;
      }
      case 1: {
          cout << "Введите номер добавляемого автомобиля:";
          cin >> num;
          nomer.push(num);
          kol = 0;
          udalyalac.push(kol);
          goto step_menu;
      }
      case 2: {
          cout << "Введите номер удаляемого автомобиля:";
          cin >> numdel;
      step2:
          if ((numdel.compare(num) != 0) && (nomer.empty()))
          {
              num = nomer.top();//////////////////////////////////////////////////////////////////////////////////////
              kol = udalyalac.top();
              cout << "Такого автомобиля нет в гараже. Удаление невозможно." << endl;
              goto step_menu;
          }
          if (numdel.compare(num) == 0)
          {
              nomer.pop();
              udalyalac.pop(); /////////////////////////////////////////////////////////////////////////////////////////
              cout << "Автомобиль удален со стоянки." << endl;
              cout << "Автомобиль удалялся " << kol << "-раз для обеспечения выезда других автомобилей." << endl;
              goto go_while;
          }
          // Заносим элементы из гаража в вспомогательный стек 
             dopstack.push(num);
             dopstack2.push(kol + 1);
             nomer.pop();
             udalyalac.pop();
             goto step2;
      go_while:
          // Выгружаем элементы из вспомогательного стека в гараж 
          while (!dopstack.empty())
          {
              num = dopstack.top();
              kol = dopstack2.top();
              nomer.push(num);
              udalyalac.push(kol);
              dopstack.pop();
              dopstack2.pop();
          }
          goto step_menu;
      }
      case 3: exit(0);
      default:
          cout << "<<<Ошибка меню! Сделайте правильный выбор>>>" << endl;
          goto step_menu;
      }
    return 0;
}
Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.03.2020, 21:30
Ответы с готовыми решениями:

Структура данных стек (код)
Добрый вечер! Помогите пожалуйста разобраться с кодом... почти ничего не понятно... #include &lt;iostream&gt; using std::cout; ...

Динамическая структура данных (Стек)
Подскажите в чем ошибка, пожалуйста. Программа выдает ошибку (&quot;Прекращена работа программы..&quot;), когда выбираю &quot;y&quot;...

Полустатическая структура данных стек.
Оформить структуру данных в виде полустатической структуры стека для списка учебной группы Разработать программу, осуществляющую : ...

22
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
11.03.2020, 17:13
Студворк — интернет-сервис помощи студентам
kollaps77, вот чувак, я более мене написал, но не обещаю что они качественные, у меня завтра днюха, надеюсь ты понял, держи:
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
#include <cstddef>
#include <iostream>
#include <stack>
 
struct Car
{
    std::size_t number{};
    std::size_t count{};
};
 
int main()
{
    std::stack<Car> garage;
    std::stack<Car> temp;
 
    std::size_t numberOfCars;
    std::cin >> numberOfCars;
 
    for (std::size_t i = 0; i < numberOfCars; ++i)
        garage.push( {i + 1} );
 
    // Пока в гараже есть ВООБЩЕ машины
    std::size_t currentNumber;
    while (!garage.empty()  )
    {
        std::size_t garageSize{garage.size() };
        std::cin >> currentNumber;
 
        // Пока в гараже присутствуют машины
        while(!garage.empty() )
        {
            // Если номер у последней машины в гараже не равен номеру юзера
            if (garage.top().number != currentNumber)
            {
                Car & r = garage.top();
 
                // инкрементируем счетчик обращений к этой машине
                ++r.count;
                // и выведем эту тачку на улицу
                temp.push(r);
            }
            // Если номер у последней машины в гараже равен номеру юзера
            else
            {
                // Пусть уезжает тачка
                garage.pop();
                break;
            }
            // Уезжает тачка
            garage.pop();
        }
        // Если тачак на улице равно количеству тачек в гараже
        if (temp.size() == garageSize)
            std::cout << "Car number: " << currentNumber << " no."
                << std::endl;
 
        // Все тачки с улицы заезжают в гараж
        while(!temp.empty() )
        {
            garage.push(temp.top() );       
            temp.pop();
        }
    }
 
    return 0;
}
там могут быть не точности, но я старался не смотря на свое состояние

Добавлено через 1 минуту
Олег зашел он поможет, я уверен.
0
0 / 0 / 0
Регистрация: 09.03.2020
Сообщений: 22
11.03.2020, 18:46  [ТС]
О, братишка, заранее поздравлять не буду, плохая примета, просто знай, что я очень благодарен тебе, ты очень мне помог! Выздоравливай давай! Всех благ!
0
0 / 0 / 0
Регистрация: 09.03.2020
Сообщений: 22
13.03.2020, 21:52  [ТС]
Чел, извини, что беспокою, но хотел бы узнать. Вот у меня стек гаража есть, и мне допустим нужно узнать, есть ли в данном стеке автомобиль определенного номера. Использую if. Но не получается. То есть мне нужно, чтобы если этого авто нету в гараже, то выводилось чообщение, что его нет. Есть ли какой-то перебор стека или еще что-то. Или как это реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2020, 21:52

Функция для ввода данных типа структура
Здравствуйте. Не могу разобраться с функцией для ввода данных. Присутствуют структуры. Не понимаю что именно надо передать в функцию...

структура array предназначена для хранения строки типа char. Структура имеет функцию, которая позволяет изменить символ
структура array предназначена для хранения строки типа char. Структура имеет функцию, которая позволяет изменить символ с указанным...

Динамическая структура данных(контейнер) типа "Вектор"
Здравствуйте, у меня вот какая проблема:задали лабораторную работу, но я что то никак не могу понять как ее делать, дело в том, что в ней...

Структура: стек
Помогите разобраться с моей программой или дайте пример. Я только недавно начал структуры. Моя программа не работает в Visual Studio и в...

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru