profile
Размещено 5 лет назад по предмету Информатика от m0nster99

Написать программу на Pascal использую процедуры и функции

1. Вычислить сумму элементов массива, расположенных между первым
и последним положительными элементами.
2. Преобразовать массив таким образом, чтобы сначала располагались
элементы, равные 0, а затем – остальные

  1. Ответ на вопрос
    Ответ на вопрос дан Аккаунт удален
    const
      nn=100; // максимальный размер массива

    type
      tA=array[1..nn] of integer;

    procedure FillArray(n:integer; var a:tA);
    var
      i:integer;
    begin
      Randomize;
      for i:=1 to n do a[i]:=Random(21)-10
    end;

    procedure PrintArray(n:integer; a:tA);
    var
      i:integer;
    begin
      for i:=1 to n do Write(a[i],' ');
      Writeln
    end;

    function PartSum(n:integer; a:tA):integer;
    var
      i,i1,i2,s:integer;
    begin
      i:=1;
      while (a[i]<=0) and (i<=n) do i:=i+1;
      if i>n then begin
        PartSum:=0;
        exit
        end;
      i1:=i+1;
      i:=n;
      while (i>i1) and (a[i]<=0) do i:=i-1;
      i2:=i-1;
      if i2<=i1 then PartSum:=0
      else begin
        s:=0;
        for i:=i1 to i2 do s:=s+a[i]
        end;
        PartSum:=s   
    end;

    procedure SwapZeros(n:integer; var a:tA);
    var
      i,j:integer;
    begin
      for i:=1 to n do
        if a[i]=0 then begin
          for j:=i downto 2 do a[j]:=a[j-1];
          a[1]:=0;
          end;
    end;

    var
      n:integer;
      a:tA;

    begin
      Write('n= '); Read(n);
      FillArray(n,a);
      PrintArray(n,a);
      Writeln('S=',PartSum(n,a));
      SwapZeros(n,a);
      PrintArray(n,a)
    end.

    Пример
    n= 21
    -3 1 4 -2 10 -5 -7 7 -5 -10 -2 5 0 -6 3 5 -7 0 -9 6 4
    S=-13
    0 0 -3 1 4 -2 10 -5 -7 7 -5 -10 -2 5 -6 3 5 -7 -9 6 4

    В качестве бонуса - современное решение без всех этих долгописаний.

    // PascalABC.NET 3.3, сборка 1634 от 14.02.2018
    // Внимание! Если программа не работает, обновите версию!

    begin
      var a:=ArrRandom(ReadInteger('n='),-10,10); a.Println;
      var i:=a.IndexesOf(t->t>0);
      Writeln('S=',a[i.First+1:i.Last].Sum);
      a:=(a.Where(t->t=0)+a.Where(t->t<>0)).ToArray; a.Println
    end.
    1. Ответ на вопрос
      Ответ на вопрос дан Аккаунт удален
      Современный Паскаль позволяет написать данную задачу короче в десять (!) раз. Не говоря о том, что вероятность допустить ошибку снижается также в десятки раз.
Не тот ответ на вопрос, который вам нужен?
Найди верный ответ
Самые новые вопросы
tegysigalpa2012
Русский язык - 5 лет назад

Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса 1. укажите личное местоимение: 1) некто 2) вас 3) ни с кем 4) собой 2. укажите относительное местоимение: 1) кто-либо 2) некоторый 3) кто 4) нам 3. укажите вопросительное местоимение: 1) кем-нибудь 2) кем 3) себе 4) никакой 4. укажите определительное местоимение: 1) наш 2) который 3) некий 4) каждый 5. укажите возвратное местоимение: 1) свой 2) чей 3) сам 4) себя 6. найдите указательное местоимение: 1) твой 2) какой 3) тот 4) их 7. найдите притяжательное местоимение: 1) самый 2) моего 3) иной 4) ничей 8. укажите неопределённое местоимение: 1) весь 2) какой-нибудь 3) любой 4) этот 9. укажите вопросительное местоимение: 1) сколько 2) кое-что 3) она 4) нами 10. в каком варианте ответа выделенное слово является притяжательным местоимением? 1) увидел их 2) её нет дома 3) её тетрадь 4) их не спросили

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.