М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
overmaker
overmaker
12.01.2020 19:57 •  Информатика

Необходимо составить программу с использованием рекурсии замечание: под инвертированием понимают перестановку первого и последнего элементов этой части, второго и предпоследнего и т.д. инвертировать часть массива, расположенную между самым левым минимальным в первой половине массива и самым правым максимальным во второй половине массива.

👇
Ответ:
kilernosok
kilernosok
12.01.2020

Program Program1;
Var
a:array [1..10] of integer;
i,min,max, Nmin, Nmax:integer;

//Процедура рекурсивной инвресии массива
procedure InvertMas(nac,kon:integer);
var
temp:integer;
begin
temp:=a[nac];
a[nac]:=a[kon];
a[kon]:=temp;
if nac+1<kon-1 then InvertMas(nac+1,kon-1);
end;

begin
randomize;
//Заполняем массив случайнами числами и выводим его на экран
writeln('Массив до инверсии:');
for i:=1 to 10 do
begin
a[i]:=random(100);
writeln('a['+inttostr(i)+']='+inttostr(a[i]));
end;
//Находим самый левый минимальный элемент в первой половине массива и номер этого элемента
Nmin:=1;
min:=a[Nmin];
for i:=1 to 5 do
if min>a[i] then
begin
min:=a[i];
Nmin:=i;
end;
//Находим самый правый максимальный элемент во второй половине массива и номер этого элемента
Nmax:=10;
max:=a[Nmax];
for i:=10 downto 6 do
if max<a[i] then
begin
max:=a[i];
Nmax:=i;
end;

writeln;
writeln('Инвертируем часть массива с '+inttostr(Nmin)+' по '+inttostr(Nmax)+' элемент');
//Инвертируем часть массива с Nmin по Nmax
invertmas(Nmin,Nmax);

//Выводим массив после инверсии на экран
writeln;
writeln('Массив после инверсии:');
for i:=1 to 10 do writeln('a['+inttostr(i)+']='+inttostr(a[i]));

end.


Необходимо составить программу с использованием рекурсии замечание: под инвертированием понимают пер
4,7(89 оценок)
Открыть все ответы
Ответ:
livr5
livr5
12.01.2020
// PascalABC.NET 3.1, сборка 1219 от 16.04.2016
begin
  var a:=ReadLines('m17.txt').JoinIntoString.ToIntegers;
  a.Println;
  var b:=a.Select((x,i)->Rec(x,i)).Where(x->x.Item1<0)
    .Select(x->x.Item2).ToArray;
  if b.Count<>2 then
    Writeln('Количество отрицательных элементов не равно двум')
  else begin
    a:=SeqFill(b[0],0).Concat(a.Skip(b[0]).Take(b[1]-b[0]+1))
      .Concat(SeqFill(a.Length-b[1]-1,0)).ToArray;
    a.Println
    end
end.

Тестовое решение:
23 14 7 15 0 13 -6 41 18 13 8 42 27 -11 3 19 10
0 0 0 0 0 0 -6 41 18 13 8 42 27 -11 0 0 0

Файл с исходными данными имеет имя m17.txt. Тестовый файл находится во вложении. Разбивка на строки сделана по 5 значений, но может быть совершенно произвольной. Также нет привязки именно к 17 числам, главное - чтобы отрицательных чисел было ровно два, иначе будет выдано сообщение о их неверном количестве.
4,6(78 оценок)
Ответ:
Sekureti556
Sekureti556
12.01.2020

#include <cstdlib>
#include <iostream>

 

using namespace std;

 

int NOD( int a, int b)
{
   int c=1;

   int d;

   if(a>b)

    d=b;

   else

    d=a;
   for(int j=1;j<=d;j++)
   {
    if(a%j==0 && b%j==0)
    c=j;       
   }
   return c;     
}

 

int main()

{

 int A,B,C;

 cout<<"Введите А"<<endl;

 cin>>A;

 cout<<"Введите В"<<endl;

 cin>>B;

 cout<<"Введите С"<<endl;

 cin>>C;

 cout<<"НОД("<<A<<","<<B<<","<<C<<")="<<NOD(NOD(A,B),C)<<endl;

 system("PAUSE");

 return 0;

}

 

 

 

 

(Код написан на С++.)

4,4(43 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ