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

Каждый элемент квадратной матрицы размером nxn равен нулю, либо единице. найдите количество "островов", образованных единицами. под "островом" понимается группа единиц (либо одна единица), со всех сторон окруженная нулями (или краями матрицы). единицы относятся к одному "острову", если из одной из них можно перейти к другой, "наступая" на единицы, расположенные в соседних клетках. соседними являются клетки, граничащие по горизонтали или вертикали. входные данные читаются из файла input.tzt результат выводится в файл output.txt.

👇
Ответ:
Zoi568
Zoi568
20.04.2023
Пришлось написать рекурсивную процедуру. Надеюсь, это не вызовет вопросов.
Во вложениях даны тестовые файлы.

const
  n1 = 20;

type
  r5 = record
    value: byte; {Значение элемента}
    right: boolean; {Есть ли единица справа?}
    down: boolean; {Есть ли единица ниже?}
    left: boolean; {Есть ли единица слева?}
    viewed: boolean {Элемент просмотрен?}
  end;

var
  n, i, j, k: integer;
  m: array[1..n1, 1..n1] of r5;
  fin, fout: Text;

procedure Mark(i: integer; j: integer);
{рекурсивная процедура, отыскивающая весь островок и помечающая его}
begin
  if not m[i, j].viewed then
  begin
    m[i, j].viewed := true;
    if m[i, j].right then Mark(i, j + 1);
    if m[i, j].down then Mark(i + 1, j);
    if m[i, j].left then Mark(i, j - 1)
  end
end;

begin
  Assign(fin, 'Input.txt');
  Reset(fin);
  {Инициализация из файла}
  Readln(fin, n);
  for i := 1 to n do
    for j := 1 to n do
      Read(fin, m[i, j].value);
  Close(fin);
  {Определение соседей}
  for i := 1 to n do
    for j := 1 to n do
    begin
      if m[i, j].value = 1 then begin
        if j < n then m[i, j].right := (m[i, j + 1].value = 1) else m[i, j].right := false;
        if i < n then m[i, j].down := (m[i + 1, j].value = 1) else m[i, j].down := false;
        if j > 1 then m[i, j].left := (m[i, j - 1].value = 1) else m[i, j].left := false
      end;
      m[i, j].viewed := false
    end;
  {Подсчет "островков"}
  k := 0;
  for i := 1 to n do
    for j := 1 to n do
    begin
      with m[i, j] do
      begin
        if (m[i, j].value = 1) and (not m[i, j].viewed) then begin
          k := k + 1;
          Mark(i, j)
        end
      end
    end;
  Assign(fout, 'Output.txt');
  Rewrite(fout);
  Writeln(fout, k);
  Close(fout)
end.
4,4(83 оценок)
Открыть все ответы
Ответ:
KenDipp
KenDipp
20.04.2023
                                        ДВОРНЯГА
                                       ШАРИК ТУЗИК БАРБОС
                                            БУЛЬДОГ
                                              цезарь 
                                               граф
                                                васнсар
                                                   гари   
                                                   пудель
                                                    эмма белла джозефина стелла

                                                     
4,4(14 оценок)
Ответ:
vladcjdyte
vladcjdyte
20.04.2023
Всем тем, кому не понятен язык, 2. циклы 1. найти наименьший делитель натурального числа 2. найти все делители натурального числа 3. найти наибольший делитель натурального числа 4. найти сумму делителей числа 600 и их количество 5. найти все делители чисел 90 и 360 6. найти натуральное число, произведение всех делителей которого =5832 7. найти натуральное число, если оно делится на 3 и 4 и имеет 14 делителей 8. подсчитать количество делителей натурального числа, сформированное гениратором случайных чисел в диапазоне от 1 др 10000 9. составить проагрмму, которая нашла бы в интервале от 1 до 1000 число, с наибольшим количеством делителей 10. найти натуральное число в пределах о 1 до 10000 с максимальной суммой делителей 11. составить программу, которая бы напечатала бы все простые числав диапазоне от n до m, а также подсчитать их количество. n и m ввести с клавиатуры 12. между любыми двумя последовательными простыми числами находится заданное число к ? 13. найти и вывести на экран 5 простых чисел, больших заданного к, вводится с клавиатуры. 14. дано простое число р. найти следущее простое число 15. задано некоторое натуральное число р. найти ближайшее к нему простое число. 16. найти все трехзначные числа , кратные 7, сумма цифр которых также кратно 7. если найденное число нечетное , определить , является ли оно простым 17. составить программу поиска трех простых чисел, предшествующих числу м , вводимый с клавиатуры ( м > = 10). 18. составить программу поиска всех цифр - близнецов, принадлежащих заданному диапазону [m , n] . 19. дано простое число. есть ли у него число - близнец ? 20. определить, является числа находящихся по обе стороны от заданного четного числа с , близнецами . 21. является ли заданное натуральное число совершенным ? 22. составить программу поиска всех пар дружественных чисел , меньших 10000 . 23. определить количество разрядов натурального числа n, заданного пользователем . 24. вычислить сумму цифр натурального числа n. 25. записать заданное число n в обратном порядке. 26. составить программу , которая проверяет , является ли число n, вводимое с клавиатуры , палиндромом . 27. найти и напечатать все натуральные числа , которые при возведении в квадрат палиндром . 28. составить программу , которая проверяет , есть ли среди палиндромов в интервале [ 10..1000000 ] простые числа. 29. составить программу , печатающую все нечетные палиндромы в интервале [ 10..1000000 ] . 30. найти и напечатать все натуральные числа в интервале [ 1..2000 ] , равные сумме кубов своих цифр . 31. найти и напечатать все натуральные числа в интервале [ 1..5000 ], равные кубу суммы своих цифр . 32. найти и напечатать все четырехзначные числа , у которых сумма первых двух цифр равна сумме двух последних . 33. в заданном натуральном числе выбросить цифры 3 и 7, оставив неизменным порядок других цифр . 34. проанализировать все числа из диапазона [ 10..1000 ] и напечатать те из них , в записи которых нет цифр 3 и 7 . 35. найти количество шестизначных чисел, у которых все цифры разные. 36. на интервале от n до k выбрать те числа ,которые содержат ровно 3 одинаковые цифры . пример : 6766 , 5444 , 0060 , 0006 . 37. составить программу вычисления цифрового корня натурального числа , введенного с клавиатуры. вычислить и напечатать цифровые корни совершенных чисел, принадлежащих диапазону от х до у, вводящихся с клавиатуры 38. вычислить и напечатать все числа в диапазоне [ 10..9999 ] , кратные своему цифровому корню . 39. вычислить и напечатать все числа в диапазоне [ 100..99999 ], цифровой корень которых: кратный 3 или 5 является простым числом 40. задано 3 натуральных числа. найти нод наибольшего и наименьшего из них. 41. сколько существует натуральных чисел от 20 до 120 , а не взаимно простых с 30 ? 42. сколько существует натуральных чисел, меньших 100 и взаимно простых с числом 36 ? 43. найти все натуральные числа , меньше заданного натурального м и взаимно простые с ним. 44. составить программу сокращения дробей . 45. сравнить две дроби по величине . 46. ​​составить программу сложения ( вычитания ) двух дробей . 47. составить программу умножения ( деления ) двух дробей .
4,8(79 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
Полный доступ к MOGZ
Живи умнее Безлимитный доступ к MOGZ Оформи подписку
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ