• Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить реверс для каждой трети массива.
    Пример:
    Исходный массив:
    4 -5 3 10 -4 -6 8 -10 1 0 5 7
    Результат:
    10 3 -5 4 -10 8 -6 -4 7 5 0 1
    Есть готовая программа. Объясните пожалуйста что да как.
    const n=12;
    var a:array[1..n] of integer;
    i,k,x:integer;
    begin
    randomize;
    writeln('Исходный массив');
    for i:=1 to n do
    begin
    a[i]:=-12+random(25);
    write(a[i]:4);
    end;
    writeln;
    k:=n div 3;
    for i:=1 to k div 2 do
    begin
    x:=a[i];
    a[i]:=a[k-i+1];
    a[k-i+1]:=x;
    x:=a[k+i];
    a[k+i]:=a[2*k-i+1];
    a[2*k-i+1]:=x;
    x:=a[2*k+i];
    a[2*k+i]:=a[n-i+1];
    a[n-i+1]:=x
    end;
    writeln('Инверсия третей массива');
    for i:=1 to n do
    write(a[i]:4);
    end.

Ответы 5

  • А вот еще вопрос.Что такое k?
  • Объясню, но многословно. Эта версия языка постоянно дорабатывается и пока в ней нет средства, чтобы разрезанную на три части части последовательность элементов снова склеить в одномерный массив. Поэтому понадобился двойной цикл, чтобы пройти по каждому элементу результата разрезки и перестановок и "загнать" эементы назад в этот массив. Переменная k - это как раз указатель индекса в массиве. Мы же пишем присваивание a[k]:=e2;
  • Спасибо!
    • Автор:

      issac
    • 5 лет назад
    • 0
  • Нашлось более короткое и красивое решение. Вместо var k:=0 и трех следующих за ним строк достаточно написать b.SelectMany(x->x).Println
    • Автор:

      bits
    • 5 лет назад
    • 0
  • Спасибо!
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years