Два солдати мають переправитися з одного берега річки на другий.воны побачили двох хлопчиків на маленькому човні.у ньому можуть переправитися або один солдат або один чи двое хлопчиків складіть алгоритм переправлення солдатів
"Паскалей" различных много. Массивы тоже бывают разные. В вопросе ничего не детализировано, поэтому речь пойдет об одномерных массивах. 1. Турбо (Борланд) Паскаль. Массив - статический, в нем последний элемент не нужно определять, поскольку его индекс известен по описанию массива. 2. Borland Delphi, Free Pascal. Статические массивы - все как и в Турбо Паскаль. Но есть и динамические массивы, индексируемые от нуля, поэтому индекс последнего элемента в них равен количеству элементов минус единица. Можно пользоваться функцией Length(a), возвращающей текущее количество элементов в массиве. 3. PascalABC.NET 3.3. Действительно все, что написано выше. И добавочно можно написать a.Length вместо Length(a).
LINQ - технология доступа к данным, разработанная Microsoft для среды .NET. Первоначально применялась при работе с базами данных, позднее была обобщена, позволяя работать с объектами программного кода (LINQ to Objects). В PascalABC.NET 3.х на базе LINQ to Objects реализованы элементы функционального программирования, для понимания работы которых нужно быть знакомым с "лямбдами" - λ-выражениями, λ-функциями и λ-процедурами. Эти элементы могут применяться к объектам программы, которые поддерживают интерфейс IEnumerable из .NET Framework. Говоря проще, к массивам, спискам, стекам, очередям, словарям - любым динамическим объектам, реализованным на базе последовательностей. И, конечно же, к самим последовательностям. Последовательность - это новшество для Паскаля, пришедшее из функционального программирования. Главная особенность последовательности в том, что она не хранится в памяти. Вместо этого хранятся а) программный код, позволяющий вычислить любой элемент последовательности и б) значение текущего элемента последовательности, с которым производится операция. Это позволяет работать с последовательностями любой длины, в том числе, с бесконечными. Операторы LINQ обрабатывают входные данные и на выходе всегда возвращают последовательность. Многие начинающие программисты забывают об этом, что порождает ошибки, временами, с маловразумительной диагностикой. В PascalABC.NET 3.x операции LINQ реализованы в виде расширений соответствующих классов, поэтому в записи используется "точечная форма". В функциональном программировании имеются, в частности, операции проекция, фильтрация и свертка. С их можно просто и наглядно решать достаточно широкий круг задач. Фильтрация Where, примененная к последовательности, пропускает на выход лишь элементы, удовлетворяющие заданному условию (для которых это условие истинно). Условие задается в виде лямбды. Например, a.Where(t->(t>0) and t.IsOdd) породит последовательность из положительных нечетных элементов а (a - массив и т.д.). Проекция Select, примененная к последовательности, преобразует каждый ее элемент к значению по правилу, заданному "лямбдой". Например, a.Select(t->3*sin(t)+5*Cos(2*t)) породит последовательность, каждый член которой будет вычислен как значение функции f(x)=3Sin(x)+5Cos(2x). Свертка Aggregate заменяет оператор цикла, сворачивая последовательность до одного значения. Это разного рода суммы, произведения и т.п. В простейшем случае используются два параметра, первый из которых определяет начальное значение, а второй является лямбдой, задающий операцию между предыдущим и текущим значениями. a.Aggregate(1,(x,y)->x*y) свернет элементы a в произведение, a.Aggregate(0,(x,y)->x+y) свернет элементы a в сумму.
Кроме трех упомянутых операций, LINQ предоставляет также разбиение, объединение, конкатенацию, группировку, упорядочивание и прочее. "Точечная" нотация PascalABC.NET 3.x позволяет стоить из операций длинные цепочки, что повышает эффективность программ из-за отсутствия промежуточных переменных. Пример: SeqGen(15,i->3*i*i-5,10).Where(t->t.IsEven).Select(t->t/10).OrderBy(t->t).Println; Здесь генерируется последовательность из 15 элементов по формуле a = 3i²-5, где i=10,11,12,.. Полученная последовательность фильтруется по правилу, пропускающему только элементы с четными значениями. Результат проецируется на последовательность вещественных элементов путем деления каждого исходного элемента на 10. Полученная последовательность упорядочивается по возрастанию и выводится на монитор: 35.8 50.2 67 86.2 107.8 131.8 158.2