0 / 0 / 0
Регистрация: 06.03.2020
Сообщений: 8

Моделирование стека

02.02.2021, 20:26. Показов 8024. Ответов 13

Студворк — интернет-сервис помощи студентам
Напишите программу, которая моделирует работу стека целых чисел, управляемого текстовыми командами. В начале работы стек пуст. Затем последовательно выполняются команды, записанные в файле input.txt . Для управления стеком используются две команды:

'+<число>' – втолкнуть число на вершину стека

'-' – удалить число с вершины стека

Требуется определить состояние стека после окончания выполнения всех команд.

Входные данные
Входные строки в файле input.txt содержат команды управления стеком. Последняя строка файла пустая.

Выходные данные
Программа должна вывести в файл output.txt в одной строке через пробел все числа, оказавшиеся в стеке после выполнения всех команд. Слева должно быть дно стека, справа – вершина. Если стек пуст, нужно вывести слово 'EMPTY'. Если во время выполнения команд произошла ошибка, нужно вывести слово 'ERROR'.

Примеры
входные данные
+12
+23
-
+34
выходные данные
12 34
входные данные
+12
+23
-
-
выходные данные
EMPTY
Сделал вот такой код, но проходит только 2 теста. Что можете посоветовать? Все тесты из примеров проходят.

Python
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
import re
 
F = open ( "input.txt" )
Err = False
stack = []
stack1 = []
 
def error():
    F = open ( "output.txt", "w" )
    F.write ( "ERROR" )
    F.close()
 
while Err != True:
    s = F.readline().split()
    if not s:
        error()
        break
    for k in s:
        stack.append( k )
        stack1.append( k )
        if len(stack) >= 2:
            a1 = stack.pop()
            a2 = stack.pop()
            stack.append( k )
            if a1 == "-" and a2 == "-":
                Err = True
F.close()
 
if Err == False:
    a = stack1.pop()
    b = stack1[0]
 
if Err == True:
    F = open ( "output.txt", "w" )
    F.write ( "EMPTY" )
    F.close()
else:
    a1 = re.sub(r'[+-]',"", a)
    b1 = re.sub(r'[+-]',"", b)
    F = open ( "output.txt", "w" )
    F.write ( b1 + " " + a1 )
    F.close()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.02.2021, 20:26
Ответы с готовыми решениями:

Моделирование стека в Python
Напишите программу, которая моделирует работу стека целых чисел, управляемого текстовыми командами. В начале работы стек пуст. Затем...

Моделирование стека
пожалуйста,помогите в написании программ,очень-очень надо 1)Сформировать стек из 7 чисел. Уменьшить на единицу 4-й элементов и...

Моделирование работы стека
Добрый день. Получил задание - Напишите программу моделирующую работу стека. Программа считывает последовательность команд и в зависимости...

13
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,672
Записей в блоге: 29
02.02.2021, 20:33
Maksos121, разве тут не подразумевалось ООП?
0
0 / 0 / 0
Регистрация: 06.03.2020
Сообщений: 8
02.02.2021, 20:58  [ТС]
Welemir1, не знаю. Я просто не могу понять, что не так. Проблема в том, что на том сайте не видно, что конкретно не прошло.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
03.02.2021, 06:45
Умиляет использование re в этой задаче...

Добавлено через 4 минуты
Maksos121, ты это сам писал? Программную логику своего кода понимаешь? По-моему, она очень мутная. Задача-то прозрачна: читать строку за строкой из файла, анализировать первый символ, выполнять команду. С ООП или без - не столь важно.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.02.2021, 07:35
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
with open("input.txt", "rt") as file_handle:
    in_put = file_handle.read()
 
stack, result = [], None
for line in in_put.splitlines():
    command, *args = line.split()
    if command == "+":
        stack.append(*args)
    elif command == "-":
        if len(stack) == 0:
            result = "ERROR"
            break
        stack.pop()
else:
    result = " ".join(map(str, stack)) if stack else "EMPTY"
 
with open("output.txt", "wt") as file_handle:
    file_handle.write(result)
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
03.02.2021, 09:21
Простой вариант:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
stack=[]
flgError=False
with open("input.txt","rt") as fi:
    for stri in fi.readlines():
        if len(stri)==0:
            break        
        code=stri[0]
        if code=="+":
            num=int(stri[1:])
            stack.append(num)
        elif len(stack)==0:
            flgError=True
            break
        else:
            stack.pop()
with open("output.txt","wt") as fo:
    if flgError:
        print("Error",file=fo)
    elif len(stack)==0:
        print("Empty",file=fo)
    else:
        print(*stack,sep=' ',file=fo)
0
03.02.2021, 10:42

Не по теме:

Catstail, не люблю держать файлы долго.

0
03.02.2021, 12:10

Не по теме:

DmFat, я бы держал файлы, а в памяти ничего не держал. Хотя тут уже дело вкуса...

P. S. Попадется файлик на терабайт, что будешь делать?

0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
03.02.2021, 12:34
DmFat, да, в этой задаче держать файл открытым смысла нет. Но Arsegg прав - для больших файлов заливка всего содержимого в память накладна... А с точки зрения обучения, умение работать с файлом как таковым (без заливки в память всего содержимого) - навык небесполезный.
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
03.02.2021, 13:07
Вставлю свои пять копеек:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
 
def solution():
    stack = []
    for command in iter(input, ""):
        if command.startswith("+"):
            stack.append(command.lstrip("+"))
        elif command == "-":
            stack.pop()
        else:
            print("ERROR")
            return
    print(*stack if stack else ("EMPTY",))
 
with open("input.txt") as f, open("output.txt", "w") as out:
    sys.stdin, sys.stdout = f, out
    solution()
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.02.2021, 13:23
Цитата Сообщение от Arsegg Посмотреть сообщение
P. S. Попадется файлик на терабайт, что будешь делать?
Элементарно, Ватсон. Я просто оберну в блок try except и выдам ошибку юзеру чтоб файл ручками разделил!

Цитата Сообщение от Arsegg Посмотреть сообщение
я бы держал файлы, а в памяти ничего не держал. Хотя тут уже дело вкуса...
В моей работе фалики постоянно дергают, так что я привык с файлами работать в таком плане, но да, ты прав, если файл больших объемов, то лучше построчно считывать.
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.02.2021, 13:24
Лучший ответ Сообщение было отмечено Maksos121 как решение

Решение

Catstail, так readlines весь файл читает.
Вам нужно
Python
1
for stri in fi:
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
03.02.2021, 13:26
Catstail, Кстати, ioprst прав!
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,706
Записей в блоге: 14
03.02.2021, 14:01
ioprst, да, я тоже не обратил внимание... Хотя с т.з. интерфейса - ничего не меняется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2021, 14:01
Помогаю со студенческими работами здесь

Задача. Моделирование стека
Здравствуйте! Столкнулся со следующей задачей: Напишите программу, которая моделирует работу стека целых чисел, управляемого...

Моделирование стека целых чисел
Напишите программу, которая моделирует работу стека целых чисел, управляемого текстовыми командами, аналогичными командам языка Форт. В...

Моделирование работы Т-образного сортировочного узла на железной дороге с использованием стека
Написать программу для моделирования работы Т-образного сортировочного узла на железной дороге с использованием стека. Программа должна...

Дан указатель Р1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями, а
Помогите срочно составить задачу: Дан указатель Р1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все...

Дан указатель Top1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями,
Здравствуйте, Уважаемые пользователи!!! Помогите пожалуйста решить данную задачу : Дан указатель Top1 на вершину непустого стека....


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

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

Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru