Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 3
1

Удаление столбцов матрицы, не содержащих 0

17.06.2014, 21:01. Показов 532. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, смысл программы создание 2-мерного массива с максимальной размерностью 10 на 10. Все элементы массива вводятся пользователем в ручную. Далее нужно найти столбцы, в которых нет ни одного "0" и удалить их все. Сам пробовал сделать, но удаляет не все столбцы. В чём ошибка? Как можно исправить? Желательно на основе этого кода. Заранее большое спасибо.

P.S. Первый раз здесь пишу, прошу прощение если опубликовал не в том разделе, или допустил другую ошибку.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
program UnDeIf0;
uses crt;
var
D: array [1..10,1..10] of integer;
I: byte;
J: byte;
N: byte;
M: byte;
R: integer; 
K: byte;
begin
clrscr;
writeln('Программа для удаления столбцов без 0');
readln;
clrscr;
repeat
writeln('Введите количество столбцов');
readln (N);
if (N<1) or (N>10) then
writeln('Ошибка размерности');
writeln('Введите количество строк');
readln (M);
if (M<1) or (M>10) then
writeln('Ошибка размерности');
until (N in [1..10]) and (M in [1..10]);
for J:=1 to M do
for I:=1 to N do
begin
writeln ('Введите элемент массива');
readln (D[i, j]);
end;
writeln ('Исходный массив');
for J:=1 to M do
begin
writeln;
for I:=1 to N do
write (D[i,j]);
end;
readln;
clrscr;
R:=0;
for I:=1 to N do
begin
K:=0;
for J:=1 to M do
    begin
    if D[i,j]=0 then
    K:=1;
    end;
If K=0 then
begin
R:=R+1;
for i:=i to N-1 do
for J:=1 to M do
D[i, j]:= D[i+1, j];
end;
end;
If R=N then writeln ('Все элементы были удалены!')
else writeln ('Новый массив:');
for J:=1 to M do
begin
  writeln;
  for I:=1 to N-R do
  write (D[i, j]);
end;
readln;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2014, 21:01
Ответы с готовыми решениями:

Среди столбцов заданной целочисленной матрицы, содержащих только...
Задача: Среди столбцов заданной целочисленной матрицы, содержащих только такие элементы, которые...

Найти номера столбцов матрицы, содержащих одинаковые элементы
Двумерный массив размерности m*n, заполнен простыми числами. Найти номера столбцов, содержащих...

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

Найти номер первого из столбцов матрицы, не содержащих элементов, меньших s
Найти номер первого из столбцов, не содержащих элементов, меньших s. (матрица)

2
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
18.06.2014, 08:35 2
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
program UnDeIf0;
uses crt;
var D: array [1..10,1..10] of integer;
    I,J,N,M,K,P,R: byte;
begin
clrscr;
writeln('Программа для удаления столбцов без 0');
readln;
clrscr;
repeat
writeln('Введите количество столбцов');
readln (N);
if (N<1) or (N>10) then
writeln('Ошибка размерности');
writeln('Введите количество строк');
readln (M);
if (M<1) or (M>10) then
writeln('Ошибка размерности');
until (N in [1..10]) and (M in [1..10]);
for I:=1 to M do
for J:=1 to N do
 begin
  write ('Введите элемент массива D[',I,',',J,']=');
  readln (D[i,j]);
end;
clrscr;
writeln ('Исходный массив');
for I:=1 to M do
 begin
  for J:=1 to N do
  write (D[i,j]:4);
  writeln
 end;
R:=0; {нет пока удалений}
J:=N;{начнем с последнего столбца}
while J>=1 do
 begin
  K:=0;{нет нулей}
  I:=1;
  while(I<=M)and(K=0) do{пока не конец столбца и нет нолей}
  if D[i,j]=0 then K:=1{если ксть 0, то больше не ищем}
  else I:=I+1; {иначе ищем дальше}
  if K=0 then{если нет нолей}
   begin
    R:=1;{зафиксируем удаление}
    if J=N then {если столбец на этот момент последний}
     begin
      N:=N-1;{обрезаем}
      J:=J-1;{влево}
     end
    else {если не последний}
     begin
      for K:=J to N-1 do{от этого столбца до предпоследнего}
      for P:=1 to M do{всем элементам столбцов}
      D[P,K]:=D[P,K+1];{присваиваем значения правого}
      N:=N-1;{уменьшаем количество}
     end;
   end
  else J:=J-1;{если есть ноли, влево}
 end;
if N=0 then writeln('Все столбцы удалены!')
else if R=0 then write('Нет столбцов для удаления')
else
 begin
  writeln('Удаление столбцов без нолей:');
  for I:=1 to M do
   begin
    for J:=1 to N do
    write(D[I,J]:4);
    writeln;
  end;
 end;
readln;
end.
1
0 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 3
18.06.2014, 09:10  [ТС] 3
Puporev, большое вам спасибо
0
18.06.2014, 09:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2014, 09:10
Помогаю со студенческими работами здесь

Найти количество столбцов матрицы, содержащих только положительные элементы
Подскажите пожалуйста как написать: 0,5 0,2 2,4 0 2,1 1 3,1 ...

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

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

Определение номеров столбцов матрицы, не содержащих в качестве элемента заданное значение
Ну в заголовке, в принципе, написано, какую программу надо написать. Вот, написал что-то похожее,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru