Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

  …

  Begin

  ...

  max:=A[1];

  min:=A[1];

  for i:=2 to n do

  if A[i]>max then max:=A[i]

  else if A[i]<min then min:=A[i];

  …

Подсчет количества элементов,
удовлетворяющих заданному условию

Задача 8: Подсчитать, сколько раз в массиве встречается элемент, равный 10.

Задача решается по следующему алгоритму:

1. Количество нужных элементов k=0.

2. Проходим по всем элементам массива,

3. И если очередной элемент массива равен 10,

4. Тогда увеличиваем k (количество элементов равных 10) на 1.

Фрагмент программы:

  Var {дополнительные переменные}

  k:integer; {количество элементов, равных 10}

  …

  Begin

  ...

  {1} k:=0;

  {2} for i:=1 to n do

  {3} if A[i]=10

  {4} then k:=k+1;

  …

Удаление элемента из массива

Задача 9: Удалить из массива 1-ый элемент.

Удаление элемента заключается в:

1. сдвиге элементов, стоящих правее удаляемого влево;

2. уменьшении количества элементов массива n на количество удаляемых элементов.

Сдвиг элементов выполняется так:

1. Начиная с удаляемого элемента, копируем содержимое элемента, стоящего правее в текущий элемент: A[i]:=A[i+1].

2. Переходим к следующему элементу вправо: i:=i+1.

3. Заканчиваем сдвиг, когда i=n-1, так как i+1 при i=n-1 равен n..

Фрагмент программы:

  …

  {1 - сдвигаем элементы на одну позицию вправо}

  {вначале i:=1, потому что надо удалить 1-ый элемент}

  for i:=1 to n-1 do

НЕ нашли? Не то? Что вы ищете?

  A[i]:=A[i+1];

  {2 - уменьшаем количество элементов в массиве}

  n:=n-1;

  …

Задача 10: Удалить из массива максимальный элемент массива.

Для этого надо:

1. Найти индекс максимального элемента.

2. Удалить элемент с найденным индексом.

Фрагмент программы:

  Var

  imax:IndexEl; {индекс максимального элемента}

  …

  Begin

  ...

  {1 - ищем индекс максимального элемента массива}

  imax:=1; {вначале imax указывает на первый элемент}

  {в цикле начиная со 2-го элемента}

  for i:=2 to n do

  {сравниваем i-ый элемент с максимальным на текущий момент времени, и если
  i-ый элемент больше максимального, то максимальным становится i-ый элемент}

  if A[i]>A[imax] then imax:=i;

  {2 - удаляем элемент массива с индексом imax}

  for i:=imax to n-1 do

  A[i]:=A[i+1];

  dec(n); {уменьшаем n на 1}

Замечание: в ТР имеются процедуры увеличения и уменьшения переменной целого типа.

  Inc - увеличение значения переменной.


Вид вызова

для целого X

Inc(x);

x:=x+1;

Inc(x, n);

x:=x+n;

где x - переменная целого типа; n - целочисленное выражение.

В первом случае переменной x присваивается следующее значение (например, x была равна 10, тогда после выполнения inc(x) x равна 11). Таким образом, можно сказать, что запись inc(x) эквивалентна записи x:=x+1. Можно также сказать, что запись inc(x, n) эквивалентна записи x:=x+n.

Dec – уменьшение значения переменной.

Вид вызова

для целого X

Dec(x);

x:=x-1;

Dec(x, n);

x:=x-n;


Вставка новых элементов в массив

Задача 11: В массив после максимального элемента вставить элемент, равный 0.

Пример исходного массива A: 1 2 5 1 0 1 2

  максимальный элемент A[3]=5

Массив после вставки элемента: 1 2 5 0 1 0 1 2

Алгоритм вставки элемента в массив:

1. Сдвинуть элементы от позиции вставляемого элемента в конец.

2. В позицию вставляемого элемента вписать нужное значение.

3. Количество элементов n увеличить на 1 .

Общий алгоритм программы следующий:

1 . Введем массив А.

2 . Найдем индекс max элемента.

3 . Вставим после max 0.

4 . Выведем получившийся массив.

Приведем полный текст программы:

{ Задание: В массив после максимального элемента вставить элемент, равный 0}

  Program InsertExample;

  Const

  maxN = 20; {максимально возможное количество элементов в массиве}

  Type

  IndexEll = 1 .. maxN; {индексы массива лежат в интервале от 1 до maxN}

  arrInt = array[interval] of integer; {массив целых чисел, содержащий до maxN эл-в}

  Var

  a:arrInt;  {массив}

  n:integer; {количество элементов в массиве}

  i:IndexEl; {переменная для сканирования массива}

  max: IndexEl; {номер max элемента массива}

  Begin

  {1 - ввод массива - генерируем случайные элементы}

  randomize;

  n:=random(6)+5; {n в интервале 5..10}

  for i:=1 to n do

  A[i]:=random(19)-9; {Генерируем элементы массива}

                          { каждый элемент имеет значение в интервале -9..9}

  {2 - ищем индекс max элемента}

  max:=1;

  for i:=2 to n do

  if A[i]>A[max] then max:=i;

  {3- вставляем 0 после максимального элемента}

  {сначала сдвигает “хвост” массива вправо}

  for i:=n downto max+1 do

  A[i+1]:=A[i];

  {заносим в следующий за максимальным элемент 0}

  A[max+1]:=0;

  {увеличиваем количество элементов массива}

  Inc(n);

  {4 - выводим массив}

  writeln('Массив А после вставки:');

  for i:=1 to n do

  write(A[i]:3);

  readln; {ждем нажатия клавиши Enter}

  End.

Данная программа демонстрирует модульный подход к решению задач - задача разбивается на подзадачи, полученные подзадачи решаются отдельно. Если подзадача не решается непосредственно, то она снова разбивается на подзадачи и т. д. Такой подход называется "программирование сверху вниз".

Замечание: данная программа таит в себе ошибку. Если n=20, то после вставки еще одного элемента n станет равной 21, и, скорее всего, программа повиснет (потому что элементов в массиве может быть НЕ БОЛЬШЕ 20). Следовательно, при вставке элементов необходимо следить, чтобы было n<=maxN.

Удаление нескольких элементов массива

Задача 12: Удалить из массива все элементы между k-м и z-м элементами.

Рассмотрим задачу на примере при количестве элементов в массиве n=10, k=3, z=7 (т. е. надо удалить элементы между третьим и седьмым).

Будем использовать переменную d - количество удаляемых элементов. Значение d можно вычислить по формуле: d = z - k – 1 ( в нашем примере получится d = 7 - 3 - 1 = 3).

Массив A до удаления:

a[1]        a[2]        a[3]        a[4]        a[5]        a[6]        a[7]        a[8]        a[9]        a[10]

  1          3          9          1          0          1          3          2          7          2

                  ^                          ^                  ^

                 a[k]                         a[z]                 a[n]

Массив A после удаления:

a[1]        a[2]        a[3]        a[4]        a[5]        a[6]        a[7]

  1          3          9          3  2          7          2

                  ^          ^          ^

                 a[k]        a[z]         a[n]

После удаления n стало меньше на d (в нашем примере на 3).

Общий алгоритм решения:

1 . Сдвинуть элементы вперед на d элементов, начиная с z-го.

2 . Уменьшить n на d.

Фрагмент программы:

  Var

  k: integer; {индекс элемента, после которого удаляем}

  z: integer; {индекс элемента, до которого удаляем}

  d: integer; {количество удаляемых элементов}

  …

  Begin

  …

  {вычисляем количество удаляемых элементов}

  d:=z-k-1;

  {1 - сдвигаем элементы}

  for i:=z to n do

  A[i-d]:=A[i];

  {2 - уменьшаем n на d}

  Dec(n, d);

  …

Задача 13: Из массива удалить все элементы, которые меньше 0.

Рассмотрим два решения этой задачи.

Алгоритм первого решения:

1. Просматриваем массив.

2. Если элемент<0, то удаляем его и n уменьшаем.

3. Если элемент>=0, то переходим к следующему.

Фрагмент программы:

  …

  {в цикле просматриваем элементы массива}

  i:=1;

  while i<=n do

  begin

  {проверяем, не нужно ли i-ый элемент удалять}

  if A[i]<0 then

  begin

  {если нужно – удаляем i-ый элемент}

for j:=i to n-1 do {сдвигаем}

  A[j]:=A[j+1];

  Dec(n);  {уменьшаем количество элементов}

  end

  else Inc(i); {если удалять не нужно, то переходим к следующему элементу}

  end;

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9