Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 02:44   #1
Alexar Makken
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 19
По умолчанию Заменить максимальный элемент суммой всех нечётных элементов матрицы

Уважаемые форумчане! У меня к вам такая проблема!((
Задача: В текстовом файле А записана целочисленная матрица.
Заменить её максимальный элемент суммой всех нечётных элементов матрицы,
минимальный элемент - суммой всех чётных элементов матрицы. Результат записать в файл В (исходная матрица во вложении)!Решить используя процедуры


Решение:
Код:
program Zadanie;
uses crt;
const
     n=3;
     m=3;
type Matrix= array[1..n,1..m] of integer;
var  a: Matrix;
     F1,F2: Text;
     i,j,imx,imn,jmx,jmn: integer;
     buf1,buf2: integer;
     SumCh,SumNch: integer;
function Nech(Ar: Matrix; ArS1,ArS2: integer): integer;
var  i,j: integer;
     S_nch: integer;
begin
     for i:=1 to ArS1 do
     for j:=1 to ArS2 do
     begin
          if (i mod 2 <> 0) then
          S_nch:= S_nch + Ar[i,j];
     end;
     Nech:=S_nch;
end;
function Chet(Ar: Matrix; ArS1,ArS2: integer): integer;
var  i,j: integer;
     S_ch: integer;
begin
     for i:=1 to ArS1 do
     for j:=1 to ArS2 do
     begin
          if (i mod 2 = 0) then
          S_ch:= S_ch + Ar[i,j];
     end;
     Chet:=S_ch;
end;
{Нахождение минимального элемента массива}
procedure GetMin(Ar: Matrix; ArS1,ArS2,imin,jmin: integer);
var  i,j: integer;
     min: integer;
begin
     //if ArS1<1  then  exit;
     Min := Ar[1,1];
     imin:=1;
     jmin:=1;
     for i:=1 to ArS1 do
     for j:=2 to ArS2 do
     if Ar[i,j]<min then
     begin
          Min:=Ar[i,j];
          imin:=i;
          jmin:=j;
     end;
end;
{Нахождение максимального элемента массива}
procedure GetMax(Ar: Matrix; ArS1,ArS2,imax,jmax: integer);
var  i: integer;
     max: integer;
begin
     //if ArS1<1  then  exit;
     Max := Ar[1,1];
     imax:=1;
     jmax:=1;
     for i:=1 to ArS1 do
     for j:=2 to ArS2 do
     if Ar[i,j]<Max then
     begin
          Max:=Ar[i,j];
          imax:=i;
          jmax:=j;
     end;
end;
begin
   clrscr;
   assign(F1,'Matrix1.txt');
   reset(F1);
   assign(F2,'Matrix2.txt');
   rewrite(F2);
   for i:=1 to n do
   begin
        for j:=1 to m do
        begin
             read(F1,a[i,j]);
             write(a[i,j]:4);
        end;
        writeln;
   end;
 
   SumCh:=Chet(a,n,m);
   SumNch:=Nech(a,n,m);
   GetMin(a,n,m,imn,jmn);
   GetMax(a,n,m,imx,jmx);
 
 
   for i:=1 to n do
   for j:=1 to m do
   begin
        buf1:=a[imn,jmn];
        a[imn,jmn]:=SumCh;
        SumCh:=buf1;
        buf2:=a[imx,jmx];
        a[imx,jmx]:=SumCh;
        SumCh:=buf2;
   end;
  for i:=1 to n do
   for j:=1 to m do
   write(F2,a[i,j]:4);
   close(F1);
   close(F2);
{Вывод массива}
 
end.
Вылетает ошибка на 97 строке (ош. 0- выход за границы изменения индекса [1..3]
Код:
buf1:=a[imn,jmn];
Не считает индексы минимального элемента, принимает их за равные 0 и выдает ошибку... Помогите разобраться!(((
Вложения
Тип файла: txt Matrix1.txt (19 байт, 120 просмотров)
Alexar Makken вне форума Ответить с цитированием
Старый 08.06.2011, 11:21   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Подправил вот. Запись в файл реализуешь сам
Код:
const
     n=3;
     m=3;
type Matrix= array[1..n,1..m] of integer;
var  a: Matrix;
     F1,F2: Text;
     i,j,imx,imn,jmx,jmn: integer;
     buf1,buf2: integer;
     SumCh,SumNch: integer;
     Minimum:Integer;
     Maximum:Integer;
function Nech(Ar: Matrix; ArS1,ArS2: integer): integer;
var  i,j: integer;
     S_nch: integer;
begin
     for i:=1 to ArS1 do
     for j:=1 to ArS2 do
     begin
          if (i mod 2 <> 0) then
          S_nch:= S_nch + Ar[i,j];
     end;
     Nech:=S_nch;
end;
function Chet(Ar: Matrix; ArS1,ArS2: integer): integer;
var  i,j: integer;
     S_ch: integer;
begin
     for i:=1 to ArS1 do
     for j:=1 to ArS2 do
     begin
          if (i mod 2 = 0) then
          S_ch:= S_ch + Ar[i,j];
     end;
     Chet:=S_ch;
end;
{Нахождение минимального элемента массива}
procedure GetMin(Ar: Matrix;Var Min:Integer); //для передачи значения из подпрограммы в основную программу используют параметр-переменную(переменная Min)
var  i,j,imin,jmin: integer;
begin
     //if ArS1<1  then  exit;
     Min := Ar[1,1];
     imin:=1;
     jmin:=1;
     for i:=1 to N do
     Begin
     for j:=2 to M do
     if Ar[i,j]<min then
     begin
          Min:=Ar[i,j];
          imin:=i;   //в принципе номера строк и столбцов можно и не запоминать. Они нигде не используются
          jmin:=j;
     end;
     End;
end;
{Нахождение максимального элемента массива}
procedure GetMax(Ar: Matrix;Var Max:Integer); //здесь используем параметр-переменную Max
var  i,j,imax,jmax: integer;
begin
     //if ArS1<1  then  exit;
     Max := Ar[1,1];
     imax:=1;
     jmax:=1;
     for i:=1 to n do
     Begin
     for j:=2 to m do
     if Ar[i,j]>Max then
     begin
          Max:=Ar[i,j];
          imax:=i;
          jmax:=j;
     end;
     End;
end;
begin
   Randomize;
   for i:=1 to n do
   begin
        for j:=1 to m do
        begin
             A[i,j]:=-20+Random(50);
             write(a[i,j]:4);
        end;
        writeln;
   end;

   SumCh:=Chet(a,n,m);
   SumNch:=Nech(a,n,m);
   GetMin(a,Minimum);
   GetMax(a,Maximum);
   //производим замену
   for i:=1 to n do
   Begin
     for j:=1 to m do
     Begin
       If A[i,j] = Minimum then A[i,j]:=Sumch;
       If A[i,j] = Maximum then A[i,j]:=SumNch
     End;
   end;
   Writeln;
   Writeln;
   //выводим итоговую матрицу
   For i:=1 to n do
   Begin
     For j:=1 to m do
     Write(a[i,j]:4);
     Writeln;
   End;
   Readln
End.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 08.06.2011, 13:30   #3
Alexar Makken
Пользователь
 
Регистрация: 15.11.2010
Сообщений: 19
Радость

Огромнейше благодарен!
Башка не варила вчера, тоже думал передать максимальный и минимальный, но потом чето их индексы в параметрах сделал
Еще раз спасибо!
Alexar Makken вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве A каждый элемент, кроме первого, заменить суммой всех предыдущих элементов aiktz Помощь студентам 7 11.10.2010 21:52
паскаль - Заменить каждый третий элемент массива на значение суммы всех его элементов. tanyalove Помощь студентам 4 26.05.2010 09:55
Pascal - Найти сумму всех ее отрицательных элементов и заменить ею все диагональные элементы этой матрицы NewBi Паскаль, Turbo Pascal, PascalABC.NET 2 24.04.2010 09:15
Заменить максимальный по модулю элемент каждой строки на противоположный по знаку bestlover Помощь студентам 7 06.04.2009 18:06