Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
2 / 2 / 0
Регистрация: 02.12.2010
Сообщений: 24

Вставьте первый столбец после всех столбцов, в которых есть отрицательные элементы.

23.05.2011, 13:29. Показов 2418. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан двумерный массив. Вставьте первый столбец после всех столбцов, в которых есть отрицательные элементы. (С помощью процедур).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.05.2011, 13:29
Ответы с готовыми решениями:

Вставить перед всеми строками в которых есть 0 первую строку после всех столбцов, в которых есть отрицательные
Вставить перед всеми строками в которых есть 0 первую строку после всех столбцов, в которых есть отрицательные элементы - первый столбец. ...

Удаление ВСЕХ столбцов и строк, на пересечении которых есть отрицательные элементы
Задача: удалить В С Е столбцы и строки матрицы, где встречаются элементы меньше нуля. Сначала попробовала сделать перестановкой: int...

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

13
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2011, 14:10
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
uses crt;
const nmax=10;
type stb=array[1..2*nmax] of integer;{столбец матрицы}
     mtr=array[1..nmax] of stb;{матрица=массив столбцов}
procedure Vvod(var a:mtr; var m,n:byte);
var i,j:byte;
begin
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
for j:=1 to n do{вводим матрицу по столбцам}
for i:=1 to m do
a[j,i]:=random(20)-3;
end;
procedure Vyvod(var a:mtr;m,n:byte);
var i,j:byte;
begin
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[j,i]:4);{выводим по строкам}
  writeln;
 end;
writeln;
end;
procedure Vstav(var a:mtr;m:byte;var n:byte);
var i,j,k:byte;
    b:stb;
begin
b:=a[1];{запомним первый}
j:=1;
while j<=n do
 begin
  k:=0;
  i:=1;
  while(i<=m)and(k=0) do
  if a[j,i]<0 then k:=1{ищем отрицательный в столбце}
  else i:=i+1;
  if k=1 then{если есть}
   begin
    n:=n+1;{добавим столбец}
    if j=n-1 then a[n]:=b{если он был последний, пишем первый в конец}
    else{если нет, сдвигаем за ним столбцы на 1 вправо}
     begin
      for k:=n downto j+2 do
      a[k]:=a[k-1];
      a[j+1]:=b;{за ним пишем первый}
     end;
    j:=j+2;{перешагиваем}
   end
  else j:=j+1;{нет отрицательного, дальше}
 end;
end;
var a:mtr;
    m,n:byte;
begin
clrscr;
randomize;
Vvod(a,m,n);
writeln('Исходная матрица:');
Vyvod(a,m,n);
Vstav(a,m,n);
writeln('Вставка первого столбца после столбцов с отрицательными:');
Vyvod(a,m,n);
readln
end.
1
2 / 2 / 0
Регистрация: 02.12.2010
Сообщений: 24
23.05.2011, 16:35  [ТС]
Спасибо. я так же делала))) меня просят чтобы последняя процедура вставки...была разделена на другие процедуры, а именно процедура поиска отрицательных, процедура сдвига, процедура вставки первого столбца. У меня не получается
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.05.2011, 19:47
Попробуйте так...

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
75
76
77
78
79
80
81
82
83
84
85
86
uses crt;
const nmax=10;
type stb=array[1..2*nmax] of integer;
     mtr=array[1..nmax] of stb;
procedure Vvod(var a:mtr; var m,n:byte);
var i,j:byte;
begin
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
for j:=1 to n do
for i:=1 to m do
a[j,i]:=random(20)-3;
end;
procedure Vyvod(var a:mtr;m,n:byte);
var i,j:byte;
begin
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[j,i]:4);
  writeln;
 end;
writeln;
end;
{поиск отрицательного в столбце}
procedure IsOtr(v:stb;m:byte;var f:boolean);
var i:byte;
begin
f:=false;
i:=1;
while(i<=m)and not f do
if v[i]<0 then f:=true
else i:=i+1;
end;
{сдвиг}
procedure Sdvig(var a:mtr;s:byte;var k,n:byte);
var j:byte;
begin
n:=n+1;
if s=n-1 then a[n]:=a[1]{если последний}
else{остальные}
 begin
  for j:=n downto s+2 do
  a[j]:=a[j-1];
  k:=s+1;
 end;
end;
{вставка}
procedure Vstav(var a:mtr;k,n:byte);
var b:stb;
begin
b:=a[1];
a[k]:=b;
end;
 
var a:mtr;
    m,n,j,p:byte;
    f:boolean;
begin
clrscr;
randomize;
Vvod(a,m,n);
writeln('Исходная матрица:');
Vyvod(a,m,n);
j:=1;
while j<=n do{по столбцам}
 begin
  IsOtr(a[j],m,f);{ищем отр.}
  if f then{если есть}
   begin
    Sdvig(a,j,p,n);{сдвиг}
    Vstav(a,p,n);{вставка}
    j:=j+2;{перешагиваем}
   end
  else j:=j+1;{нет-вперед}
 end;
writeln('Вставка первого столбца после столбцов с отрицательными:');
Vyvod(a,m,n);
readln
end.
0
2 / 2 / 0
Регистрация: 02.12.2010
Сообщений: 24
24.05.2011, 14:42  [ТС]
Спасибо огромное!!!! Сейчас попробую

Добавлено через 2 часа 37 минут
Мне необходимо было переделать эту программу в модули. Я сделала, но у меня получилось так, что проверяется не по столбцам, а по строкам. Не понимаю....в чем заморочки Помогите пожалуйста!!!

Добавлено через 7 минут
Первый модуль

Pascal
1
2
3
4
5
6
7
8
9
10
11
unit op;
 
interface
 
const nmax=100;
type
     stb=array[1..2*nmax] of integer;
     mtr=array[1..nmax] of stb;
implementation
 
end.
Второй модуль

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
unit module;
 
interface
 
uses op;
 
procedure Zapolnenie (var a:mtr; var m,n:byte);
procedure Vivod (var a:mtr; m,n:byte);
procedure isotr (v:stb; m:byte; var f:boolean);
procedure Sdvig(var a:mtr;s:byte;var k,n:byte);
procedure Vstav(var a:mtr;k,n:byte);
 
implementation
 
procedure Zapolnenie (var a:mtr; var m,n:byte);
var    i, j    : byte;
begin
         for i:=1 to m do
        For j:=1 to n do
 a[i, j]:=random(20)-10;
end;
 
procedure Vivod (var a:mtr; m,n:byte);
var    i, j   : byte;
begin
    For i:=1 to m do
begin
    For j:=1 to n do  write(a[i, j]:3);
    Writeln;
    end;
end;
 
procedure isotr (v:stb; m:byte; var f:boolean);
var i:byte;
begin
f:=false;
i:=1;
while (i<=m)and not f do
if v[i]<0 then f:=true
else i:=i+1;
end;
 
procedure Sdvig(var a:mtr;s:byte;var k,n:byte);
var j:byte;
begin
n:=n+1;
if s=n-1 then a[n]:=a[1]
else
 begin
  for j:=n downto s+2 do
  a[j]:=a[j-1];
  k:=s+1;
 end;
end;
 
procedure Vstav(var a:mtr;k,n:byte);
var b:stb;
begin
b:=a[1];
a[k]:=b;
end;
end.
Основная программа

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
uses op, module,crt;
var     A        : mtr;
        n, m,j,p :byte;
        f        :boolean;
begin
Clrscr;
Writeln ('vvedite chislo strok <100 i chislo stolbcov <=80');
Readln (n,m);
if (n>=100) or (n>80) then
        writeln ('nepraviln vvod dannuh')
        Else begin
Writeln;
end;
Zapolnenie (a,m,n);
Vivod (a,m,n);
j:=1;
while j<=n do
 begin
  IsOtr(a[j],m,f);
  if f then
   begin
    Sdvig(a,j,p,n);
    Vstav(a,p,n);
    j:=j+2;
   end
  else j:=j+1;
 end;
 writeln ('Vstavka pervogo stolbca:');
Vivod(a,m,n+1);
readln
end.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.05.2011, 14:51
Цитата Сообщение от rosss Посмотреть сообщение
Я сделала, но у меня получилось так, что проверяется не по столбцам, а по строкам.
Сказки не рассказывайте......
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
unit modul;
interface
const nmax=10;
type stb=array[1..2*nmax] of integer;
     mtr=array[1..nmax] of stb;
procedure Vvod(var a:mtr; var m,n:byte);
procedure Vyvod(var a:mtr;m,n:byte);
procedure IsOtr(v:stb;m:byte;var f:boolean);
procedure Sdvig(var a:mtr;s:byte;var k,n:byte);
procedure Vstav(var a:mtr;k,n:byte);
implementation
procedure Vvod(var a:mtr; var m,n:byte);
var i,j:byte;
begin
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
for j:=1 to n do
for i:=1 to m do
a[j,i]:=random(20)-3;
end;
procedure Vyvod(var a:mtr;m,n:byte);
var i,j:byte;
begin
for i:=1 to m do
 begin
  for j:=1 to n do
  write(a[j,i]:4);
  writeln;
 end;
writeln;
end;
{поиск отрицательного в столбце}
procedure IsOtr(v:stb;m:byte;var f:boolean);
var i:byte;
begin
f:=false;
i:=1;
while(i<=m)and not f do
if v[i]<0 then f:=true
else i:=i+1;
end;
{сдвиг}
procedure Sdvig(var a:mtr;s:byte;var k,n:byte);
var j:byte;
begin
n:=n+1;
if s=n-1 then a[n]:=a[1]{если последний}
else{остальные}
 begin
  for j:=n downto s+2 do
  a[j]:=a[j-1];
  k:=s+1;
 end;
end;
{вставка}
procedure Vstav(var a:mtr;k,n:byte);
var b:stb;
begin
b:=a[1];
a[k]:=b;
end;
end.
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
uses crt,modul;
var a:mtr;
    m,n,j,p:byte;
    f:boolean;
begin
clrscr;
randomize;
Vvod(a,m,n);
writeln('Исходная матрица:');
Vyvod(a,m,n);
j:=1;
while j<=n do{по столбцам}
 begin
  IsOtr(a[j],m,f);{ищем отр.}
  if f then{если есть}
   begin
    Sdvig(a,j,p,n);{сдвиг}
    Vstav(a,p,n);{вставка}
    j:=j+2;{перешагиваем}
   end
  else j:=j+1;{нет-вперед}
 end;
writeln('Вставка первого столбца после столбцов с отрицательными:');
Vyvod(a,m,n);
readln
end.
Добавлено через 1 минуту
У меня как работало, так и работает...

Добавлено через 1 минуту
Цитата Сообщение от rosss Посмотреть сообщение
Writeln ('vvedite chislo strok <100 i chislo stolbcov <=80');
Это куда же Вы собираетесь вывести матрицу 100х80?

Добавлено через 4 минуты
Вы зачем переделали ввод матрицы? Не понимаете, не лезьте. У меня был ввод по столбцам, а Вы сделали по строкам.
0
2 / 2 / 0
Регистрация: 02.12.2010
Сообщений: 24
24.05.2011, 15:20  [ТС]
А почему процедура ввода не может выглядеть как я присылала во втором модуле.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.05.2011, 15:22
Потому что у нас stb это 1 столбец матрицы, а mtr это массив столбцов(а не строк).
Поэтому нужно вводить матрицу по столбцам, а не по строкам, как обычно вводим.
0
2 / 2 / 0
Регистрация: 02.12.2010
Сообщений: 24
24.05.2011, 16:05  [ТС]
У меня преподаватель не принимает задачу, потому что в процедурах идет ввод кол-ва строк и столбцев. Она говорит, что этот ввод должен быть в основной программе.
Я уже запуталась......

Добавлено через 1 минуту
И почему раздел описания массивов нельзя описать в отдельном модуле?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.05.2011, 16:49
Цитата Сообщение от rosss Посмотреть сообщение
И почему раздел описания массивов нельзя описать в отдельном модуле?
Да ради Бога, все можно, просто я написал раньше чем Вы.
1
2 / 2 / 0
Регистрация: 02.12.2010
Сообщений: 24
24.05.2011, 21:13  [ТС]
ВСЕ, у меня получилось!!!! Я поняла в чем моя ошибка Спасибо.

Добавлено через 8 минут
Все!!! Я решила, и поняла в чем моя ошибка. Спасибо

Добавлено через 4 часа 1 минуту
Спасибо. Я уже сделала...и поняла свою ошибку.
1
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
24.05.2011, 21:17
rosss, Ну молодец! Я уже это понял с первого раза...
0
2 / 2 / 0
Регистрация: 02.12.2010
Сообщений: 24
25.05.2011, 12:06  [ТС]
У меня сегодня вообще программа не работает!!!!!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
25.05.2011, 13:04
Звезды не так встали....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2011, 13:04
Помогаю со студенческими работами здесь

Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы
Дана матрица размера M × N. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы. Если...

Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы
Дана матрица размера M.N. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы. Если...

Матрица(Поменять местами столбец N и первый из столбцов, содержащих только отрицательные элементы)
Дана матрица размера MxN. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы. Если...

Поменять местами столбец матрицы с номером N и первый из столбцов, содержащих только отрицательные элементы
// Дана матрица размера M x N. // Поменять местами // столбец с номером N // и первый из столбцов, // содержащих только...

Вставьте после всех строк матрицы, в которых есть заданное число А, последнюю строку
Дан двумерный массив. Вставьте после всех строк, в которых есть заданное число А, последнюю строку


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru