1. пример линейного алгоритма: решение алгебраического примера, типа: 2+ (9-5)*(3+1). план действий: 1)вычитание в скобках 2)сложение в скобках 3)умножение 4) сложение
2. пример разветвляющего алгоритма: отрывок из сказки Пушкина: "пойдет налево - песнь заводит, направо - сказку говорит" возникают две ветви в зависимости от условия. условие, например - "пойдет налево". если да, то действие - песнь заводит. если нет - то сказку говорит.
3. циклический алгоритм: наполнить стакан водой с десертной ложечки. цикл будет повторяться до тех пор, пока стакан не наполнится водой.
1. Задача решается с стека (алгоритм Дейкстры для обработки обратной польской записи). Предполагается, что во вводимой строке содержится корректное выражение, удовлетворяющее условиям задания.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin var w:=ReadlnString.ToWords; var St:=new Stack <integer>; var r:=0; foreach var t in w do if t[1].IsDigit then St.Push(t.ToInteger) else begin var a:=St.Pop; var b:=St.Pop; case t[1] of '+':St.Push(a+b); '-':St.Push(b-a); '*':St.Push(a*b) end; end; Writeln(St.Pop) end.
Контрольный пример 8 9 + 1 7 - * -102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017 // Внимание! Если программа не работает, обновите версию!
begin Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString(''). MatchValue('(.)\1{2,}').Length); end.
план действий:
1)вычитание в скобках
2)сложение в скобках
3)умножение
4) сложение
2. пример разветвляющего алгоритма:
отрывок из сказки Пушкина: "пойдет налево - песнь заводит, направо - сказку говорит"
возникают две ветви в зависимости от условия.
условие, например - "пойдет налево".
если да, то действие - песнь заводит.
если нет - то сказку говорит.
3. циклический алгоритм: наполнить стакан водой с десертной ложечки.
цикл будет повторяться до тех пор, пока стакан не наполнится водой.