Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2023, 13:25   #1
Esmadjin
Пользователь
 
Регистрация: 05.03.2023
Сообщений: 14
По умолчанию дана целочисленная матрица A(M,N) продублировать в матрице каждый столбец, являющийся перестановкой натуральных чисел от 1 до M

Код:
const
x=100;
y=100;
var
  A:array[1..x,1..y]of integer;
  M,N,i,j,k: integer;
  isP: boolean;
  begin
    write('Введите M=');
    readln(M);
    write('Введите N=');
    readln(N);
    for i:=1 to M do
      for j:=1 to N do
      begin
        write('Введите A[',i,',',j,']=');
        readln(A[i,j]);
      end;
     for i:=1 to M do
       begin
      for j:=1 to N do
        write(A[i,j]:5);
      writeln
      end;
      
      
     
      for j:=1 to N do
      begin
        isP:= True;
        for i:=1 to M do
          if A[i,j]<>i then
          begin
            isP:=False;
            break;
          end;
          
          if isP then
          begin
            for i:=M downto 1 do
            begin
              for k:=N downto j+1 do
                A[i,k]:=A[i,k-1];
              A[i,k+1]:=A[i,j];
            end;
            Inc(N);    
          end;
      end;
      writeln;
      for i:=1 to M do
      begin
        for j:=1 to N do
          write(A[i,j]:5);
        writeln
      end;
  end.
не работает часть с проверкой, является ли столбец перестановкой чисел. хэлп плиз

Последний раз редактировалось BDA; 06.04.2023 в 20:27.
Esmadjin вне форума Ответить с цитированием
Старый 06.04.2023, 14:29   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Продублировав столбец вы его скопировали на j+1 место, но на следующей итерации цикла вы будете проверять как раз j+1 столбец, а он тот же самый, что и предыдущий.
Выход: разверните внешний цикл и перечисляйте столбцы в обратном порядке.
Код:
for j := N downto 1 do
macomics вне форума Ответить с цитированием
Старый 06.04.2023, 15:47   #3
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 957
По умолчанию

чтоб определить "являющийся перестановкой натуральных чисел от 1 до M"
думаю нужен паттерн выяснения все ли числа в столбце

например присвоить 2-ичные шифры и тогда сумма даст константу
ведь числа будут в столбце по 1 разу типа сумма 2^ от 1 до М

пример: все ли числа подряд от 1 до 5 перемешаны среди 3 1 4 5 2

= 2^3 +2^1 +2^4 +2^5 +2^2 = 62

тогда общая формула =2^(M+1)-2

вариант сложения флагов плох возможностью посчитать просто количество
вместо точно всех подряд и тогда возможно перемножать флаги
тогда любой пробел цепочки покажет признак 0
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 07.04.2023 в 01:31.
сфинкс вне форума Ответить с цитированием
Старый 06.04.2023, 22:48   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Для проверки "являются числа столбца перестановкой натуральных чисел от 1 до M" можно создать массив размером M.
Массив очистить и заполнять элемент единицей, используя число столбца как индекс элемента массива.
Если в процессе заполнения индекс выходит за границу массива, то "не являются".
После заполнения проверить, что все элементы равны единице.
Если не так, например, элемент равен нулю или больше единицы, то "не является".
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 06.04.2023, 23:09   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

ViktorR, можно и в процессе заполнения проверять. Если перед увеличением в элементе не ноль, то "не является". Хотя не знаю, как окажется быстрее. Или использовать массив boolean размера M с флажками. Или использовать множества - В PascalABC.NET можно использовать любой тип в качестве базового.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Pascal ABC.NET. Дана последовательность натуральных чисел, Удалить из последовательности простые числа, а среди оставшихся продублировать числа... n3v3rlucky Помощь студентам 1 30.11.2017 10:44
Верно ли я решил задачу: Дана матрица nxm действительных чисел. Найти столбец матрицы с минимальным произведением элементов. Тырин Артем Помощь студентам 1 18.06.2016 13:00
Дана динамическая целочисленная матрица. D92 Помощь студентам 1 19.03.2013 21:22
Дана целочисленная матрица Катюшка_92 Помощь студентам 6 03.06.2010 09:20
Дана целочисленная квадратная матрица... kitty Помощь студентам 1 05.12.2007 07:40