Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 21

Удалить из матрицы строки с нулевыми элементами выше главной диагонали

23.05.2019, 18:08. Показов 1200. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уменьшить размер матрицы A[N, M], удалив из неё строки с нулевыми элементами выше главной диагонали. Я написал такой код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
begin
  writeln('Введите количество строк и столбцов в матрице (не менее 1 и не более 10)');
  read(N, M);
  while (N < 1) or (N > 10) or (M < 1) or (M > 10) do
  begin
    writeln('Ошибка. Введите количество строк и столбцов в матрице (не менее 1 и не более 10)');
    read(N, M);
  end;
  k := 0;
  for i := 1 to N do
  begin
    for j := 1 to M do
    begin
      writeln('Введите элемент ', i, '-й строки ', j, '-го столбца матрицы');
      read(a[i, j]);
      if (j > i) and (a[i, j] = 0) then l[i] := i;
    end;
    if l[i] = i then k := k + 1;
  end;
  N1 := N;
  i := 1;
  while N > N1 - k do
  begin
    if i >= l[i] then begin
      for i := 1 to N do
        for j := 1 to M do 
          a[i, j] := a[i + 1, j];
      N := N - 1;
      end
    else i := i + 1;  
  end;
  for i := 1 to N1 - k do
    for j := 1 to M do
      writeln('Элемент ', i, '-й строки ', j, '-го столбца преобразованной матрицы равен ', a[i, j]);
end.
Но с некоторыми матрицами программа работает неправильно: например, в массиве https://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{pmatrix} <br />
1 & 0 & 2 & 3\\  <br />
0 & 0 & 4 & 5\\<br />
6 & 7 & 8 & 0\\<br />
9 & 10 & 11 & 12<br />
\end{pmatrix} она удаляет 2-ю строку вместо 3-й. Ошибка, как я понял, возникает во 2-м цикле. Как её исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2019, 18:08
Ответы с готовыми решениями:

Найти количество нулевых элементов матрицы, стоящих: выше главной диагонали; ниже главной диагонали
Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих: выше главной диагонали; ниже главной...

Заменить все чётные строки матрицы элементами главной диагонали
НАпишите пожалуйста решение задачи через внешний файл и то что нужно прописать в файле.Заранее спасибо. Дана матрица. Если на главной...

Преобразовать матрицу так, чтобы четные элементы выше диагонали матрицы и сама диагональ стали нулевыми
Дана матрица 10 на 10. Данные введены через randomize в диапазоне от 0 до 100. Преобразовать матрицу так, чтобы четные элементы выше...

3
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
23.05.2019, 18:14
она удаляет 2-ю строку вместо 3-й.
Правильно удаляет, в строке 2 ноль выше главной диагонали, а в строке 3 ниже. По условию нужно удалять где выше.
0
0 / 0 / 0
Регистрация: 25.05.2017
Сообщений: 21
23.05.2019, 18:21  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Правильно удаляет, в строке 2 ноль выше главной диагонали, а в строке 3 ниже. По условию нужно удалять где выше.
Но ведь элемент находится выше главной диагонали, если номер его столбца больше номера его строки. Во 2-й строке нули находятся в 1-м и 2-м столбцах, а в 3-й — в 4-м.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
23.05.2019, 21:23
Да, извините, попутал.

Добавлено через 2 часа 57 минут
Не знаю нужно или нет, но я написал.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
var a:array[1..10,1..10] of integer;
    n,m,i,j,k,s:integer;
begin
repeat
writeln('Введите размер матрицы от 2 до 10');//матрица квадратная
readln(n);
until n in [2..10];
writeln('Введите элементы матрицы целые числа в том числе ноли');
for i := 1 to n do
for j := 1 to n do
 begin
  write('a[',i,',',j,']=');
  readln(a[i,j]);
 end;
writeln('Исходная матрица');
for i:=1 to n do
 begin
  for j:=1 to n do
  write(a[i,j]:5);
  writeln;
 end;
i:=n-1;//начнем с предпоследней строки,
       // в последней нет элемента выше главной дагонали
s:=0; //фиксация удаления строки
m:=n;//запомним количество строк
while i>0 do//пока не верх
 begin
  j:=i+1; //будем смотреть элементы за главной диагональю
  while(j<=n)and(a[i,j]<>0) do inc(j);//если не 0, вперед
  if j<=n then//если есть 0
   begin
    s:=1;//фиксируем
    for k:=i to M-1 do//сдвинем нижние строки на 1 вверх
    for j:=1 to N do
    a[k,j]:=a[k+1,j];
    dec(m)//уменьшим кол. строк
   end;
  dec(i);//следующая строка выше
 end;
if s=0 then write('Нет нолей выше главной диагонали')
else
 begin
  writeln('Удаление строк с нолями выше главной диагонали');
  for i:=1 to m do
   begin
    for j:=1 to n do
    write(a[i,j]:5);
    writeln;
   end;
 end;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2019, 21:23
Помогаю со студенческими работами здесь

Обнулить элементы матрицы, лежащие одновременно выше главной диагонали и ниже побочной диагонали
Дана квадратная матрица порядка М. Обнулить элементы матрицы,лежащие одновременно выше главной диагонали и ниже побочной диагонали.

Отсортировать элементы матрицы выше главной диагонали по возрастанию
отсортировать элементы выше главной диагонали по возрастанию. что-то не работает( for i:=1 to n do for j:=i+1 to n do begin ...

Вычислить сумму элементов матрицы, расположенных выше главной диагонали
Дан массив A вычислить сумму элементов массива расположенную выше левой диагонали.

Найти сумму элементов матрицы, расположенных выше главной диагонали
найти сумму элементов, расположенных выше главной диагонали, для матриц: X,Y,Z=X2+Y2. Сделать с помощью процедуры или функции.

Поменять местами части матрицы выше/ниже главной диагонали
Массивы, дана матрица размерности Ann. Поменять на квадратной матрице часть выше главной диагонали (лишь одну строку) ту, что идет до...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru