1-11 класс
  • 1-11 класс
  • 1 класс
  • 2 класс
  • 3 класс
  • 4 класс
  • 5 класс
  • 6 класс
  • 7 класс
  • 8 класс
  • 9 класс
  • 10 класс
  • 11 класс
Выберите класс
Предметы
Семакин
§26 ГДЗ Семакин 10 класс (Информатика)
Семакин, Хеннер, Шеина
10 класс
Автор
Семакин, Хеннер, Шеина

§26 ГДЗ Семакин 10 класс (Информатика)

Задача

2. Как можно вычислять целые случайные числа в диапазоне от -50 до 0?
3. Как можно вычислять вещественные случайные числа в диапазоне от 2,5 до 10?
4. Даны два вектора{xi}, {yi}, i = 1, …, 10, упорядоченные по возрастанию. Соедините их в один вектор {z1}, i = 1, …, 20 так, чтобы сохранилась упорядоченность.
5. Дан массив, состоящий из 100 целых чисел. Выведите все числа, которые встречаются в этом массиве:
а) несколько раз;
б) только по одному разу.
6. В целочисленной матрице размером 10 х 10 найдите максимальное значение и индексы всех элементов, равных ему.
7. Матрицу размером 5 х 10 заполните случайными двоичными цифрами (0 и 1). Определите номер строки с наибольшим количеством нулей.
8. В двоичной матрице размером 10 х 10 (см. задание 7) найдите совпадающие строки.

Подробный ответ

1. Массив можно заполнять двумя основными способами: вводом с клавиатуры и случайными числами.

2. Чтобы получить целые случайные числа от $$-50$$ до $$0$$, можно использовать выражение:

$$-50 + \text{Random}(51)$$

Так как $$\text{Random}(51)$$ даёт целое число от $$0$$ до $$50$$.

3. Чтобы получить вещественные случайные числа от $$2{,}5$$ до $$10$$, можно использовать:

$$2{,}5 + \text{Random}(7{,}5)$$

4. Чтобы объединить два упорядоченных вектора в один упорядоченный, нужно идти по ним двумя указателями и каждый раз брать меньший из текущих элементов, а затем дописывать оставшиеся элементы.

program test;
begin
  var a := ArrRandomInteger(10); a.Sort;
  var b := ArrRandomInteger(10); b.Sort;
  var c := new integer[20];
  writeln(‘Array 1:’); a.println;
  writeln(‘Array 2:’); b.println;
  var i := 0;
  var j := 0;
  var k := 0;
  while (i < 10) and (j < 10) do
  begin
    if a[i] < b[j] then
    begin
      c[k] := a[i];
      i := i + 1;
    end
    else
    begin
      c[k] := b[j];
      j := j + 1;
    end;
    k := k + 1;
  end;
  while i < 10 do
  begin
    c[k] := a[i];
    i := i + 1;
    k := k + 1;
  end;
  while j < 10 do
  begin
    c[k] := b[j];
    j := j + 1;
    k := k + 1;
  end;
  writeln(‘Merged array:’); c.println;
end.

5. Чтобы вывести числа, встречающиеся в массиве несколько раз, удобно сначала отсортировать массив, а затем сравнивать соседние элементы. Для чисел, встречающихся только один раз, проверяем, что они не равны соседям.

var
  a: array[1..100] of integer;
  i, j: integer;
procedure swap(var x, y: integer);
var t: integer;
begin
  t := x;
  x := y;
  y := t;
end;
begin
  for i := 1 to 100 do a[i] := random(100);
  for j := 1 to 99 do
    for i := 1 to 100 — j do
      if a[i] > a[i + 1] then swap(a[i], a[i + 1]);
  for i := 2 to 99 do
    if (a[i] = a[i + 1]) or (a[i] = a[i — 1]) then writeln(‘a[‘, i, ‘]=’, a[i]);
end.

Для пункта б) достаточно вывести элементы, у которых нет равных соседей:

var
  a: array[1..100] of integer;
  i, j: integer;
procedure swap(var x, y: integer);
var t: integer;
begin
  t := x;
  x := y;
  y := t;
end;
begin
  for i := 1 to 100 do a[i] := random(100);
  for j := 1 to 99 do
    for i := 1 to 100 — j do
      if a[i] > a[i + 1] then swap(a[i], a[i + 1]);
  if a[1] <> a[2] then writeln(‘a[1]=’, a[1]);
  for i := 2 to 99 do
    if (a[i] <> a[i + 1]) and (a[i] <> a[i — 1]) then writeln(‘a[‘, i, ‘]=’, a[i]);
  if a[100] <> a[99] then writeln(‘a[100]=’, a[100]);
end.

6. В матрице нужно сначала найти максимальный элемент, а затем вывести все его координаты.

program Test;
var
  ar: array[1..10, 1..10] of integer;
  i, j, max, count: integer;
begin
  count := 1;
  max := 0;
  randomize;
  for i := 1 to 10 do
  begin
    for j := 1 to 10 do
    begin
      ar[i, j] := random(10) + 1;
      if (j mod 10 = 0) then writeln(ar[i, j]) else write(ar[i, j], ‘ ‘);
      if ar[i, j] > max then max := ar[i, j];
    end;
  end;
  for i := 1 to 10 do
    for j := 1 to 10 do
      if ar[i, j] = max then
      begin
        writeln(‘Индекс ‘, count, ‘ элемента = ‘, i, ‘ ‘, j);
        inc(count);
      end;
end.

7. Для каждой строки считаем количество нулей и запоминаем номер строки с наибольшим их числом.

program Test;
var
  x: array[1..5, 1..10] of integer;
  i, j, max, t, st: integer;
begin
  writeln(‘Матрица:’);
  for i := 1 to 5 do
  begin
    for j := 1 to 10 do
    begin
      x[i, j] := random(2);
      if x[i, j] = 0 then inc(t);
      write(x[i, j]:2);
    end;
    if t > max then
    begin
      max := t;
      st := i;
    end;
    t := 0;
    writeln;
  end;
  writeln(‘Строка с наиб. кол-вом нулей: ‘, st);
end.

8. Чтобы найти совпадающие строки в двоичной матрице, можно сравнивать каждую строку со всеми остальными и выводить одинаковые.

const
  n = 10;
var
  ms: array[1..n] of string;
  t: string;
  i, j: integer;
  f: Text;
begin
  Assign(f, ‘in.txt’); Reset(f);
  for i := 1 to n do Readln(f, ms[i]);
  Close(f);
  Writeln(‘*** Бинарная матрица ***’);
  for i := 1 to n do Writeln(ms[i]);
  Writeln(‘Совпадающие строки’);
  for i := 1 to n — 1 do
    for j := i + 1 to n do
      if ms[i] = ms[j] then
        Writeln(‘Строки ‘, i, ‘ и ‘, j, ‘ совпадают’);
end.

Ответ

1. Вводом с клавиатуры и случайными числами.
2. $$-50 + \text{Random}(51)$$.
3. $$2{,}5 + \text{Random}(7{,}5)$$.
4. Объединение двух упорядоченных векторов выполняется методом двух указателей.
5. Для поиска повторяющихся и уникальных чисел массив нужно отсортировать и сравнивать соседние элементы.
6. Сначала находится максимум, затем выводятся все его индексы.
7. Номер строки с наибольшим количеством нулей определяется по подсчёту нулей в каждой строке.
8. Совпадающие строки находятся попарным сравнением строк матрицы.



Общая оценка
4.1 / 5
Другие учебники
Другие предметы