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

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

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

> Задача по матрицам, Легенькая задачка. Пжл помогите решить.
сообщение
Сообщение #1


Гость






Цитата
Из заданной матрицы Am*n исключить строки, содержащие хотябы 1 нулевой элемент.

Помогите пожалуйста с решением. Заранее Спасибо.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






С решением обязательно поможем, когда Вы проясните ситуацию, и скажете, что значит "исключить строку из матрицы"... Как задается матрица? (не является ли она динамической, потому что исключить строку из обычной матрицы будет затруднительно)...

Или Вам нужно просто распечатать матрицу без тех строк, которые содержат нулевые элементы? Так это не значит "исключить", матрица останется прежней...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(volvo @ 14.03.05 10:45)
С решением обязательно поможем, когда Вы проясните ситуацию, и скажете, что значит "исключить строку из матрицы"... Как задается матрица? (не является ли она динамической, потому что исключить строку из обычной матрицы будет затруднительно)...

Или Вам нужно просто распечатать матрицу без тех строк, которые содержат нулевые элементы? Так это не значит "исключить", матрица останется прежней...

Знал бы я сам что вкладывал автор задачи в эти слова... Но как мне кажется нужно просто вывести матрицу без строк, содержащих нулевые элементы.
И поясните, пожалуйста, что значит "динамическая матрица"?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(Guest @ 14.03.05 10:00)
как мне кажется нужно просто вывести матрицу без строк, содержащих нулевые элементы.

Тогда вот так:
Код
Const
 n = ...;
 m = ...;
Type ma3x = array[1 .. n, 1 .. m] of integer;
var
 mx: ma3x;
 i, j: integer; no_null: boolean;
begin
 { тут заполняем матрицу }
 for i := 1 to n do
   begin
     no_null := true;
     for j := 1 to m do
       no_null := no_null and (arr[i, j] <> 0);
     if no_null then
       begin
         for j := 1 to m do write(arr[i, j]:4);
         writeln
       end;
   end;
end.

С заполнением скорее всего проблем не будет... ;)

Цитата(Guest @ 14.03.05 10:00)
И поясните, пожалуйста, что значит "динамическая матрица"?

Это матрица, которая хранится в "куче" (динамической памяти), и ее размеры задаются не во время компиляции, а во время работы программы... Вот из нее можно исключить строку...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Ну, если динамическая, тогда:
Исходный код
const
n: integer = 5;
m = 8;

type
pvector = ^vector;
vector = array[1 .. maxint] of integer;

pmatrix = ^matrix;
matrix = array[1 .. maxint div sizeof(pvector)] of pvector;

procedure print(p: pmatrix);
var i, j: integer;
begin
for i := 1 to n do
begin
for j := 1 to m do
write(p^[i]^[j]:4);
writeln
end;
end;

var
mx: pmatrix;
i, j: integer;
no_null: boolean;

size: integer;

begin
size := n;
getmem(mx, size * sizeof(pvector));
for i := 1 to n do
begin
getmem(mx^[i], m * sizeof(integer));
for j := 1 to m do
mx^[i]^[j] := random(20)
end;

writeln('before:');
print(mx);

for i := 1 to n do
begin
no_null := true;
for j := 1 to m do
no_null := no_null and (mx^[i]^[j] <> 0);
if not no_null then
begin
freemem(mx^[i], m * sizeof(integer));
mx^[i] := nil;
end;
end;

i := 1;
while i <= n do
begin
if mx^[i] = nil then
begin
move(mx^[i+1], mx^[i], (n - i)*sizeof(pvector));
dec(n)
end
else inc(i)
end;

writeln('after:');
print(mx);

for i := 1 to n do
freemem(mx^[i], m * sizeof(integer));
freemem(mx, size * sizeof(pvector))
end.
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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