smirnovigor
19.12.2020 16:25

Постройте таблицу истинности для логического выражения
b & (a v b)

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
GDIZzzEr
30.06.2022 08:55
PascalABC.NET 3.4.0, сборка 1671 от 31.05.2018
Внимание! Если программа не работает, обновите версию!

begin
  var St:=new Stack<integer>;
  foreach var k in ReadSeqInteger('Вводите данные:',ReadInteger('n=')) do
    St.Push(k);
  St.Println; // исходное содержимое стека
  var St1:=new Stack<integer>;
  var min:=MaxInt;
  var k:integer;
  while St.Count>0 do begin
    k:=St.Pop;
    if Abs(k)<min then min:=Abs(k);
    St1.Push(k);
    end;
  while St1.Count>0 do begin
    k:=St1.pop;
    if Abs(k)<>min then St.Push(k)
    end;
  St.Println
end.

Пример
n= 5
Вводите данные: 2 3 -1 7 1
1 7 -1 3 2
7 3 2
0,0(0 оценок)
Ответ:
jora2003123
26.07.2022 05:32
Вот правильно отформатированный код. Пока код не отформатирован, понять его очень сложно, поэтому программисты всегда сразу пишут код с необходимым форматированием. Начинающим писать программы тоже необходимо всегда следовать этому же принципу.

if (a[h,v]=0) or (a[h-1,v]<>0) then eng+=1;
if a[h,v]<>0 then
  if a[h-1,v]=0 then begin
    a[h-1,v]:=a[h,v];
    a[h,v]:=0;
  end;

Наличие переменных вида a[h,v] позволяет сделать вывод, что фрагмент программы что-то делает с элементами двумерного массива "а". При этом, эдементы все время встречаются парами вида a[h,v] и a[h-1,v]. Если a[h,v] - некий текущий элемент в строке h и столбце v, то a[h-1,v] - это элемент в предыдущей строке и том же столбце. Для краткости будем называть элемент a[h,v] ТЕКУЩИЙ, а элемент a[h-1,v] - ПРЕДШЕСТВУЮЩИЙ, предполагая просмотр по столбцам.
Теперь фрагмент программы можно заменить псевдокодом.

ЕСЛИ (ТЕКУЩИЙ=0) ИЛИ (ПРЕДШЕСТВУЮЩИЙ≠0) ТО eng+=1; (1)
ЕСЛИ ТЕКУЩИЙ≠0 ТО (2)
  ЕСЛИ ПРЕДШЕСТВУЮЩИЙ=0 ТО (3)
    ПРЕДШЕСТВУЮЩИЙ:=ТЕКУЩИЙ; (4)
    ТЕКУЩИЙ:=0; (5)

Опреатор eng+=1 - более короткая запись оператора eng:=eng+1, допустимая только в версии PascalABC.NET и пришедшая в него из языка C#. Это действие обычно называют "плюс единичка в счетчик", подразумевая, что eng подсчитывает количество некоторых событий. В данном случае это событие - случай, когда или ТЕКУЩИЙ элемент нулевой, или ПРЕДШЕСТВУЮЩИЙ ненулевой.

Сделаем псевдокод более компактным.

ЕСЛИ (ТЕКУЩИЙ=0) ИЛИ (ПРЕДШЕСТВУЮЩИЙ≠0) ТО (1)
  ДОБАВИМ 1 В СЧЕТЧИК ТАКИХ СОБЫТИЙ (2)
ЕСЛИ ТЕКУЩИЙ≠0 ТО (3)
  ЕСЛИ ПРЕДШЕСТВУЮЩИЙ=0 ТО (4)
    ПРЕДШЕСТВУЮЩИЙ:=ТЕКУЩИЙ; ТЕКУЩИЙ:=0; (5)

Условие (4) проверяется только если выполняется условие (3). Это оптимизация кода, которая позволяет не проверять условие (4), если условие (3) не выполняется. Такая оптимизация полезна только для старых компиляторов, а PascalABC.NET умеет оптимизировать подобные вещи сам. Для понимания алгоритма вопрос оптимизации несущественен, поэтому мы можем утверждать, что (5) выполнятнся только при одновременном наступлении (3) И (4).

ЕСЛИ (ТЕКУЩИЙ=0) ИЛИ (ПРЕДШЕСТВУЮЩИЙ≠0) ТО
  ДОБАВИМ 1 В СЧЕТЧИК ТАКИХ СОБЫТИЙ
ЕСЛИ (ТЕКУЩИЙ≠0) И (ПРЕДШЕСТВУЮЩИЙ=0) ТО
  ПРЕДШЕСТВУЮЩИЙ:=ТЕКУЩИЙ; ТЕКУЩИЙ:=0

В последней строке отметим, что ПРЕДШЕСТВУЮЩИЙ принимает значение ТЕКУЩИЙ, а ТЕКУШИЙ обнуляется. Но это происходит только если ПРЕДШЕСТВУЮЩИЙ был нулём, следовательно можно говорить об обмене значениями.

ЕСЛИ (ТЕКУЩИЙ=0) ИЛИ (ПРЕДШЕСТВУЮЩИЙ≠0) ТО
  ДОБАВИМ 1 В СЧЕТЧИК ТАКИХ СОБЫТИЙ
ЕСЛИ (ТЕКУЩИЙ≠0) И (ПРЕДШЕСТВУЮЩИЙ=0) ТО
  ОБМЕНЯТЬ ЗНАЧЕНИЯ ПРЕДШЕСТВУЮЩЕГО И ТЕКУЩЕГО

Вот все, что делает приведенный фрагмент кода.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота