Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rom1k
Задание:
обнулить строку и столбец матрицы в которой имеется "0"

можно использовать вспомогательный одномерный массив.
ввожу матрицу,а дальше что делать?
помогите,плизззззз!

uses crt;

const
Nmax=10;{Максимальное значение строк и столбцов матрицы}
type
mas=array[1..Nmax,1..Nmax] of integer;
var
A:mas;
N,M:byte;{Кол-во строк и столбцов}

procedure vvod_mas(var a:mas;var n,m:byte);
{Ввод матрицы с запоминанием позиции,для последующего
обнуления строки и столбца}
var i,j:integer;
begin
repeat
Write('Zadaite 4islo strok v matrice (1..',nmax,'): ');
ReadLn(N);
If (N<=0) and (N>Nmax) then
WriteLn('error! povtorite!');
until (N>0) and (N<=Nmax);
repeat
Write('Zadaite 4islo stolbcov (1..',nmax,'): ');
ReadLn(M);
If (M<=0) and (M>Nmax) then
WriteLn('Error! Povtorite!');
until (M>0) and (M<=Nmax);

WriteLn('Zadaite elementi matrici po strokam 4erez probel ');
For i:=1 to N do
begin
Write('Stroka ',i,': ');
for j:=1 to M do
begin
Read(A[i,j]);
end;
end;
end;

procedure vivod(var a:mas;var n,m:byte);
var i,j:integer;
begin
WriteLn('Rezultat: ');
for i:=1 to N do
begin
for J:=1 to M do
Write(a[i,j]:4);
WriteLn;
end; end;

BEGIN{main}
clrscr;
vvod_mas(a,n,m);
vivod(a,n,m);
writeln;
readkey;
end.



мисс_граффити
в которых изначально имеется?
то есть (пример)
1 2
3 0
обнулить вторую строку и второй столбец? или обнулить, а потом опять смотреть?

множествами нельзя пользоваться?
Rom1k
Цитата(мисс_граффити @ 20.05.2007 19:27) *

в которых изначально имеется?
то есть (пример)
1 2
3 0
обнулить вторую строку и второй столбец? или обнулить, а потом опять смотреть?

множествами нельзя пользоваться?


не знаю.О множествах не упоминалось.Да.Пример работы проги дана матрица
Цитата

1 2 3
6 4 3
5 0 0

результат
Цитата

1 0 0
6 0 0
0 0 0
Rom1k
кто-нибудь поможет????????
Tan
Тема
volvo
{ сама процедура ... }
procedure process(var a: mas; n, m: byte);
var
i, j, k: integer;
buffer: array[1 .. 2*sqr(nmax)] of integer;
count: integer;
begin
count := 0;
for i := 1 to n do
for j := 1 to m do
if a[i, j] = 0 then begin
inc(count); buffer[count] := i;
inc(count); buffer[count] := j;
end;

i := 1;
while i < count do begin

for k := 1 to n do
a[buffer[i], k] := 0;
for k := 1 to m do
a[k, buffer[i + 1]] := 0;
inc(i, 2);

end;
end;

...
vvod_mas(a,n,m);
process(a, n, m); { и ее вызов ... }
vivod(a,n,m);
...
Rom1k
Tan ах да,я вспомнил,дело в том,что та моя программа не во всех случаях работает
volvo спасибо.щас разберусь
Lapochka
Программки на массивы...циклические процессы и т.д У меня должна получитьсяа почти такая же программка, да?(задание номер 2) Может кто нибудь переделает.... rolleyes.gif
Rom1k
[quote name='volvo' date='20.05.2007 23:55' post='103288']

она не корректно работает в некоторых случаях.
Вот мой вариант программы,он проще,но он тоже не корректно работает в некоторых ситуациях
Program z_2;
uses crt;
const
Nmax=10;{Максимальное значение строк и столбцов матрицы}
type
mas=array[1..Nmax,1..Nmax] of integer;
var
A:mas;
N,M:byte;{Кол-во строк и столбцов}
{---------------------------------------------------------------------------}
procedure vvod_mas(var a:mas; n,m:byte);
{Ввод матрицы}
var i,j:integer;
begin
repeat
Write('Задайте число строк в матрице (1..',nmax,'): ');
ReadLn(N);
If (N<=0) or (N>Nmax) then
WriteLn('Ошибка! Повторите!');
until (N>0) and (N<=Nmax);
repeat
Write('Задайте число столбцов в матрице (1..',nmax,'): ');
ReadLn(M);
If (M<=0) or (M>Nmax) then
WriteLn('Ошибка! Повторите!');
until (M>0) and (M<=Nmax);

WriteLn('Задайте элементы матрицы строкам через пробел ');
For i:=1 to N do
begin
Write('Строка ',i,': ');
for j:=1 to M do
begin
Read(A[i,j]);
end;
end;
end;
{---------------------------------------------------------------------------}
procedure obnul(var a:mas;n,m:integer);
var
i,j,k:integer;
b:array[1..nmax*4] of integer;
t:integer;
begin
t:=0;
for i:=1 to n do
for j:=1 to m do
if a[i,j]=0 then begin
t:=t+1;
b[t]:=i;
t:=t+1;
b[t]:=j;
end;{if}

i:=i+1;
while i<t do begin

for k:=1 to n do
a[b[i],k]:=0;
for k:=1 to m do
a[k,b[i+1]]:=0;
i:=i+1;
end;{while}
end;{obnul}
{---------------------------------------------------------------------------}
procedure vivod(var a:mas;var n,m:byte);
var i,j:integer;
begin
WriteLn('Результат: ');
for i:=1 to N do
begin
for J:=1 to M do
Write(a[i,j]:4);
WriteLn;
end; end;
{---------------------------------------------------------------------------}
BEGIN{main}
clrscr;
vvod_mas(a,n,m);
vivod(a,n,m);
readkey;
end.{main}



может что-то можно исправит?!
volvo
Цитата
она не корректно работает в некоторых случаях.
- не принимается... Она тестировалась на достаточном количестве тестов... Приведи пример некорректной работы...
Rom1k
Изображение
Rom1k
вот blink.gif
volvo
И что ты мне этим хочешь сказать?

А вот:
Нажмите для просмотра прикрепленного файла
и вот:
Нажмите для просмотра прикрепленного файла

(двумя разными компиляторами)? К тому же я не знаю, ЧТО ты там натворил, когда переводил программу на русский язык... Я приводил решение для того варианта, который был выложен ПЕРЕД моим постом! Поэтому в следующий раз будь аккуратнее в заявлениях типа "программа неправильно работает..."
Rom1k
да.извините.не смог даже правильно списать.Программа работает корректно,спасибо!
buy stromectol for humans in tij
Buy Viagra Super Active Online
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.