IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Работа с двумерным массивом, задачка на двумерный массив
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Всем привет!

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

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

Заранее благодарен, Jeeb.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


Вот заполнение матрицы 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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

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


Плюс к этому, DimaD, ты что-ли добавил в Турбо Паскаль поддержку динамических массивов? Borland этого, во всяком случае не делала... К тебе напрямую относится:
Цитата(Правила Раздела)
7. Проверяйте программы перед тем, как запостить их!!!
Кстати, проверять их надо в той среде программирования, которой посвящен данный подфорум... На Дельфях будешь в другом разделе проверять.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Как создать матрицу я знал, а как добавить в нее строку из 0 и как осуществить поиск строки, в которой больше всего значений, больших, чем А, не врубаюсь, подскажите, плз...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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, я привел только один из возможных способов...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Цитата(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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Это тебя не должно интересовать, а вообще это - дополнительная переменная, с помощью которой ищется число элементов > A в каждой строке...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Тогда как мне вывести этот Buf на экран?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


А как ты обычный массив выводишь ? Так же и этот, тебе-же volvo сказал

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 9
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Все равно не понятно, выкладываю код, который уже написан, осталось оформить только добавление строки из нулей, а вот как я не могу врубиться....


Прикрепленные файлы
Прикрепленный файл  ARR2FIN.PAS ( 1.35 килобайт ) Кол-во скачиваний: 232
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2024 1:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name