<span>var</span>
s<span>:</span><span>string</span>;
<span>
{функция проверки на палиндром}</span><span>function</span> palind<span>(</span>s<span>:</span><span>string</span><span>)</span><span>:</span><span>boolean</span>;
<span>var</span>
i<span>:</span><span>integer</span>;
fl<span>:</span><span>boolean</span>;
<span>begin</span>
fl<span>:=</span><span>true</span>;
<span>for</span> i<span>:=</span><span>1</span><span>to</span> length<span>(</span>s<span>) </span><span>div</span><span>2</span><span>do</span>
<span>if</span> s<span>[</span>i<span>]</span><>s<span>[</span>length<span>(</span>s<span>)</span><span>-</span>i<span>+</span><span>1</span><span>]</span><span>then</span>
fl<span>:=</span><span>false</span>;
Result<span>:=</span>fl
<span>end</span>;
<span>{основная программа}</span><span>begin</span>
<span>writeln</span><span>(</span><span>'Введите строку...'</span><span>)</span>;
<span>readln</span><span>(</span>s<span>)</span>;
<span>if</span> palind<span>(</span>s<span>)</span><span>then</span>
<span>writeln</span><span>(</span><span>'Данная строка является палиндромом!'</span><span>)</span>
<span>else</span>
<span>writeln</span><span>(</span><span>'Данная строка НЕ является палиндромом!'</span><span>)</span><span>end</span>.
Без функции:<span>var</span>
s<span>:</span><span>string</span>;
i<span>:</span><span>integer</span>;
palin<span>:</span><span>boolean</span>;
<span>{основная программа}</span><span>begin</span>
<span>writeln</span><span>(</span><span>'Введите строку...'</span><span>)</span>;
<span>readln</span><span>(</span>s<span>)</span>;
fl<span>:=</span><span>true</span>;
<span>for</span> i<span>:=</span><span>1</span><span>to</span> length<span>(</span>s<span>) </span><span>div</span><span>2</span><span>do</span>
<span>if</span> s<span>[</span>i<span>]</span><>s<span>[</span>length<span>(</span>s<span>)</span><span>-</span>i<span>+</span><span>1</span><span>]</span><span>then</span>
fl<span>:=</span><span>false</span>;
<span>if</span> palin <span>then</span>
<span>writeln</span><span>(</span><span>'Данная строка является палиндромом!'</span><span>)</span><span>else</span>
<span>writeln</span><span>(</span><span>'Данная строка НЕ является палиндромом!'</span><span>)</span><span>end</span>.
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 позволяет стоить из операций длинные цепочки, что повышает эффективность программ из-за отсутствия промежуточных переменных.
<u>Пример:</u>
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
Если я всё правильно понял, то должно быть так:
var a:integer;
begin
if a mod 2 = 0 then a:=a*a else a:=a*a*a;
write(a);
end.
В заданном выражении скобка (¬x ∧ y ∧ z) будет равна 1 при следующих значениях переменных: x=0, y=1, z=1;
скобка (¬x ∧ ¬z) будет равна 1 при x=0, z=0.
Комбинацию значений 0, 1, 1 видим в последней строке таблицы, значит Перем.3 - это x; из второй строки определяем, что Перем. 2 - это z, следовательно, Перем.1 - это y.
Ответ: yzx
CPU ---> Процессор
RAM ---> Оперативная память
ROM ---> Постоянная память
HDD ---> Жёсткий диск
Sound Card ---> Звуковая карта
Video Card ---> Видео карта