profile
Опубликовано 5 лет назад по предмету Информатика от sgdsdgsd

Опешите программный код, очень надо
begin//начало
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;//конец
end;//конец

  1. Ответ
    Ответ дан Eighto
    Это вроде паскаль , мог бы и в переводчике перевести хз

    begin

    // начало , типо открыл вкладку )) хз

    if (a[h,v]=0) or (a[h-1,v]<>0) then

    // если массив a[h,v] равен 0  или массив a[h-1,v] не равен 0 то 

    eng+=1;

    // eng = eng + 1 (вверху просто упрощённая запись)

    if a[h,v]<>0 then

    // если a[h,v] <> 0 то 

    if a[h-1,v]=0 then

    // если a[h-1,v] = 0 то (условие в условие типо)

    begin//начало

    a[h-1,v]:=a[h,v];

    // 
    a[h-1,v] присваеваем a[h,v];

    a[h,v]:=0;

    // так же 
    a[h,v]:=0;

    end;//конец , идёт в связке с оператором begin ))
    end;//конец

    надеюсь именно так тебе надо было это сделать , задавай вопросы если не правильно
  2. Ответ
    Ответ дан Аккаунт удален
    Вот правильно отформатированный код. Пока код не отформатирован, понять его очень сложно, поэтому программисты всегда сразу пишут код с необходимым форматированием. Начинающим писать программы тоже необходимо всегда следовать этому же принципу.

    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) ТО
      ОБМЕНЯТЬ ЗНАЧЕНИЯ ПРЕДШЕСТВУЮЩЕГО И ТЕКУЩЕГО

    Вот все, что делает приведенный фрагмент кода.

Самые новые вопросы