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
function FindWord(first: integer): integer; // Возвращает номер позиции правее first, где находится очередной разделитель var i: integer; c: char; begin i := first + 1; Result := 0; repeat c := s[i]; if (c = ',') or (c = '.') then Result := i else i := i + 1 until (Result > 0) or (c = '') end;
var ib, ie, k,n: integer;
begin writeln('Введите строку, отделяя слова запятыми, в конце введите точку'); readln(s); k := 0; ib := 1; n:=length(s); repeat ie := FindWord(ib); if ie > 0 then begin if UpCase(s[ib]) = 'A' then k := k + 1; ib := ie + 1 end; until (ie = 0) or (ie>=n); writeln('Количество слов, начинающихся с буквы "а", равно ', k) end.
Введите строку, отделяя слова запятыми, в конце введите точку A,roza,upala,na,lapu,azora,Antoshka,skazhi,ge,ty,del,moy,portfel?. Количество слов, начинающихся с буквы "а", равно 3
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