Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с двумерным массивом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Jeeb
Всем привет!

Не могу решить задачу, а скоро сдавать контрольную. Помогите, кто чем сможет.

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

Заранее благодарен, Jeeb.
DimaD
Вот заполнение матрицы Randomom
type
TMatr = record
n,m: Integer;
Data: array of array of Real;
end;

procedure Vvod(var X: TMatr; i,j: Integer);
begin
Write('Vvedite kol-vo strok, n = ');
Readln(X.m);
Write('Vvedite kol-vo stolbcov, m = ');
Readln(X.n);
SetLength(X.Data,X.n,X.m);
Writeln('Vedite matricy n*m:');
for i:=0 to X.n-1 do
for j:=0 to X.m-1 do
begin
X.Data[i,j]:=Random(10);
end;
end;

var
X: TMatr;
B: TVect;
i,j,z: Integer;

begin
Vvod(X,X.n,X.m);
for i:=0 to X.n-1 do
for j:=0 to X.m-1 do
begin
Writeln('X[',i,';',j,']= ',X.Data[i,j]:5:2);
end;
Readln;
end.

volvo
DimaD,
правда? А вот сюда ты заглядывал, прежде чем запостить что-то: FAQ: Работа с матрицами, ввод матрицы, операции над матрицами, распространенные задачи с матрицами.
? mad.gif Сколько можно уже одно и то же дублировать???

То же самое касается и автора вопроса:
Цитата(Правила Раздела)
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!


Плюс к этому, DimaD, ты что-ли добавил в Турбо Паскаль поддержку динамических массивов? Borland этого, во всяком случае не делала... К тебе напрямую относится:
Цитата(Правила Раздела)
7. Проверяйте программы перед тем, как запостить их!!!
Кстати, проверять их надо в той среде программирования, которой посвящен данный подфорум... На Дельфях будешь в другом разделе проверять.
Jeeb
Как создать матрицу я знал, а как добавить в нее строку из 0 и как осуществить поиск строки, в которой больше всего значений, больших, чем А, не врубаюсь, подскажите, плз...
volvo
var
buf: array[1 .. num_cols] of integer;
buf_len: integer;
...
ReadLn(A); { Это - то самое A }
max_count := 0; { здесь будет храниться максимум встреченных чисел в строке которые > А}

for i := 1 to num_rows do begin { num_rows = число строк матрицы }

count := 0;
for j := 1 to num_cols do begin { num_cols = число столбцов }
if mx[i, j] > a then inc(count)
end;
if count > max_count then begin
max_count := count;
buf_len := 1; buf[buf_len] := i;
end
else
if count = max_count then begin
inc(buf_len); buf[buf_len] := i;
end;

end;


теперь у тебя в массиве buf хранятся индексы строк, в которых содержится максимальное число элементов > А (число этих индексов = buf_len).

Проходи по этоиу массиву и добавляй перед каждой строкой строкой с хранящимся там индексом, пустую строку (не забывая изменять оставшиеся индексы, т.к. при добавлении строки часть матрицы сдвинется на 1 вниз)... Как это реализовать - саму идею - можно посмотреть здесь: Работа с динамическими матрицами

Будут вопросы - обращайся...

P.S. можно сделать и без buf, я привел только один из возможных способов...
Jeeb
Цитата(volvo @ 22.01.2006 12:14) *

var
buf: array[1 .. num_cols] of integer;
buf_len: integer;
...
ReadLn(A); { Это - то самое A }
max_count := 0; { здесь будет храниться максимум встреченных чисел в строке которые > А}

for i := 1 to num_rows do begin { num_rows = число строк матрицы }

count := 0;
for j := 1 to num_cols do begin { num_cols = число столбцов }
if mx[i, j] > a then inc(count)
end;
if count > max_count then begin
max_count := count;
buf_len := 1; buf[buf_len] := i;
end
else
if count = max_count then begin
inc(buf_len); buf[buf_len] := i;
end;

end;


теперь у тебя в массиве buf хранятся индексы строк, в которых содержится максимальное число элементов > А (число этих индексов = buf_len).

Проходи по этоиу массиву и добавляй перед каждой строкой строкой с хранящимся там индексом, пустую строку (не забывая изменять оставшиеся индексы, т.к. при добавлении строки часть матрицы сдвинется на 1 вниз)... Как это реализовать - саму идею - можно посмотреть здесь: Работа с динамическими матрицами

Будут вопросы - обращайся...

P.S. можно сделать и без buf, я привел только один из возможных способов...



А теперь я не врубаюсь, что здесь "count"? smile.gif
volvo
Это тебя не должно интересовать, а вообще это - дополнительная переменная, с помощью которой ищется число элементов > A в каждой строке...
Jeeb
Тогда как мне вывести этот Buf на экран?
klem4
А как ты обычный массив выводишь ? Так же и этот, тебе-же volvo сказал

Цитата(volvo)
теперь у тебя в массиве buf хранятся индексы строк, в которых содержится максимальное число элементов > А (число этих индексов = buf_len).
Jeeb
Все равно не понятно, выкладываю код, который уже написан, осталось оформить только добавление строки из нулей, а вот как я не могу врубиться....
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.