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

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

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

> Работа с двумерным массивом, задачка на двумерный массив
Jeeb
сообщение 21.01.2006 22:57
Сообщение #1





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

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


Всем привет!

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

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

Заранее благодарен, Jeeb.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 9)
DimaD
сообщение 22.01.2006 0:31
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.01.2006 0:39
Сообщение #3


Гость






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

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


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





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

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


Как создать матрицу я знал, а как добавить в нее строку из 0 и как осуществить поиск строки, в которой больше всего значений, больших, чем А, не врубаюсь, подскажите, плз...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.01.2006 12:14
Сообщение #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, я привел только один из возможных способов...
 К началу страницы 
+ Ответить 
Jeeb
сообщение 22.01.2006 12:54
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 22.01.2006 12:59
Сообщение #7


Гость






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





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

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


Тогда как мне вывести этот Buf на экран?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 22.01.2006 13:23
Сообщение #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 
 К началу страницы 
+ Ответить 
Jeeb
сообщение 22.01.2006 23:48
Сообщение #10





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

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


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


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

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

 



- Текстовая версия 19.07.2025 10:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"