Форум «Всё о Паскале» _ Задачи _ Вставка строки в двумерном массиве
Автор: mugler02 26.12.2010 3:50
Прошу помочь разобраться с решением задачи:
В двумерном массиве вставить перед всеми строками, первый элемент которых делится на 3, строку из нулей.
Заранее спасибо.
Автор: Lapp 26.12.2010 13:35
Цитата(mugler02 @ 25.12.2010 23:50)
В двумерном массиве вставить перед всеми строками, первый элемент которых делится на 3, строку из нулей.
Как-то вот так:
var a: array [1..m,1..n] of integer;
... begin ... for i:=m downto 1 do if a[i,1] mod 3=0 then begin for j:=m-1 downto i do a[j+1]:=a[j]; for j:=1 to n do a[i,j]:=0 end;
Только ты имей в виду, что, поскольку строки сдвигаются при вставке, то последние исчезают.
Автор: mugler02 26.12.2010 15:31
Спасибо.
Автор: mugler02 27.12.2010 3:25
Ещё вот такая задачка: В двумерном массиве удалить столбец, в котором находится первый четный отрицательный элемент. Как я понимаю,
Код
… k:=0; for j:=1 to n do begin for i:=1 to m do if (a[i,j]<0)and (a[i,j]) mod 2 <> 0 then{если отрицательный и нечетный} k:=j;{запоминаем номер столбца} end; if k=0 then write('В матрице нет отрицательных нечетных элементов') else begin writeln('Номер первого столбца с нечетным отрицательным элементом=',k); for i:=1 to m do{всем элементы всех строк} for j:=k to n-1 do{от номера столбца до предпоследнего} a[i,j]:=a[i,j+1];{присваиваем значение следующего} n:=n-1;{уменьшаем количество столбцов} end; writeln('Удаление столбца:'); …
Как думаете, верно?
Автор: Lapp 27.12.2010 5:48
Цитата(mugler02 @ 26.12.2010 23:25)
Ещё вот такая задачка: В двумерном массиве удалить столбец, в котором находится первый четный отрицательный элемент. Как я понимаю, ... Как думаете, верно?
Думаю, нет. В условии - про первый четный, а ты ищешь на самом деле последний нечетный. Если хочешь искать первое вхождение - обрывай цикл поиска сразу после нахождения. Само удаление, вроде, верно.
Автор: mugler02 28.12.2010 3:26
То есть верно будет так?
Код
k:=0; for j:=1 to n do begin for i:=1 to m do if (a[i,j]<0)and (a[i,j]) mod 2 =0 then k:=j; end; if k=0 then write('В матрице нет отрицательных нечетных элементов') else begin writeln('Номер первого столбца с нечетным отрицательным элементом=',k); for i:=1 to m do{всем элементы всех строк} for j:=k to n-1 do{от номера столбца до предпоследнего} a[i,j]:=a[i,j+1];{присваиваем значение следующего} n:=n-1;{уменьшаем количество столбцов} end; writeln('Удаление столбца:'); …
Автор: Lapp 28.12.2010 9:55
Цитата(mugler02 @ 27.12.2010 23:26)
То есть верно будет так?
Нет. Можно вот так:
k:=0; for j:=1 to n do begin for i:=1 to m do if (a[i,j]<0)and (a[i,j]) mod 2<>0 then begin k:=j; break end; if k>0 then break end;
Но лучше использовать цикл while. Еще один вариант (самый красивый)) - использовать функцию и выходить из нее во внутреннем цикле.
Автор: Гость 31.12.2010 0:58
Цитата(mugler02 @ 25.12.2010 23:50)
Прошу помочь разобраться с решением задачи:
В двумерном массиве вставить перед всеми строками, первый элемент которых делится на 3, строку из нулей.
Заранее спасибо.
не понял
Автор: Гость 31.12.2010 1:04
Цитата(Lapp @ 26.12.2010 9:35)
Как-то вот так:
var a: array [1..m,1..n] of integer;
... begin ... for i:=m downto 1 do if a[i,1] mod 3=0 then begin for j:=m-1 downto i do a[j+1]:=a[j]; for j:=1 to n do a[i,j]:=0 end;
Только ты имей в виду, что, поскольку строки сдвигаются при вставке, то последние исчезают.
извини но обьясни мне_________________________ смысл.
Автор: Lapp 31.12.2010 7:17
Цитата(Гость @ 30.12.2010 20:58)
не понял
Цитата(Гость @ 30.12.2010 21:04)
извини но обьясни мне_________________________ смысл.
Ну, и чего же ты не понял, дорогой Гость? Что тебе объяснить?