Форум программистов, компьютерный форум, киберфорум
Наши страницы

Pascal (Паскаль)

Войти
Регистрация
Восстановить пароль
 
albert12
0 / 0 / 0
Регистрация: 27.11.2015
Сообщений: 26
#1

Вставить после всех строк матрицы, содержащих минимальный элемент массива, строку 2, 4, 6... - Pascal

27.04.2016, 20:48. Просмотров 369. Ответов 2
Метки нет (Все метки)

дан двумерный массив размером n*m заполненный следующим образом
1 заменить каждый элемент нулём
2 вставить после всех строк, содержащих минимальный элемент массива, строку 2,4 6....
3 удалить все столбцы, в которых встречается элемент, по модулю больше левого верхнего (a 1,1)
4 поменять местами третий и последний столбцы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2016, 20:48
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вставить после всех строк матрицы, содержащих минимальный элемент массива, строку 2, 4, 6... (Pascal):

Вставить после всех строк, содержащих максимальный по модулю элемент, первую строку - Pascal
дан двумерный массив размером n*m и заполненный случайным образом: 1 задача)вставить после всех строк, содержащих максимальный по модулю...

Удалить строку и столбец матрицы, содержащих минимальный элемент. - Pascal
помогите дописать/разобраться с дальней шем написанием программы.... {Программа создания массива. Вдальнейшем она должна находить...

Вставить первую строку после строки, в которой находится первый встреченный минимальный элемент - Pascal
Помогите,пожалуйста,решить задачу!( Использовать подпрограммы (ввода, вывода, обрабатывающей части). Дан массив целых чисел А, где...

Вставить строку из единиц после строк, первый элемент которых четный - Pascal
Вставить строку из единиц после строк, первый элемент которых четный. Помогите пожалуйста!!! (тема: Вставка строк и столбцов в...

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

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

2
WindAndRain
93 / 11 / 10
Регистрация: 11.04.2016
Сообщений: 34
03.05.2016, 05:25 #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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
program MatrixAgain;
 
var
  M,N : Word;
  i,g : Word;
  t : integer;
  
  Mode : Byte;
  
  min : Integer;
  tmpElement : Integer;
  
  Ar : array [,] of Integer; 
  {хороший пример для тестирования задания 2:
    Ar : array [,] of Integer :=
    ( (85, 7,  15,  19,  12),
      (33,  87,  12,   4,  99 ),
      (19,  81,  48,  17,  49 ),
      (80,  40,   4,  11,  59 ),
      (54,  22,  27,  83,  60));}
  RowNumbers : array of Word;
  
  Flag : boolean;
  
  ColNumbers : array of word;
  max : integer;
 
begin
  write('Введите размеры матрицы (m x n): ');
  readln(M, N);
  
  write('Установите режим работы (1/2/3/4): ');
  readln(Mode);
  
  //создаём массив
  SetLength(Ar, M, N);
  //заполняем массив случайными элементами и показываем его
  randomize;
  for i := 0 to M-1 do
    begin
      for g := 0 to N-1 do
        begin
          Ar[i,g] := random(101);
          write(Ar[i,g]:3, ' ');
        end;
      writeln;
    end;
  writeln;
  
  case Mode of
    1 : //заполняем массив нулями и печатаем результат
         for i := 0 to M-1 do
          begin
            for g := 0 to N-1 do
              begin
                Ar[i,g] := 0;
                write(Ar[i,g], ' ');
              end;
            writeln;
          end;
    
    2 : //формируем список строк с минимальными элементами массива
        begin
        min := Ar[0,0];
        SetLength(RowNumbers, 0);
       // RowNumbers[0] := 0;   //хранит список строк, которые содержат мин. элемент
        
        for i := 0 to M-1 do
          begin
            Flag := false;
            
            for g := 0 to N-1 do
              begin
                if (not Flag) and (Ar[i,g] = min)
                then
                  begin
                    //добавляем строку в список строк с текущим мин. элементом
                    SetLength(RowNumbers, Length(RowNumbers)+1);
                    RowNumbers[High(RowNumbers)] := i;
                    Flag := true;
                  end;
                
                if (Ar[i,g] < min)
                then
                  begin
                    //обновляем минимальный элемент, очищаем список строк с ним
                    //и заносим в список строк номер текущей строки
                    min := Ar[i,g];
                    SetLength(RowNumbers, 1);
                    RowNumbers[0] := i;
                    Flag := true;
                  end;
              end;
          end;
          
        //показываем номера найденных строк
        write('Номера строк с минимумами: ');
        for i := Low(RowNumbers) to High(RowNumbers) do
          write(RowNumbers[i],' ');
        writeln;
          
        //определяем, сколько строк нужно добавить, добавляем их
        //вставляем новые строки 2-4-6 в массив, и смещаем старые строки
        SetLength(Ar, M + Length(RowNumbers), N);       
        
        t := High(RowNumbers);
        for i := M-1 downto 0 do
          if (t >= 0)
          then
            begin
              if (i = RowNumbers[t])
              then  begin
                      for g := 0 to N-1 do
                        Ar[i+t+1,g] := (g+1)*2;
                      Dec(t);
                    end;
                    
              for g := 0 to N-1 do
                Ar[i+t+1,g] := Ar[i,g];
            end;
      end;
    3 : begin
        {-----------------------------
         для проверки лучше задавать размеры матрицы с малым
         количеством строк,и большим - столбцов 2 х 8
         -----------------------------}
          //формируем список столбцов, подлежащих удалению
          max := Abs(Ar[0,0]);
          SetLength(ColNumbers, 0);
          
          for g := 0 to N-1 do
            begin
              for i := 0 to M-1 do
                if (Abs(Ar[i,g]) > Abs(max))
                then begin
                        SetLength(ColNumbers, Length(ColNumbers) + 1);
                        ColNumbers[High(ColNumbers)] := g;
                        break;
                     end;
            end;
            
          //если есть столбцы для удаления, то...
          if (Length(ColNumbers) > 0)
          then
            begin          
              //отображаем список столбцов для удаления
              write('Номера столбцов, подлежащих удалению: ');
              for t := Low(ColNumbers) to High(ColNumbers) do
                write(ColNumbers[t], ' ');
              writeln;
              
              //удаляем столбцы
              t := 0;
              for g := 0 to N-1 do
                begin
                    if (g > ColNumbers[t])
                    then
                         for i := 0 to M-1 do
                           Ar[i,g-(t+1)] := Ar[i,g];
                    
                    if (g < ColNumbers[t])
                    then
                        for i := 0 to M-1 do
                          Ar[i,g-t] := Ar[i,g];
                        
                    if (g = ColNumbers[t]) and (t+1 <= High(ColNumbers))
                    then Inc(t);
                end;
              
              SetLength(Ar, M, N-Length(ColNumbers));
            end;
            
        end;
    4 : for i := 0 to M-1 do
          begin
            tmpElement := Ar[i,2];
            Ar[i,2] := Ar[i, N-1];
            Ar[i,N-1] := tmpElement;
          end;
  end;
  
  //печатаем поучившийся массив
  if (Length(Ar) > 0)
  then begin
          for i := 0 to High(Ar) do
            begin
              for g := 0 to Length(Ar,1)-1 do
                write(Ar[i,g]:3, ' ');
              writeln;
            end;
          writeln;
       end
  else
    writeln('Массив пуст');
  
end.
0
bormant
Модератор
Эксперт Pascal/DelphiЭксперт NIX
3749 / 2446 / 1307
Регистрация: 22.11.2013
Сообщений: 6,796
04.05.2016, 14:23 #3
Цитата Сообщение от WindAndRain Посмотреть сообщение
более рациональное или более простое решение
Добавление строк и удаление столбцов могло выглядеть как-то так:
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
  { поиск минимума }
  min:=a[0,0];
  for i:=m-1 downto 0 do for j:=n-1 downto 0 do
    if min>a[i,j] then min:=a[i,j];
  mm:=m;
  { добавление строк }
  for i:=m-1 downto 0 do begin
    j:=n-1; while (j>=0) and (a[i,j]<>min) do Dec(j);
    if j>=0 then Inc(mm);
  end;
  SetLength(a,mm,n);
  ii:=mm-1; ip:=-1;
  for i:=m-1 downto 0 do begin
    j:=n-1; while (j>=0) and (a[i,j]<>min) do Dec(j);
    if j>=0 then begin
      if ip<0 then begin
        ip:=ii; for j:=0 to n-1 do a[ii,j]:=(j+1)*2;
      end else a[ii]:=a[ip];
      Dec(ii);
    end;
    if ii=i then Break;
    a[ii]:=a[i];
    Dec(ii);
  end;
  m:=mm;
...
  { удаление столбцов }
  nn:=0; a00:=Abs(a[0,0]);
  for j:=0 to n-1 do begin
    i:=m-1; while (i>=0) and (Abs(a[i,j])<=a00) do Dec(i);
    if i<0 then begin
      if nn<>j then for i:=m-1 downto 0 do a[nn,i]:=a[j,i];
      Inc(nn);
    end;
  end;
  SetLength(a,m,nn);
  n:=nn;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2016, 14:23
Привет! Вот еще темы с ответами:

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

Найти сумму строк матрицы, среднее значение элементов матрицы и минимальный элемент - Pascal
Сумма строк (сделать это все в Паскаль) Задана двумерная матрица размером 10х10 элементов, заполненная случайными числами из диапазона ....

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

Найти количество строк матрицы, содержащих хотя бы один нулевой элемент - Pascal
Дана целочисленная прямоугольная матрица. Определить: 1) количество строк, содержащих хотя бы один нулевой элемент; 2) номер столбца, в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru