Подсчитать как изменится средне арифметическое элементов матрицы - Turbo Pascal
Формулировка задачи:
Здравствуйте, ситуация такая: имеется
Спасибо вам огромное заранее, даже за то, что прочитали это)
решенная
задача на листочке,нужно
написать на паскале, но нам его не объясняли(а объясняли на фортране, собственно на нем то я и решил ее). Собственно вот сам вопрос задачи: Подсчитать как изменится средне арифметическое элементов матрицы, если во всех столбцах с номерами большими, чем номер столбца с макс. количеством отрицательных элементов, заменить все отр. элементы их модулями! Выкладываю картинки с хостинга ниже, а также код фортрана, может кто-то глянет, что не понятно будет) Сам решать пробовал, до сих пор сижу и читаю, остановился пока на 1 подпрограмме, может у вас быстрее получится)
Листинг программы
- dimension a(5,5), x(5), c(5)
- real a,p,t,c
- integer i,j,x
- logical b
- data a /2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26 /
- write(*,16) ((a(i,j),j=1,5),i=1,5)
- 16 format (2x, 'a=', 5(f5.1))
- write(*,*) 'c'
- read(*,*) c
- write(*,*) 'P,T(P<T)'
- read(*,*) P,T
- call pp1(c,p,t,5,b)
- if(.NOT.B) then
- write(*,*) 'vipolnyaetsya'
- call pp2 (A,5,x)
- write(*,15)(x(i),i=1,5)
- 15 format (1x,'x=', i4)
- else
- write(*,*) 'ne vipolnyaetsya'
- end if
- end
- subroutine pp1(b1,c1,c2,n,flag)
- dimension b1(n)
- real b1,c1,c2
- logical flag
- flag=.true.
- i=1
- do while((flag).AND. (i<=n))
- if((b1(i)<c1).or.(b1(i)>c2)) then
- flag=.false.
- end if
- i=i+1
- end do
- end
- subroutine pp2(a1,n,x1)
- dimension a1(n,n), x1(n)
- real a1
- integer x1
- do i=1,5,1
- x1(i)=0
- end do
- do j=1,5,1
- do i=1,5,1
- x1(j)=x1(j) +a1(j,i)
- end do
- end do
- end
Решение задачи: «Подсчитать как изменится средне арифметическое элементов матрицы»
textual
Листинг программы
- const m=5; n=5;
- type TMatrix = array [1..m,1..n] of Integer;
- procedure mInit(var a: TMatrix);
- var i, j: Integer;
- begin
- for i:=1 to m do for j:=1 to n do a[i,j]:=-99+Random(199);
- end;
- procedure mWrite(const a: TMatrix; s: String);
- var i, j: Integer;
- begin
- WriteLn(s);
- for i:=1 to m do begin
- for j:=1 to n do Write(a[i,j]:4); WriteLn;
- end;
- end;
- function mAvg(const a: TMatrix): Real;
- var i, j: Integer; r: Real;
- begin
- r:=0; for i:=1 to m do for j:=1 to n do r:=r+a[i,j];
- mAvg:=r/m/n;
- end;
- procedure mRepl(var a: TMatrix);
- var i, j, k, mk, jk: Integer;
- begin
- mk:=0; jk:=n+1;
- for j:=1 to n do begin
- k:=0; for i:=1 to m do if a[i,j]<0 then Inc(k);
- if mk<k then begin jk:=j; mk:=k; end;
- end;
- WriteLn('Столбец: ',jk);
- for j:=jk to n do
- for i:=1 to m do if a[i,j]<0 then a[i,j]:=-a[i,j];
- end;
- var a: TMatrix;
- begin
- Randomize;
- mInit(a); mWrite(a,'A ='); WriteLn('Среднее: ',mAvg(a):0:2);
- mRepl(a); mWrite(a,'A''='); WriteLn('Среднее: ',mAvg(a):0:2);
- end.
Объяснение кода листинга программы
- const m=5; n=5; — объявляются константы m и n, которые равны 5
- type TMatrix = array [1..m,1..n] of Integer; — объявляется тип данных TMatrix, который представляет собой массив целых чисел размером m на n
- procedure mInit(var a: TMatrix); — объявляется процедура mInit, которая принимает аргумент a типа TMatrix и выполняет следующие действия: — for i:=1 to m do for j:=1 to n do a[i,j]:=-99+Random(199); — в цикле выполняется итерация по всем элементам матрицы a от i=1 до m и от j=1 до n. Каждый элемент a[i,j] присваивается случайное число от -99 до 199
- procedure mWrite(const a: TMatrix; s: String); — объявляется процедура mWrite, которая принимает два аргумента: const a: TMatrix и s: String. Она выполняет следующие действия: — WriteLn(s); — выводится строка s на экран — for i:=1 to m do begin — for j:=1 to n do Write(a[i,j]:4); WriteLn; — выполняется итерация по всем элементам матрицы a от i=1 до m и от j=1 до n. Каждый элемент a[i,j] выводится на экран в формате 4-х знаков после запятой — end; — end;
- function mAvg(const a: TMatrix): Real; — объявляется функция mAvg, которая принимает аргумент const a: TMatrix и возвращает значение типа Real. Она выполняет следующие действия: — var i, j: Integer; r: Real; — объявляются переменные i, j и r типа Integer и Real соответственно — r:=0; for i:=1 to m do for j:=1 to n do r:=r+a[i,j]; — выполняется итерация по всем элементам матрицы a от i=1 до m и от j=1 до n. Сумма всех элементов матрицы вычисляется и сохраняется в переменной r — mAvg:=r/m/n; — вычисляется среднее арифметическое всех элементов матрицы и сохраняется в переменной mAvg
- procedure mRepl(var a: TMatrix); — объявляется процедура mRepl, которая принимает аргумент var a: TMatrix и выполняет следующие действия:
— var a: TMatrix; — объявляется переменная a типа TMatrix
— Randomize; — вызывается функция Randomize для инициализации генератора случайных чисел
— mInit(a); — вызывается процедура mInit для инициализации матрицы a
— mWrite(a,'A ='); WriteLn('Среднее: ',mAvg(a):0:2); — выводится строка
A =
и вычисляется среднее арифметическое всех элементов матрицы a. Результат выводится на экран с точностью до двух знаков после запятой — mRepl(a); — вызывается процедура mRepl для повторной инициализации матрицы a — mWrite(a,'A''='); WriteLn('Среднее: ',mAvg(a):0:2); — выводится строкаA''=
и вычисляется среднее арифметическое всех элементов матрицы a. Результат выводится на экран с точностью до двух знаков после запятой - var a: TMatrix; — объявляется переменная a типа TMatrix
- begin — Randomize; — mInit(a); — mWrite(a,'A ='); WriteLn('Среднее: ',mAvg(a):0:2); — mRepl(a); — mWrite(a,'A''='); WriteLn('Среднее: ',mAvg(a):0:2); end; — выполняется цикл, в котором вызываются процедуры mInit, mWrite и mRepl для инициализации, вывода и повторной инициализации матрицы a. После выполнения всех действий переменная a перезаписывается
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д