Помощь - Поиск - Пользователи - Календарь
Полная версия: Матрица
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.