Статистика
Всего в нашей базе более 4 327 663 вопросов и 6 445 976 ответов!

Дан

10-11 класс

массив целых чисел (n=15),
заполненный случайным образом числами из промежутка [-20,50].

Dayа 28 окт. 2014 г., 3:31:55 (9 лет назад)
Рейтинг
+ 0 -
0 Жалоба
+ 0 -
Ariha999
28 окт. 2014 г., 5:42:56 (9 лет назад)

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


+ 0 -
Ismurzieva
28 окт. 2014 г., 7:50:06 (9 лет назад)

Комментарий удален

+ 0 -
Sos111
28 окт. 2014 г., 9:22:54 (9 лет назад)

Комментарий удален

+ 0 -
Aizhan20000
28 окт. 2014 г., 10:15:23 (9 лет назад)

Комментарий удален

+ 0 -
Garikstepanyan
28 окт. 2014 г., 12:37:09 (9 лет назад)

Комментарий удален

+ 0 -
Help255
28 окт. 2014 г., 13:22:57 (9 лет назад)

Комментарий удален

Ответить

Читайте также

Данные, объемом 16 Мбайт, поступают на компьютер по линии со скоростью передачи данных 32 Мбит/с. После получения 4 Мбайт компьютер начинает одновременно

передавать эти данные по другой линии связи со скоростью 4 Мбит/с. Сколько секунд пройдет от начала приема данных по высокоскоростному каналу до полной передачи их по низкоскоростному каналу?

Дано целое положительное число. Проверить истинность высказывания: «данное число является нечетным трехзначным».

Входные данные: ввести одно целое положительное число a ((1<=a<=1000).
Выходные данные: вывести слово «true» если приведенное высказывание для предложенных исходных данных является истинным или «false» в противном случае.

C++Написать программу вычисления объема параллелепипеда. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные

пользователем, выделены полужирным шрифтом).

Вычисление объема параллелепипеда.

Введите исходные данные:

Длинна (см): 9

Ширина (см): 7.5

Высота (см): 5



Вы находитесь на странице вопроса "Дан", категории "информатика". Данный вопрос относится к разделу "10-11" классов. Здесь вы сможете получить ответ, а также обсудить вопрос с посетителями сайта. Автоматический умный поиск поможет найти похожие вопросы в категории "информатика". Если ваш вопрос отличается или ответы не подходят, вы можете задать новый вопрос, воспользовавшись кнопкой в верхней части сайта.