Один из часто встречающихся видов списка стек — список, в котором все операции включения и извлечения, сопровождающегося удалением из списка, элементов
10-11 класс
|
выполняются только с одного края. Механизм функционирования стека отражён в его названии «LIFO» (Last In First Out — последним вошёл, первым вышел, подобно патронам в обойме). Следовательно, любой элемент не может быть извлечён и удалён из стека раньше, чем будут извлечены все элементы, помещённые в стек позднее него. Составить программу, реализующую функционирование стека. Стек оформить как массив.
Option Explicit
Const n = 50 'Максимальная емкость стека
Dim LIFO(1 To n) As Variant
Dim ptr As Integer 'указатель на вершину стека, моделируемого LIFO
Dim Overflow As Boolean
Dim EmptyLIFO As Boolean
Sub Push(Elem As Variant)
'добавляет элемент на вершину стека
If ptr < n Then
ptr = ptr + 1
LIFO(ptr) = Elem
Overflow = False
EmptyLIFO = False
Else
Overflow = True
End If
End Sub
Sub Pop(Elem As Variant)
'Возвращает элемент с вершины стека и удаляет его из стека
If ptr > 0 Then
Elem = LIFO(ptr)
ptr = ptr - 1
End If
EmptyLIFO = (ptr = 0)
End Sub
Sub main()
' Пример работы со стеком - перестановка букв в словах строки.
' Не меняя порядка слов в строке, переставить в каждом слове буквы в обратном порядке.
' Слова разделяются ровно одним пробелом.
Dim s As String, s1 As String, i As Integer, e As String
s = Sheets("Лист1").Cells(1, 1).Value
If Len(s) = 0 Then
MsgBox "Нет входной строки"
Exit Sub
End If
EmptyLIFO = True
Overflow = False
s1 = ""
For i = 1 To Len(s)
e = Mid(s, i, 1) 'Очередной символ
If e <> " " Then
Push e
Else
s1 = s1 + " "
Do While Not EmptyLIFO
Pop e
s1 = s1 + e
Loop
End If
Next i
s1 = s1 + " "
Do While Not EmptyLIFO
Pop e
s1 = s1 + e
Loop
s1 = Trim(s1)
Sheets("Лист1").Cells(2, 1).Value = s1
End Sub
Комментарий удален
Другие вопросы из категории
покупатель и какова сдача? Задача №2 В классе N учеников. После контрольной работы получено А-"5", В-"4", С-"2". Определить процент троек? Задача №3. Заданы координаты №-х вершин треугольника (х1, у1), (х2, у2 ), (х3, у3). Найти периметр и площадь. Задача №4. Дана длина ребра куба. Найти площадь грани, площадь полной поверхности и объём этого куба
Читайте также
функционирования дека таков, что элементы включаются список и исключаются из списка с обоих краёв, причём любой элемент не может быть извлечён из списка с любого края раньше, чем будут извлечены все элементы, расположенные в списке ближе него к данному краю. Составить программу , реализующую функционирование дека. Дек оформить как массив.
рицательных чисел, а другой - из положительных" Тема "Односвязные списки". Заранее спасибо!
они дали такие ответы: Серёжа: 1) Я не разбивал. 2) Вася не разбивал. Вася: 3) Серёжа не разбивал. 4) Вазу разбил Коля. Коля: 5) Я не разбивал. 6) Вазу разбил Серёжа. Бабушка знала, что один из её внуков (правдивый), оба раза сказал правду; второй (шутник) оба раза сказал неправду; третий (хитрец) один раз сказал правду, а другой раз - неправду. Назовите имена правдивого, шутника и хитреца. Кто из внуков разбил вазу?
Решение нужно через таблицу истинности.
учительница спросила, кто из них победил. Илья сказал: « Это я победил, а не Костя или Серёжа ». Костя сказал: « Это Серёжа победил, а Илья всегда лжёт ». Серёжа сказал: « Победил не Костя, а Илья всегда говорит правду ». Учительница знает, что один из ребят всегда говорит правду, другой – всегда лжёт, а третий говорит через раз то ложь, то правду, но не знает, кто из них правдив, а кто – нет. кто победитель?
1. В один из жарких летних дней Петя и его друг Вася решили купить арбуз. Они выбрали самый большой и самый спелый, на их взгляд. После недолгой процедуры взвешивания весы показали w килограмм. Поспешно прибежав домой, изнемогая от жажды, ребята начали делить приобретенную ягоду, однако перед ними встала нелегкая задача. Петя и Вася являются большими поклонниками четных чисел, поэтому хотят поделить арбуз так, чтобы доля каждого весила именно четное число килограмм, при этом не обязательно, чтобы доли были равными по величине. Ребята очень сильно устали и хотят скорее приступить к трапезе, поэтому Вы должны подсказать им, удастся ли поделить арбуз, учитывая их пожелание. Разумеется, каждому должен достаться кусок положительного веса.
Входные данные
В первой и единственной строке входных данных записано целое число w (1 ≤ w ≤ 100) — вес купленного ребятами арбуза.
Выходные данные
Выведите YES, если ребята смогут поделить арбуз на две части, каждая из которых весит четное число килограмм, и NO в противном случае.
Примечание
Например, ребята могут поделить арбуз на две части размерами 2 и 6 килограммов соответственно (другой вариант — две части 4 и 4 килограмма).
2. На клетчатой плоскости заданы координаты K зданий. Требуется построить кольцевую дорогу вокруг зданий минимальной длины в виде прямоугольника, со сторонами, параллельными линиям сетки.
Входные данные
Во входном файле, на первой строке, находится число K( ). На следующих K строках находятся пары чисел и – координаты зданий
( ).
Выходные данные
Выведите в выходной файл координаты левого нижнего и правого верхнего углов прямоугольника.
3. Хакер Иван является сотрудником крупной антивирусной компании. Один из вирусов исследованием, которого он занимается, был специально создан для атаки на программы биржевой торговли.
Для того что бы победить зловред Ване необходимо разработать алгоритм, который бы вычислил минимальное количество операций необходимых для того что бы пара чисел (a, b) стала "k -красивой". Пара чисел (a, b) называется "k-красивой" если хотя бы одно из чисел парны не меньше заданного целого числа k. При этом, операции, проводимые с парой чисел (a, b) могут быть только такие:
1. Пара (a, b) может быть преобразована в (a+b, b);
2. Пара (a, b) может быть преобразована в (a, b+a).
Помогите Ване победить.
Входные данные
Единственная строка входных данных содержит три целых числа a, b и k ( - 1018 ≤ x, y, m ≤ 1018).
Выходные данные
Выведите минимальное количество операций или число -1, если сделать заданную пару "k-красивой" невозможно.
4. Инженер-программист Надежда занимается разработкой компилятора для нового сверх секретного языка программирования. Для того чтобы закончить разработку одного из модулей ей остается решить задачу следующего содержания:
Во входных данных Надя получает строку содержащую в себе цифры и скобки одного вида: '(' и ')'. Наде необходимо написать программу, которая для любых входных данных определяет является ли содержащаяся в них скобочная последовательность правильной, и в случае правильности скобочной последовательности возвращает количество встречающихся в ней скобок, если же последовательность неправильная, то выводится число -1.
Скобочная последовательность называется правильной, если:
1. Пустая строка — правильная скобочная последовательность;
2. Правильная скобочная последовательность, взятая в скобки одного типа — правильная скобочная последовательность;
3. Правильная скобочная последовательность, к которой приписана слева или справа правильная скобочная последовательность — тоже правильная скобочная последовательность.
Помогите Наде в разработке компилятора для нового сверх секретного языка программирования.
Входные данные
Единственная строка конечной длины содержит цифры и скобки, длина строки не больше 1024 символов.
Выходные данные
Выведите количество скобок если скобочная последовательность правильная или число -1 если нет.
5. Маленький Вася научился считать сумму цифр для любого числа. Для любого числа, он считал сумму его цифр, затем тоже самое он делал с полученным в результате числом и так далее. Определите сколько раз Васе необходимо посчитать сумму, чтобы она стала цифрой.
Входные данные
Одна непустая строка с числом (0 Выходные данные
Одна строка, с числом.