Вход
Логин:


Пароль: Забыли пароль?


ПОЗИТИВный форум

Объявление

послушать радио




Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПОЗИТИВный форум » Программинг » Работа с матрицами [Pascal]


Работа с матрицами [Pascal]

Сообщений 1 страница 4 из 4

1

Удалить столбцы с максимальным элементом матрицы,затем после первого отрицательного члена каждого столбца вставить число,равное минимальному элементу этого столбца.

0

2

вика написал(а):

Удалить столбцы с максимальным элементом матрицы

Если элементов несколько - удаляем все столбцы, в которых содержится максимальный элемент. Со второй частью пока не разобрался..

Код:
const
  n = 5;
var
  ms, rez: array [1..n, 1..n] of integer;
  i,j,x,y,max, max_j: integer;
  no_max: boolean;

begin
  randomize;
  max := -999;
  for i:=1 to n do   {zapolnenie massiva i poisk maximuma}
   begin
    for j:=1 to n do
     begin
       ms[i,j] := random(9)-3;
       if ms[i,j] > max then
        begin
          max := ms[i,j];
        end;
       write(ms[i,j]:4);
     end;
    writeln;
   end;

  writeln; y:=0; writeln(max);
  for j:=1 to n do
   begin
     no_max := true;
     for i:=1 to n do
      no_max := no_max and not (ms[i,j] = max);
{     writeln(j, ' ', no_max);  }
     if no_max then
      begin
        inc(y);
        for x:=1 to n do
         rez[x,y] := ms[x,j];
      end;
   end;

{  writeln; writeln;   }
  for i:=1 to n do
   begin
     for j:=1 to y do
      write(rez[i,j]:4);
     writeln;
   end;

  readln;
end.

0

3

Полное решение задачи.

вика написал(а):

после первого отрицательного члена каждого столбца вставить число,равное минимальному элементу этого столбца

Число, стоящее за первым отрицательным элементом столбца замещается минимальным элементом этого столбца.

Код:
const
  n = 5;
var
  ms, rez: array [1..n, 1..n] of integer;
  i,j,x,y,max,min: integer;
  no_max: boolean;

begin
  randomize;
  max := -999;
  for i:=1 to n do   {zapolnenie massiva i poisk maximuma}
   begin
    for j:=1 to n do
     begin
       ms[i,j] := random(9)-3;
       if ms[i,j] > max then
        begin
          max := ms[i,j];
        end;
       write(ms[i,j]:4);
     end;
    writeln;
   end;

  writeln; y:=0; writeln(max);
  for j:=1 to n do             { udalyaem stolbtsy }
   begin
     no_max := true;
     for i:=1 to n do
      no_max := no_max and not (ms[i,j] = max);
{     writeln(j, ' ', no_max);  }
     if no_max then
      begin
        inc(y);
        for x:=1 to n do
         rez[x,y] := ms[x,j];
      end;
   end;

  for i:=1 to n do
   begin
     for j:=1 to y do
      write(rez[i,j]:4);
     writeln;
   end;

{  vstavlyaem chislo   }
  for j:=1 to y do
   begin
     min := 999;
     for i:=1 to n do
      if rez[i,j]<min  then min := rez[i,j];
     for i:=1 to n do
      if rez[i,j]<0 then
       begin
         rez[i+1,j]:= min;
         break;
       end;
   end;

  writeln; writeln;
  for i:=1 to n do
   begin
     for j:=1 to y do
      write(rez[i,j]:4);
     writeln;
   end;

  readln;
end.

0

4

Вот исправленный вариант. Говори, что именно не понятно?

const
  n = 5;
var
  ms, rez: array [1..n, 1..n] of integer;
  i,j,x,y,max,min: integer;
  no_max: boolean;
  r: char;

begin
  REPEAT
  write('Randomize? (Y/N) ');  readln(r);
  { clrscr; }
  UNTIL (r='Y') or (r='N');

  max := -999;
  CASE r of
  'Y':
  BEGIN
  randomize;
  for i:=1 to n do   {zapolnenie massiva i poisk maximuma}
   begin
    for j:=1 to n do
     begin
       ms[i,j] := random(9)-3;
       if ms[i,j] > max then
        max := ms[i,j];
       write(ms[i,j]:4);
     end;
    writeln;
end;
  END;

  'N':
  BEGIN
  for i:=1 to n do
   for j:=1 to n do
    begin
      write('ms[',i,',',j,'] := ');
      read(ms[i,j]);
       if ms[i,j] > max then
        max := ms[i,j];
    end;
  { clrscr; }    {esli nugno}
  writeln; writeln;
  for i:=1 to n do
   begin
     for j:=1 to n do
      write(ms[i,j]:4);
     writeln;
   end;
  END;

  end;

  writeln; y:=0; writeln(max);
  for j:=1 to n do             { udalyaem stolbtsy }
   begin
     no_max := true;
     for i:=1 to n do
      no_max := no_max and not (ms[i,j] = max);
{     writeln(j, ' ', no_max);  }
     if no_max then
      begin
        inc(y);
        for x:=1 to n do
         rez[x,y] := ms[x,j];
      end;
   end;

  for i:=1 to n do
   begin
     for j:=1 to y do
      write(rez[i,j]:4);
     writeln;
   end;

{  vstavlyaem chislo   }
  for j:=1 to y do
   begin
     min := 999;
     for i:=1 to n do
      if rez[i,j]<min  then min := rez[i,j];
     for i:=1 to n do
      if rez[i,j]<0 then
       begin
         rez[i+1,j]:= min;
         break;
       end;
   end;

  writeln; writeln;
  for i:=1 to n do
   begin
     for j:=1 to y do
      write(rez[i,j]:4);
     writeln;
   end;

  readln; readln;
end.

0


Вы здесь » ПОЗИТИВный форум » Программинг » Работа с матрицами [Pascal]