bchukhraev79
?>

Дан массив целых чисел (n=15), заполненный случайным образом числами из промежутка [-20, 50]. − удалить из него все элементы, в которых есть цифра 5. − вставить число k после всех элементов, кратных своему номеру (k вводить с клавиатуры − поменять местами первый положительный и последний отрицательный элементы. на паскале)

Информатика

Ответы

Lukina
Const   n = 15;   flag = 111; type   mas = array[1..n] of integer; procedure shiftleft(var a: mas; npos: integer); // элементы массива a, начиная с номера npos, сдвигаются на один к началу массива // последний элемент массива заносится значением 111 var   i: integer; begin   for i : = npos to n - 1 do       a[i] : = a[i + 1];   a[n] : = flag end; procedure shiftright(var a: mas; npos: integer); // элементы массива a, начиная с номера npos, сдвигаются на один к концу массива // последний элемент массива теряется, элемент с номером npos заносится значением 111 var   i: integer; begin   for i : = n downto npos + 1 do       a[i] : = a[i - 1];   a[npos] : = flag end; function contains5(p: integer): boolean; // возвращает true, если в числе p есть хоть одна цифра 5 // возвращает false в противном случае var   s: string; begin   str(p, s);   contains5 : = (pos('5', s) > 0) end; procedure deleteall5(var a: mas); // удаляет из массива а все элементы, содержащие цифру 5 var   i, j: integer; begin   i : = 1;   // текущая позиция в массиве   j : = n;   // количество непросмотренных элементов   while j > 0 do   begin       if contains5(a[i]) then           shiftleft(a, i)       else           i : = i + 1;       j : = j - 1   end; end; function fold(var a: mas; pstart: integer): integer; // возвращает номер элемента в массиве а, значение которого кратно его номеру // pstart - номер элемента, с которого начинается просмотр // если такого элемента не найдено, возвращается ноль. var   i: integer; begin   for i : = pstart to n do       if a[i] mod i = 0 then begin           fold : = i;           exit       end;   fold : = 0 end; procedure insertk(var a: mas; k: integer); // после всех элементов массива, кратных своему номеру, // вставляет значение k, сдвигая оставшиеся элементы // к концу массива var   i, j: integer; begin   i : = 1;   while i < = n do   begin       j : = fold(a, i);       if j > 0 then begin           shiftright(a, j);           a[j] : = k;           i : = j + 1       end       else           i : = n + 1   end end; function getfirstpos(var a: mas): integer; // возвращает номер первого положительного элемента в массиве а // возвращает ноль, если таких элементов нет. var   i: integer; begin   i: =1;   while i < = n do   begin       if a[i] > 0 then begin           getfirstpos : = i;           exit       end       else           i : = i + 1   end;   getfirstpos : = 0 end; function getlastneg(var a: mas): integer; // возвращает номер последнего по порядку отрицательного элемента в массиве а // возвращает ноль, если таких элементов нет. var   i: integer; begin   i: =n;   while i > = 1 do   begin       if a[i] < 0 then begin           getlastneg : = i;           exit       end       else           i : = i - 1   end;   getlastneg : = 0 end; procedure swap(var a: mas; p: integer; q: integer); // обмен местами элементов массива a[p] и a[q] var   s: integer; begin   s : = a[p]; a[p] : = a[q]; a[q] : = s end; var   m: mas;   k, i, j: integer; begin   // инициализация массива   randomize;   writeln('исходный массив');   for i : = 1 to n do   begin       m[i] : = random(70) - 20;       write(m[i]: 4)   end;   writeln;   deleteall5(m); // удаление элементов, содержащих цифру 5   writeln('после удаления элементов, содержащих цифру 5');   for i : = 1 to n do       write(m[i]: 4);   writeln;   writeln('введите значение k');   readln(k);   insertk(m, k);   writeln('после вставки значения k');   for i : = 1 to n do       write(m[i]: 4);   writeln;   i : = getfirstpos(m);   if i > 0 then begin       j : = getlastneg(m);       if j > 0 then begin           swap(m, i, j);           writeln('после обмена местами пары элементов');           for i : = 1 to n do               write(m[i]: 4);           writeln;       end   end end. тестовое решение: исходный массив   -2  -5  43  12  13    5  -7    9  27    5  47  45  28  34  21 после удаления элементов, содержащих цифру 5   -2  43  12  13  -7    9  27  47  28  34  21 111 111 111 111 введите значение k 222 после вставки значения k   222 222  -2  43  12  13 222  -7 222    9  27  47  28  34  21 после обмена местами пары элементов   -7 222  -2  43  12  13 222 222 222    9  27  47  28  34  21
Nzharenikova
                                     PascalABC.NET                                       function ToBinary (x:integer):string; beginif (x>0) then ToBinary := ToBinary(x div 2) + (x mod 2).ToString;end; function FromBinary (x:string):integer; beginif (x.Length>0) then FromBinary := FromBinary(x.Substring(1)) + x[1].ToDigit*Round(Power(2,x.Length-1));end; function func (x:integer):integer; beginvar s := ToBinary(x); loop 2 do s += s.AsEnumerable.Sum(c->c.ToDigit) mod 2; func:=FromBinary(s);end; begin Println('f(N):',func(ReadInteger('N:'))); Println('Количество:',(1..160).Count(x->func(x) in 90..160)); end.

Примечание:

Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).

ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.

func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).

Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).

Пример работы:


Автомат обрабатывает натуральное число N по следующему алгоритму: 1. Строится двоичная запись числа
juliajd

БАВГ

Объяснение:

Чем больше в за знаков И (&), тем меньше найденное количество страниц, т.к. надо чтобы на странице встречались все эти слова.

Чем больше в за знаков ИЛИ (|), тем больше найденное количество страниц, т.к. надо чтобы на странице встречалось любое из этих слов.

В за Б 2 знака И (&), поэтому по нему найдётся минимальное количество страниц.

В за Г 2 знака ИЛИ (|), поэтому по нему найдётся максимальное количество страниц.

В за В 1 знак ИЛИ (|), а в за А знаков нет вообще. Поэтому за А будет найдено меньше страниц, чем по за В, т.к. по за А будет искать страницы, где встречается одно слово, а по за В будет искать страницы, где встречается любое из 2-х слов.

БАВГ

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Дан массив целых чисел (n=15), заполненный случайным образом числами из промежутка [-20, 50]. − удалить из него все элементы, в которых есть цифра 5. − вставить число k после всех элементов, кратных своему номеру (k вводить с клавиатуры − поменять местами первый положительный и последний отрицательный элементы. на паскале)
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

ЮлияДаниил520
pravovoimeridian
alexandergulyamov
Маринина_Елена
dmitrievanata83538
Peshkov
keti0290103
seleznev1980
mlf26
Дмитрий_Владимирович1162
Микроволновые системы что это​
kristina1989
agaloan8
oksanashabanovadc3197
galtig83
Палкина-Дроздова